60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
# tests game state + game loop init
|
|
|
|
from unittest.mock import AsyncMock
|
|
|
|
from game_loop import GameLoop
|
|
from game_state import GameState, PlayerState, SoulgateState, WaveState
|
|
from lobby import Lobby, LobbyPlayer
|
|
|
|
|
|
def make_lobby():
|
|
lobby = Lobby(code="TEST01")
|
|
lobby.players = [
|
|
LobbyPlayer(conn_id="c1", username="Alice", player_class="kael", is_ready=True, is_host=True),
|
|
LobbyPlayer(conn_id="c2", username="Bob", player_class="seris", is_ready=True),
|
|
LobbyPlayer(conn_id="c3", username="Charlie", player_class="aldric", is_ready=True),
|
|
]
|
|
return lobby
|
|
|
|
|
|
def test_game_state_to_dict():
|
|
state = GameState(
|
|
tick=5, players=[], enemies=[], projectiles=[],
|
|
soulgate=SoulgateState(hp=80, max_hp=100),
|
|
wave=WaveState(number=2, phase=1, enemies_remaining=3, state="combat"),
|
|
effects=[],
|
|
)
|
|
d = state.to_dict()
|
|
assert d["type"] == "game_state"
|
|
assert d["tick"] == 5
|
|
for key in ("players", "enemies", "projectiles", "soulgate", "wave"):
|
|
assert key in d
|
|
|
|
|
|
def test_player_state_to_dict():
|
|
p = PlayerState(id="c1", class_name="kael", username="Alice", x=0.0, y=-10.0, hp=150, max_hp=150, alive=True)
|
|
d = p.to_dict()
|
|
assert d["class"] == "kael"
|
|
assert d["hp"] == 150
|
|
assert "attack" in d["cooldowns"]
|
|
|
|
|
|
def test_game_loop_3_joueurs():
|
|
loop = GameLoop(make_lobby(), AsyncMock())
|
|
assert len(loop.state.players) == 3
|
|
|
|
|
|
def test_hp_par_classe():
|
|
loop = GameLoop(make_lobby(), AsyncMock())
|
|
by_class = {p.class_name: p.max_hp for p in loop.state.players}
|
|
assert by_class["kael"] == 150
|
|
assert by_class["seris"] == 80
|
|
assert by_class["aldric"] == 100
|
|
|
|
|
|
def test_tick_incremente():
|
|
loop = GameLoop(make_lobby(), AsyncMock())
|
|
assert loop.state.tick == 0
|
|
loop._tick()
|
|
assert loop.state.tick == 1
|