File size: 2,132 Bytes
5fde057
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import importlib
import pytest
from fastapi.testclient import TestClient


def fresh_client():
    """Reload server module to get a clean env state."""
    import src.server as server_module
    importlib.reload(server_module)
    return TestClient(server_module.app)


def test_health():
    client = fresh_client()
    r = client.get("/health")
    assert r.status_code == 200
    assert r.json()["status"] == "ok"


def test_reset_returns_observation():
    client = fresh_client()
    r = client.post("/reset", json={"seed": 42})
    assert r.status_code == 200
    data = r.json()
    assert data["current_round"] == 0
    assert data["total_rounds"] == 8
    assert data["my_engineer_name"] == "trained"
    assert "my_service" in data
    assert "peer_progress" in data
    assert data["done"] is False


def test_step_returns_correct_shape():
    client = fresh_client()
    client.post("/reset", json={"seed": 0})
    r = client.post("/step", json={"commitment": "DEPLOY_PROD_B", "channel_msg": "going B"})
    assert r.status_code == 200
    data = r.json()
    assert "observation" in data
    assert "reward" in data
    assert "done" in data
    assert "info" in data
    assert data["reward"] == 0.0   # intermediate round — always 0


def test_step_before_reset_returns_400():
    client = fresh_client()
    r = client.post("/step", json={"commitment": "MONITOR", "channel_msg": ""})
    assert r.status_code == 400


def test_state_returns_full_state():
    client = fresh_client()
    client.post("/reset", json={"seed": 1})
    r = client.get("/state")
    assert r.status_code == 200
    data = r.json()
    assert "services" in data
    assert "trained" in data["services"]
    assert "history" in data


def test_full_episode_ends_with_done_true():
    client = fresh_client()
    client.post("/reset", json={"seed": 10})
    done = False
    for _ in range(10):
        r = client.post("/step", json={"commitment": "DEPLOY_PROD_B", "channel_msg": ""})
        data = r.json()
        if data["done"]:
            done = True
            assert data["reward"] in (0.0, 1.0)
            break
    assert done