Files
hoopscout/tests/test_players_views.py

138 lines
4.3 KiB
Python

from datetime import date
import pytest
from django.urls import reverse
from apps.competitions.models import Competition, Season
from apps.players.models import Nationality, Player, PlayerAlias, Position, Role
from apps.stats.models import PlayerSeason, PlayerSeasonStats
from apps.teams.models import Team
@pytest.mark.django_db
def test_player_search_filters_by_name_and_position(client):
nationality = Nationality.objects.create(name="Italy", iso2_code="IT", iso3_code="ITA")
guard = Position.objects.create(code="PG", name="Point Guard")
center = Position.objects.create(code="C", name="Center")
role = Role.objects.create(code="playmaker", name="Playmaker")
p1 = Player.objects.create(
first_name="Marco",
last_name="Rossi",
full_name="Marco Rossi",
birth_date=date(2001, 1, 10),
nationality=nationality,
nominal_position=guard,
inferred_role=role,
height_cm=190,
weight_kg=82,
)
PlayerAlias.objects.create(player=p1, alias="M. Rossi")
Player.objects.create(
first_name="Luca",
last_name="Bianchi",
full_name="Luca Bianchi",
birth_date=date(1998, 2, 3),
nationality=nationality,
nominal_position=center,
inferred_role=role,
height_cm=208,
weight_kg=105,
)
response = client.get(
reverse("players:index"),
data={"q": "ross", "nominal_position": guard.id},
)
assert response.status_code == 200
players = response.context["players"]
assert len(players) == 1
assert players[0].full_name == "Marco Rossi"
@pytest.mark.django_db
def test_player_search_htmx_returns_partial(client):
nationality = Nationality.objects.create(name="Spain", iso2_code="ES", iso3_code="ESP")
position = Position.objects.create(code="SG", name="Shooting Guard")
role = Role.objects.create(code="shooter", name="Shooter")
season = Season.objects.create(label="2025-2026", start_date=date(2025, 9, 1), end_date=date(2026, 6, 1))
competition = Competition.objects.create(
name="Liga ACB",
slug="liga-acb",
competition_type=Competition.CompetitionType.LEAGUE,
gender=Competition.Gender.MEN,
country=nationality,
)
team = Team.objects.create(name="Madrid", slug="madrid", country=nationality)
player = Player.objects.create(
first_name="Juan",
last_name="Perez",
full_name="Juan Perez",
birth_date=date(2000, 4, 12),
nationality=nationality,
nominal_position=position,
inferred_role=role,
height_cm=196,
weight_kg=90,
)
season_row = PlayerSeason.objects.create(
player=player,
season=season,
team=team,
competition=competition,
games_played=30,
minutes_played=900,
)
PlayerSeasonStats.objects.create(
player_season=season_row,
points=16.2,
rebounds=4.3,
assists=3.1,
steals=1.4,
blocks=0.3,
turnovers=1.8,
fg_pct=49.5,
three_pct=38.2,
ft_pct=84.1,
player_efficiency_rating=18.7,
)
response = client.get(
reverse("players:index"),
HTTP_HX_REQUEST="true",
data={"points_per_game_min": 15},
)
assert response.status_code == 200
assert "Results" in response.content.decode()
assert "Juan Perez" in response.content.decode()
@pytest.mark.django_db
def test_player_detail_page_loads(client):
nationality = Nationality.objects.create(name="France", iso2_code="FR", iso3_code="FRA")
position = Position.objects.create(code="SF", name="Small Forward")
role = Role.objects.create(code="wing", name="Wing")
player = Player.objects.create(
first_name="Paul",
last_name="Martin",
full_name="Paul Martin",
birth_date=date(1999, 8, 14),
nationality=nationality,
nominal_position=position,
inferred_role=role,
height_cm=201,
weight_kg=95,
)
PlayerAlias.objects.create(player=player, alias="P. Martin")
response = client.get(reverse("players:detail", kwargs={"pk": player.pk}))
assert response.status_code == 200
body = response.content.decode()
assert "Paul Martin" in body
assert "P. Martin" in body