from datetime import date import pytest from django.contrib.auth.models import User from django.urls import reverse from apps.players.models import Nationality, Player, Position, Role from apps.scouting.models import FavoritePlayer, SavedSearch @pytest.mark.django_db def test_scouting_index_requires_login(client): response = client.get(reverse("scouting:index")) assert response.status_code == 302 assert reverse("users:login") in response.url @pytest.mark.django_db def test_create_saved_search_from_filters(client): user = User.objects.create_user(username="scout", 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") response = client.post( reverse("scouting:saved_search_create"), data={ "name": "Italian guards", "is_public": "on", "q": "marco", "nominal_position": str(position.id), "nationality": str(nationality.id), "age_max": "24", "sort": "ppg_desc", }, ) assert response.status_code == 302 saved = SavedSearch.objects.get(user=user, name="Italian guards") assert saved.filters["q"] == "marco" assert saved.filters["nominal_position"] == position.id assert saved.filters["nationality"] == nationality.id @pytest.mark.django_db def test_saved_search_run_redirects_to_players(client): user = User.objects.create_user(username="scout2", password="pass12345") client.force_login(user) saved = SavedSearch.objects.create( user=user, name="Run me", filters={"q": "rossi", "sort": "name_asc"}, ) response = client.get(reverse("scouting:saved_search_run", kwargs={"pk": saved.pk})) assert response.status_code == 302 assert response.url.startswith(reverse("players:index")) assert "q=rossi" in response.url @pytest.mark.django_db def test_favorite_toggle_adds_and_removes(client): user = User.objects.create_user(username="scout3", password="pass12345") client.force_login(user) 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( first_name="Juan", last_name="Ramos", full_name="Juan Ramos", birth_date=date(2000, 1, 1), nationality=nationality, nominal_position=position, inferred_role=role, ) add_resp = client.post(reverse("scouting:favorite_toggle", kwargs={"player_id": player.id})) assert add_resp.status_code == 302 assert FavoritePlayer.objects.filter(user=user, player=player).exists() remove_resp = client.post(reverse("scouting:favorite_toggle", kwargs={"player_id": player.id})) assert remove_resp.status_code == 302 assert not FavoritePlayer.objects.filter(user=user, player=player).exists()