Chore: Cleanup attachment handling for Facebook & Whatsapp (#1051)
* Chore: Enable file upload for facebook messenger * Chore: Fix attachments * Chore: Fix Specs * Fix ReplyBox file attachment logic * Set default value for message Co-authored-by: Pranav Raj Sreepuram <pranavrajs@gmail.com>
This commit is contained in:
@@ -10,8 +10,8 @@ FactoryBot.define do
|
||||
|
||||
after(:build) do |message|
|
||||
message.sender ||= create(:user, account: message.account)
|
||||
message.conversation ||= create(:conversation, account: message.account)
|
||||
message.inbox ||= create(:inbox, account: message.account)
|
||||
message.conversation ||= create(:conversation, account: message.account, inbox: message.inbox)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,6 +6,7 @@ describe Facebook::SendOnFacebookService do
|
||||
before do
|
||||
allow(Facebook::Messenger::Subscriptions).to receive(:subscribe).and_return(true)
|
||||
allow(bot).to receive(:deliver)
|
||||
create(:message, message_type: :incoming, inbox: facebook_inbox, account: account, conversation: conversation)
|
||||
end
|
||||
|
||||
let!(:account) { create(:account) }
|
||||
@@ -20,39 +21,43 @@ describe Facebook::SendOnFacebookService do
|
||||
describe '#perform' do
|
||||
context 'without reply' do
|
||||
it 'if message is private' do
|
||||
create(:message, message_type: 'outgoing', private: true, inbox: facebook_inbox, account: account)
|
||||
message = create(:message, message_type: 'outgoing', private: true, inbox: facebook_inbox, account: account)
|
||||
::Facebook::SendOnFacebookService.new(message: message).perform
|
||||
expect(bot).not_to have_received(:deliver)
|
||||
end
|
||||
|
||||
it 'if inbox channel is not facebook page' do
|
||||
create(:message, message_type: 'outgoing', inbox: widget_inbox, account: account)
|
||||
message = create(:message, message_type: 'outgoing', inbox: widget_inbox, account: account)
|
||||
expect { ::Facebook::SendOnFacebookService.new(message: message).perform }.to raise_error 'Invalid channel service was called'
|
||||
expect(bot).not_to have_received(:deliver)
|
||||
end
|
||||
|
||||
it 'if message is not outgoing' do
|
||||
create(:message, message_type: 'incoming', inbox: facebook_inbox, account: account)
|
||||
message = create(:message, message_type: 'incoming', inbox: facebook_inbox, account: account)
|
||||
::Facebook::SendOnFacebookService.new(message: message).perform
|
||||
expect(bot).not_to have_received(:deliver)
|
||||
end
|
||||
|
||||
it 'if message has an FB ID' do
|
||||
create(:message, message_type: 'outgoing', inbox: facebook_inbox, account: account, source_id: SecureRandom.uuid)
|
||||
message = create(:message, message_type: 'outgoing', inbox: facebook_inbox, account: account, source_id: SecureRandom.uuid)
|
||||
::Facebook::SendOnFacebookService.new(message: message).perform
|
||||
expect(bot).not_to have_received(:deliver)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with reply' do
|
||||
it 'if message is sent from chatwoot and is outgoing' do
|
||||
create(:message, message_type: :incoming, inbox: facebook_inbox, account: account, conversation: conversation)
|
||||
create(:message, message_type: 'outgoing', inbox: facebook_inbox, account: account, conversation: conversation)
|
||||
message = create(:message, message_type: 'outgoing', inbox: facebook_inbox, account: account, conversation: conversation)
|
||||
::Facebook::SendOnFacebookService.new(message: message).perform
|
||||
expect(bot).to have_received(:deliver)
|
||||
end
|
||||
|
||||
it 'if message with attachment is sent from chatwoot and is outgoing' do
|
||||
create(:message, message_type: :incoming, inbox: facebook_inbox, account: account, conversation: conversation)
|
||||
message = build(:message, message_type: 'outgoing', inbox: facebook_inbox, account: account, conversation: conversation)
|
||||
attachment = message.attachments.new(account_id: message.account_id, file_type: :image)
|
||||
attachment.file.attach(io: File.open(Rails.root.join('spec/assets/avatar.png')), filename: 'avatar.png', content_type: 'image/png')
|
||||
message.save!
|
||||
::Facebook::SendOnFacebookService.new(message: message).perform
|
||||
expect(bot).to have_received(:deliver)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -25,22 +25,26 @@ describe Twilio::SendOnTwilioService do
|
||||
describe '#perform' do
|
||||
context 'without reply' do
|
||||
it 'if message is private' do
|
||||
create(:message, message_type: 'outgoing', private: true, inbox: twilio_inbox, account: account)
|
||||
message = create(:message, message_type: 'outgoing', private: true, inbox: twilio_inbox, account: account)
|
||||
::Twilio::SendOnTwilioService.new(message: message).perform
|
||||
expect(twilio_client).not_to have_received(:messages)
|
||||
end
|
||||
|
||||
it 'if inbox channel is not facebook page' do
|
||||
create(:message, message_type: 'outgoing', inbox: widget_inbox, account: account)
|
||||
it 'if inbox channel is not twilio' do
|
||||
message = create(:message, message_type: 'outgoing', inbox: widget_inbox, account: account)
|
||||
expect { ::Twilio::SendOnTwilioService.new(message: message).perform }.to raise_error 'Invalid channel service was called'
|
||||
expect(twilio_client).not_to have_received(:messages)
|
||||
end
|
||||
|
||||
it 'if message is not outgoing' do
|
||||
create(:message, message_type: 'incoming', inbox: twilio_inbox, account: account)
|
||||
message = create(:message, message_type: 'incoming', inbox: twilio_inbox, account: account)
|
||||
::Twilio::SendOnTwilioService.new(message: message).perform
|
||||
expect(twilio_client).not_to have_received(:messages)
|
||||
end
|
||||
|
||||
it 'if message has an source id' do
|
||||
create(:message, message_type: 'outgoing', inbox: twilio_inbox, account: account, source_id: SecureRandom.uuid)
|
||||
message = create(:message, message_type: 'outgoing', inbox: twilio_inbox, account: account, source_id: SecureRandom.uuid)
|
||||
::Twilio::SendOnTwilioService.new(message: message).perform
|
||||
expect(twilio_client).not_to have_received(:messages)
|
||||
end
|
||||
end
|
||||
@@ -53,6 +57,7 @@ describe Twilio::SendOnTwilioService do
|
||||
outgoing_message = create(
|
||||
:message, message_type: 'outgoing', inbox: twilio_inbox, account: account, conversation: conversation
|
||||
)
|
||||
::Twilio::SendOnTwilioService.new(message: outgoing_message).perform
|
||||
|
||||
expect(outgoing_message.reload.source_id).to eq('1234')
|
||||
end
|
||||
@@ -69,6 +74,8 @@ describe Twilio::SendOnTwilioService do
|
||||
attachment = message.attachments.new(account_id: message.account_id, file_type: :image)
|
||||
attachment.file.attach(io: File.open(Rails.root.join('spec/assets/avatar.png')), filename: 'avatar.png', content_type: 'image/png')
|
||||
message.save!
|
||||
|
||||
::Twilio::SendOnTwilioService.new(message: message).perform
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -41,22 +41,26 @@ describe Twitter::SendOnTwitterService do
|
||||
describe '#perform' do
|
||||
context 'without reply' do
|
||||
it 'if inbox channel is not twitter profile' do
|
||||
create(:message, message_type: 'outgoing', inbox: widget_inbox, account: account)
|
||||
message = create(:message, message_type: 'outgoing', inbox: widget_inbox, account: account)
|
||||
expect { ::Twitter::SendOnTwitterService.new(message: message).perform }.to raise_error 'Invalid channel service was called'
|
||||
expect(twitter_client).not_to have_received(:send_direct_message)
|
||||
end
|
||||
|
||||
it 'if message is private' do
|
||||
create(:message, message_type: 'outgoing', private: true, inbox: twitter_inbox, account: account)
|
||||
message = create(:message, message_type: 'outgoing', private: true, inbox: twitter_inbox, account: account)
|
||||
::Twitter::SendOnTwitterService.new(message: message).perform
|
||||
expect(twitter_client).not_to have_received(:send_direct_message)
|
||||
end
|
||||
|
||||
it 'if message has source_id' do
|
||||
create(:message, message_type: 'outgoing', source_id: '123', inbox: widget_inbox, account: account)
|
||||
message = create(:message, message_type: 'outgoing', source_id: '123', inbox: twitter_inbox, account: account)
|
||||
::Twitter::SendOnTwitterService.new(message: message).perform
|
||||
expect(twitter_client).not_to have_received(:send_direct_message)
|
||||
end
|
||||
|
||||
it 'if message is not outgoing' do
|
||||
create(:message, message_type: 'incoming', inbox: twitter_inbox, account: account)
|
||||
message = create(:message, message_type: 'incoming', inbox: twitter_inbox, account: account)
|
||||
::Twitter::SendOnTwitterService.new(message: message).perform
|
||||
expect(twitter_client).not_to have_received(:send_direct_message)
|
||||
end
|
||||
end
|
||||
@@ -64,15 +68,17 @@ describe Twitter::SendOnTwitterService do
|
||||
context 'with reply' do
|
||||
it 'if conversation is a direct message' do
|
||||
create(:message, message_type: :incoming, inbox: twitter_inbox, account: account, conversation: dm_conversation)
|
||||
create(:message, message_type: :outgoing, inbox: twitter_inbox, account: account, conversation: dm_conversation)
|
||||
message = create(:message, message_type: :outgoing, inbox: twitter_inbox, account: account, conversation: dm_conversation)
|
||||
::Twitter::SendOnTwitterService.new(message: message).perform
|
||||
expect(twitter_client).to have_received(:send_direct_message)
|
||||
end
|
||||
|
||||
it 'if conversation is a tweet' do
|
||||
create(:message, message_type: :incoming, inbox: twitter_inbox, account: account, conversation: tweet_conversation)
|
||||
tweet = create(:message, message_type: :outgoing, inbox: twitter_inbox, account: account, conversation: tweet_conversation)
|
||||
message = create(:message, message_type: :outgoing, inbox: twitter_inbox, account: account, conversation: tweet_conversation)
|
||||
::Twitter::SendOnTwitterService.new(message: message).perform
|
||||
expect(twitter_client).to have_received(:send_tweet_reply)
|
||||
expect(tweet.reload.source_id).to eq '12345'
|
||||
expect(message.reload.source_id).to eq '12345'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user