Merge pull request #7455 from betagouv/US/fix-cron-DeclarativeProceduresJob-fail-all-on-one-error
bug(DeclarativeProceduresJob.perform_now): fail all next procedure on one dossier failure
This commit is contained in:
commit
abb0f8b650
2 changed files with 23 additions and 1 deletions
|
@ -2,6 +2,12 @@ class Cron::DeclarativeProceduresJob < Cron::CronJob
|
||||||
self.schedule_expression = "every 1 minute"
|
self.schedule_expression = "every 1 minute"
|
||||||
|
|
||||||
def perform(*args)
|
def perform(*args)
|
||||||
Procedure.declarative.find_each(&:process_dossiers!)
|
Procedure.declarative.find_each do |procedure|
|
||||||
|
begin
|
||||||
|
procedure.process_dossiers!
|
||||||
|
rescue => e
|
||||||
|
Sentry.capture_exception(e)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -81,4 +81,20 @@ RSpec.describe Cron::DeclarativeProceduresJob, type: :job do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'safer perform' do
|
||||||
|
let(:state) { Dossier.states.fetch(:en_instruction) }
|
||||||
|
|
||||||
|
it 'works no matter if one raise' do
|
||||||
|
procedure_1 = instance_double("Procedure")
|
||||||
|
expect(procedure_1).to receive(:process_dossiers!)
|
||||||
|
procedure_2 = instance_double("Procedure")
|
||||||
|
expect(procedure_2).to receive(:process_dossiers!).and_raise("boom")
|
||||||
|
procedure_3 = double(process_dossiers!: true)
|
||||||
|
expect(procedure_3).to receive(:process_dossiers!)
|
||||||
|
|
||||||
|
expect(Procedure).to receive_message_chain(:declarative, :find_each).and_yield(procedure_1).and_yield(procedure_2).and_yield(procedure_3)
|
||||||
|
Cron::DeclarativeProceduresJob.perform_now
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue