feat: discard Twilio events when Body parameter is not present (#11096)
- Discard Twilio events when body parameter is not present. --------- Co-authored-by: Pranav <pranavrajs@gmail.com>
This commit is contained in:
@@ -2,7 +2,6 @@ class Webhooks::TwilioDeliveryStatusJob < ApplicationJob
|
|||||||
queue_as :low
|
queue_as :low
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(params = {})
|
||||||
# Process the Twilio delivery status webhook event in the background
|
|
||||||
::Twilio::DeliveryStatusService.new(params: params).perform
|
::Twilio::DeliveryStatusService.new(params: params).perform
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -2,7 +2,10 @@ class Webhooks::TwilioEventsJob < ApplicationJob
|
|||||||
queue_as :low
|
queue_as :low
|
||||||
|
|
||||||
def perform(params = {})
|
def perform(params = {})
|
||||||
# Process the Twilio webhook event in the background
|
# Skip processing if Body parameter or MediaUrl0 is not present
|
||||||
|
# This is to skip processing delivery events being delivered to this endpoint
|
||||||
|
return if params[:Body].blank? && params[:MediaUrl0].blank?
|
||||||
|
|
||||||
::Twilio::IncomingMessageService.new(params: params).perform
|
::Twilio::IncomingMessageService.new(params: params).perform
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,11 +5,11 @@ RSpec.describe Webhooks::TwilioEventsJob do
|
|||||||
|
|
||||||
let(:params) do
|
let(:params) do
|
||||||
{
|
{
|
||||||
'From' => '+1234567890',
|
From: '+1234567890',
|
||||||
'To' => '+0987654321',
|
To: '+0987654321',
|
||||||
'Body' => 'Test message',
|
Body: 'Test message',
|
||||||
'AccountSid' => 'AC123',
|
AccountSid: 'AC123',
|
||||||
'SmsSid' => 'SM123'
|
SmsSid: 'SM123'
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -23,6 +23,60 @@ RSpec.describe Webhooks::TwilioEventsJob do
|
|||||||
service = double
|
service = double
|
||||||
expect(Twilio::IncomingMessageService).to receive(:new).with(params: params).and_return(service)
|
expect(Twilio::IncomingMessageService).to receive(:new).with(params: params).and_return(service)
|
||||||
expect(service).to receive(:perform)
|
expect(service).to receive(:perform)
|
||||||
described_class.new.perform(params)
|
described_class.perform_now(params)
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when Body parameter or MediaUrl0 is not present' do
|
||||||
|
let(:params_without_body) do
|
||||||
|
{
|
||||||
|
From: '+1234567890',
|
||||||
|
To: '+0987654321',
|
||||||
|
AccountSid: 'AC123',
|
||||||
|
SmsSid: 'SM123'
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not process the event' do
|
||||||
|
expect(Twilio::IncomingMessageService).not_to receive(:new)
|
||||||
|
described_class.perform_now(params_without_body)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when Body parameter is present' do
|
||||||
|
let(:params_with_body) do
|
||||||
|
{
|
||||||
|
From: '+1234567890',
|
||||||
|
To: '+0987654321',
|
||||||
|
Body: 'Test message',
|
||||||
|
AccountSid: 'AC123',
|
||||||
|
SmsSid: 'SM123'
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'processes the event' do
|
||||||
|
service = double
|
||||||
|
expect(Twilio::IncomingMessageService).to receive(:new).with(params: params_with_body).and_return(service)
|
||||||
|
expect(service).to receive(:perform)
|
||||||
|
described_class.perform_now(params_with_body)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when MediaUrl0 parameter is present' do
|
||||||
|
let(:params_with_media) do
|
||||||
|
{
|
||||||
|
From: '+1234567890',
|
||||||
|
To: '+0987654321',
|
||||||
|
MediaUrl0: 'https://example.com/media.jpg',
|
||||||
|
AccountSid: 'AC123',
|
||||||
|
SmsSid: 'SM123'
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'processes the event' do
|
||||||
|
service = double
|
||||||
|
expect(Twilio::IncomingMessageService).to receive(:new).with(params: params_with_media).and_return(service)
|
||||||
|
expect(service).to receive(:perform)
|
||||||
|
described_class.perform_now(params_with_media)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user