✅ Sabnock pink haze applies pwr and def debuffs
| Category | Ability |
| Status | Passing |
| Test | tests/test_abilities_actions.py::test_sabnock_pink_haze_applies_pwr_and_def_debuffs |
Sabnock applies Pink Haze debuff to an enemy demon.
Preconditions
-
P1 Main Phase, P1 has 5 AP
-
Lane 0: P1's Sabnock (#003) — HP=15, READIED
-
Lane 0: P2's Duban (#001) — HP=6, READIED, has +5 DEF passive (not registered here)
-
No status effects active
Action
- Execute Sabnock's Pink Haze (ability[0], Quick, 1 AP, exhaust) targeting Duban
result = execute_ability(state, sabnock_on_field, ability_idx=0, targets=[duban_on_field])
# Check PWR debuff applied
pwr_effects = [
e for e in result.status_effects
if e.target_instance_id == duban_on_field.instance_id and e.stat == "pwr"
]
Expected Postconditions
-
Duban: has active status "pwr" -3 (expires this phase)
-
Duban: has active status "def" -2 (expires this phase)
-
Sabnock: EXHAUSTED (tap_required=True)
-
P1 AP: 4 (was 5, spent 1)
-
No HP changes
Assertions
assert len(pwr_effects) == 1, "Duban must have one pwr status effect"
assert pwr_effects[0].value == -3, f"Expected -3 PWR, got {pwr_effects[0].value}"
# Check DEF debuff applied
def_effects = [
e for e in result.status_effects
if e.target_instance_id == duban_on_field.instance_id and e.stat == "def"
]
assert len(def_effects) == 1, "Duban must have one def status effect"
assert def_effects[0].value == -2, f"Expected -2 DEF, got {def_effects[0].value}"
# Sabnock should be exhausted (tap_required=True handled by execute_ability)
sabnock_after = next(d for d in result.demons if d.unit_id == "003")
assert sabnock_after.state == DemonState.EXHAUSTED, "Sabnock must be EXHAUSTED after Pink Haze"
# AP deducted
assert result.players[Side.PLAYER_1].ap == 4, "P1 AP should be 4 (spent 1)"
# No HP changes
duban_after = next(d for d in result.demons if d.unit_id == "001")
assert duban_after.damage == 0, "Duban should have no damage — Pink Haze is status only"