✅ Question passive no fire without hidden card
| Category | Ability |
| Status | Passing |
| Test | tests/test_abilities_familiars.py::test_question_passive_no_fire_without_hidden_card |
A demon attacks Question but Question has NO unrevealed card.
Preconditions
-
Lane 0: P1's Question (120_3) — no hidden_card in abilities_used_this_turn.
-
Lane 0: P2's Murmur (002) — 12 HP, 0 damage, READIED.
Action
- Fire DAMAGE_RECEIVED event targeting Question.
from engine.events import fire_event
state = make_game_state()
question = make_familiar_demon("120_3", lane=0, owner=Side.PLAYER_1, current_hp=1)
# No hidden_card set — abilities_used_this_turn is empty by default
state = place_demon(state, question)
question = state.demons[-1]
murmur = make_demon("002", lane=0, owner=Side.PLAYER_2)
state = place_demon(state, murmur)
murmur = state.demons[-1]
event = GameEvent(
event_type=EventType.DAMAGE_RECEIVED,
source=murmur,
target=question,
value=1,
side=Side.PLAYER_2,
lane=0,
)
new_state = fire_event(state, event)
murmur_after = next((d for d in new_state.demons if d.unit_id == "002"), None)
Expected Postconditions
-
Murmur damage = 0 (no retaliation without a hidden card).
-
Question still on field.
Assertions
assert murmur_after is not None, "Murmur should be on field."
assert murmur_after.damage == 0, (
f"Murmur should take no damage from Question without a hidden card. "
f"Got {murmur_after.damage}."
)
question_on_field = [d for d in new_state.demons if d.unit_id == "120_3"]
assert len(question_on_field) == 1, "Question should still be on field (no hidden card to reveal)."