FEATURE: retry processing incoming emails on rate limit

This commit is contained in:
Régis Hanol
2016-08-08 22:28:27 +02:00
parent 5c06076b5c
commit 51322a46b3
5 changed files with 61 additions and 15 deletions

View File

@@ -0,0 +1,27 @@
require "rails_helper"
require "email/processor"
describe Email::Processor do
describe "rate limits" do
let(:mail) { "From: foo@bar.com\nTo: bar@foo.com\nSubject: FOO BAR\n\nFoo foo bar bar?" }
let(:limit_exceeded) { RateLimiter::LimitExceeded.new(10) }
before do
Email::Receiver.any_instance.expects(:process!).raises(limit_exceeded)
end
it "enqueues a background job by default" do
Jobs.expects(:enqueue).with(:process_email, mail: mail)
Email::Processor.process!(mail)
end
it "doesn't enqueue a background job when retry is disabled" do
Jobs.expects(:enqueue).with(:process_email, mail: mail).never
expect { Email::Processor.process!(mail, false) }.to raise_error(limit_exceeded)
end
end
end

View File

@@ -0,0 +1,12 @@
require "rails_helper"
describe Jobs::ProcessEmail do
let(:mail) { "From: foo@bar.com\nTo: bar@foo.com\nSubject: FOO BAR\n\nFoo foo bar bar?" }
it "process an email without retry" do
Email::Processor.expects(:process!).with(mail, false)
Jobs::ProcessEmail.new.execute(mail: mail)
end
end