feat: 重构资料包模型与会话绑定主链路
This commit is contained in:
@@ -2,8 +2,9 @@ from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.urls import reverse
|
||||
|
||||
from apps.documents.forms import DocumentUploadForm
|
||||
from apps.documents.models import UploadedDocument
|
||||
from apps.documents.services import extract_text, index_document
|
||||
from apps.documents.models import SubmissionBatch, UploadedDocument
|
||||
from apps.documents.services import extract_text, import_submission_batch, index_document
|
||||
from apps.chat.models import Conversation
|
||||
|
||||
|
||||
def test_upload_txt_document_creates_uploaded_record(client, db):
|
||||
@@ -31,7 +32,7 @@ def test_upload_redirect_shows_success_message(client, db):
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
assert "文件已上传,可继续执行入库" in response.content.decode("utf-8")
|
||||
assert "资料包已导入,已绑定会话" in response.content.decode("utf-8")
|
||||
|
||||
|
||||
def test_upload_accepts_pdf_and_docx_documents(client, db):
|
||||
@@ -145,3 +146,74 @@ def test_index_document_marks_failed_when_extracted_text_is_empty(db, monkeypatc
|
||||
|
||||
assert updated_document.status == UploadedDocument.STATUS_FAILED
|
||||
assert "文档内容为空" in updated_document.error_message
|
||||
|
||||
|
||||
def test_upload_creates_submission_batch_and_bound_conversation(client, db):
|
||||
file = SimpleUploadedFile(
|
||||
"目标产品说明书.txt",
|
||||
"产品名称:新型冠状病毒 2019-nCoV 核酸检测试剂盒".encode("utf-8"),
|
||||
content_type="text/plain",
|
||||
)
|
||||
|
||||
response = client.post(
|
||||
reverse("documents:upload"),
|
||||
{"scenario_id": "document_review", "file": file},
|
||||
)
|
||||
|
||||
assert response.status_code == 302
|
||||
batch = SubmissionBatch.objects.get()
|
||||
conversation = Conversation.objects.get()
|
||||
assert batch.product_name == "新型冠状病毒 2019-nCoV 核酸检测试剂盒"
|
||||
assert batch.conversation_id == conversation.conversation_id
|
||||
assert conversation.title == "新型冠状病毒 2019-nCoV 核酸检测试剂盒"
|
||||
assert batch.file_count == 1
|
||||
|
||||
|
||||
def test_document_list_supports_product_name_search(client, db):
|
||||
SubmissionBatch.objects.create(
|
||||
batch_id="SUB-20260604-001",
|
||||
product_name="新型冠状病毒 2019-nCoV 核酸检测试剂盒",
|
||||
workflow_type="registration",
|
||||
conversation_id="conv-001",
|
||||
file_count=2,
|
||||
page_count=12,
|
||||
import_status="completed",
|
||||
)
|
||||
SubmissionBatch.objects.create(
|
||||
batch_id="SUB-20260604-002",
|
||||
product_name="呼吸道合胞病毒核酸检测试剂盒",
|
||||
workflow_type="registration",
|
||||
conversation_id="conv-002",
|
||||
file_count=3,
|
||||
page_count=20,
|
||||
import_status="completed",
|
||||
)
|
||||
|
||||
response = client.get(reverse("documents:list"), {"keyword": "新型冠状病毒"})
|
||||
|
||||
content = response.content.decode("utf-8")
|
||||
assert response.status_code == 200
|
||||
assert "新型冠状病毒 2019-nCoV 核酸检测试剂盒" in content
|
||||
assert "呼吸道合胞病毒核酸检测试剂盒" not in content
|
||||
|
||||
|
||||
def test_import_submission_batch_marks_manual_review_when_product_names_conflict(db):
|
||||
files = [
|
||||
SimpleUploadedFile(
|
||||
"注册申请表.txt",
|
||||
"产品名称:产品A".encode("utf-8"),
|
||||
content_type="text/plain",
|
||||
),
|
||||
SimpleUploadedFile(
|
||||
"目标产品说明书.txt",
|
||||
"产品名称:产品B".encode("utf-8"),
|
||||
content_type="text/plain",
|
||||
),
|
||||
]
|
||||
|
||||
result = import_submission_batch("document_review", files)
|
||||
|
||||
batch = SubmissionBatch.objects.get(batch_id=result["batch_id"])
|
||||
assert batch.import_status == "review_required"
|
||||
assert result["registration_overview_report"]["warnings"]
|
||||
assert "产品名称来源冲突" in result["registration_overview_report"]["warnings"][0]
|
||||
|
||||
Reference in New Issue
Block a user