Coverage for backend/tests/test_game_state.py: 100%
31 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-04-17 17:55 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-04-17 17:55 +0000
1import queue
3import pytest
5from backend.game_state import Lobby, Player
6from backend.models import Role
8type LobbyFixture = tuple[Lobby, queue.Queue[int], queue.Queue[int], queue.Queue[int]]
11@pytest.fixture
12def lobby() -> LobbyFixture:
13 """Setup a Lobby with channels for 2 players."""
14 lobby_q = queue.Queue()
15 a_q = queue.Queue()
16 b_q = queue.Queue()
18 lobby = Lobby(
19 code=("Lettuce", "Tomato", "Onion"),
20 players={"A": Player(a_q, Role.manager), "B": Player(b_q, Role.burger)},
21 channel=lobby_q,
22 )
24 return lobby, lobby_q, a_q, b_q
27def test_lobby_broadcast(lobby: LobbyFixture) -> None:
28 """Broadcasted messages are received by multiple players."""
29 lobb, _, a_q, b_q = lobby
31 lobb.broadcast(3) # pyright: ignore[reportArgumentType]
33 assert a_q.get() == 3
34 assert b_q.get() == 3
37def test_lobby_broadcast_exclude(lobby: LobbyFixture) -> None:
38 """Broadcasted messages are received by players that are not excluded."""
39 lobb, _, a_q, b_q = lobby
41 # pick player A to exclude :(
42 exclude = lobb.players["A"].id
43 lobb.broadcast(3, exclude=[exclude]) # pyright: ignore[reportArgumentType]
45 assert b_q.get() == 3
47 with pytest.raises(queue.Empty):
48 # should be empty
49 a_q.get(block=False)
52def test_messages_receives_msg(lobby: LobbyFixture) -> None:
53 """Test iterator over multiple players."""
54 lobb, lobby_q, _, _ = lobby
56 lobby_q.put(3)
57 lobby_q.put(6)
59 i = iter(lobb.messages())
61 assert next(i) == 3
62 assert next(i) == 6