feat(v2): implement scoped player search and detail flows
This commit is contained in:
@ -83,8 +83,6 @@ def test_players_api_search_consistent_with_ui_filters(client):
|
||||
nationality=nationality,
|
||||
nominal_position=position,
|
||||
inferred_role=role,
|
||||
origin_competition=competition,
|
||||
origin_team=team,
|
||||
)
|
||||
ps = PlayerSeason.objects.create(
|
||||
player=matching,
|
||||
@ -113,7 +111,7 @@ def test_players_api_search_consistent_with_ui_filters(client):
|
||||
)
|
||||
|
||||
params = {
|
||||
"origin_competition": competition.id,
|
||||
"competition": competition.id,
|
||||
"nominal_position": position.id,
|
||||
"points_per_game_min": "10",
|
||||
"sort": "ppg_desc",
|
||||
|
||||
@ -110,8 +110,6 @@ def test_player_search_combined_filters_sorting_and_pagination(client):
|
||||
nationality=nationality,
|
||||
nominal_position=position,
|
||||
inferred_role=role,
|
||||
origin_competition=competition,
|
||||
origin_team=team,
|
||||
)
|
||||
player_season = PlayerSeason.objects.create(
|
||||
player=player,
|
||||
@ -135,7 +133,7 @@ def test_player_search_combined_filters_sorting_and_pagination(client):
|
||||
response = client.get(
|
||||
reverse("players:index"),
|
||||
data={
|
||||
"origin_competition": competition.id,
|
||||
"competition": competition.id,
|
||||
"nominal_position": position.id,
|
||||
"sort": "ppg_desc",
|
||||
"page_size": 20,
|
||||
@ -152,7 +150,7 @@ def test_player_search_combined_filters_sorting_and_pagination(client):
|
||||
page2 = client.get(
|
||||
reverse("players:index"),
|
||||
data={
|
||||
"origin_competition": competition.id,
|
||||
"competition": competition.id,
|
||||
"nominal_position": position.id,
|
||||
"sort": "ppg_desc",
|
||||
"page_size": 20,
|
||||
|
||||
@ -4,7 +4,7 @@ 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.players.models import Nationality, Player, Position, Role
|
||||
from apps.stats.models import PlayerSeason, PlayerSeasonStats
|
||||
from apps.teams.models import Team
|
||||
|
||||
@ -127,14 +127,13 @@ def test_player_detail_page_loads(client):
|
||||
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
|
||||
assert "Summary" in body
|
||||
assert "Season-by-Season Stats" in body
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@ -242,3 +241,44 @@ def test_player_search_results_render_best_eligible_metric_labels(client):
|
||||
assert "Best Eligible PPG" in body
|
||||
assert "Best Eligible MPG" in body
|
||||
assert "best eligible values per player" in body.lower()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_player_search_results_render_dash_for_missing_eligible_metrics(client):
|
||||
nationality = Nationality.objects.create(name="Norway", iso2_code="NO", iso3_code="NOR")
|
||||
position = Position.objects.create(code="PF", name="Power Forward")
|
||||
role = Role.objects.create(code="big", name="Big")
|
||||
season = Season.objects.create(label="2025-2026", start_date=date(2025, 9, 1), end_date=date(2026, 6, 30))
|
||||
competition = Competition.objects.create(
|
||||
name="BLNO",
|
||||
slug="blno",
|
||||
competition_type=Competition.CompetitionType.LEAGUE,
|
||||
gender=Competition.Gender.MEN,
|
||||
country=nationality,
|
||||
)
|
||||
team = Team.objects.create(name="Oslo", slug="oslo", country=nationality)
|
||||
|
||||
player = Player.objects.create(
|
||||
first_name="Ole",
|
||||
last_name="NoStats",
|
||||
full_name="Ole NoStats",
|
||||
birth_date=date(2001, 1, 1),
|
||||
nationality=nationality,
|
||||
nominal_position=position,
|
||||
inferred_role=role,
|
||||
)
|
||||
PlayerSeason.objects.create(
|
||||
player=player,
|
||||
season=season,
|
||||
team=team,
|
||||
competition=competition,
|
||||
games_played=0,
|
||||
minutes_played=0,
|
||||
)
|
||||
|
||||
response = client.get(reverse("players:index"), data={"season": season.id})
|
||||
assert response.status_code == 200
|
||||
body = response.content.decode()
|
||||
assert "Ole NoStats" in body
|
||||
# Missing eligible values are rendered as '-' rather than misleading zeros.
|
||||
assert body.count(">-") > 0
|
||||
|
||||
Reference in New Issue
Block a user