use traitement model
when a dossier is terminated (accepte, refuse or classe_sans_suite), we store now `processed_at` and `motivation` in a traitement instance
This commit is contained in:
parent
f631acd118
commit
a072d35211
14 changed files with 107 additions and 29 deletions
|
@ -127,11 +127,15 @@ FactoryBot.define do
|
|||
end
|
||||
|
||||
trait :accepte do
|
||||
after(:create) do |dossier, _evaluator|
|
||||
transient do
|
||||
motivation { nil }
|
||||
end
|
||||
|
||||
after(:create) do |dossier, evaluator|
|
||||
dossier.state = Dossier.states.fetch(:accepte)
|
||||
dossier.en_construction_at ||= dossier.created_at + 1.minute
|
||||
dossier.en_instruction_at ||= dossier.en_construction_at + 1.minute
|
||||
dossier.processed_at ||= dossier.en_instruction_at + 1.minute
|
||||
dossier.traitements.build(state: Dossier.states.fetch(:accepte), processed_at: dossier.en_instruction_at + 1.minute, motivation: evaluator.motivation)
|
||||
dossier.save!
|
||||
end
|
||||
end
|
||||
|
@ -141,7 +145,7 @@ FactoryBot.define do
|
|||
dossier.state = Dossier.states.fetch(:refuse)
|
||||
dossier.en_construction_at ||= dossier.created_at + 1.minute
|
||||
dossier.en_instruction_at ||= dossier.en_construction_at + 1.minute
|
||||
dossier.processed_at ||= dossier.en_instruction_at + 1.minute
|
||||
dossier.traitements.build(state: Dossier.states.fetch(:refuse), processed_at: dossier.en_instruction_at + 1.minute)
|
||||
dossier.save!
|
||||
end
|
||||
end
|
||||
|
@ -151,14 +155,14 @@ FactoryBot.define do
|
|||
dossier.state = Dossier.states.fetch(:sans_suite)
|
||||
dossier.en_construction_at ||= dossier.created_at + 1.minute
|
||||
dossier.en_instruction_at ||= dossier.en_construction_at + 1.minute
|
||||
dossier.processed_at ||= dossier.en_instruction_at + 1.minute
|
||||
dossier.traitements.build(state: Dossier.states.fetch(:sans_suite), processed_at: dossier.en_instruction_at + 1.minute)
|
||||
dossier.save!
|
||||
end
|
||||
end
|
||||
|
||||
trait :with_motivation do
|
||||
after(:create) do |dossier, _evaluator|
|
||||
dossier.motivation = case dossier.state
|
||||
motivation = case dossier.state
|
||||
when Dossier.states.fetch(:refuse)
|
||||
'L’entreprise concernée n’est pas agréée.'
|
||||
when Dossier.states.fetch(:sans_suite)
|
||||
|
@ -166,6 +170,7 @@ FactoryBot.define do
|
|||
else
|
||||
'Vous avez validé les conditions.'
|
||||
end
|
||||
dossier.traitements.last.update!(motivation: motivation)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ describe TagsSubstitutionConcern, type: :model do
|
|||
let(:individual) { nil }
|
||||
let(:etablissement) { create(:etablissement) }
|
||||
let!(:dossier) { create(:dossier, procedure: procedure, individual: individual, etablissement: etablissement) }
|
||||
let(:instructeur) { create(:instructeur) }
|
||||
|
||||
before { Timecop.freeze(Time.zone.now) }
|
||||
|
||||
|
@ -242,7 +243,7 @@ describe TagsSubstitutionConcern, type: :model do
|
|||
end
|
||||
|
||||
context 'when the dossier has a motivation' do
|
||||
let(:dossier) { create(:dossier, motivation: 'motivation') }
|
||||
let(:dossier) { create(:dossier, :accepte, motivation: 'motivation') }
|
||||
|
||||
context 'and the template has some dossier tags' do
|
||||
let(:template) { '--motivation-- --numéro du dossier--' }
|
||||
|
@ -318,9 +319,13 @@ describe TagsSubstitutionConcern, type: :model do
|
|||
|
||||
context "when using a date tag" do
|
||||
before do
|
||||
dossier.en_construction_at = Time.zone.local(2001, 2, 3)
|
||||
dossier.en_instruction_at = Time.zone.local(2004, 5, 6)
|
||||
dossier.processed_at = Time.zone.local(2007, 8, 9)
|
||||
Timecop.freeze(Time.zone.local(2001, 2, 3))
|
||||
dossier.passer_en_construction!
|
||||
Timecop.freeze(Time.zone.local(2004, 5, 6))
|
||||
dossier.passer_en_instruction!(instructeur)
|
||||
Timecop.freeze(Time.zone.local(2007, 8, 9))
|
||||
dossier.accepter!(instructeur, nil, nil)
|
||||
Timecop.return
|
||||
end
|
||||
|
||||
context "with date de dépôt" do
|
||||
|
|
|
@ -209,8 +209,17 @@ describe Dossier do
|
|||
let(:date1) { 1.day.ago }
|
||||
let(:date2) { 1.hour.ago }
|
||||
let(:date3) { 1.minute.ago }
|
||||
let(:dossier) { create(:dossier, :with_entreprise, user: user, procedure: procedure, en_construction_at: date1, en_instruction_at: date2, processed_at: date3, motivation: "Motivation") }
|
||||
let!(:follow) { create(:follow, instructeur: instructeur, dossier: dossier) }
|
||||
let(:dossier) do
|
||||
d = create(:dossier, :with_entreprise, user: user, procedure: procedure)
|
||||
Timecop.freeze(date1)
|
||||
d.passer_en_construction!
|
||||
Timecop.freeze(date2)
|
||||
d.passer_en_instruction!(instructeur)
|
||||
Timecop.freeze(date3)
|
||||
d.accepter!(instructeur, "Motivation", nil)
|
||||
Timecop.return
|
||||
d
|
||||
end
|
||||
|
||||
describe "followers_instructeurs" do
|
||||
let(:non_following_instructeur) { create(:instructeur) }
|
||||
|
@ -399,8 +408,8 @@ describe Dossier do
|
|||
end
|
||||
|
||||
it { expect(dossier.state).to eq(Dossier.states.fetch(:accepte)) }
|
||||
it { expect(dossier.traitements.last.processed_at).to eq(beginning_of_day) }
|
||||
it { expect(dossier.processed_at).to eq(beginning_of_day) }
|
||||
|
||||
end
|
||||
|
||||
context 'when dossier is refuse' do
|
||||
|
@ -801,7 +810,7 @@ describe Dossier do
|
|||
dossier.procedure.update_column(:web_hook_url, '/webhook.json')
|
||||
|
||||
expect {
|
||||
dossier.update_column(:motivation, 'bonjour')
|
||||
dossier.update_column(:search_terms, 'bonjour')
|
||||
}.to_not have_enqueued_job(WebHookJob)
|
||||
|
||||
expect {
|
||||
|
@ -809,7 +818,7 @@ describe Dossier do
|
|||
}.to have_enqueued_job(WebHookJob)
|
||||
|
||||
expect {
|
||||
dossier.update_column(:motivation, 'bonjour2')
|
||||
dossier.update_column(:search_terms, 'bonjour2')
|
||||
}.to_not have_enqueued_job(WebHookJob)
|
||||
|
||||
expect {
|
||||
|
@ -904,8 +913,11 @@ describe Dossier do
|
|||
|
||||
after { Timecop.return }
|
||||
|
||||
it { expect(dossier.traitements.last.motivation).to eq('motivation') }
|
||||
it { expect(dossier.motivation).to eq('motivation') }
|
||||
it { expect(dossier.traitements.last.instructeur).to eq(instructeur) }
|
||||
it { expect(dossier.en_instruction_at).to eq(dossier.en_instruction_at) }
|
||||
it { expect(dossier.traitements.last.processed_at).to eq(now) }
|
||||
it { expect(dossier.processed_at).to eq(now) }
|
||||
it { expect(dossier.state).to eq('accepte') }
|
||||
it { expect(last_operation.operation).to eq('accepter') }
|
||||
|
|
|
@ -478,7 +478,7 @@ describe Instructeur, type: :model do
|
|||
before do
|
||||
procedure_to_assign.update(declarative_with_state: "accepte")
|
||||
DeclarativeProceduresJob.new.perform
|
||||
dossier.update(processed_at: Time.zone.yesterday.beginning_of_day)
|
||||
dossier.traitements.last.update(processed_at: Time.zone.yesterday.beginning_of_day)
|
||||
dossier.reload
|
||||
end
|
||||
|
||||
|
|
5
spec/models/traitement_spec.rb
Normal file
5
spec/models/traitement_spec.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Traitement, type: :model do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
|
@ -66,7 +66,7 @@ describe NotificationService do
|
|||
before do
|
||||
procedure.update(declarative_with_state: "accepte")
|
||||
DeclarativeProceduresJob.new.perform
|
||||
dossier.update(processed_at: Time.zone.yesterday.beginning_of_day)
|
||||
dossier.traitements.last.update!(processed_at: Time.zone.yesterday.beginning_of_day)
|
||||
dossier.reload
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue