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

1import pytest 

2 

3from backend.dependencies import LobbyManager 

4from backend.game_state import LobbyFullError, LobbyNotFoundError 

5 

6 

7@pytest.fixture 

8def lm() -> LobbyManager: 

9 """Pass lobby manager to tests.""" 

10 return LobbyManager(["a"]) 

11 

12 

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) 

18 

19 

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() 

24 

25 with pytest.raises(RuntimeError) as exc_info: 

26 lm.register_lobby() 

27 

28 assert exc_info.type is RuntimeError 

29 assert str(exc_info.value) == "No more lobby codes available, server is full" 

30 

31 

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)) 

37 

38 

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")) 

43 

44 assert exc_info.type is LobbyNotFoundError 

45 

46 

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")) 

54 

55 with pytest.raises(LobbyFullError) as exc_info: 

56 lm.register_player(("a", "a", "a")) 

57 

58 assert exc_info.type is LobbyFullError 

59 

60 

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) 

65 

66 assert len(lm.lobbies[code].players) == 1