File size: 1,912 Bytes
6c3d778
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from amongus_env.models import (
    ActionAdapter,
    Claim,
    ClaimKind,
    Kill,
    Move,
    Observation,
    PassMeeting,
    Phase,
    PlayerRole,
    Speak,
    TaskState,
)


def test_action_adapter_validates_discriminated_actions() -> None:
    move = ActionAdapter.validate_python({"type": "move", "room": "Electrical"})
    kill = ActionAdapter.validate_python({"type": "kill", "target_id": "blue"})
    speak = ActionAdapter.validate_python(
        {"type": "speak", "message": "I was in Electrical"}
    )
    pass_meeting = ActionAdapter.validate_python({"type": "pass"})

    assert move == Move(room="Electrical")
    assert kill == Kill(target_id="blue")
    assert speak == Speak(message="I was in Electrical")
    assert pass_meeting == PassMeeting()


def test_observation_contains_training_surface() -> None:
    observation = Observation(
        role=PlayerRole.CREWMATE,
        location="Cafeteria",
        visible_players=["blue"],
        task_list=[TaskState(room="Electrical", name="Fix Wiring")],
        message_log=["Match reset"],
        discussion_log=["red: I was in Cafeteria"],
        claims=[
            Claim(
                kind=ClaimKind.SELF_LOCATION,
                speaker_id="red",
                room="Cafeteria",
                truth_value=True,
            )
        ],
        phase=Phase.TASKS,
        reward=0.0,
        done=False,
        winner=None,
        voting_open=False,
        meeting_turns_remaining=0,
    )

    assert observation.role is PlayerRole.CREWMATE
    assert observation.location == "Cafeteria"
    assert observation.visible_players == ["blue"]
    assert observation.task_list[0].completed is False
    assert observation.discussion_log == ["red: I was in Cafeteria"]
    assert observation.claims[0].truth_value is True
    assert observation.voting_open is False
    assert observation.meeting_turns_remaining == 0