feat(file-summary): 生成汇总报告和导出下载
This commit is contained in:
82
tests/test_file_summary_report.py
Normal file
82
tests/test_file_summary_report.py
Normal file
@@ -0,0 +1,82 @@
|
||||
from pathlib import Path
|
||||
import pytest
|
||||
from openpyxl import load_workbook
|
||||
|
||||
from review_agent.file_summary.services.export_excel import generate_excel_export
|
||||
from review_agent.file_summary.services.report import generate_markdown_report
|
||||
from review_agent.models import Conversation, FileSummaryBatch, FileSummaryItem, Message
|
||||
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
def make_batch(tmp_path, django_user_model):
|
||||
user = django_user_model.objects.create_user(username="owner", password="pass")
|
||||
conversation = Conversation.objects.create(user=user, title="会话")
|
||||
batch = FileSummaryBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
batch_no="FS-R",
|
||||
work_dir=str(tmp_path),
|
||||
total_files=1,
|
||||
success_files=1,
|
||||
total_pages=2,
|
||||
)
|
||||
FileSummaryItem.objects.create(
|
||||
batch=batch,
|
||||
file_index=1,
|
||||
file_name="a.xlsx",
|
||||
file_type="xlsx",
|
||||
relative_path="a.xlsx",
|
||||
storage_path=str(tmp_path / "a.xlsx"),
|
||||
page_count=2,
|
||||
statistics_status=FileSummaryItem.StatisticsStatus.SUCCESS,
|
||||
)
|
||||
return batch
|
||||
|
||||
|
||||
def test_generate_markdown_report_creates_export_and_summary(tmp_path, django_user_model):
|
||||
batch = make_batch(tmp_path, django_user_model)
|
||||
|
||||
exported, summary = generate_markdown_report(batch)
|
||||
|
||||
assert exported.export_type == "markdown"
|
||||
assert Path(exported.storage_path).exists()
|
||||
assert "| 序号 | 目录层级 | 文件名 | 类型 | 页数 | 状态 | 异常说明 |" in summary
|
||||
assert "a.xlsx" in Path(exported.storage_path).read_text(encoding="utf-8")
|
||||
|
||||
|
||||
def test_generate_excel_export_contains_summary_and_items(tmp_path, django_user_model):
|
||||
batch = make_batch(tmp_path, django_user_model)
|
||||
|
||||
exported = generate_excel_export(batch)
|
||||
|
||||
workbook = load_workbook(exported.storage_path)
|
||||
assert workbook.sheetnames == ["汇总信息", "文件明细"]
|
||||
assert workbook["文件明细"]["C2"].value == "a.xlsx"
|
||||
|
||||
|
||||
def test_workflow_report_node_writes_assistant_message(tmp_path, settings, django_user_model):
|
||||
from review_agent.file_summary.workflow import create_file_summary_batch, start_file_summary_workflow
|
||||
from review_agent.models import FileAttachment
|
||||
|
||||
settings.MEDIA_ROOT = tmp_path
|
||||
settings.FILE_SUMMARY_ASYNC = False
|
||||
user = django_user_model.objects.create_user(username="owner", password="pass")
|
||||
conversation = Conversation.objects.create(user=user, title="会话")
|
||||
file_path = tmp_path / "a.xlsx"
|
||||
file_path.write_bytes(b"not a real workbook")
|
||||
FileAttachment.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
original_name="a.txt",
|
||||
storage_path=str(file_path),
|
||||
file_size=file_path.stat().st_size,
|
||||
)
|
||||
batch = create_file_summary_batch(conversation=conversation, user=user)
|
||||
batch.work_dir = str(tmp_path / "batch")
|
||||
batch.save(update_fields=["work_dir"])
|
||||
|
||||
start_file_summary_workflow(batch, async_run=False)
|
||||
|
||||
assert Message.objects.filter(conversation=conversation, role=Message.Role.ASSISTANT).exists()
|
||||
Reference in New Issue
Block a user