from django.urls import reverse from apps.audit.models import AgentAuditLog from apps.documents.models import UploadedDocument def test_chat_post_returns_agent_result_and_audit_log(client, db): response = client.post( reverse("chat:index", args=["knowledge_qa"]), {"message": "如何处理异常?"}, ) assert response.status_code == 200 content = response.content.decode("utf-8") assert "mock-model" in content assert "模拟回答" in content assert AgentAuditLog.objects.count() == 1 def test_chat_rejects_empty_message(client, db): response = client.post(reverse("chat:index", args=["knowledge_qa"]), {"message": ""}) assert response.status_code == 200 assert AgentAuditLog.objects.count() == 0 assert "请输入要咨询的问题" in response.content.decode("utf-8") def test_chat_passes_selected_document_ids_to_agent_core(client, db, monkeypatch): selected = UploadedDocument.objects.create( scenario_id="knowledge_qa", original_name="selected.md", file_type="md", size=1, status=UploadedDocument.STATUS_INDEXED, ) other = UploadedDocument.objects.create( scenario_id="knowledge_qa", original_name="other.md", file_type="md", size=1, status=UploadedDocument.STATUS_INDEXED, ) captured = {} def fake_run_agent(scenario_config, user_input, options=None): captured["options"] = options or {} from agent_core.results import AgentResult return AgentResult(answer="ok", status="success") monkeypatch.setattr("apps.chat.views.run_agent", fake_run_agent) response = client.post( reverse("chat:index", args=["knowledge_qa"]), {"message": "只查选中文档", "document_ids": [str(selected.id)]}, ) assert response.status_code == 200 assert captured["options"]["document_ids"] == [selected.id] assert other.id not in captured["options"]["document_ids"]