diff --git a/tests/scrobbles_tests/test_views.py b/tests/scrobbles_tests/test_views.py index b15bd7d..2b2e701 100644 --- a/tests/scrobbles_tests/test_views.py +++ b/tests/scrobbles_tests/test_views.py @@ -202,6 +202,91 @@ def test_jellyfin_track_webhook_creates_track_and_scrobble( scrobble = Scrobble.objects.get(id=1) assert scrobble.track == track assert scrobble.source == "Jellyfin" + assert "raw_data" in scrobble.log + + +@pytest.mark.django_db +@patch("music.models.Artist.find_or_create") +@patch("music.models.Track.find_or_create") +def test_mopidy_track_webhook_stores_raw_data( + mock_track_fc, + mock_artist_fc, + client, + valid_auth_token, + mopidy_track, +): + artist = Artist.objects.create(name="Sublime") + album = Album.objects.create(name="Sublime", album_artist=artist) + track = Track.objects.create( + title="Same in the End", + artist=artist, + base_run_time_seconds=60, + ) + track.albums.add(album) + + mock_artist_fc.return_value = artist + mock_track_fc.return_value = track + + url = reverse("scrobbles:mopidy-webhook") + headers = {"Authorization": f"Token {valid_auth_token}"} + response = client.post( + url, + mopidy_track.request_data, + content_type="application/json", + headers=headers, + ) + assert response.status_code == 200 + assert response.data == {"scrobble_id": 1} + + scrobble = Scrobble.objects.get(id=1) + assert scrobble.track == track + assert scrobble.source == "Mopidy" + assert "raw_data" in scrobble.log + assert scrobble.log["raw_data"]["name"] == "Same in the End" + + +@pytest.mark.django_db +@patch("music.models.Artist.find_or_create") +@patch("music.models.Track.find_or_create") +def test_jellyfin_track_webhook_stores_raw_data( + mock_track_fc, + mock_artist_fc, + client, + valid_auth_token, + jellyfin_track, +): + artist = Artist.objects.create(name="Carly Rae Jepsen") + album = Album.objects.create(name="Emotion", album_artist=artist) + track = Track.objects.create( + title="Emotion", + artist=artist, + base_run_time_seconds=60, + ) + track.albums.add(album) + + mock_artist_fc.return_value = artist + mock_track_fc.return_value = track + + url = reverse("scrobbles:jellyfin-webhook") + headers = {"Authorization": f"Token {valid_auth_token}"} + + with time_machine.travel(datetime(2024, 1, 14, 12, 00, 1)): + jellyfin_track.request_data["UtcTimestamp"] = timezone.now().strftime( + "%Y-%m-%d %H:%M:%S" + ) + response = client.post( + url, + jellyfin_track.request_json, + content_type="application/json", + headers=headers, + ) + assert response.status_code == 200 + + scrobble = Scrobble.objects.get(id=1) + assert scrobble.track == track + assert scrobble.source == "Jellyfin" + assert "raw_data" in scrobble.log + assert scrobble.log["raw_data"]["Name"] == "Emotion" @pytest.mark.skip("Need to refactor") diff --git a/vrobbler/apps/scrobbles/scrobblers.py b/vrobbler/apps/scrobbles/scrobblers.py index 2376c61..5a667c5 100644 --- a/vrobbler/apps/scrobbles/scrobblers.py +++ b/vrobbler/apps/scrobbles/scrobblers.py @@ -160,7 +160,7 @@ def jellyfin_scrobble_media(post_data: dict, user_id: int) -> Optional[Scrobble] source_id=post_data.get(JELLYFIN_POST_KEYS.get("MEDIA_SOURCE_ID")), playback_position_seconds=playback_position_seconds, status=playback_status, - log={"album": post_data.get("Album", "")}, + log={"album": post_data.get("Album", ""), "raw_data": post_data}, )