SOULGATE/server/tests/test_lobby.py
2026-05-04 03:42:47 +02:00

101 lines
2.6 KiB
Python

# tests lobby
from lobby import LobbyManager
def _make():
return LobbyManager()
def _full_lobby():
m = _make()
code = m.create_lobby("c1", "Alice")[0][1]["code"]
m.join_lobby("c2", "Bob", code)
m.join_lobby("c3", "Charlie", code)
m.select_class("c1", "kael")
m.select_class("c2", "seris")
m.select_class("c3", "aldric")
m.set_ready("c1")
m.set_ready("c2")
m.set_ready("c3")
return m, code
def test_create_lobby():
m = _make()
msgs = m.create_lobby("c1", "Alice")
assert msgs[0][1]["type"] == "lobby_created"
assert len(msgs[0][1]["code"]) == 6
def test_create_lobby_recreate():
# quand on recree, l'ancien est libere (corrige un bug de "Back" qui bloquait)
m = _make()
code1 = m.create_lobby("c1", "Alice")[0][1]["code"]
msgs = m.create_lobby("c1", "Alice")
last = next(msg for cid, msg in msgs if cid == "c1" and msg["type"] == "lobby_created")
assert last["code"] != code1
assert code1 not in m.lobbies
def test_join_lobby():
m = _make()
code = m.create_lobby("c1", "Alice")[0][1]["code"]
msgs = m.join_lobby("c2", "Bob", code)
types = {msg["type"] for _, msg in msgs}
assert "lobby_joined" in types and "player_joined" in types
def test_join_lobby_not_found():
m = _make()
msgs = m.join_lobby("c1", "Alice", "XXXXXX")
assert msgs[0][1]["code"] == "lobby_not_found"
def test_join_lobby_full():
m = _make()
code = m.create_lobby("c1", "Alice")[0][1]["code"]
m.join_lobby("c2", "Bob", code)
m.join_lobby("c3", "Charlie", code)
msgs = m.join_lobby("c4", "Dave", code)
assert msgs[0][1]["code"] == "lobby_full"
def test_class_taken():
m = _make()
code = m.create_lobby("c1", "Alice")[0][1]["code"]
m.join_lobby("c2", "Bob", code)
m.select_class("c1", "kael")
msgs = m.select_class("c2", "kael")
assert msgs[0][1]["code"] == "class_taken"
def test_ready_sans_classe():
m = _make()
m.create_lobby("c1", "Alice")
msgs = m.set_ready("c1")
assert msgs[0][1]["code"] == "no_class_selected"
def test_start_game_not_host():
m = _make()
code = m.create_lobby("c1", "Alice")[0][1]["code"]
m.join_lobby("c2", "Bob", code)
msgs = m.start_game("c2")
assert msgs[0][1]["code"] == "not_host"
def test_start_game_ok():
m, _ = _full_lobby()
msgs = m.start_game("c1")
assert len(msgs) == 3
assert all(msg["type"] == "game_starting" for _, msg in msgs)
def test_disconnect_transfere_host():
m = _make()
code = m.create_lobby("c1", "Alice")[0][1]["code"]
m.join_lobby("c2", "Bob", code)
m.disconnect("c1")
assert m.lobbies[code].players[0].is_host is True