Spaces:
Sleeping
Sleeping
| import pytest | |
| from httpx import ASGITransport, AsyncClient | |
| from src.api.main import app | |
| async def test_lifespan_and_client(): | |
| """Test the application lifespan and verify that the Qdrant client | |
| is properly initialized and available in app.state during requests. | |
| """ | |
| transport = ASGITransport(app=app) | |
| async with AsyncClient(transport=transport, base_url="http://testserver") as client: | |
| response = await client.get("/health") | |
| assert response.status_code == 200, "Health endpoint did not return 200 OK" | |
| async def test_search_unique_titles_route(): | |
| """Test that the /search route can access the Qdrant client from app.state | |
| and return unique titles. | |
| """ | |
| payload = { | |
| "query_text": "RAG", | |
| "feed_author": None, | |
| "feed_name": None, | |
| "title_keywords": None, | |
| "limit": 1, | |
| } | |
| # Use lifespan context to ensure app.state.qdrant_client is initialized | |
| async with app.router.lifespan_context(app): | |
| transport = ASGITransport(app=app) | |
| async with AsyncClient(transport=transport, base_url="http://testserver") as client: | |
| response = await client.post("/search/unique-titles", json=payload) | |
| assert response.status_code == 200, "Search endpoint did not return 200 OK" | |
| assert "results" in response.json(), "Search response missing 'results' key" | |
| async def test_search_ask(): | |
| """Test that the /search route can access the Qdrant client from app.state | |
| and return unique titles. | |
| """ | |
| payload = {"query_text": "RAG", "provider": "OpenRouter", "limit": 1} | |
| # Use lifespan context to ensure app.state.qdrant_client is initialized | |
| async with app.router.lifespan_context(app): | |
| transport = ASGITransport(app=app) | |
| async with AsyncClient(transport=transport, base_url="http://testserver") as client: | |
| response = await client.post("/search/ask", json=payload) | |
| assert response.status_code == 200, "Ask endpoint did not return 200 OK" | |
| assert "answer" in response.json(), "Ask response missing 'answer' key" | |
| ### ASGI Transport | |
| # You can configure an httpx client to call | |
| # directly into an async Python web application using the ASGI protocol. | |