feat(regulatory): 新增法规核查模型与工作流通用字段
This commit is contained in:
137
tests/test_regulatory_models.py
Normal file
137
tests/test_regulatory_models.py
Normal file
@@ -0,0 +1,137 @@
|
||||
import pytest
|
||||
|
||||
from review_agent.models import (
|
||||
Conversation,
|
||||
ExportedSummaryFile,
|
||||
FileSummaryBatch,
|
||||
Message,
|
||||
RegulatoryArtifact,
|
||||
RegulatoryIssue,
|
||||
RegulatoryNotificationRecord,
|
||||
RegulatoryReviewBatch,
|
||||
RegulatoryRuleVersion,
|
||||
WorkflowEvent,
|
||||
WorkflowNodeRun,
|
||||
)
|
||||
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
|
||||
def test_regulatory_models_store_batch_issue_artifact_and_notification(django_user_model):
|
||||
user = django_user_model.objects.create_user(username="owner", password="pass")
|
||||
conversation = Conversation.objects.create(user=user, title="法规核查")
|
||||
trigger = Message.objects.create(
|
||||
conversation=conversation,
|
||||
role=Message.Role.USER,
|
||||
content="请做NMPA法规核查",
|
||||
)
|
||||
summary_batch = FileSummaryBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
batch_no="FS-READY",
|
||||
status=FileSummaryBatch.Status.SUCCESS,
|
||||
)
|
||||
rule_version = RegulatoryRuleVersion.objects.create(
|
||||
code="nmpa_ivd_registration_v1",
|
||||
name="NMPA IVD 注册资料 Demo 规则",
|
||||
yaml_path="review_agent/regulatory_review/rules/nmpa_ivd_registration_v1.yaml",
|
||||
yaml_hash="abc123",
|
||||
rag_collection="nmpa_ivd_registration_v1",
|
||||
rag_index_version="idx-1",
|
||||
rag_index_hash="hash-1",
|
||||
status=RegulatoryRuleVersion.Status.ACTIVE,
|
||||
)
|
||||
|
||||
batch = RegulatoryReviewBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
trigger_message=trigger,
|
||||
source_summary_batch=summary_batch,
|
||||
rule_version=rule_version,
|
||||
batch_no="RR-202606070001-abcdef",
|
||||
)
|
||||
issue = RegulatoryIssue.objects.create(
|
||||
batch=batch,
|
||||
rule_code="registration_test_report",
|
||||
category=RegulatoryIssue.Category.COMPLETENESS,
|
||||
severity=RegulatoryIssue.Severity.BLOCKING,
|
||||
title="缺少注册检验报告",
|
||||
suggestion="请补充注册检验报告并复核。",
|
||||
evidence={"matched_files": []},
|
||||
citations=[{"source": "法规.doc", "text": "注册检验报告"}],
|
||||
)
|
||||
artifact = RegulatoryArtifact.objects.create(
|
||||
batch=batch,
|
||||
artifact_type=RegulatoryArtifact.ArtifactType.JSON,
|
||||
name="结果包",
|
||||
storage_path="media/regulatory_review/result.json",
|
||||
content_hash="hash",
|
||||
)
|
||||
notification = RegulatoryNotificationRecord.objects.create(
|
||||
batch=batch,
|
||||
channel=RegulatoryNotificationRecord.Channel.MOCK,
|
||||
target="todo-plan",
|
||||
payload={"issue_id": issue.pk},
|
||||
)
|
||||
|
||||
assert batch.status == RegulatoryReviewBatch.Status.PENDING
|
||||
assert batch.source_summary_batch == summary_batch
|
||||
assert issue.status == RegulatoryIssue.Status.OPEN
|
||||
assert artifact.artifact_type == RegulatoryArtifact.ArtifactType.JSON
|
||||
assert notification.status == RegulatoryNotificationRecord.Status.PENDING
|
||||
|
||||
|
||||
def test_generic_workflow_fields_support_file_summary_and_regulatory_batches(django_user_model):
|
||||
user = django_user_model.objects.create_user(username="owner", password="pass")
|
||||
conversation = Conversation.objects.create(user=user, title="会话")
|
||||
summary_batch = FileSummaryBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
batch_no="FS-GENERIC",
|
||||
)
|
||||
regulatory_batch = RegulatoryReviewBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
source_summary_batch=summary_batch,
|
||||
batch_no="RR-GENERIC",
|
||||
)
|
||||
|
||||
file_node = WorkflowNodeRun.objects.create(
|
||||
batch=summary_batch,
|
||||
workflow_type="file_summary",
|
||||
workflow_batch_id=summary_batch.pk,
|
||||
node_group="file_summary",
|
||||
node_code="inventory",
|
||||
node_name="文件扫描",
|
||||
)
|
||||
regulatory_node = WorkflowNodeRun.objects.create(
|
||||
workflow_type="regulatory_review",
|
||||
workflow_batch_id=regulatory_batch.pk,
|
||||
node_group="regulatory_review",
|
||||
node_code="prepare",
|
||||
node_name="准备",
|
||||
)
|
||||
event = WorkflowEvent.objects.create(
|
||||
batch=summary_batch,
|
||||
workflow_type="regulatory_review",
|
||||
workflow_batch_id=regulatory_batch.pk,
|
||||
conversation=conversation,
|
||||
event_type="workflow_created",
|
||||
payload={"batch_no": regulatory_batch.batch_no},
|
||||
)
|
||||
exported = ExportedSummaryFile.objects.create(
|
||||
batch=summary_batch,
|
||||
workflow_type="regulatory_review",
|
||||
workflow_batch_id=regulatory_batch.pk,
|
||||
export_category="result_package",
|
||||
export_type=ExportedSummaryFile.ExportType.JSON,
|
||||
file_name="result.json",
|
||||
storage_path="media/regulatory_review/result.json",
|
||||
)
|
||||
|
||||
assert file_node.batch == summary_batch
|
||||
assert regulatory_node.batch is None
|
||||
assert regulatory_node.workflow_batch_id == regulatory_batch.pk
|
||||
assert event.conversation == conversation
|
||||
assert exported.export_type == ExportedSummaryFile.ExportType.JSON
|
||||
Reference in New Issue
Block a user