From 38c5369fd0c110afdb188dae24091c221d18ea5a Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Tue, 1 Sep 2026 09:38:01 -0400 Subject: [PATCH] [media] Allow anonymous users to view media detail pages --- tests/scrobbles_tests/test_views.py | 19 +++++++++++++++++++ vrobbler/apps/scrobbles/views.py | 6 +++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/tests/scrobbles_tests/test_views.py b/tests/scrobbles_tests/test_views.py index 9a57a20..c4df997 100644 --- a/tests/scrobbles_tests/test_views.py +++ b/tests/scrobbles_tests/test_views.py @@ -4,6 +4,7 @@ from unittest.mock import MagicMock, patch import pytest import time_machine from agents.models import AgentSession +from books.models import Book from django.contrib.auth import get_user_model from django.urls import reverse from django.utils import timezone @@ -1225,6 +1226,24 @@ def test_scrobble_start_with_video_uuid_creates_scrobble(client, valid_auth_toke assert Scrobble.objects.filter(video=video, user=user).exists() +@pytest.mark.django_db +def test_long_play_media_detail_view_works_for_anonymous_user(client): + book = Book.objects.create(title="Anonymous Accessible Book") + url = reverse("books:book_detail", kwargs={"slug": book.uuid}) + response = client.get(url) + assert response.status_code == 200 + assert "Anonymous Accessible Book" in response.content.decode() + + +@pytest.mark.django_db +def test_short_play_media_detail_view_works_for_anonymous_user(client): + video = Video.objects.create(title="Anonymous Accessible Video") + url = reverse("videos:video_detail", kwargs={"slug": video.uuid}) + response = client.get(url) + assert response.status_code == 200 + assert "Anonymous Accessible Video" in response.content.decode() + + @pytest.mark.django_db def test_long_plays_view_does_not_crash_on_unknown_app_labels(client): user = get_user_model().objects.create_user( diff --git a/vrobbler/apps/scrobbles/views.py b/vrobbler/apps/scrobbles/views.py index adffab6..448bcb6 100644 --- a/vrobbler/apps/scrobbles/views.py +++ b/vrobbler/apps/scrobbles/views.py @@ -215,7 +215,11 @@ class ScrobbleableDetailView(ChartContextMixin, DetailView): context_data["is_paginated"] = paginator.num_pages > 1 media = self.object - if hasattr(media, "is_long_play_media") and media.is_long_play_media(): + if ( + not self.request.user.is_anonymous + and hasattr(media, "is_long_play_media") + and media.is_long_play_media() + ): qs = media.scrobble_set.filter(user=self.request.user) completed = ( qs.filter(long_play_complete=True).order_by("-timestamp").first()