chore: update gitignore; feat: 新增customer_agent业务模块与api路由
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
import tempfile
|
||||
import unittest
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
from api.routers.knowledge import (
|
||||
confirm_document_upload,
|
||||
delete_document,
|
||||
get_document,
|
||||
list_documents,
|
||||
preview_document_upload,
|
||||
)
|
||||
from service.knowledge_base.upload import KnowledgeUploadService
|
||||
from types import SimpleNamespace
|
||||
|
||||
|
||||
class FakeUpload:
|
||||
def __init__(self, filename, content):
|
||||
self.filename = filename
|
||||
self._content = content
|
||||
|
||||
async def read(self):
|
||||
return self._content
|
||||
|
||||
|
||||
class FakeRequest:
|
||||
def __init__(self, service, form_data=None, json_data=None):
|
||||
self.app = SimpleNamespace(state=SimpleNamespace(knowledge_upload_service=service))
|
||||
self.form_data = form_data
|
||||
self.json_data = json_data
|
||||
|
||||
async def form(self):
|
||||
return self.form_data
|
||||
|
||||
async def json(self):
|
||||
return self.json_data
|
||||
|
||||
|
||||
class KnowledgeRouterTests(unittest.IsolatedAsyncioTestCase):
|
||||
async def test_preview_endpoint_accepts_file_and_manual_strategy(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
service = KnowledgeUploadService(
|
||||
storage_dir=tmp,
|
||||
milvus_client=AsyncMock(),
|
||||
embedder=AsyncMock(),
|
||||
publisher=AsyncMock(),
|
||||
)
|
||||
request = FakeRequest(
|
||||
service,
|
||||
{
|
||||
"file": FakeUpload("faq.md", b"Q: Q\nA: A"),
|
||||
"strategy": "qa_pair",
|
||||
},
|
||||
)
|
||||
|
||||
response = await preview_document_upload(
|
||||
request,
|
||||
SimpleNamespace(user_type="ADMIN", employee_role=None),
|
||||
)
|
||||
|
||||
self.assertEqual(response.code, 200)
|
||||
self.assertEqual(response.data["strategy"], "qa_pair")
|
||||
|
||||
async def test_confirm_endpoint_returns_ingestion_result(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
service = KnowledgeUploadService(
|
||||
storage_dir=tmp,
|
||||
milvus_client=AsyncMock(),
|
||||
embedder=AsyncMock(return_value=[[0.0] * 768]),
|
||||
publisher=AsyncMock(),
|
||||
)
|
||||
preview = await service.preview("faq.md", b"Q: Q\nA: A", strategy="qa_pair")
|
||||
request = FakeRequest(
|
||||
service,
|
||||
json_data={
|
||||
"upload_id": preview["upload_id"],
|
||||
"title": "FAQ",
|
||||
"doc_id": "doc-1",
|
||||
"collection_name": "fin_faq",
|
||||
"strategy": "qa_pair",
|
||||
},
|
||||
)
|
||||
|
||||
response = await confirm_document_upload(
|
||||
request,
|
||||
SimpleNamespace(user_type="ADMIN", employee_role=None),
|
||||
)
|
||||
|
||||
self.assertEqual(response.code, 200)
|
||||
self.assertEqual(response.data["doc_id"], "doc-1")
|
||||
|
||||
async def test_delete_endpoint_returns_deleted_document(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
service = KnowledgeUploadService(
|
||||
storage_dir=tmp,
|
||||
milvus_client=AsyncMock(),
|
||||
embedder=AsyncMock(),
|
||||
publisher=AsyncMock(),
|
||||
)
|
||||
request = FakeRequest(service, json_data={"doc_id": "doc-delete-1"})
|
||||
|
||||
response = await delete_document(
|
||||
request,
|
||||
"doc-delete-1",
|
||||
SimpleNamespace(user_type="ADMIN", employee_role=None),
|
||||
)
|
||||
|
||||
self.assertEqual(response.code, 200)
|
||||
self.assertEqual(response.data, {"doc_id": "doc-delete-1", "deleted": True})
|
||||
|
||||
async def test_list_endpoint_returns_documents(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
service = KnowledgeUploadService(
|
||||
storage_dir=tmp,
|
||||
milvus_client=AsyncMock(),
|
||||
embedder=AsyncMock(),
|
||||
publisher=AsyncMock(),
|
||||
)
|
||||
service.list_documents = AsyncMock(return_value=[{"doc_id": "doc-1"}])
|
||||
response = await list_documents(
|
||||
FakeRequest(service),
|
||||
SimpleNamespace(user_type="ADMIN", employee_role=None),
|
||||
)
|
||||
|
||||
self.assertEqual(response.code, 200)
|
||||
self.assertEqual(response.data, [{"doc_id": "doc-1"}])
|
||||
|
||||
async def test_detail_endpoint_returns_document(self):
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
service = KnowledgeUploadService(
|
||||
storage_dir=tmp,
|
||||
milvus_client=AsyncMock(),
|
||||
embedder=AsyncMock(),
|
||||
publisher=AsyncMock(),
|
||||
)
|
||||
service.get_document = AsyncMock(return_value={"doc_id": "doc-1"})
|
||||
response = await get_document(
|
||||
FakeRequest(service),
|
||||
"doc-1",
|
||||
SimpleNamespace(user_type="ADMIN", employee_role=None),
|
||||
)
|
||||
|
||||
self.assertEqual(response.code, 200)
|
||||
self.assertEqual(response.data, {"doc_id": "doc-1"})
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user