validates :account, presence: true
validates :description, length: { maximum: MAX_DESCRIPTION_LENGTH }, if: :local?
+ validates :file, presence: true, if: :local?
scope :attached, -> { where.not(status_id: nil).or(where.not(scheduled_status_id: nil)) }
scope :unattached, -> { where(status_id: nil, scheduled_status_id: nil) }
Fabricator(:media_attachment) do
account
+
file do |attrs|
- [
- case attrs[:type]
- when :gifv
- attachment_fixture ['attachment.gif', 'attachment.webm'].sample
- when :image
- attachment_fixture 'attachment.jpg'
- when nil
- attachment_fixture ['attachment.gif', 'attachment.jpg', 'attachment.webm'].sample
- end,
- nil
- ].sample
+ case attrs[:type]
+ when :gifv, :video
+ attachment_fixture('attachment.webm')
+ else
+ attachment_fixture('attachment.jpg')
+ end
end
end
context 'file is blank' do
let(:file) { nil }
- context 'remote_url is blank' do
- let(:remote_url) { '' }
-
- it 'returns false' do
- is_expected.to be false
- end
- end
-
context 'remote_url is present' do
let(:remote_url) { 'remote_url' }
end
end
+ it 'is invalid without file' do
+ media = MediaAttachment.new(account: Fabricate(:account))
+ expect(media.valid?).to be false
+ end
+
describe 'descriptions for remote attachments' do
it 'are cut off at 1500 characters' do
media = Fabricate(:media_attachment, description: 'foo' * 1000, remote_url: 'http://example.com/blah.jpg')
it 'does not allow attaching both videos and images' do
account = Fabricate(:account)
+ video = Fabricate(:media_attachment, type: :video, account: account)
+ image = Fabricate(:media_attachment, type: :image, account: account)
+
+ video.update(type: :video)
expect do
subject.call(
account,
text: "test status update",
media_ids: [
- Fabricate(:media_attachment, type: :video, account: account),
- Fabricate(:media_attachment, type: :image, account: account),
+ video,
+ image,
].map(&:id),
)
end.to raise_error(