diff --git a/app/helpers/procedure_helper.rb b/app/helpers/procedure_helper.rb index ceba04317..4b70aa452 100644 --- a/app/helpers/procedure_helper.rb +++ b/app/helpers/procedure_helper.rb @@ -21,4 +21,29 @@ module ProcedureHelper action = procedure.archivee? ? :reopen : :publish t(action, scope: [:modal, :publish, key]) end + + def dossiers_deletion_warning(procedure) + dossiers_count = procedure.dossiers.state_not_brouillon.count + brouillons_count = procedure.dossiers.state_brouillon.count + formatted_dossiers_count = nil + formatted_brouillons_count = nil + + if dossiers_count > 0 + formatted_dossiers_count = pluralize(dossiers_count, "dossier", "dossiers") + end + + if brouillons_count > 0 + formatted_brouillons_count = pluralize(brouillons_count, "brouillon", "brouillons") + end + + formatted_combination = [formatted_dossiers_count, formatted_brouillons_count] + .compact + .join(" et ") + + [ + formatted_combination, + dossiers_count + brouillons_count == 1 ? "est rattaché" : "sont rattachés", + "à cette procédure, la suppression de cette procédure entrainera également leur suppression." + ].join(" ") + end end diff --git a/app/views/admin/procedures/show.html.haml b/app/views/admin/procedures/show.html.haml index 12c51c98b..cd5c515ff 100644 --- a/app/views/admin/procedures/show.html.haml +++ b/app/views/admin/procedures/show.html.haml @@ -109,11 +109,12 @@ .alert.alert-danger %p Attention : la suppression d’une procédure est définitive. + - dossiers_count = @procedure.dossiers.count - if dossiers_count > 0 %p - = pluralize(dossiers_count, "dossier est rattaché", "dossiers sont rattachés") - à cette procédure, la suppression de cette procédure entrainera également leur suppression. + = dossiers_deletion_warning(@procedure) + %p.text-right = link_to "J'ai compris, je supprime la procédure", hide_admin_procedure_path(@procedure), diff --git a/spec/helpers/procedure_helper_spec.rb b/spec/helpers/procedure_helper_spec.rb new file mode 100644 index 000000000..d9e27e5bb --- /dev/null +++ b/spec/helpers/procedure_helper_spec.rb @@ -0,0 +1,51 @@ +RSpec.describe ProcedureHelper, type: :helper do + let(:procedure) { create(:procedure) } + + describe '#dossiers_deletion_warning' do + subject { dossiers_deletion_warning(procedure) } + + context 'with 1 submitted dossier' do + before do + dossier_1 = create(:dossier, :en_construction, procedure: procedure) + end + + it { is_expected.to eq('1 dossier est rattaché à cette procédure, la suppression de cette procédure entrainera également leur suppression.') } + end + + context 'with 2 submitted dossiers' do + before do + dossier_1 = create(:dossier, :en_construction, procedure: procedure) + dossier_2 = create(:dossier, :en_instruction, procedure: procedure) + end + + it { is_expected.to eq('2 dossiers sont rattachés à cette procédure, la suppression de cette procédure entrainera également leur suppression.') } + end + + context 'with 1 brouillon dossier' do + before do + dossier_1 = create(:dossier, procedure: procedure) + end + + it { is_expected.to eq('1 brouillon est rattaché à cette procédure, la suppression de cette procédure entrainera également leur suppression.') } + end + + context 'with 2 brouillons dossiers' do + before do + dossier_1 = create(:dossier, procedure: procedure) + dossier_2 = create(:dossier, procedure: procedure) + end + + it { is_expected.to eq('2 brouillons sont rattachés à cette procédure, la suppression de cette procédure entrainera également leur suppression.') } + end + + context 'with 2 submitted dossiers and 1 brouillon dossier' do + before do + dossier_1 = create(:dossier, :en_instruction, procedure: procedure) + dossier_2 = create(:dossier, :en_instruction, procedure: procedure) + dossier_3 = create(:dossier, procedure: procedure) + end + + it { is_expected.to eq('2 dossiers et 1 brouillon sont rattachés à cette procédure, la suppression de cette procédure entrainera également leur suppression.') } + end + end +end