Limit attachments to `MEDIA_ATTACHMENTS_LIMIT` when returning posts through the API (#30932)

pull/30958/head
Claire 2024-07-08 09:41:50 +02:00 committed by GitHub
parent fd3bfc0710
commit d41b43ed4f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 44 additions and 7 deletions

View File

@ -288,7 +288,7 @@ class Status < ApplicationRecord
else else
map = media_attachments.index_by(&:id) map = media_attachments.index_by(&:id)
ordered_media_attachment_ids.filter_map { |media_attachment_id| map[media_attachment_id] } ordered_media_attachment_ids.filter_map { |media_attachment_id| map[media_attachment_id] }
end end.take(MEDIA_ATTACHMENTS_LIMIT)
end end
def replies_count def replies_count

View File

@ -53,12 +53,14 @@ class StatusEdit < ApplicationRecord
def ordered_media_attachments def ordered_media_attachments
return @ordered_media_attachments if defined?(@ordered_media_attachments) return @ordered_media_attachments if defined?(@ordered_media_attachments)
@ordered_media_attachments = if ordered_media_attachment_ids.nil? @ordered_media_attachments = begin
if ordered_media_attachment_ids.nil?
[] []
else else
map = status.media_attachments.index_by(&:id) map = status.media_attachments.index_by(&:id)
ordered_media_attachment_ids.map.with_index { |media_attachment_id, index| PreservedMediaAttachment.new(media_attachment: map[media_attachment_id], description: media_descriptions[index]) } ordered_media_attachment_ids.map.with_index { |media_attachment_id, index| PreservedMediaAttachment.new(media_attachment: map[media_attachment_id], description: media_descriptions[index]) }
end end
end.take(Status::MEDIA_ATTACHMENTS_LIMIT)
end end
def proper def proper

View File

@ -247,6 +247,41 @@ RSpec.describe Status do
end end
end end
describe '#ordered_media_attachments' do
let(:status) { Fabricate(:status) }
let(:first_attachment) { Fabricate(:media_attachment) }
let(:second_attachment) { Fabricate(:media_attachment) }
let(:last_attachment) { Fabricate(:media_attachment) }
let(:extra_attachment) { Fabricate(:media_attachment) }
before do
stub_const('Status::MEDIA_ATTACHMENTS_LIMIT', 3)
# Add attachments out of order
status.media_attachments << second_attachment
status.media_attachments << last_attachment
status.media_attachments << extra_attachment
status.media_attachments << first_attachment
end
context 'when ordered_media_attachment_ids is not set' do
it 'returns up to MEDIA_ATTACHMENTS_LIMIT attachments' do
expect(status.ordered_media_attachments.size).to eq Status::MEDIA_ATTACHMENTS_LIMIT
end
end
context 'when ordered_media_attachment_ids is set' do
before do
status.update!(ordered_media_attachment_ids: [first_attachment.id, second_attachment.id, last_attachment.id, extra_attachment.id])
end
it 'returns up to MEDIA_ATTACHMENTS_LIMIT attachments in the expected order' do
expect(status.ordered_media_attachments).to eq [first_attachment, second_attachment, last_attachment]
end
end
end
describe '.mutes_map' do describe '.mutes_map' do
subject { described_class.mutes_map([status.conversation.id], account) } subject { described_class.mutes_map([status.conversation.id], account) }