"""T4.9 RAG 知识库 + 语义搜索测试。""" import pytest from fastapi.testclient import TestClient class TestKnowledgeSearch: """语义搜索接口测试。""" def test_search_empty_db(self, client: TestClient, auth_headers: dict): """知识库为空时应返回空列表。""" resp = client.get("/api/v1/knowledge/search?q=跑道不足", headers=auth_headers) assert resp.status_code == 200 assert isinstance(resp.json()["data"], list) def test_search_with_top_k(self, client: TestClient, auth_headers: dict): """指定 top_k 参数。""" resp = client.get("/api/v1/knowledge/search?q=融资&top_k=3", headers=auth_headers) assert resp.status_code == 200 assert isinstance(resp.json()["data"], list) def test_search_no_auth(self, client: TestClient): """未认证应返回 401。""" resp = client.get("/api/v1/knowledge/search?q=test") assert resp.status_code == 401 def test_search_empty_query(self, client: TestClient, auth_headers: dict): """空查询应返回 422。""" resp = client.get("/api/v1/knowledge/search?q=", headers=auth_headers) assert resp.status_code == 422 class TestKnowledgeContext: """RAG 上下文构建接口测试。""" def test_build_context_success(self, client: TestClient, auth_headers: dict): """构建 RAG 上下文。""" resp = client.post( "/api/v1/knowledge/context", json={"query": "企业跑道不足的风险"}, headers=auth_headers, ) assert resp.status_code == 200 assert isinstance(resp.json()["data"], str) def test_build_context_no_auth(self, client: TestClient): """未认证应返回 401。""" resp = client.post("/api/v1/knowledge/context", json={}) assert resp.status_code == 401 def test_build_context_empty_query(self, client: TestClient, auth_headers: dict): """空查询应正常返回空字符串。""" resp = client.post( "/api/v1/knowledge/context", json={"query": ""}, headers=auth_headers, ) assert resp.status_code == 200