Spaces:
Sleeping
Sleeping
Download tests/test_v3_api_shape.py from Mo-Medhat/roadmap-generator: direct link, hf CLI and curl.
- Browser
- Download file 3.45 kB
-
https://huggingface.co/spaces/Mo-Medhat/roadmap-generator/resolve/main/tests/test_v3_api_shape.py
- Command line
-
hf download hf://spaces/Mo-Medhat/roadmap-generator/tests/test_v3_api_shape.py
-
curl -L -o test_v3_api_shape.py https://huggingface.co/spaces/Mo-Medhat/roadmap-generator/resolve/main/tests/test_v3_api_shape.py
3.45 kB
| from fastapi.testclient import TestClient | |
| from app.api import roadmap_routes | |
| from app.main import app | |
| from app.schemas.roadmap_schema import RoadmapResponse | |
| from app.services.roadmap_service import RoadmapServiceFailure, RoadmapServiceSuccess | |
| client = TestClient(app) | |
| def test_health_endpoint() -> None: | |
| response = client.get("/health") | |
| assert response.status_code == 200 | |
| assert response.json() == {"status": "healthy"} | |
| def test_api_health_endpoint() -> None: | |
| response = client.get("/api/health") | |
| assert response.status_code == 200 | |
| body = response.json() | |
| assert body["status"] == "healthy" | |
| assert "supabase_enabled" in body | |
| def test_generate_endpoint_success_envelope() -> None: | |
| class FakeService: | |
| async def generate(self, _request): | |
| data = RoadmapResponse.model_validate( | |
| { | |
| "goal": "Machine Learning", | |
| "duration_days": 7, | |
| "milestones": [{"title": "Kickoff", "start_day": 1, "end_day": 7}], | |
| "first_week_plan": { | |
| 1: [{"title": "Install Python", "duration_minutes": 60}], | |
| 2: [{"title": "Learn syntax", "duration_minutes": 60}], | |
| 3: [{"title": "Practice loops", "duration_minutes": 60}], | |
| 4: [{"title": "Functions intro", "duration_minutes": 60}], | |
| 5: [{"title": "Data types", "duration_minutes": 60}], | |
| 6: [{"title": "Simple exercise", "duration_minutes": 60}], | |
| 7: [{"title": "Mini project", "duration_minutes": 90}], | |
| }, | |
| } | |
| ) | |
| return RoadmapServiceSuccess(data=data) | |
| class FakeStore: | |
| async def save(self, _request, _roadmap): | |
| return True | |
| def health(self): | |
| return {"supabase_enabled": False} | |
| app.dependency_overrides[roadmap_routes.get_service] = lambda: FakeService() | |
| app.dependency_overrides[roadmap_routes.get_store] = lambda: FakeStore() | |
| response = client.post( | |
| "/api/generate", | |
| json={ | |
| "goal": "Machine Learning", | |
| "duration_days": 7, | |
| "daily_minutes": 120, | |
| "level": "beginner", | |
| }, | |
| ) | |
| app.dependency_overrides.clear() | |
| assert response.status_code == 200 | |
| body = response.json() | |
| assert body["ok"] is True | |
| assert "data" in body | |
| assert body["data"]["goal"] == "Machine Learning" | |
| def test_generate_endpoint_failure_envelope() -> None: | |
| class FakeService: | |
| async def generate(self, _request): | |
| return RoadmapServiceFailure(reason="Gemini request timed out") | |
| class FakeStore: | |
| async def save(self, _request, _roadmap): | |
| return True | |
| def health(self): | |
| return {"supabase_enabled": False} | |
| app.dependency_overrides[roadmap_routes.get_service] = lambda: FakeService() | |
| app.dependency_overrides[roadmap_routes.get_store] = lambda: FakeStore() | |
| response = client.post( | |
| "/api/generate", | |
| json={ | |
| "goal": "Machine Learning", | |
| "duration_days": 7, | |
| "daily_minutes": 120, | |
| "level": "beginner", | |
| }, | |
| ) | |
| app.dependency_overrides.clear() | |
| assert response.status_code == 200 | |
| body = response.json() | |
| assert body == {"ok": False, "reason": "Gemini request timed out"} | |