File size: 3,238 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
import numpy as np
import pytest

from engine.game.game_state import GameState, LiveCard, MemberCard


class TestCardInjection:
    @pytest.fixture(autouse=True)
    def setup(self, game_state):
        # Create a fresh game state for each test
        self.state = game_state
        # Ensure we have dummy DBs
        GameState.member_db = {
            101: MemberCard(
                card_id=101,
                card_no="m1",
                name="M1",
                cost=1,
                hearts=np.zeros(6, dtype=np.int32),
                blade_hearts=np.zeros(7, dtype=np.int32),
                blades=1,
            ),
            102: MemberCard(
                card_id=102,
                card_no="m2",
                name="M2",
                cost=2,
                hearts=np.zeros(6, dtype=np.int32),
                blade_hearts=np.zeros(7, dtype=np.int32),
                blades=1,
            ),
        }
        GameState.live_db = {
            201: LiveCard(card_id=201, card_no="l1", name="L1", score=100, required_hearts=np.zeros(7, dtype=np.int32))
        }

    def test_inject_hand(self):
        # Inject into empty hand
        self.state.players[0].hand = []
        self.state.inject_card(0, 101, "hand")
        assert len(self.state.players[0].hand) == 1
        assert self.state.players[0].hand[0] == 101

        # Inject at position 0
        self.state.inject_card(0, 102, "hand", 0)
        assert self.state.players[0].hand[0] == 102
        assert self.state.players[0].hand[1] == 101

    def test_inject_stage(self):
        self.state.inject_card(0, 101, "stage", 0)  # Left
        self.state.inject_card(0, 102, "stage", 2)  # Right

        assert self.state.players[0].stage[0] == 101
        assert self.state.players[0].stage[1] == -1  # Center empty
        assert self.state.players[0].stage[2] == 102

    def test_inject_energy(self):
        self.state.players[0].energy_zone = []
        self.state.inject_card(0, 200, "energy")
        assert len(self.state.players[0].energy_zone) == 1
        assert self.state.players[0].energy_zone[0] == 200

    def test_inject_live(self):
        self.state.players[0].live_zone = []
        self.state.inject_card(0, 201, "live")
        assert len(self.state.players[0].live_zone) == 1
        assert self.state.players[0].live_zone[0] == 201
        # Check revealed array grew
        assert len(self.state.players[0].live_zone_revealed) == 1
        assert self.state.players[0].live_zone_revealed[0] == 0

    def test_inject_opponent(self):
        # Verify we can mess with player 1
        self.state.players[1].hand = []
        self.state.inject_card(1, 101, "hand")
        assert len(self.state.players[1].hand) == 1
        assert self.state.players[1].hand[0] == 101

    def test_invalid_input(self):
        with pytest.raises(ValueError):
            self.state.inject_card(2, 101, "hand")  # Bad player
        with pytest.raises(ValueError):
            self.state.inject_card(0, 101, "invalid_zone")  # Bad zone
        with pytest.raises(ValueError):
            self.state.inject_card(0, 101, "stage", 3)  # Bad stage pos