diff --git a/app/controllers/admin_incoming_message_controller.rb b/app/controllers/admin_incoming_message_controller.rb index e70d3f9990..d6a0443105 100644 --- a/app/controllers/admin_incoming_message_controller.rb +++ b/app/controllers/admin_incoming_message_controller.rb @@ -78,30 +78,34 @@ def bulk_destroy end def redeliver - - message_ids = params[:url_title].split(",").each(&:strip) + message_ids = params[:url_title].split(',').map(&:strip) previous_request = @incoming_message.info_request destination_request = nil if message_ids.empty? - flash[:error] = "You must supply at least one request to redeliver the message to." + flash[:error] = + 'You must supply at least one request to redeliver the message to.' + return redirect_to admin_request_url(previous_request) end ActiveRecord::Base.transaction do message_ids.each do |m| - if m.match(/^[0-9]+$/) - destination_request = InfoRequest.find_by_id(m.to_i) - else - destination_request = InfoRequest.find_by_url_title!(m) - end + destination_request = + if m.match(/^[0-9]+$/) + InfoRequest.find_by_id(m.to_i) + else + InfoRequest.find_by_url_title!(m) + end + if destination_request.nil? - flash[:error] = "Failed to find destination request '" + m + "'" + flash[:error] = "Failed to find destination request '#{m}'" return redirect_to admin_request_url(previous_request) end raw_email_data = @incoming_message.raw_email.data mail = MailHandler.mail_from_raw_email(raw_email_data) + destination_request. receive(mail, raw_email_data, @@ -114,12 +118,15 @@ def redeliver deleted_incoming_message_id: @incoming_message.id ) - flash[:notice] = "Message has been moved to request(s). Showing the last one:" + flash[:notice] = + 'Message has been moved to request(s). Showing the last one:' end + # expire cached files previous_request.expire @incoming_message.destroy end + redirect_to admin_request_url(destination_request) end diff --git a/spec/controllers/admin_incoming_message_controller_spec.rb b/spec/controllers/admin_incoming_message_controller_spec.rb index d5452060f8..631ab20f9d 100644 --- a/spec/controllers/admin_incoming_message_controller_spec.rb +++ b/spec/controllers/admin_incoming_message_controller_spec.rb @@ -74,6 +74,7 @@ FactoryBot.create(:incoming_message, info_request: previous_info_request) end let(:destination_info_request) { FactoryBot.create(:info_request) } + let(:destination_info_request_2) { FactoryBot.create(:info_request) } it 'expires the file cache for the previous request' do allow(IncomingMessage).to receive(:find).and_return(incoming_message) @@ -107,6 +108,29 @@ expect(response).to redirect_to admin_request_url(incoming_message.info_request) end + context 'when redelivering to multiple requests' do + before do + destination_params = + [destination_info_request, destination_info_request_2]. + map(&:id). + join(', ') + + post :redeliver, + params: { id: incoming_message.id, + url_title: destination_params } + end + + it 'renders a message' do + msg = 'Message has been moved to request(s). Showing the last one:' + expect(flash[:notice]).to eq(msg) + end + + it 'redirects to the last given destination request' do + expect(response). + to redirect_to admin_request_path(destination_info_request_2) + end + end + context 'if the request is embargoed', feature: :alaveteli_pro do before do incoming_message.info_request.create_embargo