LovecaSim / engine /tests /cards /batches /test_verification_batch_3.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 TestVerificationBatch3:
@pytest.fixture
def game_state(self):
gs = initialize_game(use_real_data=True)
if not gs.member_db:
pytest.skip("Card data not loaded")
valid_id = next(iter(gs.member_db))
gs.active_player.energy_zone = [valid_id] * 20
gs.active_player.tapped_energy.fill(False)
return gs
def get_card_id_by_no(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
raise ValueError(f"Card {card_no} not found")
def test_pl_sd1_011_eli(self, game_state):
gs = game_state
gs.current_player = 0
p = gs.players[0]
card_no = "PL!-sd1-011-SD"
card_id = self.get_card_id_by_no(gs, card_no)
fodder_id = self.get_card_id_by_no(gs, "PL!-sd1-001-SD")
c1 = self.get_card_id_by_no(gs, "PL!-sd1-002-SD")
c2 = self.get_card_id_by_no(gs, "PL!-sd1-003-SD")
c3 = self.get_card_id_by_no(gs, "PL!-sd1-004-SD")
deck_ids = [c1, c2, c3]
p.hand = [card_id, fodder_id]
p.main_deck = deck_ids + [fodder_id] * 5
gs.phase = Phase.MAIN
gs.step(1, check_legality=False, in_place=True)
# Cost
if gs.pending_choices:
choice_type, params = gs.pending_choices[0]
if choice_type == "TARGET_HAND" and params.get("reason") == "cost":
idx = p.hand.index(fodder_id)
gs.step(500 + idx, check_legality=False, in_place=True)
# Effect
if gs.pending_choices:
choice_type, params = gs.pending_choices[0]
if choice_type == "SELECT_FROM_LIST":
# Select second card (c2)
gs.step(601, check_legality=False, in_place=True)
assert c2 in p.hand
assert len(p.discard) >= 1
def test_pl_sd1_012_kotori(self, game_state):
gs = game_state
gs.current_player = 0
p = gs.players[0]
card_no = "PL!-sd1-012-SD"
card_id = self.get_card_id_by_no(gs, card_no)
fodder_id = self.get_card_id_by_no(gs, "PL!-sd1-001-SD")
c1 = self.get_card_id_by_no(gs, "PL!-sd1-002-SD")
c2 = self.get_card_id_by_no(gs, "PL!-sd1-003-SD")
c3 = self.get_card_id_by_no(gs, "PL!-sd1-004-SD")
deck_ids = [c1, c2, c3]
p.hand = [card_id, fodder_id]
p.main_deck = deck_ids + [fodder_id] * 5
gs.phase = Phase.MAIN
gs.step(1, check_legality=False, in_place=True)
if gs.pending_choices and gs.pending_choices[0][0] == "TARGET_HAND":
gs.step(500, check_legality=False, in_place=True) # Discard first available
if gs.pending_choices:
# Select 3rd card
gs.step(602, check_legality=False, in_place=True)
assert c3 in p.hand
def test_pl_sd1_013_umi_vanilla(self, game_state):
gs = game_state
card_no = "PL!-sd1-013-SD"
card_id = self.get_card_id_by_no(gs, card_no)
card = gs.member_db[card_id]
assert not card.abilities
def test_pl_sd1_014_rin_vanilla(self, game_state):
gs = game_state
card_no = "PL!-sd1-014-SD"
card_id = self.get_card_id_by_no(gs, card_no)
card = gs.member_db[card_id]
assert not card.abilities
def test_pl_sd1_015_maki(self, game_state):
gs = game_state
gs.current_player = 0
p = gs.players[0]
card_no = "PL!-sd1-015-SD"
card_id = self.get_card_id_by_no(gs, card_no)
fodder_id = self.get_card_id_by_no(gs, "PL!-sd1-001-SD")
live_id = self.get_card_id_by_no(gs, "PL!-sd1-019-SD")
member_id = self.get_card_id_by_no(gs, "PL!-sd1-002-SD")
p.hand = [card_id, fodder_id]
p.main_deck = [live_id, live_id, member_id, live_id, live_id] + [fodder_id] * 5
gs.phase = Phase.MAIN
gs.step(1, check_legality=False, in_place=True)
if gs.pending_choices and gs.pending_choices[0][0] == "TARGET_HAND":
gs.step(500, check_legality=False, in_place=True)
if gs.pending_choices:
choice_type, params = gs.pending_choices[0]
if member_id in params["cards"]:
idx = params["cards"].index(member_id)
gs.step(600 + idx, check_legality=False, in_place=True)
assert member_id in p.hand
# Check discard count
assert len(p.discard) >= 1