[tests] Fix scrobble tests
This commit is contained in:
@ -7,23 +7,41 @@ from django.contrib.auth import get_user_model
|
|||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from music.aggregators import live_charts, scrobble_counts, week_of_scrobbles
|
from music.aggregators import live_charts, scrobble_counts, week_of_scrobbles
|
||||||
from music.models import Album, Artist
|
|
||||||
from profiles.models import UserProfile
|
|
||||||
from scrobbles.models import Scrobble
|
from scrobbles.models import Scrobble
|
||||||
|
|
||||||
|
|
||||||
def build_scrobbles(client, request_json, num=7, spacing=2):
|
def build_scrobbles(client, request_json, num=7, spacing=2, auth_token=None):
|
||||||
|
from rest_framework.authtoken.models import Token
|
||||||
|
import pytz
|
||||||
|
|
||||||
url = reverse("scrobbles:mopidy-webhook")
|
url = reverse("scrobbles:mopidy-webhook")
|
||||||
user = get_user_model().objects.create(username="Test User")
|
user = get_user_model().objects.create(username="Test User")
|
||||||
user.profile.timezone = "US/Eastern"
|
user.profile.timezone = "US/Eastern"
|
||||||
user.profile.save()
|
user.profile.save()
|
||||||
|
headers = {}
|
||||||
|
if auth_token:
|
||||||
|
headers = {"Authorization": f"Token {auth_token}"}
|
||||||
|
user = Token.objects.get(key=auth_token).user
|
||||||
|
|
||||||
|
client.post(
|
||||||
|
url, request_json, content_type="application/json", headers=headers
|
||||||
|
)
|
||||||
|
track = Scrobble.objects.last().track
|
||||||
|
|
||||||
|
est = pytz.timezone("US/Eastern")
|
||||||
for i in range(num):
|
for i in range(num):
|
||||||
client.post(url, request_json, content_type="application/json")
|
naive_time = timezone.now().replace(tzinfo=None) - timedelta(
|
||||||
s = Scrobble.objects.last()
|
days=i * spacing
|
||||||
s.user = user
|
)
|
||||||
s.timestamp = timezone.now() - timedelta(days=i * spacing)
|
aware_time = est.localize(naive_time)
|
||||||
s.played_to_completion = True
|
Scrobble.objects.create(
|
||||||
s.save()
|
user=user,
|
||||||
|
track=track,
|
||||||
|
timestamp=aware_time,
|
||||||
|
played_to_completion=True,
|
||||||
|
source="Mopidy",
|
||||||
|
)
|
||||||
|
return user
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
@ -41,9 +59,11 @@ def test_scrobble_counts_data(
|
|||||||
mock_get_album,
|
mock_get_album,
|
||||||
client,
|
client,
|
||||||
mopidy_track,
|
mopidy_track,
|
||||||
|
valid_auth_token,
|
||||||
):
|
):
|
||||||
build_scrobbles(client, mopidy_track.request_json)
|
user = build_scrobbles(
|
||||||
user = get_user_model().objects.first()
|
client, mopidy_track.request_json, auth_token=valid_auth_token
|
||||||
|
)
|
||||||
count_dict = scrobble_counts(user)
|
count_dict = scrobble_counts(user)
|
||||||
assert count_dict == {
|
assert count_dict == {
|
||||||
"alltime": 7,
|
"alltime": 7,
|
||||||
@ -69,9 +89,11 @@ def test_live_charts(
|
|||||||
mock_get_album,
|
mock_get_album,
|
||||||
client,
|
client,
|
||||||
mopidy_track,
|
mopidy_track,
|
||||||
|
valid_auth_token,
|
||||||
):
|
):
|
||||||
build_scrobbles(client, mopidy_track.request_json, 7, 1)
|
user = build_scrobbles(
|
||||||
user = get_user_model().objects.first()
|
client, mopidy_track.request_json, 7, 1, auth_token=valid_auth_token
|
||||||
|
)
|
||||||
|
|
||||||
week = week_of_scrobbles(user)
|
week = week_of_scrobbles(user)
|
||||||
assert list(week.values()) == [1, 1, 1, 1, 1, 1, 1]
|
assert list(week.values()) == [1, 1, 1, 1, 1, 1, 1]
|
||||||
|
|||||||
@ -32,7 +32,9 @@ def test_get_not_allowed_from_jellyfin(client, valid_auth_token):
|
|||||||
def test_bad_mopidy_request_data(client, valid_auth_token):
|
def test_bad_mopidy_request_data(client, valid_auth_token):
|
||||||
url = reverse("scrobbles:mopidy-webhook")
|
url = reverse("scrobbles:mopidy-webhook")
|
||||||
headers = {"Authorization": f"Token {valid_auth_token}"}
|
headers = {"Authorization": f"Token {valid_auth_token}"}
|
||||||
response = client.post(url, headers)
|
response = client.post(
|
||||||
|
url, "not valid json", content_type="application/json", headers=headers
|
||||||
|
)
|
||||||
assert response.status_code == 400
|
assert response.status_code == 400
|
||||||
assert (
|
assert (
|
||||||
response.data["detail"]
|
response.data["detail"]
|
||||||
@ -44,7 +46,9 @@ def test_bad_mopidy_request_data(client, valid_auth_token):
|
|||||||
def test_bad_jellyfin_request_data(client, valid_auth_token):
|
def test_bad_jellyfin_request_data(client, valid_auth_token):
|
||||||
url = reverse("scrobbles:jellyfin-webhook")
|
url = reverse("scrobbles:jellyfin-webhook")
|
||||||
headers = {"Authorization": f"Token {valid_auth_token}"}
|
headers = {"Authorization": f"Token {valid_auth_token}"}
|
||||||
response = client.post(url, headers)
|
response = client.post(
|
||||||
|
url, "not valid json", content_type="application/json", headers=headers
|
||||||
|
)
|
||||||
assert response.status_code == 400
|
assert response.status_code == 400
|
||||||
assert (
|
assert (
|
||||||
response.data["detail"]
|
response.data["detail"]
|
||||||
|
|||||||
Reference in New Issue
Block a user