92 lines
3.4 KiB
Ruby
92 lines
3.4 KiB
Ruby
|
require 'rails_helper'
|
||
|
|
||
|
RSpec.describe Webhooks::WhatsappEventsJob, type: :job do
|
||
|
subject(:job) { described_class }
|
||
|
|
||
|
let(:channel) { create(:channel_whatsapp, provider: 'whatsapp_cloud', sync_templates: false, validate_provider_config: false) }
|
||
|
let(:params) { { phone_number: channel.phone_number } }
|
||
|
let(:process_service) { double }
|
||
|
|
||
|
before do
|
||
|
allow(process_service).to receive(:perform)
|
||
|
end
|
||
|
|
||
|
it 'enqueues the job' do
|
||
|
expect { job.perform_later(params) }.to have_enqueued_job(described_class)
|
||
|
.with(params)
|
||
|
.on_queue('default')
|
||
|
end
|
||
|
|
||
|
context 'when whatsapp_cloud provider' do
|
||
|
it 'enques Whatsapp::IncomingMessageWhatsappCloudService' do
|
||
|
allow(Whatsapp::IncomingMessageWhatsappCloudService).to receive(:new).and_return(process_service)
|
||
|
expect(Whatsapp::IncomingMessageWhatsappCloudService).to receive(:new)
|
||
|
job.perform_now(params)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when default provider' do
|
||
|
it 'enques Whatsapp::IncomingMessageService' do
|
||
|
stub_request(:post, 'https://waba.360dialog.io/v1/configs/webhook')
|
||
|
channel.update(provider: 'default')
|
||
|
allow(Whatsapp::IncomingMessageService).to receive(:new).and_return(process_service)
|
||
|
expect(Whatsapp::IncomingMessageService).to receive(:new)
|
||
|
job.perform_now(params)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when whatsapp business params' do
|
||
|
it 'enques Whatsapp::IncomingMessageWhatsappCloudService based on the number in payload' do
|
||
|
other_channel = create(:channel_whatsapp, phone_number: '+1987654', provider: 'whatsapp_cloud', sync_templates: false,
|
||
|
validate_provider_config: false)
|
||
|
wb_params = {
|
||
|
phone_number: channel.phone_number,
|
||
|
object: 'whatsapp_business_account',
|
||
|
entry: [
|
||
|
{
|
||
|
changes: [
|
||
|
{
|
||
|
value: {
|
||
|
metadata: {
|
||
|
phone_number_id: other_channel.provider_config['phone_number_id'],
|
||
|
display_phone_number: other_channel.phone_number.delete('+')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
allow(Whatsapp::IncomingMessageWhatsappCloudService).to receive(:new).and_return(process_service)
|
||
|
expect(Whatsapp::IncomingMessageWhatsappCloudService).to receive(:new).with(inbox: other_channel.inbox, params: wb_params)
|
||
|
job.perform_now(wb_params)
|
||
|
end
|
||
|
|
||
|
it 'will not enque Whatsapp::IncomingMessageWhatsappCloudService when invalid phone number id' do
|
||
|
other_channel = create(:channel_whatsapp, phone_number: '+1987654', provider: 'whatsapp_cloud', sync_templates: false,
|
||
|
validate_provider_config: false)
|
||
|
wb_params = {
|
||
|
phone_number: channel.phone_number,
|
||
|
object: 'whatsapp_business_account',
|
||
|
entry: [
|
||
|
{
|
||
|
changes: [
|
||
|
{
|
||
|
value: {
|
||
|
metadata: {
|
||
|
phone_number_id: 'random phone number id',
|
||
|
display_phone_number: other_channel.phone_number.delete('+')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
allow(Whatsapp::IncomingMessageWhatsappCloudService).to receive(:new).and_return(process_service)
|
||
|
expect(Whatsapp::IncomingMessageWhatsappCloudService).not_to receive(:new).with(inbox: other_channel.inbox, params: wb_params)
|
||
|
job.perform_now(wb_params)
|
||
|
end
|
||
|
end
|
||
|
end
|