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