Fix remote media descriptions being cut off at 420 chars (#12262)

* Fix remote media descriptions being cut off at 420 chars

Fixes #12258

* Fix tests
master
ThibG 5 years ago committed by Eugen Rochko
parent 7488a9e154
commit 650820d62d
  1. 6
      app/models/media_attachment.rb
  2. 26
      spec/lib/activitypub/activity/create_spec.rb
  3. 4
      spec/models/media_attachment_spec.rb

@ -26,6 +26,8 @@ class MediaAttachment < ApplicationRecord
enum type: [:image, :gifv, :video, :unknown, :audio] enum type: [:image, :gifv, :video, :unknown, :audio]
MAX_DESCRIPTION_LENGTH = 1_500
IMAGE_FILE_EXTENSIONS = %w(.jpg .jpeg .png .gif).freeze IMAGE_FILE_EXTENSIONS = %w(.jpg .jpeg .png .gif).freeze
VIDEO_FILE_EXTENSIONS = %w(.webm .mp4 .m4v .mov).freeze VIDEO_FILE_EXTENSIONS = %w(.webm .mp4 .m4v .mov).freeze
AUDIO_FILE_EXTENSIONS = %w(.ogg .oga .mp3 .wav .flac .opus .aac .m4a .3gp .wma).freeze AUDIO_FILE_EXTENSIONS = %w(.ogg .oga .mp3 .wav .flac .opus .aac .m4a .3gp .wma).freeze
@ -139,7 +141,7 @@ class MediaAttachment < ApplicationRecord
include Attachmentable include Attachmentable
validates :account, presence: true validates :account, presence: true
validates :description, length: { maximum: 1_500 }, if: :local? validates :description, length: { maximum: MAX_DESCRIPTION_LENGTH }, if: :local?
scope :attached, -> { where.not(status_id: nil).or(where.not(scheduled_status_id: nil)) } scope :attached, -> { where.not(status_id: nil).or(where.not(scheduled_status_id: nil)) }
scope :unattached, -> { where(status_id: nil, scheduled_status_id: nil) } scope :unattached, -> { where(status_id: nil, scheduled_status_id: nil) }
@ -243,7 +245,7 @@ class MediaAttachment < ApplicationRecord
end end
def prepare_description def prepare_description
self.description = description.strip[0...420] unless description.nil? self.description = description.strip[0...MAX_DESCRIPTION_LENGTH] unless description.nil?
end end
def set_type_and_extension def set_type_and_extension

@ -261,6 +261,32 @@ RSpec.describe ActivityPub::Activity::Create do
end end
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 context 'with media attachments with focal points' do
let(:object_json) do let(:object_json) do
{ {

@ -136,10 +136,10 @@ RSpec.describe MediaAttachment, type: :model do
end end
describe 'descriptions for remote attachments' do describe 'descriptions for remote attachments' do
it 'are cut off at 140 characters' do it 'are cut off at 1500 characters' do
media = Fabricate(:media_attachment, description: 'foo' * 1000, remote_url: 'http://example.com/blah.jpg') media = Fabricate(:media_attachment, description: 'foo' * 1000, remote_url: 'http://example.com/blah.jpg')
expect(media.description.size).to be <= 420 expect(media.description.size).to be <= 1_500
end end
end end
end end

Loading…
Cancel
Save