mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-01 11:37:58 +00:00
Skip calling the Slack file upload API for message types such as fallback (e.g., Facebook and location messages) that lack actual file data in attachments. This prevents unnecessary API calls and resolves a Sentry error currently occurring in production. fixes: https://github.com/chatwoot/chatwoot/issues/10460
71 lines
2.9 KiB
Ruby
71 lines
2.9 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe Attachment do
|
|
let!(:message) { create(:message) }
|
|
|
|
describe 'external url validations' do
|
|
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
|
|
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 'with_attached_file?' do
|
|
it 'returns true if its an attachment with file' do
|
|
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.with_attached_file?).to be true
|
|
end
|
|
|
|
it 'returns false if its an attachment with out a file' do
|
|
attachment = message.attachments.new(account_id: message.account_id, file_type: :fallback)
|
|
expect(attachment.with_attached_file?).to be false
|
|
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
|