Add flag to preserve cached media on cleanup (#36200)

Co-authored-by: Daniel King <git@kin.gy>
This commit is contained in:
Daniel King
2026-01-29 15:53:51 +00:00
committed by GitHub
parent 0196c12e7f
commit d5d57ac25a
4 changed files with 78 additions and 1 deletions

View File

@@ -73,6 +73,66 @@ RSpec.describe Mastodon::CLI::Media do
expect(media_attachment.reload.thumbnail).to be_blank
end
end
context 'with --keep-interacted' do
let(:options) { { keep_interacted: true } }
let!(:favourited_media) { Fabricate(:media_attachment, created_at: 1.month.ago, remote_url: 'https://example.com/image.jpg') }
let!(:bookmarked_media) { Fabricate(:media_attachment, created_at: 1.month.ago, remote_url: 'https://example.com/image.jpg') }
let!(:replied_to_media) { Fabricate(:media_attachment, created_at: 1.month.ago, remote_url: 'https://example.com/image.jpg') }
let!(:reblogged_media) { Fabricate(:media_attachment, created_at: 1.month.ago, remote_url: 'https://example.com/image.jpg') }
let!(:remote_quoted_media) { Fabricate(:media_attachment, created_at: 1.month.ago, remote_url: 'https://example.com/image.jpg') }
let!(:remote_quoting_media) { Fabricate(:media_attachment, created_at: 1.month.ago, remote_url: 'https://example.com/image.jpg') }
before do
local_account = Fabricate(:account, username: 'alice')
remote_account = Fabricate(:account, username: 'bob', domain: 'example.com')
favourited_status = Fabricate(:status, account: remote_account)
bookmarked_status = Fabricate(:status, account: remote_account)
replied_to_status = Fabricate(:status, account: remote_account)
reblogged_status = Fabricate(:status, account: remote_account)
favourited_media.update!(status: favourited_status)
bookmarked_media.update!(status: bookmarked_status)
replied_to_media.update!(status: replied_to_status)
reblogged_media.update!(status: reblogged_status)
local_quoting_status = Fabricate(:status, account: local_account)
remote_quoted_status = Fabricate(:status, account: remote_account)
local_status_being_quoted = Fabricate(:status, account: local_account)
remote_quoting_status = Fabricate(:status, account: remote_account)
remote_quoted_media.update!(status: remote_quoted_status)
remote_quoting_media.update!(status: remote_quoting_status)
non_interacted_status = Fabricate(:status, account: remote_account)
media_attachment.update(status: non_interacted_status)
Fabricate(:favourite, account: local_account, status: favourited_status)
Fabricate(:bookmark, account: local_account, status: bookmarked_status)
Fabricate(:status, account: local_account, in_reply_to_id: replied_to_status.id)
Fabricate(:status, account: local_account, reblog: reblogged_status)
Fabricate(:quote, account: local_account, status: local_quoting_status, quoted_status: remote_quoted_status)
Fabricate(:quote, account: remote_account, status: remote_quoting_status, quoted_status: local_status_being_quoted)
end
it 'keeps media associated with statuses that have been favourited, bookmarked, replied to, or reblogged by a local account' do
expect { subject }
.to output_results('Removed 1')
expect(favourited_media.reload.file).to be_present
expect(bookmarked_media.reload.file).to be_present
expect(replied_to_media.reload.file).to be_present
expect(reblogged_media.reload.file).to be_present
expect(remote_quoted_media.reload.file).to be_present
expect(remote_quoting_media.reload.file).to be_present
expect(media_attachment.reload.file).to be_blank
expect(media_attachment.reload.thumbnail).to be_blank
end
end
end
end