When the CC field is generated in the UI, the email values are joined together with ", " but when they are parsed, we currently split by just ",". This causes an error on the backend and on the frontend. It seems reasonable to update the code to allow whitespace in the input and to split by `\s*,\s` and also to trim leading and trailing whitespace from the CC list. --------- Co-authored-by: Sojan <sojan@pepalo.com>
115 lines
4.5 KiB
Ruby
115 lines
4.5 KiB
Ruby
require 'rails_helper'
|
|
|
|
describe ::Messages::MessageBuilder do
|
|
subject(:message_builder) { described_class.new(user, conversation, params).perform }
|
|
|
|
let(:account) { create(:account) }
|
|
let(:user) { create(:user, account: account) }
|
|
let(:inbox) { create(:inbox, account: account) }
|
|
let(:inbox_member) { create(:inbox_member, inbox: inbox, account: account) }
|
|
let(:conversation) { create(:conversation, inbox: inbox, account: account) }
|
|
let(:params) do
|
|
ActionController::Parameters.new({
|
|
content: 'test'
|
|
})
|
|
end
|
|
|
|
describe '#perform' do
|
|
it 'creates a message' do
|
|
message = message_builder
|
|
expect(message.content).to eq params[:content]
|
|
end
|
|
end
|
|
|
|
describe '#perform when message_type is incoming' do
|
|
context 'when channel is not api' do
|
|
let(:params) do
|
|
ActionController::Parameters.new({
|
|
content: 'test',
|
|
message_type: 'incoming'
|
|
})
|
|
end
|
|
|
|
it 'creates throws error when channel is not api' do
|
|
expect { message_builder }.to raise_error 'Incoming messages are only allowed in Api inboxes'
|
|
end
|
|
end
|
|
|
|
context 'when channel is api' do
|
|
let(:channel_api) { create(:channel_api, account: account) }
|
|
let(:conversation) { create(:conversation, inbox: channel_api.inbox, account: account) }
|
|
let(:params) do
|
|
ActionController::Parameters.new({
|
|
content: 'test',
|
|
message_type: 'incoming'
|
|
})
|
|
end
|
|
|
|
it 'creates message when channel is api' do
|
|
message = message_builder
|
|
expect(message.message_type).to eq params[:message_type]
|
|
end
|
|
end
|
|
|
|
context 'when attachment messages' do
|
|
let(:params) do
|
|
ActionController::Parameters.new({
|
|
content: 'test',
|
|
attachments: [Rack::Test::UploadedFile.new('spec/assets/avatar.png', 'image/png')]
|
|
})
|
|
end
|
|
|
|
it 'creates message with attachments' do
|
|
message = message_builder
|
|
expect(message.attachments.first.file_type).to eq 'image'
|
|
end
|
|
|
|
context 'when DIRECT_UPLOAD_ENABLED' do
|
|
let(:params) do
|
|
ActionController::Parameters.new({
|
|
content: 'test',
|
|
attachments: [get_blob_for('spec/assets/avatar.png', 'image/png').signed_id]
|
|
})
|
|
end
|
|
|
|
it 'creates message with attachments' do
|
|
message = message_builder
|
|
expect(message.attachments.first.file_type).to eq 'image'
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'when email channel messages' do
|
|
let!(:channel_email) { create(:channel_email, account: account) }
|
|
let(:inbox_member) { create(:inbox_member, inbox: channel_email.inbox) }
|
|
let(:conversation) { create(:conversation, inbox: channel_email.inbox, account: account) }
|
|
let(:params) do
|
|
ActionController::Parameters.new({ cc_emails: 'test_cc_mail@test.com', bcc_emails: 'test_bcc_mail@test.com' })
|
|
end
|
|
|
|
it 'creates message with content_attributes for cc and bcc email addresses' do
|
|
message = message_builder
|
|
|
|
expect(message.content_attributes[:cc_emails]).to eq [params[:cc_emails]]
|
|
expect(message.content_attributes[:bcc_emails]).to eq [params[:bcc_emails]]
|
|
end
|
|
|
|
it 'does not create message with wrong cc and bcc email addresses' do
|
|
params = ActionController::Parameters.new({ cc_emails: 'test.com', bcc_emails: 'test_bcc.com' })
|
|
expect { described_class.new(user, conversation, params).perform }.to raise_error 'Invalid email address'
|
|
end
|
|
|
|
it 'strips off whitespace before saving cc_emails and bcc_emails' do
|
|
cc_emails = ' test1@test.com , test2@test.com, test3@test.com'
|
|
bcc_emails = 'test1@test.com,test2@test.com, test3@test.com '
|
|
params = ActionController::Parameters.new({ cc_emails: cc_emails, bcc_emails: bcc_emails })
|
|
|
|
message = described_class.new(user, conversation, params).perform
|
|
|
|
expect(message.content_attributes[:cc_emails]).to eq ['test1@test.com', 'test2@test.com', 'test3@test.com']
|
|
expect(message.content_attributes[:bcc_emails]).to eq ['test1@test.com', 'test2@test.com', 'test3@test.com']
|
|
end
|
|
end
|
|
end
|
|
end
|