fix: Check valid params exists in WhatsAapp payload (#6780)
Fixes #6779 Co-authored-by: Sojan Jose <sojan@pepalo.com>
This commit is contained in:
@@ -9,9 +9,9 @@ class Whatsapp::IncomingMessageBaseService
|
|||||||
def perform
|
def perform
|
||||||
processed_params
|
processed_params
|
||||||
|
|
||||||
if processed_params[:statuses].present?
|
if processed_params.try(:[], :statuses).present?
|
||||||
process_statuses
|
process_statuses
|
||||||
elsif processed_params[:messages].present?
|
elsif processed_params.try(:[], :messages).present?
|
||||||
process_messages
|
process_messages
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ class Whatsapp::IncomingMessageWhatsappCloudService < Whatsapp::IncomingMessageB
|
|||||||
private
|
private
|
||||||
|
|
||||||
def processed_params
|
def processed_params
|
||||||
@processed_params ||= params[:entry].first['changes'].first['value']
|
@processed_params ||= params[:entry].try(:first).try(:[], 'changes').try(:first).try(:[], 'value')
|
||||||
end
|
end
|
||||||
|
|
||||||
def download_attachment_file(attachment_payload)
|
def download_attachment_file(attachment_payload)
|
||||||
|
|||||||
@@ -27,35 +27,6 @@ describe Whatsapp::IncomingMessageWhatsappCloudService do
|
|||||||
}.with_indifferent_access
|
}.with_indifferent_access
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:error_params) do
|
|
||||||
{
|
|
||||||
phone_number: whatsapp_channel.phone_number,
|
|
||||||
object: 'whatsapp_business_account',
|
|
||||||
entry: [{
|
|
||||||
changes: [{
|
|
||||||
value: {
|
|
||||||
contacts: [{ profile: { name: 'Sojan Jose' }, wa_id: '2423423243' }],
|
|
||||||
messages: [{
|
|
||||||
from: '2423423243',
|
|
||||||
image: {
|
|
||||||
id: 'b1c68f38-8734-4ad3-b4a1-ef0c10d683',
|
|
||||||
mime_type: 'image/jpeg',
|
|
||||||
sha256: '29ed500fa64eb55fc19dc4124acb300e5dcca0f822a301ae99944db',
|
|
||||||
caption: 'Check out my product!'
|
|
||||||
},
|
|
||||||
errors: [{
|
|
||||||
code: 400,
|
|
||||||
details: 'Last error was: ServerThrottle. Http request error: HTTP response code said error. See logs for details',
|
|
||||||
title: 'Media download failed: Not retrying as download is not retriable at this time'
|
|
||||||
}],
|
|
||||||
timestamp: '1664799904', type: 'image'
|
|
||||||
}]
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
}]
|
|
||||||
}.with_indifferent_access
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'when valid attachment message params' do
|
context 'when valid attachment message params' do
|
||||||
it 'creates appropriate conversations, message and contacts' do
|
it 'creates appropriate conversations, message and contacts' do
|
||||||
stub_request(:get, whatsapp_channel.media_url('b1c68f38-8734-4ad3-b4a1-ef0c10d683')).to_return(
|
stub_request(:get, whatsapp_channel.media_url('b1c68f38-8734-4ad3-b4a1-ef0c10d683')).to_return(
|
||||||
@@ -94,6 +65,37 @@ describe Whatsapp::IncomingMessageWhatsappCloudService do
|
|||||||
expect(whatsapp_channel.inbox.messages.first.attachments.present?).to be false
|
expect(whatsapp_channel.inbox.messages.first.attachments.present?).to be false
|
||||||
expect(whatsapp_channel.authorization_error_count).to eq(1)
|
expect(whatsapp_channel.authorization_error_count).to eq(1)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when invalid attachment message params' do
|
||||||
|
let(:error_params) do
|
||||||
|
{
|
||||||
|
phone_number: whatsapp_channel.phone_number,
|
||||||
|
object: 'whatsapp_business_account',
|
||||||
|
entry: [{
|
||||||
|
changes: [{
|
||||||
|
value: {
|
||||||
|
contacts: [{ profile: { name: 'Sojan Jose' }, wa_id: '2423423243' }],
|
||||||
|
messages: [{
|
||||||
|
from: '2423423243',
|
||||||
|
image: {
|
||||||
|
id: 'b1c68f38-8734-4ad3-b4a1-ef0c10d683',
|
||||||
|
mime_type: 'image/jpeg',
|
||||||
|
sha256: '29ed500fa64eb55fc19dc4124acb300e5dcca0f822a301ae99944db',
|
||||||
|
caption: 'Check out my product!'
|
||||||
|
},
|
||||||
|
errors: [{
|
||||||
|
code: 400,
|
||||||
|
details: 'Last error was: ServerThrottle. Http request error: HTTP response code said error. See logs for details',
|
||||||
|
title: 'Media download failed: Not retrying as download is not retriable at this time'
|
||||||
|
}],
|
||||||
|
timestamp: '1664799904', type: 'image'
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}]
|
||||||
|
}.with_indifferent_access
|
||||||
|
end
|
||||||
|
|
||||||
it 'with attachment errors' do
|
it 'with attachment errors' do
|
||||||
described_class.new(inbox: whatsapp_channel.inbox, params: error_params).perform
|
described_class.new(inbox: whatsapp_channel.inbox, params: error_params).perform
|
||||||
@@ -102,5 +104,15 @@ describe Whatsapp::IncomingMessageWhatsappCloudService do
|
|||||||
expect(whatsapp_channel.inbox.messages.count).to eq(0)
|
expect(whatsapp_channel.inbox.messages.count).to eq(0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when invalid params' do
|
||||||
|
it 'will not throw error' do
|
||||||
|
described_class.new(inbox: whatsapp_channel.inbox, params: { phone_number: whatsapp_channel.phone_number,
|
||||||
|
object: 'whatsapp_business_account', entry: {} }).perform
|
||||||
|
expect(whatsapp_channel.inbox.conversations.count).to eq(0)
|
||||||
|
expect(Contact.all.first).to be_nil
|
||||||
|
expect(whatsapp_channel.inbox.messages.count).to eq(0)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user