Spaces:
Sleeping
Sleeping
| """Integration tests for the API.""" | |
| import pytest | |
| from fastapi.testclient import TestClient | |
| from unittest.mock import patch, AsyncMock, MagicMock | |
| class TestAPIEndpoints: | |
| """Tests for API endpoints.""" | |
| def client(self): | |
| """Create test client.""" | |
| from src.api.app import app | |
| return TestClient(app) | |
| def test_root_endpoint(self, client): | |
| """Test root endpoint.""" | |
| response = client.get("/") | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert "name" in data | |
| assert "Ask-the-Web" in data["name"] | |
| def test_health_endpoint(self, client): | |
| """Test health check endpoint.""" | |
| with patch("src.api.routes.get_settings") as mock_settings: | |
| mock_settings.return_value = MagicMock( | |
| openai_api_key="test-key", | |
| anthropic_api_key=None, | |
| tavily_api_key="test-tavily", | |
| ) | |
| response = client.get("/api/v1/health") | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert "status" in data | |
| assert "version" in data | |
| def test_query_endpoint(self, mock_agent_class, client): | |
| """Test query endpoint.""" | |
| # Setup mock | |
| mock_agent = AsyncMock() | |
| mock_agent.query = AsyncMock(return_value=MagicMock( | |
| answer="Test answer", | |
| sources=[{"title": "Test", "url": "https://test.com", "snippet": "snippet"}], | |
| follow_up_questions=["Follow up?"], | |
| confidence=0.8, | |
| metadata={}, | |
| )) | |
| mock_agent_class.return_value = mock_agent | |
| response = client.post( | |
| "/api/v1/query", | |
| json={"query": "What is Python?"}, | |
| ) | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert "answer" in data | |
| assert "sources" in data | |
| assert "confidence" in data | |
| def test_query_validation(self, client): | |
| """Test query validation.""" | |
| # Empty query should fail | |
| response = client.post( | |
| "/api/v1/query", | |
| json={"query": ""}, | |
| ) | |
| assert response.status_code == 422 # Validation error | |
| def test_conversation_not_found(self, client): | |
| """Test getting non-existent conversation.""" | |
| response = client.get("/api/v1/conversation/nonexistent-id") | |
| assert response.status_code == 404 | |
| def test_delete_conversation_not_found(self, client): | |
| """Test deleting non-existent conversation.""" | |
| response = client.delete("/api/v1/conversation/nonexistent-id") | |
| assert response.status_code == 404 | |