import pytest from engine.game.game_state import initialize_game # Candidates to Strictly Verify # 1. PL!N-bp1-001-P (Ayumu Uehara): On Play -> Gain 1 Blade # 2. PL!N-bp1-005-P (Ai Miyashita): Constant? Need to re-read but let's test Ayumu first. # 3. PL!-bp4-011-N (Eli Ayase): Live Start -> Gain 1 Blade until live end. @pytest.fixture def game(): print("\nDEBUG: INITIALIZING GAME FIXTURE") return initialize_game(deck_type="training") def _find_card_id(game, card_no): for cid, card in game.member_db.items(): if card.card_no == card_no: return cid return None def test_verify_ayumu_bp1_001_p(game): """ Card: PL!N-bp1-001-P Text: [On Play] Gain 1 Blade. """ card_no = "PL!N-bp1-001-P" cid = _find_card_id(game, card_no) print(f"DEBUG: lookup for {card_no} returned {cid}") assert cid is not None p0 = game.players[0] p0.hand = [cid] # Action: Play to Stage Center game.inject_card(0, cid, "stage", position=1) # Manually trigger ON_PLAY since inject doesn't # In real engine, play_card action calls resolve_effect # We will simulate the trigger resolution card = game.member_db[cid] # Check stats before # Check stats before # assert card.blades == 0 # Base - REMOVED: Some cards have base blades base_blades = card.blades # Find ability print(f"\nDEBUG: Analyzing Card {card_no} (ID: {cid})") print(f"DEBUG: Name: {card.name}") print(f"DEBUG: Base Blades: {base_blades}") try: print(f"DEBUG: Ability Text: {getattr(card, 'ability_text', 'N/A')}") except: pass if not card.abilities: import pprint print("DEBUG: FULL CARD DUMP:") pprint.pprint(vars(card)) pytest.fail(f"Card {card_no} has NO parsed abilities! Parser failure.") ability = card.abilities[0] print(f"DEBUG: Trigger: {ability.trigger}") print(f"DEBUG: Conditions: {ability.conditions}") print(f"DEBUG: Effects: {ability.effects}") if ability.effects: eff = ability.effects[0] print(f"DEBUG: Eff[0] detail: Type={eff.effect_type} Value={eff.value} Params={eff.params}") assert ability.trigger == 2 # ON_LIVE_START assert len(ability.effects) == 1 eff = ability.effects[0] assert eff.effect_type == 1 # ADD_BLADES assert eff.value == 1 print(f"Verified {card_no} data structure.") def test_verify_eli_bp4_011_n(game): """ Card: PL!-bp4-011-N Text: [Live Start] Gain 1 Blade until live end. """ card_no = "PL!-bp4-011-N" cid = _find_card_id(game, card_no) assert cid is not None p0 = game.players[0] p0.stage[1] = cid card = game.member_db[cid] ability = card.abilities[0] assert ability.trigger == 2 # ON_LIVE_START eff = ability.effects[0] assert eff.effect_type == 1 # ADD_BLADES assert eff.value == 2 assert eff.params.get("until") == "live_end" print(f"Verified {card_no} data structure.")