mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 02:57:57 +00:00 
			
		
		
		
	 026e03c307
			
		
	
	026e03c307
	
	
	
		
			
			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
 |