✅ Gamigin attack ignores def
| Category | Ability |
| Status | Passing |
| Test | tests/test_abilities_complex.py::TestGamiginFixedDamage::test_gamigin_attack_ignores_def |
Gamigin attacks an ally with +5 DEF — damage bypasses DEF.
Preconditions
-
Lane 0: P1's Gamigin (#031, PWR=6)
-
Lane 0: P2's Duban (#001, HP=6, has passive +5 DEF)
Action
- operations.deal_damage(state, gamigin, duban, 6)
from engine.operations import deal_damage
gamigin = make_demon("031", lane=0, owner=Side.PLAYER_1)
duban = make_demon("001", lane=0, owner=Side.PLAYER_2)
state, placed = _make_state_with_demons(gamigin, duban)
gamigin_p, duban_p = placed
result = deal_damage(state, gamigin_p, duban_p, 6)
# Duban's HP = 6, he took 6 damage → fatally wounded
# If DEF had applied, he'd take only 1 damage (6-5) and survive.
duban_after = next((d for d in result.demons if d.unit_id == "001"), None)
if duban_after is not None:
Expected Postconditions
-
Duban: 6 damage (DEF bypassed → fatally wounded by 6 damage on 6 HP).
-
Without fixed damage, he would only take max(0, 6-5)=1 damage.
Assertions
assert duban_after.damage == 6, (
f"Gamigin's passive makes PWR damage Fixed — DEF bypassed. "
f"Expected 6 damage, got {duban_after.damage}"
)
# Alternatively, Duban may be removed (fatal), which is also fine
else:
assert duban_p.unit_id == "001" # Still valid test outcome