feat: 持久化会话节点结果与失败通知留痕
This commit is contained in:
@@ -172,6 +172,106 @@ def test_chat_execution_creates_notification_record_from_agent_result(client, db
|
||||
assert record.batch_id == batch.batch_id
|
||||
|
||||
|
||||
def test_chat_execution_creates_failed_notification_record_and_updates_conversation(client, db, monkeypatch):
|
||||
batch, conversation = _create_conversation_with_batch()
|
||||
UploadedDocument.objects.create(
|
||||
batch=batch,
|
||||
scenario_id="document_review",
|
||||
original_name="说明书.md",
|
||||
file_type="md",
|
||||
size=1,
|
||||
status=UploadedDocument.STATUS_INDEXED,
|
||||
)
|
||||
|
||||
monkeypatch.setattr(
|
||||
"apps.chat.views.run_agent",
|
||||
lambda *args, **kwargs: AgentResult(
|
||||
answer="执行失败",
|
||||
status="failed",
|
||||
error="规则执行失败",
|
||||
node_results=[
|
||||
{"code": "package_import", "label": "资料包导入", "status": "已完成"},
|
||||
{"code": "overview", "label": "目录汇总", "status": "已完成"},
|
||||
{"code": "risk", "label": "风险预警", "status": "已阻断"},
|
||||
{"code": "feishu_notify", "label": "飞书通知", "status": "失败"},
|
||||
],
|
||||
notification_payload={
|
||||
"batch_id": batch.batch_id,
|
||||
"conversation_id": conversation.conversation_id,
|
||||
"product_name": batch.product_name,
|
||||
"notify_reason": "task_failed",
|
||||
"owners": [
|
||||
{
|
||||
"owner_role": "注册申报负责人",
|
||||
"feishu_user_id": "ou_demo_2",
|
||||
}
|
||||
],
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
response = client.post(
|
||||
reverse("chat:detail", args=[conversation.conversation_id]),
|
||||
{"message": "执行失败任务"},
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
record = NotificationRecord.objects.get()
|
||||
conversation.refresh_from_db()
|
||||
assert record.notify_reason == "task_failed"
|
||||
assert record.message_status == "failed"
|
||||
assert conversation.task_status == "failed"
|
||||
assert conversation.node_results[-1]["label"] == "飞书通知"
|
||||
|
||||
|
||||
def test_chat_execution_persists_agent_node_results_to_conversation(client, db, monkeypatch):
|
||||
batch, conversation = _create_conversation_with_batch()
|
||||
UploadedDocument.objects.create(
|
||||
batch=batch,
|
||||
scenario_id="document_review",
|
||||
original_name="说明书.md",
|
||||
file_type="md",
|
||||
size=1,
|
||||
status=UploadedDocument.STATUS_INDEXED,
|
||||
)
|
||||
|
||||
monkeypatch.setattr(
|
||||
"apps.chat.views.run_agent",
|
||||
lambda *args, **kwargs: AgentResult(
|
||||
answer="已生成风险结论",
|
||||
status="success",
|
||||
node_results=[
|
||||
{"code": "package_import", "label": "资料包导入", "status": "已完成"},
|
||||
{"code": "overview", "label": "目录汇总", "status": "已完成"},
|
||||
{"code": "completeness", "label": "法规完整性检查", "status": "已完成"},
|
||||
{"code": "field_extraction", "label": "字段抽取", "status": "已完成"},
|
||||
{"code": "consistency", "label": "一致性核查", "status": "待复核"},
|
||||
{"code": "risk", "label": "风险预警", "status": "已阻断", "summary": "存在高风险"},
|
||||
{"code": "word_export", "label": "Word 回填导出", "status": "待处理"},
|
||||
{"code": "feishu_notify", "label": "飞书通知", "status": "待处理"},
|
||||
],
|
||||
notification_payload={
|
||||
"batch_id": batch.batch_id,
|
||||
"conversation_id": conversation.conversation_id,
|
||||
"product_name": batch.product_name,
|
||||
"notify_reason": "task_completed",
|
||||
"owners": [],
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
response = client.post(
|
||||
reverse("chat:detail", args=[conversation.conversation_id]),
|
||||
{"message": "执行节点任务"},
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
conversation.refresh_from_db()
|
||||
assert len(conversation.node_results) == 8
|
||||
assert conversation.task_status == "success"
|
||||
assert conversation.latest_summary["answer"] == "已生成风险结论"
|
||||
|
||||
|
||||
def test_create_conversation_for_batch_initializes_eight_workflow_nodes(db):
|
||||
conversation = create_conversation_for_batch(
|
||||
"SUB-20260604-001",
|
||||
|
||||
Reference in New Issue
Block a user