From ea66ee376d245052f3287ba91a6a64499861f65c Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Fri, 27 Mar 2026 16:06:24 -0400 Subject: [PATCH] [tests] Fix scrobble tests --- tests/scrobbles_tests/test_aggregators.py | 48 +++++++++++++++++------ tests/scrobbles_tests/test_views.py | 8 +++- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/tests/scrobbles_tests/test_aggregators.py b/tests/scrobbles_tests/test_aggregators.py index ad8ff10..aaced63 100644 --- a/tests/scrobbles_tests/test_aggregators.py +++ b/tests/scrobbles_tests/test_aggregators.py @@ -7,23 +7,41 @@ from django.contrib.auth import get_user_model from django.urls import reverse from django.utils import timezone from music.aggregators import live_charts, scrobble_counts, week_of_scrobbles -from music.models import Album, Artist -from profiles.models import UserProfile from scrobbles.models import Scrobble -def build_scrobbles(client, request_json, num=7, spacing=2): +def build_scrobbles(client, request_json, num=7, spacing=2, auth_token=None): + from rest_framework.authtoken.models import Token + import pytz + url = reverse("scrobbles:mopidy-webhook") user = get_user_model().objects.create(username="Test User") user.profile.timezone = "US/Eastern" user.profile.save() + headers = {} + if auth_token: + headers = {"Authorization": f"Token {auth_token}"} + user = Token.objects.get(key=auth_token).user + + client.post( + url, request_json, content_type="application/json", headers=headers + ) + track = Scrobble.objects.last().track + + est = pytz.timezone("US/Eastern") for i in range(num): - client.post(url, request_json, content_type="application/json") - s = Scrobble.objects.last() - s.user = user - s.timestamp = timezone.now() - timedelta(days=i * spacing) - s.played_to_completion = True - s.save() + naive_time = timezone.now().replace(tzinfo=None) - timedelta( + days=i * spacing + ) + aware_time = est.localize(naive_time) + Scrobble.objects.create( + user=user, + track=track, + timestamp=aware_time, + played_to_completion=True, + source="Mopidy", + ) + return user @pytest.mark.django_db @@ -41,9 +59,11 @@ def test_scrobble_counts_data( mock_get_album, client, mopidy_track, + valid_auth_token, ): - build_scrobbles(client, mopidy_track.request_json) - user = get_user_model().objects.first() + user = build_scrobbles( + client, mopidy_track.request_json, auth_token=valid_auth_token + ) count_dict = scrobble_counts(user) assert count_dict == { "alltime": 7, @@ -69,9 +89,11 @@ def test_live_charts( mock_get_album, client, mopidy_track, + valid_auth_token, ): - build_scrobbles(client, mopidy_track.request_json, 7, 1) - user = get_user_model().objects.first() + user = build_scrobbles( + client, mopidy_track.request_json, 7, 1, auth_token=valid_auth_token + ) week = week_of_scrobbles(user) assert list(week.values()) == [1, 1, 1, 1, 1, 1, 1] diff --git a/tests/scrobbles_tests/test_views.py b/tests/scrobbles_tests/test_views.py index efba927..1d34c26 100644 --- a/tests/scrobbles_tests/test_views.py +++ b/tests/scrobbles_tests/test_views.py @@ -32,7 +32,9 @@ def test_get_not_allowed_from_jellyfin(client, valid_auth_token): def test_bad_mopidy_request_data(client, valid_auth_token): url = reverse("scrobbles:mopidy-webhook") headers = {"Authorization": f"Token {valid_auth_token}"} - response = client.post(url, headers) + response = client.post( + url, "not valid json", content_type="application/json", headers=headers + ) assert response.status_code == 400 assert ( response.data["detail"] @@ -44,7 +46,9 @@ def test_bad_mopidy_request_data(client, valid_auth_token): def test_bad_jellyfin_request_data(client, valid_auth_token): url = reverse("scrobbles:jellyfin-webhook") headers = {"Authorization": f"Token {valid_auth_token}"} - response = client.post(url, headers) + response = client.post( + url, "not valid json", content_type="application/json", headers=headers + ) assert response.status_code == 400 assert ( response.data["detail"]