From c5487657dbfb7838dd52bb7add18431c8c0f75a8 Mon Sep 17 00:00:00 2001 From: Mathieu Magnin Date: Thu, 5 Oct 2017 15:22:56 +0200 Subject: [PATCH] Create a Job that receive automatically each new dossier from a specific procedure --- ...auto_receive_dossiers_for_procedure_job.rb | 10 ++++++ spec/factories/dossier.rb | 9 +++++ ...receive_dossiers_for_procedure_job_spec.rb | 34 +++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 app/jobs/auto_receive_dossiers_for_procedure_job.rb create mode 100644 spec/jobs/auto_receive_dossiers_for_procedure_job_spec.rb diff --git a/app/jobs/auto_receive_dossiers_for_procedure_job.rb b/app/jobs/auto_receive_dossiers_for_procedure_job.rb new file mode 100644 index 000000000..33e4c6083 --- /dev/null +++ b/app/jobs/auto_receive_dossiers_for_procedure_job.rb @@ -0,0 +1,10 @@ +class AutoReceiveDossiersForProcedureJob < ApplicationJob + queue_as :cron + + def perform(procedure_id) + procedure = Procedure.find_by(id: procedure_id) + if procedure + procedure.dossiers.state_nouveaux.update_all(state: "received", received_at: Time.now) + end + end +end diff --git a/spec/factories/dossier.rb b/spec/factories/dossier.rb index 231e8e8ce..924696a81 100644 --- a/spec/factories/dossier.rb +++ b/spec/factories/dossier.rb @@ -79,5 +79,14 @@ FactoryGirl.define do dossier.save! end end + + trait :received do + after(:create) do |dossier, _evaluator| + dossier.state = 'received' + dossier.initiated_at = dossier.created_at + 1.minute + dossier.created_at = dossier.created_at + 2.minute + dossier.save! + end + end end end diff --git a/spec/jobs/auto_receive_dossiers_for_procedure_job_spec.rb b/spec/jobs/auto_receive_dossiers_for_procedure_job_spec.rb new file mode 100644 index 000000000..b8071f634 --- /dev/null +++ b/spec/jobs/auto_receive_dossiers_for_procedure_job_spec.rb @@ -0,0 +1,34 @@ +require 'rails_helper' + +RSpec.describe AutoReceiveDossiersForProcedureJob, type: :job do + describe "perform" do + let(:date) { Time.utc(2017, 9, 1, 10, 5, 0) } + + before { Timecop.freeze(date) } + + subject { AutoReceiveDossiersForProcedureJob.new.perform(procedure_id) } + + context "with some dossiers" do + let(:nouveau_dossier1) { create(:dossier, :initiated) } + let(:nouveau_dossier2) { create(:dossier, :initiated, procedure: nouveau_dossier1.procedure) } + let(:dossier_recu) { create(:dossier, :received, procedure: nouveau_dossier2.procedure) } + let(:dossier_draft) { create(:dossier, procedure: dossier_recu.procedure) } + let(:procedure_id) { dossier_draft.procedure_id } + + it do + subject + expect(nouveau_dossier1.reload.received?).to be true + expect(nouveau_dossier1.reload.received_at).to eq(date) + + expect(nouveau_dossier2.reload.received?).to be true + expect(nouveau_dossier2.reload.received_at).to eq(date) + + expect(dossier_recu.reload.received?).to be true + expect(dossier_recu.reload.received_at).to eq(date) + + expect(dossier_draft.reload.draft?).to be true + expect(dossier_draft.reload.received_at).to eq(nil) + end + end + end +end