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

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


class TestPerformanceHistory:
    @pytest.fixture(autouse=True)
    def setup(self):
        self.game = GameState(verbose=True)
        self.p0 = self.game.players[0]

        # Setup mock databases
        self.game.member_db[1] = MemberCard(
            card_id=1,
            card_no="M1",
            name="Member 1",
            cost=1,
            hearts=np.array([1, 0, 0, 0, 0, 0, 0]),
            blade_hearts=np.array([0, 0, 0, 0, 0, 0, 0]),
            blades=1,
            abilities=[],
            img_path="m1.png",
        )
        self.game.live_db[100] = LiveCard(
            card_id=100,
            card_no="L1",
            name="Live 1",
            score=1,
            required_hearts=np.array([2, 0, 0, 0, 0, 0, 0]),  # Needs 2 Pink, Member 1 only has 1
            abilities=[],
            img_path="l1.png",
        )

    def test_performance_history_logs_failure(self):
        """Verify that _do_performance logs failing performances to performance_history."""
        # 1. Setup Stage & Live Zone
        self.p0.stage[0] = 1  # Member 1 in Area 0 (1 Pink Heart)
        self.p0.live_zone = [100]  # Live 1 (Needs 2 Pink Hearts)
        self.p0.main_deck = []

        # 2. Trigger Performance Phase
        self.game.phase = Phase.PERFORMANCE_P1
        self.game.current_player = 0
        self.game.turn_number = 5

        # 3. Call _do_performance (should fail)
        self.game._do_performance(0)

        # 4. Verify results
        assert self.game.performance_results[0]["success"] is False

        # 5. Verify history
        assert len(self.game.performance_history) == 1
        entry = self.game.performance_history[0]
        assert entry["player_id"] == 0
        assert entry["turn"] == 5
        assert entry["success"] is False
        assert entry["total_hearts"] == [1, 0, 0, 0, 0, 0, 0]
        assert entry["lives"][0]["passed"] is False

    def test_performance_history_logs_success(self):
        """Verify that _do_performance still logs successful performances to performance_history."""
        # Setup: Live cards needs 1 Pink, Member 1 has 1 Pink
        self.game.live_db[101] = LiveCard(
            card_id=101,
            card_no="L2",
            name="Live 2",
            score=1,
            required_hearts=np.array([1, 0, 0, 0, 0, 0, 0]),
            abilities=[],
            img_path="l2.png",
        )
        self.p0.stage[0] = 1
        self.p0.live_zone = [101]

        self.game.phase = Phase.PERFORMANCE_P1
        self.game.current_player = 0
        self.game.turn_number = 7

        self.game._do_performance(0)

        assert self.game.performance_results[0]["success"] is True
        assert len(self.game.performance_history) == 1
        entry = self.game.performance_history[0]
        assert entry["turn"] == 7
        assert entry["success"] is True