Files
hoopscout/tests/test_scouting_views.py

131 lines
4.4 KiB
Python

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()
@pytest.mark.django_db
def test_favorite_toggle_htmx_returns_partial_button(client):
user = User.objects.create_user(username="scout4", password="pass12345")
client.force_login(user)
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="Pierre",
last_name="Durand",
full_name="Pierre Durand",
birth_date=date(2001, 3, 3),
nationality=nationality,
nominal_position=position,
inferred_role=role,
)
response = client.post(
reverse("scouting:favorite_toggle", kwargs={"player_id": player.id}),
HTTP_HX_REQUEST="true",
data={"next": reverse("players:index")},
)
assert response.status_code == 200
assert "Remove favorite" in response.content.decode()
@pytest.mark.django_db
def test_save_search_htmx_feedback(client):
user = User.objects.create_user(username="scout5", password="pass12345")
client.force_login(user)
response = client.post(
reverse("scouting:saved_search_create"),
HTTP_HX_REQUEST="true",
data={"name": "HTMX Search", "q": "john", "sort": "name_asc"},
)
assert response.status_code == 200
assert "created" in response.content.decode().lower()