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 end end