from datetime import date import pytest from django.contrib.auth.models import User from django.urls import reverse from apps.ingestion.models import IngestionRun from apps.ingestion.services.sync import run_sync_job from apps.players.models import Nationality, Player, Position, Role from apps.scouting.models import SavedSearch @pytest.mark.django_db def test_saved_search_run_filters_player_results(client): user = User.objects.create_user(username="integration", password="pass12345") client.force_login(user) 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, ) Player.objects.create( first_name="Luca", last_name="Bianchi", full_name="Luca Bianchi", birth_date=date(2001, 1, 1), nationality=nationality, nominal_position=position, inferred_role=role, ) saved = SavedSearch.objects.create( user=user, name="Only Marco", filters={"q": "Marco", "sort": "name_asc"}, ) response = client.get(reverse("scouting:saved_search_run", kwargs={"pk": saved.pk}), follow=True) assert response.status_code == 200 assert "Marco Rossi" in response.content.decode() assert "Luca Bianchi" not in response.content.decode() @pytest.mark.django_db def test_ingestion_output_is_searchable_in_ui_and_api(settings, client): settings.PROVIDER_DEFAULT_NAMESPACE = "mvp_demo" run = run_sync_job(provider_namespace="mvp_demo", job_type=IngestionRun.JobType.FULL_SYNC) assert run.status == IngestionRun.RunStatus.SUCCESS player = Player.objects.filter(origin_competition__isnull=False).order_by("id").first() assert player is not None assert player.origin_competition_id is not None params = {"origin_competition": player.origin_competition_id} ui_response = client.get(reverse("players:index"), data=params) api_response = client.get(reverse("api:players"), data=params) assert ui_response.status_code == 200 assert api_response.status_code == 200 ui_ids = {item.id for item in ui_response.context["players"]} api_ids = {item["id"] for item in api_response.json()["results"]} assert player.id in ui_ids assert player.id in api_ids