| """Tests for new endpoints: curriculum, leaderboard, replay, validation-report.""" |
|
|
| from __future__ import annotations |
|
|
| import pytest |
| from fastapi.testclient import TestClient |
|
|
| from server.app import app |
|
|
|
|
| @pytest.fixture |
| def client(): |
| return TestClient(app) |
|
|
|
|
| class TestCurriculumEndpoint: |
| def test_returns_curriculum(self, client) -> None: |
| resp = client.get("/curriculum") |
| assert resp.status_code == 200 |
| data = resp.json() |
| assert "curriculum" in data |
| assert "total_episodes" in data |
| assert data["total_episodes"] > 0 |
|
|
| def test_curriculum_has_difficulty_levels(self, client) -> None: |
| resp = client.get("/curriculum") |
| curriculum = resp.json()["curriculum"] |
| levels = {entry["difficulty_level"] for entry in curriculum} |
| assert 1 in levels |
| assert 3 in levels |
| assert 5 in levels |
|
|
| def test_curriculum_covers_all_tasks(self, client) -> None: |
| resp = client.get("/curriculum") |
| curriculum = resp.json()["curriculum"] |
| task_ids = {entry["task_id"] for entry in curriculum} |
| assert "task_001" in task_ids |
| assert "task_007" in task_ids |
|
|
|
|
| class TestLeaderboardEndpoint: |
| def test_returns_leaderboard(self, client) -> None: |
| resp = client.get("/leaderboard") |
| assert resp.status_code == 200 |
| data = resp.json() |
| assert "entries" in data |
| assert "total" in data |
|
|
| def test_leaderboard_after_baseline(self, client) -> None: |
| |
| client.post("/baseline") |
| resp = client.get("/leaderboard") |
| data = resp.json() |
| assert data["total"] > 0 |
|
|
|
|
| class TestReplayEndpoint: |
| def test_missing_episode(self, client) -> None: |
| resp = client.get("/replay/nonexistent_episode_123") |
| assert resp.status_code == 200 |
| data = resp.json() |
| assert "error" in data |
|
|
| def test_replay_after_baseline(self, client) -> None: |
| |
| client.post("/baseline") |
| resp = client.get("/replay/baseline_task_001") |
| data = resp.json() |
| |
| assert "episode_id" in data or "error" in data |
|
|
|
|
| class TestValidationReportEndpoint: |
| def test_returns_real_report(self, client) -> None: |
| resp = client.get("/validation-report") |
| assert resp.status_code == 200 |
| data = resp.json() |
| assert "results" in data |
| assert "summary" in data |
| assert data["summary"]["passed"] > 0 |
|
|