import pytest from docx import Document from openpyxl import Workbook from pptx import Presentation from review_agent.file_summary.services.page_count import count_document_pages from review_agent.file_summary.skills.document_page_count import DocumentPageCountSkill from review_agent.file_summary.skills.base import WorkflowContext from review_agent.models import Conversation, FileSummaryBatch, FileSummaryItem pytestmark = pytest.mark.django_db def test_count_document_pages_for_office_formats(tmp_path): docx_path = tmp_path / "a.docx" Document().save(docx_path) xlsx_path = tmp_path / "a.xlsx" workbook = Workbook() workbook.create_sheet("第二页") workbook.save(xlsx_path) pptx_path = tmp_path / "a.pptx" presentation = Presentation() presentation.slides.add_slide(presentation.slide_layouts[6]) presentation.save(pptx_path) assert count_document_pages(docx_path).status in {"success", "uncertain"} assert count_document_pages(xlsx_path).page_count == 2 assert count_document_pages(pptx_path).page_count == 1 def test_document_page_count_skill_marks_unsupported_and_success(tmp_path, django_user_model): xlsx_path = tmp_path / "a.xlsx" workbook = Workbook() workbook.save(xlsx_path) txt_path = tmp_path / "a.txt" txt_path.write_text("x", encoding="utf-8") 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-P") xlsx_item = FileSummaryItem.objects.create( batch=batch, file_index=1, file_name="a.xlsx", file_type="xlsx", relative_path="a.xlsx", storage_path=str(xlsx_path), ) txt_item = FileSummaryItem.objects.create( batch=batch, file_index=2, file_name="a.txt", file_type="txt", relative_path="a.txt", storage_path=str(txt_path), ) result = DocumentPageCountSkill().run(WorkflowContext(batch=batch)) xlsx_item.refresh_from_db() txt_item.refresh_from_db() assert result.success is True assert xlsx_item.statistics_status == FileSummaryItem.StatisticsStatus.SUCCESS assert txt_item.statistics_status == FileSummaryItem.StatisticsStatus.UNSUPPORTED