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

79 lines
2.2 KiB
Python

# tests touche E (Kael / Seris / Aldric)
from unittest.mock import AsyncMock
from lobby import Lobby, LobbyPlayer
from game_loop import GameLoop
from game_state import EnemyState
from constants import (
DISPLACEMENT_COOLDOWNS,
KAEL_CHARGE_DISTANCE,
SERIS_INTANGIBLE_DURATION,
ALDRIC_FLYING_DURATION,
ENEMY_STATS,
)
def make_game():
classes = [("p1", "Alice", "kael"), ("p2", "Bob", "seris"), ("p3", "Clara", "aldric")]
lobby = Lobby("TEST1", classes[0][0])
lobby.players = [LobbyPlayer(cid, uname, cls) for cid, uname, cls in classes]
return GameLoop(lobby, AsyncMock())
def add_enemy(game, etype="fracture", x=0.0, y=5.0):
stats = ENEMY_STATS[etype]
game._enemy_counter += 1
e = EnemyState(id=f"en_{game._enemy_counter}", type=etype, x=x, y=y, hp=stats["hp"], max_hp=stats["hp"])
game.state.enemies.append(e)
return e
def test_kael_charge():
game = make_game()
p = game.state.players[0]
p.x, p.y = 0.0, 0.0
game.handle_displacement("p1", 10.0, 0.0)
assert abs(p.x - KAEL_CHARGE_DISTANCE) < 0.01
assert p.cooldowns["displacement"] == DISPLACEMENT_COOLDOWNS["kael"]
def test_kael_charge_bloque_par_cd():
game = make_game()
p = game.state.players[0]
p.x, p.y = 0.0, 0.0
p.cooldowns["displacement"] = 3.0
game.handle_displacement("p1", 10.0, 0.0)
assert p.x == 0.0
def test_seris_teleport():
game = make_game()
p = game.state.players[1]
p.x, p.y = 0.0, 0.0
game.handle_displacement("p2", 5.0, 3.0)
assert abs(p.x - 5.0) < 0.01
assert abs(p.y - 3.0) < 0.01
assert any(b["type"] == "intangible" for b in p.buffs)
def test_seris_intangible_immunise():
game = make_game()
p = game.state.players[1]
p.x, p.y = 0.0, 0.0
p.hp = p.max_hp
p.buffs.append({"type": "intangible", "timer": SERIS_INTANGIBLE_DURATION})
e = add_enemy(game, "fracture", x=0.0, y=0.0)
e.attack_cooldown = 0.0
game._update_enemies()
assert p.hp == p.max_hp
def test_aldric_vol():
game = make_game()
p = game.state.players[2]
game.handle_displacement("p3", 0.0, 0.0)
flying = next((b for b in p.buffs if b["type"] == "flying"), None)
assert flying is not None
assert abs(flying["timer"] - ALDRIC_FLYING_DURATION) < 0.001