fix: Remove fallback phone_number search in WhatsApp event processing (#6904)

This commit is contained in:
Pranav Raj S
2023-04-18 18:30:01 -07:00
committed by GitHub
parent 026e03c307
commit c5c36af529
3 changed files with 37 additions and 6 deletions

View File

@@ -2,7 +2,7 @@ FactoryBot.define do
factory :channel_whatsapp, class: 'Channel::Whatsapp' do
sequence(:phone_number) { |n| "+123456789#{n}1" }
account
provider_config { { 'api_key' => 'test_key' } }
provider_config { { 'api_key' => 'test_key', 'phone_number_id' => 'random_id' } }
message_templates do
[{ 'name' => 'sample_shipping_confirmation',
'status' => 'approved',

View File

@@ -4,7 +4,24 @@ 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(:params) do
{
object: 'whatsapp_business_account',
phone_number: channel.phone_number,
entry: [{
changes: [
{
value: {
metadata: {
phone_number_id: channel.provider_config['phone_number_id'],
display_phone_number: channel.phone_number.delete('+')
}
}
}
]
}]
}
end
let(:process_service) { double }
before do
@@ -24,6 +41,20 @@ RSpec.describe Webhooks::WhatsappEventsJob, type: :job do
job.perform_now(params)
end
it 'will not enqueue message jobs based on phone number in the URL if the entry payload is not present' do
params = {
object: 'whatsapp_business_account',
phone_number: channel.phone_number,
entry: [{ changes: [{}] }]
}
allow(Whatsapp::IncomingMessageWhatsappCloudService).to receive(:new)
allow(Whatsapp::IncomingMessageService).to receive(:new)
expect(Whatsapp::IncomingMessageWhatsappCloudService).not_to receive(:new)
expect(Whatsapp::IncomingMessageService).not_to receive(:new)
job.perform_now(params)
end
it 'will not enqueue Whatsapp::IncomingMessageWhatsappCloudService if channel reauthorization required' do
channel.prompt_reauthorization!
allow(Whatsapp::IncomingMessageWhatsappCloudService).to receive(:new).and_return(process_service)