Add aggregator tests

This commit is contained in:
2023-01-19 20:49:01 -05:00
parent 65e713e43e
commit 0cdde59de4
3 changed files with 73 additions and 19 deletions

View File

@ -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"
"musicbrainz_artist_id", self.musicbrainz_artist_id
),
"mopidy_uri": kwargs.get(
"mopidy_uri",
"local:track:Sublime%20-%20Sublime/Disc%201%20-%2004%20-%20Same%20in%20the%20End.mp3",
),
"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):

View File

@ -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]

View File

@ -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)