LovecaSim / engine /tests /logic /test_performance_history.py
trioskosmos's picture
Upload folder using huggingface_hub
bb3fbf9 verified
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