feat: add shared scouting notes mvp

This commit is contained in:
bisco
2026-04-07 17:41:53 +02:00
parent 4f869c1c02
commit 4651746427
9 changed files with 176 additions and 5 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, FavoritePlayer, Player, PlayerSeason, PlayerSeasonStats, Role, Season, Specialty, Team
from .models import Competition, FavoritePlayer, Player, PlayerNote, PlayerSeason, PlayerSeasonStats, Role, Season, Specialty, Team
class ScoutingSearchViewsTests(TestCase):
@ -475,3 +475,68 @@ class FavoritePlayerViewsTests(TestCase):
self.assertEqual(search_response.status_code, 200)
self.assertEqual(detail_response.status_code, 200)
class PlayerNoteViewsTests(TestCase):
@classmethod
def setUpTestData(cls):
cls.player = Player.objects.create(
full_name="Notes Prospect",
birth_date=date(2001, 8, 8),
position="PF",
height_cm=Decimal("205.00"),
weight_kg=Decimal("97.00"),
)
def test_adding_note_to_player(self):
response = self.client.post(
reverse("scouting:add_note", args=[self.player.id]),
{
"body": "Shows good weak-side help instincts.",
"next": reverse("scouting:player_detail", args=[self.player.id]),
},
)
self.assertRedirects(response, reverse("scouting:player_detail", args=[self.player.id]))
note = PlayerNote.objects.get(player=self.player)
self.assertEqual(note.body, "Shows good weak-side help instincts.")
def test_deleting_note(self):
note = PlayerNote.objects.create(player=self.player, body="Needs tighter handle under pressure.")
response = self.client.post(
reverse("scouting:delete_note", args=[self.player.id, note.id]),
{"next": reverse("scouting:player_detail", args=[self.player.id])},
)
self.assertRedirects(response, reverse("scouting:player_detail", args=[self.player.id]))
self.assertFalse(PlayerNote.objects.filter(pk=note.id).exists())
def test_player_detail_page_shows_notes(self):
PlayerNote.objects.create(player=self.player, body="Reliable closeout discipline.")
response = self.client.get(reverse("scouting:player_detail", args=[self.player.id]))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Scouting Notes")
self.assertContains(response, "Reliable closeout discipline.")
def test_existing_search_shortlist_and_detail_flows_still_load(self):
FavoritePlayer.objects.create(player=self.player)
search_response = self.client.get(reverse("scouting:player_list"))
favorites_response = self.client.get(reverse("scouting:favorites_list"))
detail_response = self.client.get(reverse("scouting:player_detail", args=[self.player.id]))
self.assertEqual(search_response.status_code, 200)
self.assertEqual(favorites_response.status_code, 200)
self.assertEqual(detail_response.status_code, 200)
def test_favorites_page_shows_note_count(self):
FavoritePlayer.objects.create(player=self.player)
PlayerNote.objects.create(player=self.player, body="Can defend up a position in small lineups.")
PlayerNote.objects.create(player=self.player, body="Late-clock decision making still inconsistent.")
response = self.client.get(reverse("scouting:favorites_list"))
self.assertContains(response, "Notes: 2")