From 026885ebcf378eab663f43871914cadfa6c8b041 Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Fri, 3 Nov 2023 10:15:50 +0000 Subject: [PATCH] feat(conditional): annotations can be conditioned by champs --- .../administrateurs/procedures_controller.rb | 5 ++++ .../procedure_revision_type_de_champ.rb | 4 +++ .../procedure_revision_type_de_champ_spec.rb | 28 +++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/app/controllers/administrateurs/procedures_controller.rb b/app/controllers/administrateurs/procedures_controller.rb index 019d21972..dcb9b537a 100644 --- a/app/controllers/administrateurs/procedures_controller.rb +++ b/app/controllers/administrateurs/procedures_controller.rb @@ -383,6 +383,11 @@ module Administrateurs revision: [], procedure: [] }, + revision_types_de_champ_public: { + type_de_champ: { piece_justificative_template_attachment: :blob, revision: [], procedure: [] }, + revision: [], + procedure: [] + }, procedure: [] }).find(@procedure.id) end diff --git a/app/models/procedure_revision_type_de_champ.rb b/app/models/procedure_revision_type_de_champ.rb index 8953adc0d..c4842da20 100644 --- a/app/models/procedure_revision_type_de_champ.rb +++ b/app/models/procedure_revision_type_de_champ.rb @@ -46,6 +46,10 @@ class ProcedureRevisionTypeDeChamp < ApplicationRecord upper += parent.upper_coordinates end + if type_de_champ.private? + upper += revision.revision_types_de_champ_public + end + upper end diff --git a/spec/models/procedure_revision_type_de_champ_spec.rb b/spec/models/procedure_revision_type_de_champ_spec.rb index 8759aa57e..448f954cc 100644 --- a/spec/models/procedure_revision_type_de_champ_spec.rb +++ b/spec/models/procedure_revision_type_de_champ_spec.rb @@ -23,5 +23,33 @@ describe ProcedureRevisionTypeDeChamp do it { expect(l2_2.upper_coordinates.map(&:libelle)).to match_array(["l1", "l2.1"]) } end + + context 'when the coordinate is an annotation' do + let(:procedure) do + create(:procedure, + types_de_champ_private: [ + { libelle: 'a1' }, + { libelle: 'a2' } + ], + types_de_champ_public: [ + { libelle: 'l1' }, + { + type: :repetition, libelle: 'l2', children: [ + { libelle: 'l2.1' }, + { libelle: 'l2.2' } + ] + } + ]) + end + + let(:a2) do + procedure + .draft_revision + .revision_types_de_champ.joins(:type_de_champ) + .find_by(type_de_champ: { libelle: 'a2' }) + end + + it { expect(a2.upper_coordinates.map(&:libelle)).to match_array(["l1", "l2", "a1"]) } + end end end