Coverage for backend/tests/test_lobbymanager.py: 100%
38 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 pytest
3from backend.dependencies import LobbyManager
4from backend.game_state import LobbyFullError, LobbyNotFoundError
7@pytest.fixture
8def lm() -> LobbyManager:
9 """Pass lobby manager to tests."""
10 return LobbyManager(["a"])
13def test_register_lobby(lm: LobbyManager) -> None:
14 """Test a lobby is created correctly."""
15 code = lm.register_lobby()
16 assert len(code) == 3
17 assert all(ingredient == "a" for ingredient in code)
20def test_no_more_lobbies(lm: LobbyManager) -> None:
21 """Test RuntimeError is thrown when no more lobbies are available."""
22 for _ in range(len(lm.available_codes)):
23 lm.register_lobby()
25 with pytest.raises(RuntimeError) as exc_info:
26 lm.register_lobby()
28 assert exc_info.type is RuntimeError
29 assert str(exc_info.value) == "No more lobby codes available, server is full"
32def test_different_lobbies_have_different_codes() -> None:
33 """Test that different lobbies have different codes."""
34 lm = LobbyManager(["a", "b", "c"])
35 codes = [lm.register_lobby() for _ in range(3 * 3 * 3)]
36 assert len(codes) == len(set(codes))
39def test_register_player_lobby_not_found(lm: LobbyManager) -> None:
40 """Test LobbyNotFound is thrown on invalid codes."""
41 with pytest.raises(LobbyNotFoundError) as exc_info:
42 lm.register_player(("Top Bun", "Not a real ingredient"))
44 assert exc_info.type is LobbyNotFoundError
47def test_register_player_lobby_full(lm: LobbyManager) -> None:
48 """Test LobbyFull is thrown for full lobbies."""
49 lm.register_lobby()
50 lm.register_player(("a", "a", "a"))
51 lm.register_player(("a", "a", "a"))
52 lm.register_player(("a", "a", "a"))
53 lm.register_player(("a", "a", "a"))
55 with pytest.raises(LobbyFullError) as exc_info:
56 lm.register_player(("a", "a", "a"))
58 assert exc_info.type is LobbyFullError
61def test_register_player(lm: LobbyManager) -> None:
62 """Test a player can be added correctly."""
63 code = lm.register_lobby()
64 lm.register_player(code)
66 assert len(lm.lobbies[code].players) == 1