diff --git a/app/controllers/playlists_controller.rb b/app/controllers/playlists_controller.rb index aecfb5cf80..ee59dc9f37 100644 --- a/app/controllers/playlists_controller.rb +++ b/app/controllers/playlists_controller.rb @@ -248,7 +248,8 @@ def manifest # Fetch all master files related to the playlist items in a single SpeedyAF::Base.where master_file_ids = @playlist.items.collect { |item| item.clip.master_file_id } - master_files = SpeedyAF::Proxy::MasterFile.where("id:#{master_file_ids.join(' id:')}", load_reflections: true) + master_files = [] + master_files = SpeedyAF::Proxy::MasterFile.where("id:#{master_file_ids.join(' id:')}", load_reflections: true) if master_file_ids.present? media_objects = master_files.collect(&:media_object).uniq(&:id) # This small optimization relies on the assumption that can? :read, master_file is the same as can? :read, master_file.media_object diff --git a/spec/controllers/playlists_controller_spec.rb b/spec/controllers/playlists_controller_spec.rb index 715080e9b2..4bd5ec1c93 100644 --- a/spec/controllers/playlists_controller_spec.rb +++ b/spec/controllers/playlists_controller_spec.rb @@ -575,6 +575,19 @@ expect(parsed_response['items'][0]['metadata']).to be_present end + context "when playlist is empty" do + let(:playlist) { FactoryBot.create(:playlist, items: [], visibility: Playlist::PUBLIC) } + + it "returns a IIIF manifest" do + get :manifest, format: 'json', params: { id: playlist.id }, session: valid_session + expect(response).to have_http_status(200) + parsed_response = JSON.parse(response.body) + expect(parsed_response['@context']).to include "http://iiif.io/api/presentation/3/context.json" + expect(parsed_response['type']).to eq 'Manifest' + expect(parsed_response['items']).to be_empty + end + end + context "when playlist owner" do before do login_user playlist.user.user_key