From 28e9291ecdf010a4f87ee1cb8d2856d766ad0f75 Mon Sep 17 00:00:00 2001 From: Ikraam Ghoor Date: Sat, 27 Feb 2021 08:43:45 +0200 Subject: Skip ActiveJob retrying for ProcessInstallmentJob This disables the ActiveJob default retry mechanism because installment processing failures are already taken care of by solidus_subscriptions. Before this, there was a potentional for double retrying, which could causes background jobs and cancelled orders to accumulate leading to side effects such as a bad customer experience. Now, a `process_job_error_handler` configuration Proc is called when a ProcessInstallmentJob `#perfom` method fails. The rescued error can be managed/logged as preffered, or re-raised if the default retry behaviour is required in the job. --- .../solidus_subscriptions/process_installment_job_spec.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'spec/jobs') diff --git a/spec/jobs/solidus_subscriptions/process_installment_job_spec.rb b/spec/jobs/solidus_subscriptions/process_installment_job_spec.rb index 4a33819..6fe8ed2 100644 --- a/spec/jobs/solidus_subscriptions/process_installment_job_spec.rb +++ b/spec/jobs/solidus_subscriptions/process_installment_job_spec.rb @@ -8,4 +8,16 @@ RSpec.describe SolidusSubscriptions::ProcessInstallmentJob do expect(checkout).to have_received(:process) end + + context 'when handling #perform errors' do + it 'swallows error on #perfom error' do + expect { described_class.perform_now(nil) }.not_to raise_error(StandardError) + end + + it 'runs proc on #perform error' do + stub_config(process_job_error_handler: proc { |e| raise e } ) + + expect { described_class.perform_now(nil) }.to raise_error(StandardError) + end + end end -- cgit v1.2.3