Add aggregator tests
This commit is contained in:
@ -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):
|
||||
|
||||
37
tests/scrobbles_tests/test_aggregators.py
Normal file
37
tests/scrobbles_tests/test_aggregators.py
Normal 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]
|
||||
@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user