108 lines
3.5 KiB
Python
108 lines
3.5 KiB
Python
from datetime import datetime, timedelta
|
|
|
|
import pytest
|
|
import time_machine
|
|
from django.contrib.auth import get_user_model
|
|
from django.urls import reverse
|
|
from django.utils import timezone
|
|
from music.aggregators import (
|
|
scrobble_counts,
|
|
top_artists,
|
|
top_tracks,
|
|
week_of_scrobbles,
|
|
)
|
|
from profiles.models import UserProfile
|
|
from scrobbles.models import Scrobble
|
|
|
|
|
|
def build_scrobbles(client, request_data, num=7, spacing=2):
|
|
url = reverse('scrobbles:mopidy-websocket')
|
|
user = get_user_model().objects.create(username='Test User')
|
|
UserProfile.objects.create(user=user, timezone='US/Eastern')
|
|
for i in range(num):
|
|
client.post(url, request_data, content_type='application/json')
|
|
s = Scrobble.objects.last()
|
|
s.user = user
|
|
s.timestamp = timezone.now() - timedelta(days=i * spacing)
|
|
s.played_to_completion = True
|
|
s.save()
|
|
|
|
|
|
@pytest.mark.django_db
|
|
@time_machine.travel(datetime(2022, 3, 4, 1, 24))
|
|
def test_scrobble_counts_data(client, mopidy_track_request_data):
|
|
build_scrobbles(client, mopidy_track_request_data)
|
|
user = get_user_model().objects.first()
|
|
count_dict = scrobble_counts(user)
|
|
assert count_dict == {
|
|
'alltime': 7,
|
|
'month': 2,
|
|
'today': 1,
|
|
'week': 3,
|
|
'year': 7,
|
|
}
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_week_of_scrobbles_data(client, mopidy_track_request_data):
|
|
build_scrobbles(client, mopidy_track_request_data, 7, 1)
|
|
user = get_user_model().objects.first()
|
|
week = week_of_scrobbles(user)
|
|
assert list(week.values()) == [1, 1, 1, 1, 1, 1, 1]
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_top_tracks_by_day(client, mopidy_track_request_data):
|
|
build_scrobbles(client, mopidy_track_request_data, 7, 1)
|
|
user = get_user_model().objects.first()
|
|
tops = top_tracks(user)
|
|
assert tops[0].title == "Same in the End"
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_top_tracks_by_week(client, mopidy_track_request_data):
|
|
build_scrobbles(client, mopidy_track_request_data, 7, 1)
|
|
user = get_user_model().objects.first()
|
|
tops = top_tracks(user, filter='week')
|
|
assert tops[0].title == "Same in the End"
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_top_tracks_by_month(client, mopidy_track_request_data):
|
|
build_scrobbles(client, mopidy_track_request_data, 7, 1)
|
|
user = get_user_model().objects.first()
|
|
tops = top_tracks(user, filter='month')
|
|
assert tops[0].title == "Same in the End"
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_top_tracks_by_year(client, mopidy_track_request_data):
|
|
build_scrobbles(client, mopidy_track_request_data, 7, 1)
|
|
user = get_user_model().objects.first()
|
|
tops = top_tracks(user, filter='year')
|
|
assert tops[0].title == "Same in the End"
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_top__artists_by_week(client, mopidy_track_request_data):
|
|
build_scrobbles(client, mopidy_track_request_data, 7, 1)
|
|
user = get_user_model().objects.first()
|
|
tops = top_artists(user, filter='week')
|
|
assert tops[0].name == "Sublime"
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_top__artists_by_month(client, mopidy_track_request_data):
|
|
build_scrobbles(client, mopidy_track_request_data, 7, 1)
|
|
user = get_user_model().objects.first()
|
|
tops = top_artists(user, filter='month')
|
|
assert tops[0].name == "Sublime"
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_top__artists_by_year(client, mopidy_track_request_data):
|
|
build_scrobbles(client, mopidy_track_request_data, 7, 1)
|
|
user = get_user_model().objects.first()
|
|
tops = top_artists(user, filter='year')
|
|
assert tops[0].name == "Sublime"
|