Fixes https://linear.app/chatwoot/issue/CW-3497/instagram-outgoing-attachments-are-not-rendering It seems like Instagram outgoing attachment rendering has been broken for a long time. We couldn't identify the issue because the check below only inspects Instagram mentions. ``` metadata[:data_url] = metadata[:thumb_url] = external_url if message.instagram_story_mention? ``` We recently worked on adding the [Instagram CDN URL for attachments.](https://github.com/chatwoot/chatwoot/pull/9287) After that, it started using external URLs as attachment data URLs for both outgoing and incoming attachments. The rendering broken for all the outgoing attachments since there were no external URLs, making the data URL empty. Adding an incoming message check will solve the issue. --------- Co-authored-by: Sojan <sojan@pepalo.com>
58 lines
2.4 KiB
Ruby
58 lines
2.4 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe Attachment do
|
|
describe 'external url validations' do
|
|
let(:message) { create(:message) }
|
|
let(:attachment) { message.attachments.new(account_id: message.account_id, file_type: :image) }
|
|
|
|
before do
|
|
attachment.file.attach(io: Rails.root.join('spec/assets/avatar.png').open, filename: 'avatar.png', content_type: 'image/png')
|
|
end
|
|
|
|
context 'when it validates external url length' do
|
|
it 'valid when within limit' do
|
|
attachment.external_url = 'a' * Limits::URL_LENGTH_LIMIT
|
|
expect(attachment.valid?).to be true
|
|
end
|
|
|
|
it 'invalid when crossed the limit' do
|
|
attachment.external_url = 'a' * (Limits::URL_LENGTH_LIMIT + 5)
|
|
attachment.valid?
|
|
expect(attachment.errors[:external_url]).to include("is too long (maximum is #{Limits::URL_LENGTH_LIMIT} characters)")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'download_url' do
|
|
it 'returns valid download url' do
|
|
message = create(:message)
|
|
attachment = message.attachments.new(account_id: message.account_id, file_type: :image)
|
|
attachment.file.attach(io: Rails.root.join('spec/assets/avatar.png').open, filename: 'avatar.png', content_type: 'image/png')
|
|
expect(attachment.download_url).not_to be_nil
|
|
end
|
|
end
|
|
|
|
describe 'push_event_data for instagram story mentions' do
|
|
let(:instagram_message) { create(:message, :instagram_story_mention) }
|
|
|
|
before do
|
|
# stubbing the request to facebook api during the message creation
|
|
stub_request(:get, %r{https://graph.facebook.com/.*}).to_return(status: 200, body: {
|
|
story: { mention: { link: 'http://graph.facebook.com/test-story-mention', id: '17920786367196703' } },
|
|
from: { username: 'Sender-id-1', id: 'Sender-id-1' },
|
|
id: 'instagram-message-id-1234'
|
|
}.to_json, headers: {})
|
|
end
|
|
|
|
it 'returns external url as data and thumb urls when message is incoming' do
|
|
external_url = instagram_message.attachments.first.external_url
|
|
expect(instagram_message.attachments.first.push_event_data[:data_url]).to eq external_url
|
|
end
|
|
|
|
it 'returns original attachment url as data url if the message is outgoing' do
|
|
message = create(:message, :instagram_story_mention, message_type: :outgoing)
|
|
expect(message.attachments.first.push_event_data[:data_url]).not_to eq message.attachments.first.external_url
|
|
end
|
|
end
|
|
end
|