Add v2 relational domain foundations with import run/file models
This commit is contained in:
@ -4,10 +4,12 @@ import pytest
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import IntegrityError
|
||||
|
||||
from apps.competitions.models import Competition
|
||||
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.providers.models import ExternalMapping
|
||||
from apps.scouting.models import FavoritePlayer, SavedSearch
|
||||
from apps.stats.models import PlayerSeason
|
||||
from apps.teams.models import Team
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@ -24,6 +26,7 @@ def test_player_unique_full_name_birth_date_constraint():
|
||||
nationality=nationality,
|
||||
nominal_position=position,
|
||||
inferred_role=role,
|
||||
source_uid="player-src-1",
|
||||
)
|
||||
|
||||
with pytest.raises(IntegrityError):
|
||||
@ -38,6 +41,48 @@ def test_player_unique_full_name_birth_date_constraint():
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_source_uid_uniqueness_on_core_entities():
|
||||
season = 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(
|
||||
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")
|
||||
|
||||
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(
|
||||
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,
|
||||
)
|
||||
|
||||
PlayerSeason.objects.create(
|
||||
source_uid="ps-001",
|
||||
player=player,
|
||||
season=season,
|
||||
team=team,
|
||||
competition=competition,
|
||||
)
|
||||
|
||||
with pytest.raises(IntegrityError):
|
||||
Team.objects.create(source_uid="team-001", name="Another Team", slug="another-team")
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_saved_search_unique_name_per_user_constraint():
|
||||
user = User.objects.create_user(username="u1", password="pass12345")
|
||||
@ -50,14 +95,14 @@ def test_saved_search_unique_name_per_user_constraint():
|
||||
@pytest.mark.django_db
|
||||
def test_favorite_unique_player_per_user_constraint():
|
||||
user = User.objects.create_user(username="u2", password="pass12345")
|
||||
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")
|
||||
nationality = Nationality.objects.create(name="France", iso2_code="FR", iso3_code="FRA")
|
||||
position = Position.objects.create(code="PF", name="Power Forward")
|
||||
role = Role.objects.create(code="big", name="Big")
|
||||
player = Player.objects.create(
|
||||
first_name="Juan",
|
||||
last_name="Perez",
|
||||
full_name="Juan Perez",
|
||||
birth_date=date(2000, 5, 1),
|
||||
first_name="Pierre",
|
||||
last_name="Durand",
|
||||
full_name="Pierre Durand",
|
||||
birth_date=date(2001, 3, 3),
|
||||
nationality=nationality,
|
||||
nominal_position=position,
|
||||
inferred_role=role,
|
||||
@ -69,24 +114,9 @@ def test_favorite_unique_player_per_user_constraint():
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_external_mapping_unique_provider_external_id_constraint():
|
||||
competition = Competition.objects.create(
|
||||
name="Liga ACB",
|
||||
slug="liga-acb",
|
||||
competition_type=Competition.CompetitionType.LEAGUE,
|
||||
gender=Competition.Gender.MEN,
|
||||
level=1,
|
||||
)
|
||||
|
||||
ExternalMapping.objects.create(
|
||||
provider_namespace="mvp_demo",
|
||||
external_id="comp-001",
|
||||
content_object=competition,
|
||||
)
|
||||
def test_import_file_unique_path_within_import_run():
|
||||
run = ImportRun.objects.create(source="daily_snapshot")
|
||||
ImportFile.objects.create(import_run=run, relative_path="players/2026-03-13.json")
|
||||
|
||||
with pytest.raises(IntegrityError):
|
||||
ExternalMapping.objects.create(
|
||||
provider_namespace="mvp_demo",
|
||||
external_id="comp-001",
|
||||
content_object=competition,
|
||||
)
|
||||
ImportFile.objects.create(import_run=run, relative_path="players/2026-03-13.json")
|
||||
|
||||
Reference in New Issue
Block a user