diff --git a/tests/scrobbles_tests/conftest.py b/tests/scrobbles_tests/conftest.py index 488393d..627eabd 100644 --- a/tests/scrobbles_tests/conftest.py +++ b/tests/scrobbles_tests/conftest.py @@ -108,9 +108,11 @@ def mopidy_track_diff_album_request_data(**kwargs): @pytest.fixture -def mopidy_podcast(): +def mopidy_podcast_request_data(): mopidy_uri = "local:podcast:Up%20First/2022-01-01%20Up%20First.mp3" - return MopidyRequest(mopidy_uri=mopidy_uri) + return MopidyRequest( + mopidy_uri=mopidy_uri, artist="NPR", album="Up First" + ).request_json class JellyfinTrackRequest: diff --git a/tests/scrobbles_tests/test_views.py b/tests/scrobbles_tests/test_views.py index 6294ab2..d5041ac 100644 --- a/tests/scrobbles_tests/test_views.py +++ b/tests/scrobbles_tests/test_views.py @@ -30,53 +30,6 @@ def test_bad_mopidy_request_data(client, valid_auth_token): ) -@pytest.mark.parametrize( - "seconds, expected_percent_played, expected_scrobble_id", - [ - (1, 1, 1), - (58, 96, 1), - (59, 98, 1), - (60, 100, 1), - (1, 1, 1), - (1, 1, 1), - ], -) -@pytest.mark.django_db -def test_scrobble_mopidy_track( - client, - mopidy_track, - valid_auth_token, - seconds, - expected_percent_played, - expected_scrobble_id, -): - url = reverse("scrobbles:mopidy-webhook") - headers = {"Authorization": f"Token {valid_auth_token}"} - - # Start new scrobble - minutes = 0 - calc_seconds = seconds - if seconds >= 60: - minutes = 1 - calc_seconds = calc_seconds % 10 - with time_machine.travel(datetime(2024, 1, 14, 12, minutes, calc_seconds)): - mopidy_track.request_data["playback_time_ticks"] = seconds * 1000 - response = client.post( - url, - mopidy_track.request_json, - content_type="application/json", - headers=headers, - ) - assert response.status_code == 200 - assert response.data == {"scrobble_id": expected_scrobble_id} - - scrobble = Scrobble.objects.get(id=1) - assert scrobble.percent_played == expected_percent_played - assert scrobble.media_obj.__class__ == Track - assert scrobble.media_obj.title == "Same in the End" - - -# @pytest.mark.skip(reason="Allmusic API is unstable") @pytest.mark.django_db @patch("music.utils.lookup_artist_from_mb", return_value={}) @patch( @@ -128,12 +81,13 @@ def test_scrobble_mopidy_same_track_different_album( assert scrobble.media_obj.title == "Same in the End" -@pytest.mark.skip( - "Need to add a mock podcast request data, tho Google Podcasts is gone :thinking:" -) @pytest.mark.django_db +@patch( + "podcasts.sources.podcastindex.lookup_podcast_from_podcastindex", + return_value={}, +) def test_scrobble_mopidy_podcast( - client, mopidy_podcast_request_data, valid_auth_token + mock_lookup_podcast, client, mopidy_podcast_request_data, valid_auth_token ): url = reverse("scrobbles:mopidy-webhook") headers = {"Authorization": f"Token {valid_auth_token}"} diff --git a/vrobbler/apps/podcasts/models.py b/vrobbler/apps/podcasts/models.py index b046b88..685b6bc 100644 --- a/vrobbler/apps/podcasts/models.py +++ b/vrobbler/apps/podcasts/models.py @@ -9,6 +9,7 @@ from django.db import models from django.urls import reverse from django.utils.translation import gettext_lazy as _ from django_extensions.db.models import TimeStampedModel +from podcasts.sources.podcastindex import lookup_podcast_from_podcastindex from scrobbles.mixins import ( ObjectWithGenres, ScrobblableConstants, @@ -16,10 +17,6 @@ from scrobbles.mixins import ( ) from taggit.managers import TaggableManager -from podcasts.sources.podcastindex import ( - lookup_podcast_from_podcastindex, -) - logger = logging.getLogger(__name__) BNULL = {"blank": True, "null": True} @@ -115,6 +112,11 @@ class PodcastEpisode(ScrobblableMixin): pub_date = models.DateField(**BNULL) mopidy_uri = models.CharField(max_length=255, **BNULL) + def get_absolute_url(self): + return reverse( + "podcasts:podcast_detail", kwargs={"slug": self.podcast.uuid} + ) + def __str__(self): return f"{self.title}"