feat(dossier.passer_en_construction!): clean up PJ for champs that are not visible [condition is false]

This commit is contained in:
mfo 2024-07-15 09:34:54 +02:00
parent 6dc8496d3d
commit 1cd539297f
No known key found for this signature in database
GPG key ID: 7CE3E1F5B794A8EC
4 changed files with 59 additions and 7 deletions

View file

@ -20,6 +20,7 @@ module DossierStateConcern
def after_commit_passer_en_construction def after_commit_passer_en_construction
NotificationMailer.send_en_construction_notification(self).deliver_later NotificationMailer.send_en_construction_notification(self).deliver_later
NotificationMailer.send_notification_for_tiers(self).deliver_later if self.for_tiers? NotificationMailer.send_notification_for_tiers(self).deliver_later if self.for_tiers?
remove_piece_justificative_file_not_visible!
end end
def after_passer_en_instruction(h) def after_passer_en_instruction(h)

View file

@ -894,6 +894,7 @@ class Dossier < ApplicationRecord
resolve_pending_correction! resolve_pending_correction!
process_sva_svr! process_sva_svr!
remove_piece_justificative_file_not_visible!
end end
def process_declarative! def process_declarative!
@ -934,6 +935,10 @@ class Dossier < ApplicationRecord
champs_public.filter(&:titre_identite?).map(&:piece_justificative_file).each(&:purge_later) champs_public.filter(&:titre_identite?).map(&:piece_justificative_file).each(&:purge_later)
end end
def remove_piece_justificative_file_not_visible!
champs.filter { _1.piece_justificative_file.attached? && !_1.visible? && _1.piece_justificative_file.purge_later }
end
def check_mandatory_and_visible_champs def check_mandatory_and_visible_champs
champs_for_revision(scope: :public) champs_for_revision(scope: :public)
.filter { _1.child? ? _1.parent.visible? : true } .filter { _1.child? ? _1.parent.visible? : true }

View file

@ -599,7 +599,10 @@ describe Users::DossiersController, type: :controller do
end end
context 'when dossier was already submitted' do context 'when dossier was already submitted' do
before { post :submit_en_construction, params: payload } before do
expect_any_instance_of(Dossier).to receive(:remove_piece_justificative_file_not_visible!)
post :submit_en_construction, params: payload
end
it 'redirects to the dossier' do it 'redirects to the dossier' do
subject subject

View file

@ -476,18 +476,22 @@ describe Dossier, type: :model do
context 'when dossier is en_construction' do context 'when dossier is en_construction' do
context 'when the procedure.routing_enabled? is false' do context 'when the procedure.routing_enabled? is false' do
before do subject do
dossier.passer_en_construction! dossier.passer_en_construction!
dossier.reload dossier.reload
end end
it { expect(dossier.state).to eq(Dossier.states.fetch(:en_construction)) } it do
it { expect(dossier.en_construction_at).to eq(beginning_of_day) } subject
it { expect(dossier.depose_at).to eq(beginning_of_day) } expect(dossier.state).to eq(Dossier.states.fetch(:en_construction))
it { expect(dossier.traitement.state).to eq(Dossier.states.fetch(:en_construction)) } expect(dossier.en_construction_at).to eq(beginning_of_day)
it { expect(dossier.traitement.processed_at).to eq(beginning_of_day) } expect(dossier.depose_at).to eq(beginning_of_day)
expect(dossier.traitement.state).to eq(Dossier.states.fetch(:en_construction))
expect(dossier.traitement.processed_at).to eq(beginning_of_day)
end
it 'should keep first en_construction_at date' do it 'should keep first en_construction_at date' do
subject
Timecop.return Timecop.return
dossier.passer_en_instruction!(instructeur: instructeur) dossier.passer_en_instruction!(instructeur: instructeur)
dossier.repasser_en_construction!(instructeur: instructeur) dossier.repasser_en_construction!(instructeur: instructeur)
@ -498,6 +502,45 @@ describe Dossier, type: :model do
expect(dossier.depose_at).to eq(beginning_of_day) expect(dossier.depose_at).to eq(beginning_of_day)
expect(dossier.en_construction_at).to be > beginning_of_day expect(dossier.en_construction_at).to be > beginning_of_day
end end
context 'when dossier have piece_justificative or titre_identite' do
include Logic
let(:procedure) { create(:procedure, types_de_champ_public:) }
let(:dossier) { create(:dossier, :brouillon, :with_populated_champs, procedure:) }
before { expect(champ).to receive(:visible?).and_return(visible) }
context 'when piece_justificative' do
let(:types_de_champ_public) { [{ type: :piece_justificative }] }
let(:champ) { dossier.champs_for_revision(scope: :public).find(&:piece_justificative?) }
context 'when not visible' do
let(:visible) { false }
it { expect { subject }.to change { champ.reload.piece_justificative_file.attached? } }
end
context 'when visible' do
let(:visible) { true }
it { expect { subject }.not_to change { champ.reload.piece_justificative_file.attached? } }
end
end
context 'when titre identite' do
let(:types_de_champ_public) { [{ type: :titre_identite }] }
let(:champ) { dossier.champs_for_revision(scope: :public).find(&:piece_justificative?) }
context 'when not visible' do
let(:visible) { false }
it { expect { subject }.to change { champ.reload.piece_justificative_file.attached? } }
end
context 'when visible' do
let(:visible) { true }
it { expect { subject }.not_to change { champ.reload.piece_justificative_file.attached? } }
end
end
end
end end
context 'when the procedure.routing_enabled? is true' do context 'when the procedure.routing_enabled? is true' do