60 lines
2.0 KiB
Python
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()
|