Limit attachments to MEDIA_ATTACHMENTS_LIMIT
when returning posts through the API (#30932)
This commit is contained in:
parent
fd3bfc0710
commit
d41b43ed4f
3 changed files with 44 additions and 7 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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) }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue