From 772d92a4d3706235578e2cbe88058bb389c05c2d Mon Sep 17 00:00:00 2001 From: Tejaswini Chile Date: Tue, 7 Jun 2022 17:50:51 +0530 Subject: [PATCH] fix: Facebook reauthorization mailer (#4695) --- app/builders/messages/facebook/message_builder.rb | 2 +- .../layout/sidebarComponents/Secondary.vue | 1 + .../sidebarComponents/SecondaryChildNavItem.vue | 12 ++++++++++++ .../layout/sidebarComponents/SecondaryNavItem.vue | 15 ++++++++++++++- app/javascript/dashboard/helper/inbox.js | 7 +++++++ .../dashboard/helper/specs/inbox.spec.js | 10 +++++++++- .../dashboard/i18n/locale/en/settings.json | 3 ++- .../messages/facebook/message_builder_spec.rb | 2 +- spec/models/channel/facebook_page_spec.rb | 2 ++ 9 files changed, 49 insertions(+), 5 deletions(-) diff --git a/app/builders/messages/facebook/message_builder.rb b/app/builders/messages/facebook/message_builder.rb index 3b3248ed1..f19d3c8b7 100644 --- a/app/builders/messages/facebook/message_builder.rb +++ b/app/builders/messages/facebook/message_builder.rb @@ -27,7 +27,7 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder end ensure_contact_avatar rescue Koala::Facebook::AuthenticationError - Rails.logger.error "Facebook Authorization expired for Inbox #{@inbox.id}" + @inbox.channel.authorization_error! rescue StandardError => e ChatwootExceptionTracker.new(e, account: @inbox.account).capture_exception true diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue b/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue index 724576347..4b19a3ec3 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue @@ -95,6 +95,7 @@ export default { ), type: inbox.channel_type, phoneNumber: inbox.phone_number, + reauthorizationRequired: inbox.reauthorization_required, })) .sort((a, b) => a.label.toLowerCase() > b.label.toLowerCase() ? 1 : -1 diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryChildNavItem.vue b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryChildNavItem.vue index 7bf57df1a..4d2601774 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryChildNavItem.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryChildNavItem.vue @@ -30,6 +30,14 @@ {{ count }} + + + @@ -57,6 +65,10 @@ export default { type: String, default: '', }, + warningIcon: { + type: String, + default: '', + }, count: { type: String, default: '', diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue index ffd8018d5..1fcde8948 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue @@ -34,6 +34,7 @@ :label-color="child.color" :should-truncate="child.truncateLabel" :icon="computedInboxClass(child)" + :warning-icon="computedInboxErrorClass(child)" /> { return 'chat'; } }; + +export const getInboxWarningIconClass = (type, reauthorizationRequired) => { + if (type === INBOX_TYPES.FB && reauthorizationRequired) { + return 'warning'; + } + return ''; +}; diff --git a/app/javascript/dashboard/helper/specs/inbox.spec.js b/app/javascript/dashboard/helper/specs/inbox.spec.js index f6d6aa9f0..2db937be1 100644 --- a/app/javascript/dashboard/helper/specs/inbox.spec.js +++ b/app/javascript/dashboard/helper/specs/inbox.spec.js @@ -1,4 +1,4 @@ -import { getInboxClassByType } from '../inbox'; +import { getInboxClassByType, getInboxWarningIconClass } from '../inbox'; describe('#Inbox Helpers', () => { describe('getInboxClassByType', () => { @@ -34,4 +34,12 @@ describe('#Inbox Helpers', () => { expect(getInboxClassByType('Channel::Email')).toEqual('mail'); }); }); + + describe('getInboxWarningIconClass', () => { + it('should return correct class for warning', () => { + expect(getInboxWarningIconClass('Channel::FacebookPage', true)).toEqual( + 'warning' + ); + }); + }) }); diff --git a/app/javascript/dashboard/i18n/locale/en/settings.json b/app/javascript/dashboard/i18n/locale/en/settings.json index e8709c62f..9299be2b5 100644 --- a/app/javascript/dashboard/i18n/locale/en/settings.json +++ b/app/javascript/dashboard/i18n/locale/en/settings.json @@ -185,7 +185,8 @@ "REPORTS_TEAM": "Team", "SET_AVAILABILITY_TITLE": "Set yourself as", "BETA": "Beta", - "REPORTS_OVERVIEW": "Overview" + "REPORTS_OVERVIEW": "Overview", + "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services" }, "CREATE_ACCOUNT": { "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", diff --git a/spec/builders/messages/facebook/message_builder_spec.rb b/spec/builders/messages/facebook/message_builder_spec.rb index d928f99ee..bb08bd9b6 100644 --- a/spec/builders/messages/facebook/message_builder_spec.rb +++ b/spec/builders/messages/facebook/message_builder_spec.rb @@ -37,7 +37,7 @@ describe ::Messages::Facebook::MessageBuilder do allow(fb_object).to receive(:get_object).and_raise(Koala::Facebook::AuthenticationError.new(500, 'Error validating access token')) message_builder - expect(facebook_channel.authorization_error_count).to eq(1) + expect(facebook_channel.authorization_error_count).to eq(2) end end end diff --git a/spec/models/channel/facebook_page_spec.rb b/spec/models/channel/facebook_page_spec.rb index 02baac4a1..f0f0e036e 100644 --- a/spec/models/channel/facebook_page_spec.rb +++ b/spec/models/channel/facebook_page_spec.rb @@ -22,9 +22,11 @@ RSpec.describe Channel::FacebookPage do it 'calls channel notifier mail for facebook' do admin_mailer = double mailer_double = double + expect(AdministratorNotifications::ChannelNotificationsMailer).to receive(:with).and_return(admin_mailer) expect(admin_mailer).to receive(:facebook_disconnect).with(channel.inbox).and_return(mailer_double) expect(mailer_double).to receive(:deliver_later) + channel.prompt_reauthorization! end end