Files
ai-contract-platform/backend/tests/test_search_api.py
T

60 lines
2.0 KiB
Python

import unittest
from fastapi.testclient import TestClient
from app.api.search import get_search_service, require_current_user
from app.main import app
class StubSearchService:
def __init__(self):
self.calls = []
def search(self, current_user, *, q, types=None, limit=8):
self.calls.append({"current_user": current_user, "q": q, "types": types, "limit": limit})
return {
"query": q,
"types": ["contract", "template"],
"limit": limit,
"items": [
{
"id": "contract-search-001",
"type": "contract",
"title": "Search Contract",
"href": "/contracts/contract-search-001",
}
],
"groups": {"contracts": [], "reviews": [], "files": [], "templates": []},
"summary": {"total": 1, "by_type": {"contract": 1, "review": 0, "file": 0, "template": 0}},
}
class SearchApiTestCase(unittest.TestCase):
def setUp(self):
self.search_service = StubSearchService()
app.dependency_overrides[get_search_service] = lambda: self.search_service
app.dependency_overrides[require_current_user] = lambda: {
"id": "user-member",
"tenant_id": "tenant-demo-001",
"role": "member",
}
self.client = TestClient(app)
def tearDown(self):
app.dependency_overrides.clear()
def test_unified_search_returns_success_payload(self):
response = self.client.get("/api/v1/search", params={"q": "Alpha", "types": "contract,template", "limit": 5})
self.assertEqual(response.status_code, 200)
body = response.json()
self.assertEqual(body["code"], 0)
self.assertEqual(body["data"]["query"], "Alpha")
self.assertEqual(body["data"]["summary"]["total"], 1)
self.assertEqual(self.search_service.calls[0]["types"], "contract,template")
self.assertEqual(self.search_service.calls[0]["limit"], 5)
if __name__ == "__main__":
unittest.main()