From bd918ee5062c2bd7b04ad66f2e12c47e5feea143 Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Thu, 12 Oct 2023 15:27:38 +0530 Subject: [PATCH] fix: Change the message status to `failed` if the Twilio message delivery status is `undelivered` (#8097) --- app/services/twilio/delivery_status_service.rb | 6 +++++- spec/services/twilio/delivery_status_service_spec.rb | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/services/twilio/delivery_status_service.rb b/app/services/twilio/delivery_status_service.rb index dd0f1ff2e..bf8422fcd 100644 --- a/app/services/twilio/delivery_status_service.rb +++ b/app/services/twilio/delivery_status_service.rb @@ -13,7 +13,7 @@ class Twilio::DeliveryStatusService private def process_statuses - @message.status = params[:MessageStatus] + @message.status = status @message.external_error = external_error if error_occurred? @message.save! end @@ -22,6 +22,10 @@ class Twilio::DeliveryStatusService %w[sent delivered read failed undelivered].include?(params[:MessageStatus]) end + def status + params[:MessageStatus] == 'undelivered' ? 'failed' : params[:MessageStatus] + end + def external_error return nil unless error_occurred? diff --git a/spec/services/twilio/delivery_status_service_spec.rb b/spec/services/twilio/delivery_status_service_spec.rb index 4f88b98fc..dfffe8d56 100644 --- a/spec/services/twilio/delivery_status_service_spec.rb +++ b/spec/services/twilio/delivery_status_service_spec.rb @@ -59,21 +59,24 @@ describe Twilio::DeliveryStatusService do expect(conversation.reload.messages.last.status).to eq('sent') end - it 'updates message status to failed if message status is failed' do + it 'updates message status to failed if message status is undelivered' do params = { SmsSid: 'SMxx', From: '+12345', AccountSid: 'ACxxx', MessagingServiceSid: twilio_channel.messaging_service_sid, MessageSid: conversation.messages.last.source_id, - MessageStatus: 'failed' + MessageStatus: 'undelivered', + ErrorCode: '30002', + ErrorMessage: 'Account suspended' } described_class.new(params: params).perform expect(conversation.reload.messages.last.status).to eq('failed') + expect(conversation.reload.messages.last.external_error).to eq('30002 - Account suspended') end - it 'updates message status to failed and updates the error message if message status is undelivered' do + it 'updates message status to failed and updates the error message if message status is failed' do params = { SmsSid: 'SMxx', From: '+12345',