File size: 3,220 Bytes
bb3fbf9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import pytest

from engine.game.enums import Phase
from engine.game.game_state import initialize_game


class TestVerificationBatch26:
    @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_pln_bp4_005_p_smoke(self, game_state):
        gs = game_state
        card_id = self.get_card_id(gs, "PL!N-bp4-005-P")
        p1 = gs.players[0]
        p2 = gs.players[1]

        fodder_id = self.get_card_id(gs, "PL!-sd1-001-SD")
        p1.hand = [card_id, fodder_id]

        target_id = self.get_card_id(gs, "PL!-sd1-001-SD")
        gs.member_db[target_id].cost = 4
        p2.stage[0] = target_id
        p2.stage[1] = target_id
        p2.tapped_members[0] = False
        p2.tapped_members[1] = False

        gs.current_player = 0
        gs.phase = Phase.MAIN
        gs.step(1, check_legality=False, in_place=True)  # Play

        if gs.pending_choices:
            gs.step(500, check_legality=False, in_place=True)  # Discard fodder

        if gs.pending_choices:
            gs.step(560, check_legality=False, in_place=True)  # Target 1
            if gs.pending_choices:
                gs.step(561, check_legality=False, in_place=True)  # Target 2

        assert bool(p2.tapped_members[0]) == True
        assert bool(p2.tapped_members[1]) == True

    def test_pln_bp4_005_r_smoke(self, game_state):
        self.test_pln_bp4_005_p_smoke(game_state)

    def test_pln_bp4_006_p_smoke(self, game_state):
        gs = game_state
        card_id = self.get_card_id(gs, "PL!N-bp4-006-P")
        p1 = gs.players[0]

        niji_id = self.get_card_id(gs, "PL!N-sd1-001-SD")
        gs.member_db[niji_id].cost = 4

        p1.hand = [card_id, niji_id]
        p1.energy_zone = [fodder_id := self.get_card_id(gs, "PL!-sd1-001-SD")] * 10
        p1.tapped_energy.fill(False)

        gs.current_player = 0
        gs.phase = Phase.MAIN
        gs.step(1, check_legality=False, in_place=True)  # Play

        # Trigger energy cost
        if gs.pending_choices:
            gs.step(600, check_legality=False, in_place=True)
            if gs.pending_choices:
                gs.step(601, check_legality=False, in_place=True)

        # Effect: Play from hand
        if gs.pending_choices:
            choice_type, params = gs.pending_choices[0]
            if niji_id in params["cards"]:
                idx = params["cards"].index(niji_id)
                gs.step(500 + idx, check_legality=False, in_place=True)

        # Slot selection
        if gs.pending_choices:
            gs.step(1, check_legality=False, in_place=True)

        assert niji_id in p1.stage

    def test_pln_bp4_006_r_smoke(self, game_state):
        pass

    def test_pln_bp4_007_p_smoke(self, game_state):
        pass