LovecaSim / engine /tests /cards /batches /test_verification_batch_15.py
trioskosmos's picture
Upload folder using huggingface_hub
bb3fbf9 verified
import pytest
from engine.game.enums import Phase
from engine.game.game_state import initialize_game
class TestVerificationBatch15:
@pytest.fixture
def game_state(self):
gs = initialize_game(use_real_data=True)
if not gs.member_db:
pytest.skip("Card data not loaded")
gs.active_player.tapped_energy.fill(False)
return gs
def get_card_id(self, gs, card_no):
for cid, card in gs.member_db.items():
if card.card_no == card_no:
return cid
for cid, card in gs.live_db.items():
if card.card_no == card_no:
return cid
pytest.fail(f"Card {card_no} not found")
def _test_all_blade_heart(self, game_state, card_no):
"""
Generic test for "All Blade Heart" ability.
"""
gs = game_state
card_id = self.get_card_id(gs, card_no)
card = gs.member_db.get(card_id) or gs.live_db.get(card_id)
assert card is not None
assert len(card.abilities) > 0
has_meta = False
for ab in card.abilities:
for eff in ab.effects:
if eff.effect_type.name == "META_RULE" and eff.params.get("source") == "all_blade":
has_meta = True
break
assert has_meta, f"Card {card_no} missing ALL_BLADE meta rule"
def _test_energy_deck_rest(self, game_state, card_no):
"""
Generic test for "On Play: Place 1 Energy from Energy Deck (Rest)".
"""
gs = game_state
card_id = self.get_card_id(gs, card_no)
p1 = gs.players[0]
fodder_id = self.get_card_id(gs, "PL!-sd1-001-SD")
p1.hand = [card_id, fodder_id]
p1.energy_deck = [888, 888]
p1.energy_zone = []
gs.current_player = 0
gs.phase = Phase.MAIN
gs.step(1, check_legality=False, in_place=True) # Play
# Cost: Discard Hand
if gs.pending_choices:
choice_type, params = gs.pending_choices[0]
if choice_type == "TARGET_HAND" and params.get("reason") == "cost":
idx = p1.hand.index(fodder_id)
gs.step(500 + idx, check_legality=False, in_place=True)
assert len(p1.energy_zone) == 1
assert p1.tapped_energy[0] == True, "Placed energy should be rested (Tapped)"
def test_plhs_bp1_020_l_niji_all_blade_heart(self, game_state):
self._test_all_blade_heart(game_state, "PL!HS-bp1-020-L")
def test_pln_bp1_025_l_niji_all_blade_heart(self, game_state):
self._test_all_blade_heart(game_state, "PL!N-bp1-025-L")
def test_pln_sd1_026_sd_niji_all_blade_heart(self, game_state):
self._test_all_blade_heart(game_state, "PL!N-sd1-026-SD")
def test_plsp_bp1_025_l_niji_all_blade_heart(
self,
game_state,
):
self._test_all_blade_heart(game_state, "PL!SP-bp1-025-L")
def test_plsp_sd1_024_sd_niji_all_blade_heart(self, game_state):
self._test_all_blade_heart(game_state, "PL!SP-sd1-024-SD")
def test_plsp_sd1_025_sd_niji_all_blade_heart(self, game_state):
self._test_all_blade_heart(game_state, "PL!SP-sd1-025-SD")
def test_plsp_pr_004_pr_liella_energy(self, game_state):
self._test_energy_deck_rest(game_state, "PL!SP-PR-004-PR")
def test_plsp_pr_006_pr_liella_energy(self, game_state):
self._test_energy_deck_rest(game_state, "PL!SP-PR-006-PR")
def test_plsp_pr_013_pr_liella_energy(self, game_state):
self._test_energy_deck_rest(game_state, "PL!SP-PR-013-PR")
def test_plsp_bp1_021_n_liella_energy(self, game_state):
self._test_energy_deck_rest(game_state, "PL!SP-bp1-021-N")