feat: add scouting shortlist mvp

This commit is contained in:
bisco
2026-04-07 17:29:55 +02:00
parent d1b5499a63
commit 99820419c4
10 changed files with 273 additions and 125 deletions

View File

@ -5,7 +5,7 @@ from django.core.management import call_command
from django.test import TestCase
from django.urls import reverse
from .models import Competition, Player, PlayerSeason, PlayerSeasonStats, Role, Season, Specialty, Team
from .models import Competition, FavoritePlayer, Player, PlayerSeason, PlayerSeasonStats, Role, Season, Specialty, Team
class ScoutingSearchViewsTests(TestCase):
@ -411,3 +411,67 @@ class SeedScoutingDataCommandTests(TestCase):
self.assertEqual(PlayerSeasonStats.objects.count(), first_counts["stats"])
self.assertEqual(Role.objects.count(), first_counts["roles"])
self.assertEqual(Specialty.objects.count(), first_counts["specialties"])
class FavoritePlayerViewsTests(TestCase):
@classmethod
def setUpTestData(cls):
cls.player = Player.objects.create(
full_name="Favorite Prospect",
birth_date=date(2001, 4, 4),
position="PG",
height_cm=Decimal("187.00"),
weight_kg=Decimal("81.00"),
)
cls.other_player = Player.objects.create(
full_name="Other Prospect",
birth_date=date(2000, 6, 6),
position="SF",
height_cm=Decimal("202.00"),
weight_kg=Decimal("94.00"),
)
def test_adding_player_to_favorites(self):
response = self.client.post(
reverse("scouting:add_favorite", args=[self.player.id]),
{"next": reverse("scouting:player_detail", args=[self.player.id])},
)
self.assertRedirects(response, reverse("scouting:player_detail", args=[self.player.id]))
self.assertTrue(FavoritePlayer.objects.filter(player=self.player).exists())
def test_removing_player_from_favorites(self):
FavoritePlayer.objects.create(player=self.player)
response = self.client.post(
reverse("scouting:remove_favorite", args=[self.player.id]),
{"next": reverse("scouting:favorites_list")},
)
self.assertRedirects(response, reverse("scouting:favorites_list"))
self.assertFalse(FavoritePlayer.objects.filter(player=self.player).exists())
def test_favorites_list_page_loads(self):
FavoritePlayer.objects.create(player=self.player)
response = self.client.get(reverse("scouting:favorites_list"))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Favorite Prospect")
def test_favorite_state_is_visible_on_detail_and_search_pages(self):
FavoritePlayer.objects.create(player=self.player)
detail_response = self.client.get(reverse("scouting:player_detail", args=[self.player.id]))
list_response = self.client.get(reverse("scouting:player_list"))
self.assertContains(detail_response, "On the shared development shortlist.")
self.assertContains(detail_response, "Remove from shortlist")
self.assertContains(list_response, "Shortlisted")
def test_search_and_detail_pages_still_load_after_favorites_integration(self):
search_response = self.client.get(reverse("scouting:player_list"))
detail_response = self.client.get(reverse("scouting:player_detail", args=[self.player.id]))
self.assertEqual(search_response.status_code, 200)
self.assertEqual(detail_response.status_code, 200)