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 json
import pytest import pytest
from scrobbles.models import Scrobble
class MopidyRequest: 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): def __init__(self, **kwargs):
self.request_data = { self.request_data = {
"name": kwargs.get('name', "Same in the End"), "name": kwargs.get('name', self.name),
"artist": kwargs.get("artist", "Sublime"), "artist": kwargs.get("artist", self.artist),
"album": kwargs.get("album", "Sublime"), "album": kwargs.get("album", self.album),
"track_number": int(kwargs.get("track_number", 4)), "track_number": int(kwargs.get("track_number", self.track_number)),
"run_time_ticks": int(kwargs.get("run_time_ticks", 156604)), "run_time_ticks": int(
"run_time": int(kwargs.get("run_time", "156")), kwargs.get("run_time_ticks", self.run_time_ticks)
),
"run_time": int(kwargs.get("run_time", self.run_time)),
"playback_time_ticks": int( "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": 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": 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": kwargs.get(
"musicbrainz_artist_id", "95f5b748-d370-47fe-85bd-0af2dc450bc0" "musicbrainz_artist_id", self.musicbrainz_artist_id
), ),
"mopidy_uri": kwargs.get( "mopidy_uri": kwargs.get("mopidy_uri", self.mopidy_uri),
"mopidy_uri", "status": kwargs.get("status", self.status),
"local:track:Sublime%20-%20Sublime/Disc%201%20-%2004%20-%20Same%20in%20the%20End.mp3",
),
"status": kwargs.get("status", "resumed"),
} }
def __eq__(self, other): 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 @property
def request_json(self): 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) STARTING_DAY_OF_CURRENT_YEAR = NOW.date().replace(month=1, day=1)
def scrobble_counts(user): def scrobble_counts(user=None):
now = timezone.now() now = timezone.now()
user_filter = Q() user_filter = Q()
if user.is_authenticated: if user and user.is_authenticated:
now = now_user_timezone(user.profile) now = now_user_timezone(user.profile)
user_filter = Q(user=user) user_filter = Q(user=user)
@ -59,7 +59,7 @@ def week_of_scrobbles(user=None, media: str = 'tracks') -> dict[str, int]:
now = timezone.now() now = timezone.now()
user_filter = Q() user_filter = Q()
if user.is_authenticated: if user and user.is_authenticated:
now = now_user_timezone(user.profile) now = now_user_timezone(user.profile)
user_filter = Q(user=user) user_filter = Q(user=user)