[scrobbles] Add raw data storage to Jellyfins scrobbles
This commit is contained in:
@ -202,6 +202,91 @@ def test_jellyfin_track_webhook_creates_track_and_scrobble(
|
|||||||
scrobble = Scrobble.objects.get(id=1)
|
scrobble = Scrobble.objects.get(id=1)
|
||||||
assert scrobble.track == track
|
assert scrobble.track == track
|
||||||
assert scrobble.source == "Jellyfin"
|
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")
|
@pytest.mark.skip("Need to refactor")
|
||||||
|
|||||||
@ -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")),
|
source_id=post_data.get(JELLYFIN_POST_KEYS.get("MEDIA_SOURCE_ID")),
|
||||||
playback_position_seconds=playback_position_seconds,
|
playback_position_seconds=playback_position_seconds,
|
||||||
status=playback_status,
|
status=playback_status,
|
||||||
log={"album": post_data.get("Album", "")},
|
log={"album": post_data.get("Album", ""), "raw_data": post_data},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user