diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb index f07dda1247..3a70d74926 100644 --- a/app/controllers/api/v1/statuses_controller.rb +++ b/app/controllers/api/v1/statuses_controller.rb @@ -127,6 +127,8 @@ class Api::V1::StatusesController < Api::BaseController @status = Status.where(account: current_account).find(params[:id]) authorize @status, :destroy? + # JSON is generated before `discard_with_reblogs` in order to have the proper URL + # for media attachments, as it would otherwise redirect to the media proxy json = render_to_body json: @status, serializer: REST::StatusSerializer, source_requested: true @status.discard_with_reblogs diff --git a/spec/requests/api/v1/statuses_spec.rb b/spec/requests/api/v1/statuses_spec.rb index be227e801e..f9845ada7e 100644 --- a/spec/requests/api/v1/statuses_spec.rb +++ b/spec/requests/api/v1/statuses_spec.rb @@ -459,6 +459,7 @@ RSpec.describe '/api/v1/statuses' do let(:scopes) { 'write:statuses' } let(:status) { Fabricate(:status, account: user.account) } + let!(:media) { Fabricate(:media_attachment, status: status) } it_behaves_like 'forbidden for wrong scope', 'read read:statuses' @@ -468,6 +469,15 @@ RSpec.describe '/api/v1/statuses' do expect(response).to have_http_status(200) expect(response.content_type) .to start_with('application/json') + expect(response.parsed_body).to include( + id: status.id.to_s, + media_attachments: contain_exactly( + a_hash_including( + id: media.id.to_s, + url: %r{/system/media_attachments/files/} + ) + ) + ) expect(Status.find_by(id: status.id)).to be_nil expect(RemovalWorker).to have_enqueued_sidekiq_job(status.id, { 'redraft' => true }) end