Add aggregator tests
This commit is contained in:
@ -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):
|
||||||
|
|||||||
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)
|
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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user