diff options
author | ThibG <thib@sitedethib.com> | 2019-11-04 13:00:16 +0100 |
---|---|---|
committer | multiple creatures <dev@multiple-creature.party> | 2020-02-21 03:34:42 -0600 |
commit | e19765e0f2e0b7e99e8c7c5b4285b8ca83892c99 (patch) | |
tree | c27d6a6d02c3f243fb80d0f3ee7d01ca458f0123 | |
parent | e6bb4bd747a0120dd0207aecbb7c5c67b7caa165 (diff) |
port tootsuite#12262 to monsterfork: Fix remote media descriptions being cut off at 420 chars
* Fix remote media descriptions being cut off at 420 chars Fixes #12258 * Fix tests
-rw-r--r-- | app/models/media_attachment.rb | 4 | ||||
-rw-r--r-- | spec/lib/activitypub/activity/create_spec.rb | 26 | ||||
-rw-r--r-- | spec/models/media_attachment_spec.rb | 4 |
3 files changed, 31 insertions, 3 deletions
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index f8e925942..1744ee58c 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -26,6 +26,8 @@ class MediaAttachment < ApplicationRecord enum type: [:image, :gifv, :video, :audio, :unknown] + MAX_DESCRIPTION_LENGTH = 6666 + IMAGE_FILE_EXTENSIONS = %w(.jpg .jpeg .png .gif .webp).freeze VIDEO_FILE_EXTENSIONS = %w(.webm .mp4 .m4v .mov).freeze AUDIO_FILE_EXTENSIONS = %w(.ogg .oga .mp3 .wav .flac .opus .aac .m4a .3gp).freeze @@ -243,7 +245,7 @@ class MediaAttachment < ApplicationRecord end def prepare_description - self.description = description.strip[0...420] unless description.nil? + self.description = description.strip[0...MAX_DESCRIPTION_LENGTH] unless description.nil? end def set_type_and_extension diff --git a/spec/lib/activitypub/activity/create_spec.rb b/spec/lib/activitypub/activity/create_spec.rb index d539a97ea..43ea691a4 100644 --- a/spec/lib/activitypub/activity/create_spec.rb +++ b/spec/lib/activitypub/activity/create_spec.rb @@ -262,6 +262,32 @@ RSpec.describe ActivityPub::Activity::Create do end end + + context 'with media attachments with long description' do + let(:object_json) do + { + id: [ActivityPub::TagManager.instance.uri_for(sender), '#bar'].join, + type: 'Note', + content: 'Lorem ipsum', + attachment: [ + { + type: 'Document', + mediaType: 'image/png', + url: 'http://example.com/attachment.png', + name: '*' * 1500, + }, + ], + } + end + + it 'creates status' do + status = sender.statuses.first + + expect(status).to_not be_nil + expect(status.media_attachments.map(&:description)).to include('*' * 1500) + end + end + context 'with media attachments with focal points' do let(:object_json) do { diff --git a/spec/models/media_attachment_spec.rb b/spec/models/media_attachment_spec.rb index e823f1713..456bc4216 100644 --- a/spec/models/media_attachment_spec.rb +++ b/spec/models/media_attachment_spec.rb @@ -151,10 +151,10 @@ RSpec.describe MediaAttachment, type: :model do end describe 'descriptions for remote attachments' do - it 'are cut off at 666 characters' do + it 'are cut off at 1500 characters' do media = Fabricate(:media_attachment, description: 'foo' * 1000, remote_url: 'http://example.com/blah.jpg') - expect(media.description.size).to be <= 666 + expect(media.description.size).to be <= 1_500 end end end |