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()