feat(v2): streamline saved searches and favorites flows

This commit is contained in:
Alfredo Di Stasio
2026-03-13 14:40:38 +01:00
parent 0ed4fc57b8
commit 20d3ee7dae
6 changed files with 198 additions and 4 deletions

View File

@ -15,6 +15,20 @@ def test_scouting_index_requires_login(client):
assert reverse("users:login") in response.url
@pytest.mark.django_db
def test_saved_search_list_requires_login(client):
response = client.get(reverse("scouting:saved_search_list"))
assert response.status_code == 302
assert reverse("users:login") in response.url
@pytest.mark.django_db
def test_watchlist_requires_login(client):
response = client.get(reverse("scouting:watchlist"))
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")
@ -60,6 +74,60 @@ def test_saved_search_run_redirects_to_players(client):
assert "q=rossi" in response.url
@pytest.mark.django_db
def test_saved_search_update_renames_and_updates_filters(client):
user = User.objects.create_user(username="scout-update", password="pass12345")
client.force_login(user)
nationality = Nationality.objects.create(name="Germany", iso2_code="DE", iso3_code="DEU")
saved = SavedSearch.objects.create(
user=user,
name="Old Name",
filters={"q": "old", "sort": "name_asc"},
is_public=False,
)
response = client.post(
reverse("scouting:saved_search_edit", kwargs={"pk": saved.pk}),
data={
"name": "Updated Name",
"is_public": "on",
"filters_json": '{"q": "new", "nationality": %d, "sort": "ppg_desc"}' % nationality.id,
},
)
assert response.status_code == 302
saved.refresh_from_db()
assert saved.name == "Updated Name"
assert saved.is_public is True
assert saved.filters["q"] == "new"
assert saved.filters["nationality"] == nationality.id
assert saved.filters["sort"] == "ppg_desc"
@pytest.mark.django_db
def test_saved_search_delete_removes_entry(client):
user = User.objects.create_user(username="scout-delete", password="pass12345")
client.force_login(user)
saved = SavedSearch.objects.create(user=user, name="Delete Me", filters={"q": "x"})
response = client.post(reverse("scouting:saved_search_delete", kwargs={"pk": saved.pk}))
assert response.status_code == 302
assert not SavedSearch.objects.filter(pk=saved.pk).exists()
@pytest.mark.django_db
def test_saved_search_delete_htmx_renders_table(client):
user = User.objects.create_user(username="scout-delete-htmx", password="pass12345")
client.force_login(user)
saved = SavedSearch.objects.create(user=user, name="Delete HTMX", filters={"q": "x"})
response = client.post(
reverse("scouting:saved_search_delete", kwargs={"pk": saved.pk}),
HTTP_HX_REQUEST="true",
)
assert response.status_code == 200
body = response.content.decode().lower()
assert "no saved searches yet" in body
@pytest.mark.django_db
def test_favorite_toggle_adds_and_removes(client):
user = User.objects.create_user(username="scout3", password="pass12345")
@ -128,3 +196,26 @@ def test_save_search_htmx_feedback(client):
assert response.status_code == 200
assert "created" in response.content.decode().lower()
@pytest.mark.django_db
def test_watchlist_page_renders_favorite_player(client):
user = User.objects.create_user(username="watch-user", password="pass12345")
client.force_login(user)
nationality = Nationality.objects.create(name="Poland", iso2_code="PL", iso3_code="POL")
position = Position.objects.create(code="C", name="Center")
role = Role.objects.create(code="rim", name="Rim Protector")
player = Player.objects.create(
first_name="Adam",
last_name="Big",
full_name="Adam Big",
birth_date=date(2001, 1, 1),
nationality=nationality,
nominal_position=position,
inferred_role=role,
)
FavoritePlayer.objects.create(user=user, player=player)
response = client.get(reverse("scouting:watchlist"))
assert response.status_code == 200
assert "Adam Big" in response.content.decode()