From de044e29f09d485acc25e1e058ebbea2ce91c523 Mon Sep 17 00:00:00 2001 From: Pranav Date: Tue, 7 May 2024 12:03:38 -0700 Subject: [PATCH] chore: Rescue Oauth2::Error and mark the channel as inactive (#9358) Co-authored-by: Sojan --- app/jobs/inboxes/fetch_imap_emails_job.rb | 3 +++ .../jobs/inboxes/fetch_imap_emails_job_spec.rb | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/app/jobs/inboxes/fetch_imap_emails_job.rb b/app/jobs/inboxes/fetch_imap_emails_job.rb index a00094bd1..34f79d733 100644 --- a/app/jobs/inboxes/fetch_imap_emails_job.rb +++ b/app/jobs/inboxes/fetch_imap_emails_job.rb @@ -36,6 +36,9 @@ class Inboxes::FetchImapEmailsJob < MutexApplicationJob inbound_emails.map do |inbound_mail| process_mail(inbound_mail, channel) end + rescue OAuth2::Error => e + Rails.logger.error "Error for email channel - #{channel.inbox.id} : #{e.message}" + channel.authorization_error! end def process_mail(inbound_mail, channel) diff --git a/spec/jobs/inboxes/fetch_imap_emails_job_spec.rb b/spec/jobs/inboxes/fetch_imap_emails_job_spec.rb index 8b81de070..5054a519c 100644 --- a/spec/jobs/inboxes/fetch_imap_emails_job_spec.rb +++ b/spec/jobs/inboxes/fetch_imap_emails_job_spec.rb @@ -69,6 +69,24 @@ RSpec.describe Inboxes::FetchImapEmailsJob do end end + context 'when IMAP OAuth errors out' do + it 'marks the connection as requiring authorization' do + error_response = double + oauth_error = OAuth2::Error.new(error_response) + + allow(Imap::MicrosoftFetchEmailService).to receive(:new) + .with(channel: microsoft_imap_email_channel, interval: 1) + .and_raise(oauth_error) + + allow(Redis::Alfred).to receive(:incr) + + expect(Redis::Alfred).to receive(:incr) + .with("AUTHORIZATION_ERROR_COUNT:channel_email:#{microsoft_imap_email_channel.id}") + + described_class.perform_now(microsoft_imap_email_channel) + end + end + context 'when the fetch service returns the email objects' do let(:inbound_mail) { create_inbound_email_from_fixture('welcome.eml').mail } let(:mailbox) { double }