File size: 2,414 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 53 54 | import unittest
from app.services.player_linking_service import match_players_against_roster
from app.models.stats import PlayerStatRow
class TestPlayerLinking(unittest.TestCase):
def setUp(self):
self.roster = [
{"id": "user1", "name": "Norbert Okidi", "jersey_number": 16},
{"id": "user2", "name": "Michael Jordan", "jersey_number": 23},
{"id": "user3", "name": "LeBron James", "jersey_number": 6},
{"id": "user4", "name": "Stephen Curry", "jersey_number": 30},
]
def test_exact_match(self):
extracted = [PlayerStatRow(name_raw="Norbert Okidi", jersey_number=16)]
result = match_players_against_roster(extracted, self.roster)
self.assertEqual(result[0].linked_player_profile_id, "user1")
self.assertEqual(result[0].link_reason, "Jersey + Fuzzy Name")
self.assertGreater(result[0].link_confidence, 0.9)
def test_fuzzy_name_with_jersey(self):
# Slightly misspelled name, correct jersey
extracted = [PlayerStatRow(name_raw="Norber Okdi", jersey_number=16)]
result = match_players_against_roster(extracted, self.roster)
self.assertEqual(result[0].linked_player_profile_id, "user1")
def test_fuzzy_name_no_jersey(self):
# No jersey provided, but name matches closely enough
extracted = [PlayerStatRow(name_raw="Stephen Curri")]
result = match_players_against_roster(extracted, self.roster)
self.assertEqual(result[0].linked_player_profile_id, "user4")
self.assertEqual(result[0].link_reason, "Fuzzy Name Only")
def test_initials_matching(self):
# M. Jordan -> should match Michael Jordan if score is high enough or jersey matches
# With jersey 23, it should easily match
extracted = [PlayerStatRow(name_raw="M. Jordan", jersey_number=23)]
result = match_players_against_roster(extracted, self.roster)
self.assertEqual(result[0].linked_player_profile_id, "user2")
def test_no_match(self):
extracted = [PlayerStatRow(name_raw="Random Player", jersey_number=99)]
result = match_players_against_roster(extracted, self.roster)
self.assertIsNone(result[0].linked_player_profile_id)
self.assertEqual(result[0].link_reason, "No confident match")
if __name__ == "__main__":
unittest.main()
|