From 7aa299e5b4f731b570b3b29d2879c45611a81749 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Mon, 23 Mar 2020 12:54:58 +0100 Subject: [PATCH] See #170: ensure fetch works properly on tracks with public upload --- api/funkwhale_api/music/spa_views.py | 8 +++++--- api/tests/common/test_middleware.py | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/api/funkwhale_api/music/spa_views.py b/api/funkwhale_api/music/spa_views.py index 7997a3c07..2d1d1a22c 100644 --- a/api/funkwhale_api/music/spa_views.py +++ b/api/funkwhale_api/music/spa_views.py @@ -33,8 +33,12 @@ def library_track(request, pk, redirect_to_ap): except models.Track.DoesNotExist: return [] + playable_uploads = obj.uploads.playable_by(None).order_by("id") + upload = playable_uploads.first() + if redirect_to_ap: - raise middleware.ApiRedirect(obj.fid) + redirect_url = upload.fid if upload else obj.fid + raise middleware.ApiRedirect(redirect_url) track_url = utils.join_url( settings.FUNKWHALE_URL, @@ -84,8 +88,6 @@ def library_track(request, pk, redirect_to_ap): "content": obj.album.attachment_cover.download_url_medium_square_crop, } ) - playable_uploads = obj.uploads.playable_by(None).order_by("id") - upload = playable_uploads.first() if upload: metas.append( { diff --git a/api/tests/common/test_middleware.py b/api/tests/common/test_middleware.py index 88e8d0584..40ff279cb 100644 --- a/api/tests/common/test_middleware.py +++ b/api/tests/common/test_middleware.py @@ -394,6 +394,8 @@ def test_get_request_head_tags_calls_view_with_proper_arg_when_accept_header_set ("music.Album", {}, "library_album", "pk", "pk",), ("music.Track", {}, "library_track", "pk", "pk",), ("music.Library", {}, "library_library", "uuid", "uuid",), + # when a track as a public upload, we should redirect to the upload instead + ("music.Upload", {"playable": True}, "library_track", "pk", "track.pk"), ], ) def test_spa_views_raise_api_redirect_when_accept_json_set(