fix(v2-import): namespace source identity for snapshot upserts

This commit is contained in:
Alfredo Di Stasio
2026-03-20 14:17:56 +01:00
parent 20d3ee7dae
commit ad85e40688
13 changed files with 272 additions and 60 deletions

View File

@ -8,59 +8,31 @@ from apps.competitions.models import Competition, Season
from apps.ingestion.models import ImportFile, ImportRun
from apps.players.models import Nationality, Player, Position, Role
from apps.scouting.models import FavoritePlayer, SavedSearch
from apps.stats.models import PlayerSeason
from apps.teams.models import Team
@pytest.mark.django_db
def test_player_unique_full_name_birth_date_constraint():
nationality = Nationality.objects.create(name="Italy", iso2_code="IT", iso3_code="ITA")
position = Position.objects.create(code="PG", name="Point Guard")
role = Role.objects.create(code="playmaker", name="Playmaker")
Player.objects.create(
first_name="Marco",
last_name="Rossi",
full_name="Marco Rossi",
birth_date=date(2001, 1, 1),
nationality=nationality,
nominal_position=position,
inferred_role=role,
source_uid="player-src-1",
)
with pytest.raises(IntegrityError):
Player.objects.create(
first_name="Marco",
last_name="Rossi",
full_name="Marco Rossi",
birth_date=date(2001, 1, 1),
nationality=nationality,
nominal_position=position,
inferred_role=role,
)
@pytest.mark.django_db
def test_source_uid_uniqueness_on_core_entities():
season = Season.objects.create(
def test_source_uid_uniqueness_is_scoped_by_source_name():
Season.objects.create(
source_uid="season-2024",
label="2024-2025",
start_date=date(2024, 10, 1),
end_date=date(2025, 6, 30),
)
competition = Competition.objects.create(
Competition.objects.create(
source_name="lba",
source_uid="comp-001",
name="Serie A",
slug="serie-a",
competition_type=Competition.CompetitionType.LEAGUE,
)
team = Team.objects.create(source_uid="team-001", name="Virtus Bologna", slug="virtus-bologna")
Team.objects.create(source_name="lba", source_uid="team-001", name="Virtus Bologna", slug="virtus-bologna")
nationality = Nationality.objects.create(name="Spain", iso2_code="ES", iso3_code="ESP")
position = Position.objects.create(code="SF", name="Small Forward")
role = Role.objects.create(code="wing", name="Wing")
player = Player.objects.create(
Player.objects.create(
source_name="lba",
source_uid="player-001",
first_name="Juan",
last_name="Perez",
@ -71,16 +43,32 @@ def test_source_uid_uniqueness_on_core_entities():
inferred_role=role,
)
PlayerSeason.objects.create(
source_uid="ps-001",
player=player,
season=season,
team=team,
competition=competition,
Competition.objects.create(
source_name="bcl",
source_uid="comp-001",
name="BCL",
slug="bcl",
competition_type=Competition.CompetitionType.INTERNATIONAL,
)
Team.objects.create(source_name="bcl", source_uid="team-001", name="AEK", slug="aek")
Player.objects.create(
source_name="bcl",
source_uid="player-001",
first_name="Juan",
last_name="Perez",
full_name="Juan Perez",
birth_date=date(2000, 5, 1),
nationality=nationality,
nominal_position=position,
inferred_role=role,
)
assert Competition.objects.filter(source_uid="comp-001").count() == 2
assert Team.objects.filter(source_uid="team-001").count() == 2
assert Player.objects.filter(source_uid="player-001").count() == 2
with pytest.raises(IntegrityError):
Team.objects.create(source_uid="team-001", name="Another Team", slug="another-team")
Team.objects.create(source_name="lba", source_uid="team-001", name="Another Team", slug="another-team")
@pytest.mark.django_db