diff --git a/app/jobs/inboxes/fetch_imap_emails_job.rb b/app/jobs/inboxes/fetch_imap_emails_job.rb index a00094bd18b1..34f79d733df5 100644 --- a/app/jobs/inboxes/fetch_imap_emails_job.rb +++ b/app/jobs/inboxes/fetch_imap_emails_job.rb @@ -36,6 +36,9 @@ def process_email_for_channel(channel, interval) 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 8b81de070047..5054a519cfbd 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 @@ 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 }