From 059d80ea34ace26fd6903cfda60adf3a8f010375 Mon Sep 17 00:00:00 2001 From: clemkeirua Date: Mon, 17 Feb 2020 16:32:41 +0100 Subject: [PATCH] #4785 ajout d'une balise 'groupe instructeur' --- .../concerns/tags_substitution_concern.rb | 21 ++++++++++++++++- .../concern/tags_substitution_concern_spec.rb | 23 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/models/concerns/tags_substitution_concern.rb b/app/models/concerns/tags_substitution_concern.rb index 1410f4479..2c7a82266 100644 --- a/app/models/concerns/tags_substitution_concern.rb +++ b/app/models/concerns/tags_substitution_concern.rb @@ -11,6 +11,13 @@ module TagsSubstitutionConcern target: :motivation, available_for_states: Dossier::TERMINE }, + { + libelle: 'groupe instructeur', + description: 'Le groupe instructeur en charge du dossier', + lambda: -> (d) { d.groupe_instructeur.label }, + available?: -> (d) { d.procedure.routee? }, + available_for_states: Dossier::SOUMIS + }, { libelle: 'date de dépôt', description: 'Date du passage en construction du dossier par l’usager', @@ -219,7 +226,19 @@ module TagsSubstitutionConcern def replace_tags_with_values_from_data(text, tags, data) if data.present? tags.reduce(text) do |acc, tag| - replace_tag(acc, tag, data) + # A tag is available by default. + # If it has an :available? lambda, then we check its result to determine if the tag is available + if tag.key?(:available?) + tag_available = instance_exec(data, &tag[:available?]) + else + tag_available = true + end + + if tag_available + replace_tag(acc, tag, data) + else + text + end end else text diff --git a/spec/models/concern/tags_substitution_concern_spec.rb b/spec/models/concern/tags_substitution_concern_spec.rb index 288c0075a..cb3c9b352 100644 --- a/spec/models/concern/tags_substitution_concern_spec.rb +++ b/spec/models/concern/tags_substitution_concern_spec.rb @@ -70,6 +70,29 @@ describe TagsSubstitutionConcern, type: :model do end end + context 'when the template use the groupe instructeur tags' do + let(:template) { '--groupe instructeur--' } + let(:state) { Dossier.states.fetch(:en_instruction) } + let!(:dossier) { create(:dossier, procedure: procedure, individual: individual, etablissement: etablissement, state: state) } + context 'and the dossier has a groupe instructeur' do + label = 'Ville de Bordeaux' + before do + gi = procedure.groupe_instructeurs.create(label: label) + gi.dossiers << dossier + dossier.update(groupe_instructeur: gi) + dossier.reload + end + + it { expect(procedure.groupe_instructeurs.size).to eq(2) } + it { expect(procedure.routee?).to eq(true) } + it { is_expected.to eq(label) } + end + + context 'and the dossier has no groupe instructeur' do + it { is_expected.to eq(template) } + end + end + context 'when the procedure has a type de champ named libelleA et libelleB' do let(:types_de_champ) do [