import pytest from engine.game.enums import Phase from engine.game.game_state import GameState from engine.game.serializer import serialize_state from engine.models.card import LiveCard, MemberCard def test_performance_results_serialization(): gs = GameState() gs.member_db = {} gs.live_db = {} # Setup players with a live and a member p0 = gs.players[0] p1 = gs.players[1] # Add dummy data to DB card_id = 1001 live_id = 9001 member = MemberCard( card_id=card_id, card_no="TEST-001", name="Test Singer", cost=1, blades=1, hearts=[1, 0, 0, 0, 0, 0, 0], blade_hearts=[0, 0, 0, 0, 0, 0, 0], abilities=[], ) live = LiveCard( card_id=live_id, name="Test Live", card_no="LIVE-001", score=1, required_hearts=[1, 0, 0, 0, 0, 0, 0], abilities=[], ) GameState.member_db[card_id] = member GameState.live_db[live_id] = live gs.member_db = GameState.member_db gs.live_db = GameState.live_db # Setup P0 stage and live p0.stage[0] = card_id p0.live_zone = [live_id] # Run performance for P0 gs.phase = Phase.PERFORMANCE_P1 gs._do_performance(0) # Verify performance_results for P0 exists assert 0 in gs.performance_results assert gs.performance_results[0]["success"] is True # Now simulate moving to LIVE_RESULT gs.phase = Phase.LIVE_RESULT gs._do_live_result() # In LIVE_RESULT, turn has advanced (Phase 1), current player is first_player # After _do_live_result, it should have copied into last_performance_results assert hasattr(gs, "last_performance_results") assert gs.last_performance_results is not None assert 0 in gs.last_performance_results # Serialize state serialized = serialize_state(gs) # Check if last_performance_results is in serialized output assert "last_performance_results" in serialized assert "0" in serialized["last_performance_results"] or 0 in serialized["last_performance_results"] # Check content perf_0 = ( serialized["last_performance_results"]["0"] if "0" in serialized["last_performance_results"] else serialized["last_performance_results"][0] ) assert perf_0["success"] is True assert len(perf_0["member_contributions"]) == 1 assert perf_0["member_contributions"][0]["name"] == "Test Singer" if __name__ == "__main__": pytest.main([__file__])