fix(ingestion): stop fabricating missing player positions

This commit is contained in:
bisco
2026-04-11 00:54:19 +02:00
parent 677b5af40d
commit e6081428ae
5 changed files with 63 additions and 7 deletions

View File

@ -66,6 +66,14 @@ class ScoutingSearchViewsTests(TestCase):
cls.player_wing.roles.add(cls.role_3d)
cls.player_wing.specialties.add(cls.specialty_offball)
cls.player_unknown_position = Player.objects.create(
full_name="No Position Prospect",
birth_date=date(2001, 3, 3),
position=None,
height_cm=Decimal("180.00"),
weight_kg=Decimal("88.00"),
)
cls.ctx_pg_good = PlayerSeason.objects.create(
player=cls.player_pg,
season=cls.season_2025,
@ -144,6 +152,24 @@ class ScoutingSearchViewsTests(TestCase):
self.assertContains(response, self.player_pg.full_name)
self.assertNotContains(response, self.player_wing.full_name)
def test_players_with_null_position_are_searchable_by_other_fields(self):
response = self.client.get(
reverse("scouting:player_list"),
{"name": "No Position"},
)
self.assertEqual(response.status_code, 200)
self.assertContains(response, self.player_unknown_position.full_name)
def test_position_filter_excludes_players_with_null_position(self):
response = self.client.get(
reverse("scouting:player_list"),
{"position": "SG"},
)
self.assertEqual(response.status_code, 200)
self.assertNotContains(response, self.player_unknown_position.full_name)
def test_filter_by_wingspan_thresholds(self):
response = self.client.get(
reverse("scouting:player_list"),
@ -550,6 +576,23 @@ class FirstPublicEuropeanImporterTests(TestCase):
self.assertTrue(PlayerSeason.objects.filter(player__full_name="Muhammad-Ali Abdur-Rahkman").exists())
self.assertTrue(PlayerSeasonStats.objects.filter(player_season__player__full_name="Muhammad-Ali Abdur-Rahkman").exists())
def test_importer_does_not_assign_fake_position_when_source_position_is_missing(self):
self.run_import()
player = Player.objects.get(full_name="Muhammad-Ali Abdur-Rahkman")
self.assertIsNone(player.position)
def test_importer_preserves_existing_real_position_when_source_position_is_missing(self):
self.run_import()
player = Player.objects.get(full_name="Muhammad-Ali Abdur-Rahkman")
player.position = Player.Position.PG
player.save(update_fields=["position", "updated_at"])
self.run_import()
player.refresh_from_db()
self.assertEqual(player.position, Player.Position.PG)
def test_importer_is_idempotent_for_same_input(self):
self.run_import()
first_counts = {