File size: 1,921 Bytes
c6abe34 | 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 | import unittest
from app.services.stats_utils import parse_xy_field, validate_and_compute_totals
from app.models.stats import PlayerStatRow, TeamTotals
class TestStatsUtils(unittest.TestCase):
def test_parse_xy_field_valid(self):
self.assertEqual(parse_xy_field("5-10"), (5, 10))
self.assertEqual(parse_xy_field("5/10"), (5, 10))
self.assertEqual(parse_xy_field("0-0"), (0, 0))
self.assertEqual(parse_xy_field(" 12 - 20 "), (12, 20))
def test_parse_xy_field_invalid(self):
self.assertEqual(parse_xy_field("invalid"), (0, 0))
self.assertEqual(parse_xy_field(None), (0, 0))
self.assertEqual(parse_xy_field("5"), (0, 0))
def test_validate_and_compute_totals_no_existing(self):
players = [
PlayerStatRow(name_raw="P1", pts=10, reb=5, ast=2),
PlayerStatRow(name_raw="P2", pts=15, reb=10, ast=5)
]
# Test computing missing totals
totals = validate_and_compute_totals(players)
self.assertEqual(totals.pts, 25)
self.assertEqual(totals.reb, 15)
self.assertEqual(totals.ast, 7)
def test_validate_and_compute_totals_with_existing(self):
players = [
PlayerStatRow(name_raw="P1", pts=10, reb=5, ast=2),
PlayerStatRow(name_raw="P2", pts=15, reb=10, ast=5)
]
existing = TeamTotals(pts=25, reb=15, ast=7)
# Test passing existing totals
totals = validate_and_compute_totals(players, existing)
self.assertEqual(totals.pts, 25)
def test_rebounds_auto_compute(self):
# reb = 0 but off and def exist
players = [
PlayerStatRow(name_raw="P1", off=2, def_reb=3, reb=0)
]
totals = validate_and_compute_totals(players)
self.assertEqual(players[0].reb, 5)
self.assertEqual(totals.reb, 5)
if __name__ == "__main__":
unittest.main()
|