Browse Source

Add aggregator tests

Colin Powell 2 years ago
parent
commit
0cdde59de4

+ 33 - 16
tests/scrobbles_tests/conftest.py

@@ -1,37 +1,54 @@
 import json
 import pytest
 
+from scrobbles.models import Scrobble
+
 
 class MopidyRequest:
+    name = "Same in the End"
+    artist = "Sublime"
+    album = "Sublime"
+    track_number = 4
+    run_time_ticks = 156604
+    run_time = "156"
+    playback_time_ticks = 15045
+    musicbrainz_track_id = "54214d63-5adf-4909-87cd-c65c37a6d558"
+    musicbrainz_album_id = "03b864cd-7761-314c-a892-05a89ddff00d"
+    musicbrainz_artist_id = "95f5b748-d370-47fe-85bd-0af2dc450bc0"
+    mopidy_uri = "local:track:Sublime%20-%20Sublime/Disc%201%20-%2004%20-%20Same%20in%20the%20End.mp3"
+    status = "resumed"
+
     def __init__(self, **kwargs):
         self.request_data = {
-            "name": kwargs.get('name', "Same in the End"),
-            "artist": kwargs.get("artist", "Sublime"),
-            "album": kwargs.get("album", "Sublime"),
-            "track_number": int(kwargs.get("track_number", 4)),
-            "run_time_ticks": int(kwargs.get("run_time_ticks", 156604)),
-            "run_time": int(kwargs.get("run_time", "156")),
+            "name": kwargs.get('name', self.name),
+            "artist": kwargs.get("artist", self.artist),
+            "album": kwargs.get("album", self.album),
+            "track_number": int(kwargs.get("track_number", self.track_number)),
+            "run_time_ticks": int(
+                kwargs.get("run_time_ticks", self.run_time_ticks)
+            ),
+            "run_time": int(kwargs.get("run_time", self.run_time)),
             "playback_time_ticks": int(
-                kwargs.get("playback_time_ticks", 15045)
+                kwargs.get("playback_time_ticks", self.playback_time_ticks)
             ),
             "musicbrainz_track_id": kwargs.get(
-                "musicbrainz_track_id", "54214d63-5adf-4909-87cd-c65c37a6d558"
+                "musicbrainz_track_id", self.musicbrainz_track_id
             ),
             "musicbrainz_album_id": kwargs.get(
-                "musicbrainz_album_id", "03b864cd-7761-314c-a892-05a89ddff00d"
+                "musicbrainz_album_id", self.musicbrainz_album_id
             ),
             "musicbrainz_artist_id": kwargs.get(
-                "musicbrainz_artist_id", "95f5b748-d370-47fe-85bd-0af2dc450bc0"
-            ),
-            "mopidy_uri": kwargs.get(
-                "mopidy_uri",
-                "local:track:Sublime%20-%20Sublime/Disc%201%20-%2004%20-%20Same%20in%20the%20End.mp3",
+                "musicbrainz_artist_id", self.musicbrainz_artist_id
             ),
-            "status": kwargs.get("status", "resumed"),
+            "mopidy_uri": kwargs.get("mopidy_uri", self.mopidy_uri),
+            "status": kwargs.get("status", self.status),
         }
 
     def __eq__(self, other):
-        return self.name == other.name
+        for key in self.request_data.keys():
+            if self.request_data[key] != getattr(self, key):
+                return False
+        return True
 
     @property
     def request_json(self):

+ 37 - 0
tests/scrobbles_tests/test_aggregators.py

@@ -0,0 +1,37 @@
+from datetime import timedelta
+
+import pytest
+from django.urls import reverse
+from django.utils import timezone
+from music.aggregators import scrobble_counts, week_of_scrobbles
+from scrobbles.models import Scrobble
+
+
+def build_scrobbles(client, request_data, num=7, spacing=2):
+    url = reverse('scrobbles:mopidy-websocket')
+    for i in range(num):
+        client.post(url, request_data, content_type='application/json')
+        s = Scrobble.objects.last()
+        s.timestamp = timezone.now() - timedelta(days=i * spacing)
+        s.played_to_completion = True
+        s.save()
+
+
+@pytest.mark.django_db
+def test_scrobble_counts_data(client, mopidy_track_request_data):
+    build_scrobbles(client, mopidy_track_request_data)
+    count_dict = scrobble_counts()
+    assert count_dict == {
+        'alltime': 7,
+        'month': 7,
+        'today': 1,
+        'week': 2,
+        'year': 7,
+    }
+
+
+@pytest.mark.django_db
+def test_scrobble_counts_data(client, mopidy_track_request_data):
+    build_scrobbles(client, mopidy_track_request_data, 7, 1)
+    week = week_of_scrobbles()
+    assert list(week.values()) == [1, 1, 1, 1, 1, 1, 1]

+ 3 - 3
vrobbler/apps/music/aggregators.py

@@ -18,11 +18,11 @@ STARTING_DAY_OF_CURRENT_MONTH = NOW.date().replace(day=1)
 STARTING_DAY_OF_CURRENT_YEAR = NOW.date().replace(month=1, day=1)
 
 
-def scrobble_counts(user):
+def scrobble_counts(user=None):
 
     now = timezone.now()
     user_filter = Q()
-    if user.is_authenticated:
+    if user and user.is_authenticated:
         now = now_user_timezone(user.profile)
         user_filter = Q(user=user)
 
@@ -59,7 +59,7 @@ def week_of_scrobbles(user=None, media: str = 'tracks') -> dict[str, int]:
 
     now = timezone.now()
     user_filter = Q()
-    if user.is_authenticated:
+    if user and user.is_authenticated:
         now = now_user_timezone(user.profile)
         user_filter = Q(user=user)