|
@@ -76,9 +76,26 @@ def test_scrobble_mopidy_track(
|
|
|
assert scrobble.media_obj.title == "Same in the End"
|
|
|
|
|
|
|
|
|
-@pytest.mark.skip(reason="Allmusic API is unstable")
|
|
|
+# @pytest.mark.skip(reason="Allmusic API is unstable")
|
|
|
@pytest.mark.django_db
|
|
|
+@patch("music.utils.lookup_artist_from_mb", return_value={})
|
|
|
+@patch(
|
|
|
+ "music.utils.lookup_album_dict_from_mb",
|
|
|
+ return_value={"year": "1999", "mb_group_id": 1},
|
|
|
+)
|
|
|
+@patch("music.utils.lookup_track_from_mb", return_value={})
|
|
|
+@patch("music.models.lookup_artist_from_tadb", return_value={})
|
|
|
+@patch("music.models.lookup_album_from_tadb", return_value={"year": "1999"})
|
|
|
+@patch("music.models.Album.fetch_artwork", return_value=None)
|
|
|
+@patch("music.models.Album.scrape_allmusic", return_value=None)
|
|
|
def test_scrobble_mopidy_same_track_different_album(
|
|
|
+ mock_lookup_artist,
|
|
|
+ mock_lookup_album,
|
|
|
+ mock_lookup_track,
|
|
|
+ mock_lookup_artist_tadb,
|
|
|
+ mock_lookup_album_tadb,
|
|
|
+ mock_fetch_artwork,
|
|
|
+ mock_scrape_allmusic,
|
|
|
client,
|
|
|
mopidy_track,
|
|
|
mopidy_track_diff_album_request_data,
|
|
@@ -177,38 +194,101 @@ def test_scrobble_jellyfin_track(
|
|
|
assert scrobble.media_obj.__class__ == Track
|
|
|
assert scrobble.media_obj.title == "Emotion"
|
|
|
|
|
|
- with time_machine.travel(datetime(2024, 1, 14, 12, 0, 58)):
|
|
|
- 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
|
|
|
- assert response.data == {"scrobble_id": 1}
|
|
|
+@pytest.mark.django_db
|
|
|
+@patch("music.utils.lookup_artist_from_mb", return_value={})
|
|
|
+@patch(
|
|
|
+ "music.utils.lookup_album_dict_from_mb",
|
|
|
+ return_value={"year": "1999", "mb_group_id": 1},
|
|
|
+)
|
|
|
+@patch("music.utils.lookup_track_from_mb", return_value={})
|
|
|
+@patch("music.models.lookup_artist_from_tadb", return_value={})
|
|
|
+@patch("music.models.lookup_album_from_tadb", return_value={"year": "1999"})
|
|
|
+@patch("music.models.Album.fetch_artwork", return_value=None)
|
|
|
+@patch("music.models.Album.scrape_allmusic", return_value=None)
|
|
|
+def test_scrobble_jellyfin_track_update(
|
|
|
+ mock_lookup_artist,
|
|
|
+ mock_lookup_album,
|
|
|
+ mock_lookup_track,
|
|
|
+ mock_lookup_artist_tadb,
|
|
|
+ mock_lookup_album_tadb,
|
|
|
+ mock_fetch_artwork,
|
|
|
+ mock_scrape_allmusic,
|
|
|
+ test_track,
|
|
|
+ client,
|
|
|
+ jellyfin_track,
|
|
|
+ valid_auth_token,
|
|
|
+):
|
|
|
+ Scrobble.objects.create(
|
|
|
+ timestamp=timezone.now() - timedelta(minutes=0.5),
|
|
|
+ track=Track.objects.first(),
|
|
|
+ user_id=1,
|
|
|
+ )
|
|
|
+ url = reverse("scrobbles:jellyfin-webhook")
|
|
|
+ headers = {"Authorization": f"Token {valid_auth_token}"}
|
|
|
|
|
|
- scrobble = Scrobble.objects.get(id=1)
|
|
|
- assert scrobble.media_obj.__class__ == Track
|
|
|
- assert scrobble.media_obj.title == "Emotion"
|
|
|
+ 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,
|
|
|
+ )
|
|
|
|
|
|
- with time_machine.travel(datetime(2024, 1, 14, 12, 1, 10)):
|
|
|
- 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
|
|
|
+ assert response.data == {"scrobble_id": 1}
|
|
|
|
|
|
- assert response.status_code == 200
|
|
|
- assert response.data == {"scrobble_id": 2}
|
|
|
+ scrobble = Scrobble.objects.get(id=1)
|
|
|
+ assert scrobble.media_obj.__class__ == Track
|
|
|
+ assert scrobble.media_obj.title == "Emotion"
|
|
|
|
|
|
- scrobble = Scrobble.objects.get(id=1)
|
|
|
- assert scrobble.media_obj.__class__ == Track
|
|
|
- assert scrobble.media_obj.title == "Emotion"
|
|
|
+
|
|
|
+@pytest.mark.django_db
|
|
|
+@patch("music.utils.lookup_artist_from_mb", return_value={})
|
|
|
+@patch(
|
|
|
+ "music.utils.lookup_album_dict_from_mb",
|
|
|
+ return_value={"year": "1999", "mb_group_id": 1},
|
|
|
+)
|
|
|
+@patch("music.utils.lookup_track_from_mb", return_value={})
|
|
|
+@patch("music.models.lookup_artist_from_tadb", return_value={})
|
|
|
+@patch("music.models.lookup_album_from_tadb", return_value={"year": "1999"})
|
|
|
+@patch("music.models.Album.fetch_artwork", return_value=None)
|
|
|
+@patch("music.models.Album.scrape_allmusic", return_value=None)
|
|
|
+def test_scrobble_jellyfin_track_create_new(
|
|
|
+ mock_lookup_artist,
|
|
|
+ mock_lookup_album,
|
|
|
+ mock_lookup_track,
|
|
|
+ mock_lookup_artist_tadb,
|
|
|
+ mock_lookup_album_tadb,
|
|
|
+ mock_fetch_artwork,
|
|
|
+ mock_scrape_allmusic,
|
|
|
+ test_track,
|
|
|
+ client,
|
|
|
+ jellyfin_track,
|
|
|
+ valid_auth_token,
|
|
|
+):
|
|
|
+ url = reverse("scrobbles:jellyfin-webhook")
|
|
|
+ headers = {"Authorization": f"Token {valid_auth_token}"}
|
|
|
+ Scrobble.objects.create(
|
|
|
+ timestamp=timezone.now() - timedelta(minutes=1),
|
|
|
+ track=Track.objects.first(),
|
|
|
+ user_id=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
|
|
|
+ assert response.data == {"scrobble_id": 2}
|
|
|
+
|
|
|
+ scrobble = Scrobble.objects.get(id=1)
|
|
|
+ assert scrobble.media_obj.__class__ == Track
|
|
|
+ assert scrobble.media_obj.title == "Emotion"
|