File size: 2,548 Bytes
45eee48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
"""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:
        # Run baseline to populate scores
        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:
        # Run baseline to create episodes
        client.post("/baseline")
        resp = client.get("/replay/baseline_task_001")
        data = resp.json()
        # Should have episode data or error
        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