test(regulatory-info-package): 覆盖材料包主链路
This commit is contained in:
140
tests/test_regulatory_info_package_views.py
Normal file
140
tests/test_regulatory_info_package_views.py
Normal file
@@ -0,0 +1,140 @@
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from review_agent.models import (
|
||||
Conversation,
|
||||
ExportedSummaryFile,
|
||||
RegulatoryInfoPackageBatch,
|
||||
WorkflowNodeRun,
|
||||
)
|
||||
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
def test_regulatory_info_package_export_download_checks_owner(client, django_user_model, tmp_path):
|
||||
owner = django_user_model.objects.create_user(username="owner", password="pass")
|
||||
other = django_user_model.objects.create_user(username="other", password="pass")
|
||||
conversation = Conversation.objects.create(user=owner, title="会话")
|
||||
batch = RegulatoryInfoPackageBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=owner,
|
||||
batch_no="RIP-20260610153300-abcdef",
|
||||
)
|
||||
path = tmp_path / "第1章 监管信息(预生成版).zip"
|
||||
path.write_bytes(b"zip-content")
|
||||
exported = ExportedSummaryFile.objects.create(
|
||||
batch=None,
|
||||
workflow_type="regulatory_info_package",
|
||||
workflow_batch_id=batch.pk,
|
||||
export_category="regulatory_info_package",
|
||||
export_type=ExportedSummaryFile.ExportType.ZIP,
|
||||
file_name=path.name,
|
||||
storage_path=str(path),
|
||||
)
|
||||
|
||||
client.force_login(other)
|
||||
denied = client.get(f"/api/review-agent/file-summary/exports/{exported.pk}/download/")
|
||||
assert denied.status_code == 404
|
||||
|
||||
client.force_login(owner)
|
||||
allowed = client.get(f"/api/review-agent/file-summary/exports/{exported.pk}/download/")
|
||||
assert allowed.status_code == 200
|
||||
assert allowed["Content-Type"] == "application/zip"
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("file_name", "export_type", "expected"),
|
||||
[
|
||||
("CH1.9 产品申报前沟通的说明.doc", ExportedSummaryFile.ExportType.WORD, "application/msword"),
|
||||
(
|
||||
"CH1.4 申请表.docx",
|
||||
ExportedSummaryFile.ExportType.WORD,
|
||||
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
||||
),
|
||||
("第1章 监管信息(预生成版).zip", ExportedSummaryFile.ExportType.ZIP, "application/zip"),
|
||||
],
|
||||
)
|
||||
def test_regulatory_info_package_download_mime_by_extension(
|
||||
client,
|
||||
django_user_model,
|
||||
tmp_path,
|
||||
file_name,
|
||||
export_type,
|
||||
expected,
|
||||
):
|
||||
user = django_user_model.objects.create_user(username="owner", password="pass")
|
||||
conversation = Conversation.objects.create(user=user, title="会话")
|
||||
batch = RegulatoryInfoPackageBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
batch_no=f"RIP-20260610153400-{Path(file_name).suffix[1:] or 'zip'}",
|
||||
)
|
||||
path = tmp_path / file_name
|
||||
path.write_bytes(b"content")
|
||||
exported = ExportedSummaryFile.objects.create(
|
||||
batch=None,
|
||||
workflow_type="regulatory_info_package",
|
||||
workflow_batch_id=batch.pk,
|
||||
export_category="generated_document",
|
||||
export_type=export_type,
|
||||
file_name=file_name,
|
||||
storage_path=str(path),
|
||||
)
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(f"/api/review-agent/file-summary/exports/{exported.pk}/download/")
|
||||
|
||||
assert response.status_code == 200
|
||||
assert response["Content-Type"] == expected
|
||||
|
||||
|
||||
def test_regulatory_info_package_status_returns_nodes_and_zip_first(client, django_user_model, tmp_path):
|
||||
user = django_user_model.objects.create_user(username="owner", password="pass")
|
||||
conversation = Conversation.objects.create(user=user, title="会话")
|
||||
batch = RegulatoryInfoPackageBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
batch_no="RIP-20260610153500-abcdef",
|
||||
status=RegulatoryInfoPackageBatch.Status.SUCCESS,
|
||||
)
|
||||
WorkflowNodeRun.objects.create(
|
||||
workflow_type="regulatory_info_package",
|
||||
workflow_batch_id=batch.pk,
|
||||
node_group="regulatory_info_package",
|
||||
node_code="zip_export",
|
||||
node_name="打包下载",
|
||||
status=WorkflowNodeRun.Status.SUCCESS,
|
||||
progress=100,
|
||||
)
|
||||
doc = tmp_path / "CH1.4 申请表.docx"
|
||||
zip_file = tmp_path / "第1章 监管信息(预生成版).zip"
|
||||
doc.write_bytes(b"doc")
|
||||
zip_file.write_bytes(b"zip")
|
||||
ExportedSummaryFile.objects.create(
|
||||
batch=None,
|
||||
workflow_type="regulatory_info_package",
|
||||
workflow_batch_id=batch.pk,
|
||||
export_category="generated_document",
|
||||
export_type=ExportedSummaryFile.ExportType.WORD,
|
||||
file_name=doc.name,
|
||||
storage_path=str(doc),
|
||||
)
|
||||
ExportedSummaryFile.objects.create(
|
||||
batch=None,
|
||||
workflow_type="regulatory_info_package",
|
||||
workflow_batch_id=batch.pk,
|
||||
export_category="regulatory_info_package",
|
||||
export_type=ExportedSummaryFile.ExportType.ZIP,
|
||||
file_name=zip_file.name,
|
||||
storage_path=str(zip_file),
|
||||
)
|
||||
client.force_login(user)
|
||||
|
||||
response = client.get(f"/api/review-agent/regulatory-info-package/{batch.pk}/status/")
|
||||
|
||||
payload = response.json()
|
||||
assert payload["batch"]["workflow_type"] == "regulatory_info_package"
|
||||
assert payload["nodes"][0]["node_code"] == "zip_export"
|
||||
assert payload["exports"][0]["export_type"] == "zip"
|
||||
Reference in New Issue
Block a user