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

from engine.game.data_loader import CardDataLoader
from engine.game.game_state import GameState, Phase
from engine.models.enums import HeartColor


@pytest.fixture(scope="module")
def loader():
    return CardDataLoader("engine/data/cards.json")


@pytest.fixture(scope="module")
def data(loader):
    member_db, live_db, energy_pool = loader.load()
    return member_db, live_db


def test_heart_color_enum():
    """Test HeartColor enum order matches expected."""
    expected = ["PINK", "RED", "YELLOW", "GREEN", "BLUE", "PURPLE", "ANY", "RAINBOW"]
    actual = [c.name for c in HeartColor]

    # First 6 should match exactly
    assert actual[:6] == expected[:6]


def test_member_hearts_data(data):
    """Test that member hearts data is correctly loaded."""
    member_db, _ = data
    members_with_hearts = 0
    # Check first 50 members
    for _cid, m in list(member_db.items())[:50]:
        if hasattr(m, "hearts") and np.sum(m.hearts) > 0:
            members_with_hearts += 1

    assert members_with_hearts > 10, "Should have loaded members with hearts"


def test_live_requirements_data(data):
    """Test that live card requirements are correctly loaded."""
    _, live_db = data
    lives_with_reqs = 0
    for _cid, l in list(live_db.items())[:50]:
        if hasattr(l, "required_hearts") and np.sum(l.required_hearts) > 0:
            lives_with_reqs += 1

    assert lives_with_reqs > 5, "Should have loaded lives with requirements"


def test_action_menu_text():
    """Test that action descriptions are generated."""
    # Setup simple state
    gs = GameState()
    gs.phase = Phase.MAIN

    legal_mask = gs.get_legal_actions()
    legal_ids = [i for i, v in enumerate(legal_mask) if v]

    # In main phase without cards, passed might be legal (action 0?) depending on implementation
    # Just asserting it doesn't crash
    assert len(legal_ids) >= 0