Spaces:
Sleeping
Sleeping
File size: 4,535 Bytes
6424951 | 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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | """Tests for Pydantic models."""
import pytest
from src.config import DIFFICULTY_PRESETS
from src.models.player import DifficultySettings, PlayerStats
class TestPlayerStats:
"""Tests for PlayerStats model."""
def test_from_db_row(self, sample_player_data: list) -> None:
"""Test creating PlayerStats from database row tuple."""
row = sample_player_data[0] # LeBron James data
player = PlayerStats.from_db_row(row)
assert player.full_name == "LeBron James"
assert player.pts == 39223
assert player.ast == 10141
assert player.is_active is True
def test_validates_negative_stats(self) -> None:
"""Test that negative stats are rejected."""
with pytest.raises(ValueError):
PlayerStats(
full_name="Test Player",
ast=-1, # Invalid
blk=0,
dreb=0,
fg3a=0,
fg3m=0,
fg3_pct=0.0,
fga=0,
fgm=0,
fg_pct=0.0,
fta=0,
ftm=0,
ft_pct=0.0,
gp=0,
gs=0,
min=0,
oreb=0,
pf=0,
pts=0,
reb=0,
stl=0,
tov=0,
first_name="Test",
last_name="Player",
full_name_lower="test player",
first_name_lower="test",
last_name_lower="player",
is_active=True,
)
def test_validates_percentage_range(self) -> None:
"""Test that percentages must be 0-1."""
with pytest.raises(ValueError):
PlayerStats(
full_name="Test Player",
ast=0,
blk=0,
dreb=0,
fg3a=0,
fg3m=0,
fg3_pct=1.5, # Invalid - over 1.0
fga=0,
fgm=0,
fg_pct=0.0,
fta=0,
ftm=0,
ft_pct=0.0,
gp=0,
gs=0,
min=0,
oreb=0,
pf=0,
pts=0,
reb=0,
stl=0,
tov=0,
first_name="Test",
last_name="Player",
full_name_lower="test player",
first_name_lower="test",
last_name_lower="player",
is_active=True,
)
class TestDifficultySettings:
"""Tests for DifficultySettings model."""
@pytest.mark.parametrize("preset_name", list(DIFFICULTY_PRESETS.keys()))
def test_from_preset_valid(self, preset_name: str) -> None:
"""Test creating DifficultySettings from valid presets."""
settings = DifficultySettings.from_preset(preset_name)
assert settings.name == preset_name
expected = DIFFICULTY_PRESETS[preset_name]
assert settings.pts_threshold == expected[0]
assert settings.reb_threshold == expected[1]
assert settings.ast_threshold == expected[2]
assert settings.stl_threshold == expected[3]
def test_from_preset_invalid(self) -> None:
"""Test that invalid preset name raises ValueError."""
with pytest.raises(ValueError) as exc_info:
DifficultySettings.from_preset("Invalid Preset")
assert "Unknown difficulty preset" in str(exc_info.value)
def test_as_tuple(self) -> None:
"""Test converting settings to tuple."""
settings = DifficultySettings.from_preset("Regular")
result = settings.as_tuple()
assert result == DIFFICULTY_PRESETS["Regular"]
assert isinstance(result, tuple)
assert len(result) == 4
def test_regular_preset_values(self) -> None:
"""Test Regular preset has expected values."""
settings = DifficultySettings.from_preset("Regular")
assert settings.pts_threshold == 850
assert settings.reb_threshold == 400
assert settings.ast_threshold == 200
assert settings.stl_threshold == 60
def test_dream_team_preset_values(self) -> None:
"""Test Dream Team preset has highest values."""
settings = DifficultySettings.from_preset("Dream Team")
assert settings.pts_threshold == 1450
assert settings.reb_threshold == 700
assert settings.ast_threshold == 500
assert settings.stl_threshold == 120
|