Spaces:
Running
Running
| import numpy as np | |
| import pytest | |
| from engine.game.enums import Phase | |
| from engine.game.game_state import GameState, LiveCard, MemberCard | |
| class TestPerformanceHistory: | |
| 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 | |