From 4d97f6aa8ce35fa5e40021f80dd55f20e833a27f Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Wed, 18 May 2022 10:50:33 +0200 Subject: [PATCH 1/2] types_de_champ_for_revision --- app/models/type_de_champ.rb | 2 +- spec/factories/procedure.rb | 6 ------ spec/models/dossier_spec.rb | 10 ++++++++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/models/type_de_champ.rb b/app/models/type_de_champ.rb index 52259f7f3..479658ce4 100644 --- a/app/models/type_de_champ.rb +++ b/app/models/type_de_champ.rb @@ -307,7 +307,7 @@ class TypeDeChamp < ApplicationRecord def types_de_champ_for_revision(revision) if revision.draft? # if we are asking for children on a draft revision, just use current child types_de_champ - types_de_champ.fillable + revision.children_of(self).fillable else # otherwise return all types_de_champ in their latest state types_de_champ = TypeDeChamp diff --git a/spec/factories/procedure.rb b/spec/factories/procedure.rb index 35bc678d9..ac84834a3 100644 --- a/spec/factories/procedure.rb +++ b/spec/factories/procedure.rb @@ -190,12 +190,6 @@ FactoryBot.define do end end - trait :with_repetition_commune do - after(:build) do |procedure, _evaluator| - build(:type_de_champ_repetition, types_de_champ: [build(:type_de_champ_communes)], procedure: procedure) - end - end - trait :with_number do after(:build) do |procedure, _evaluator| build(:type_de_champ_number, procedure: procedure) diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 6f9c6a041..6ab4ea262 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -1470,7 +1470,13 @@ describe Dossier do context 'within a repetition having a type de champs commune (multiple values for export)' do it 'works' do - proc_test = create(:procedure, :with_repetition_commune) + proc_test = create(:procedure) + + draft = proc_test.draft_revision + + tdc_repetition = draft.add_type_de_champ(type_champ: :repetition, libelle: "repetition") + draft.add_type_de_champ(type_champ: :communes, libelle: "communes", parent_id: tdc_repetition.stable_id) + dossier_test = create(:dossier, procedure: proc_test) repetition = proc_test.types_de_champ_for_procedure_presentation.repetition.first type_champs = repetition.types_de_champ_for_revision(proc_test.active_revision).to_a @@ -1734,7 +1740,7 @@ describe Dossier do let(:rebased_datetime_champ) { dossier.champs.find { |c| c.type_champ == TypeDeChamp.type_champs.fetch(:date) } } let(:repetition_type_de_champ) { procedure.types_de_champ.find { |tdc| tdc.type_champ == TypeDeChamp.type_champs.fetch(:repetition) } } - let(:repetition_text_type_de_champ) { repetition_type_de_champ.types_de_champ.find { |tdc| tdc.type_champ == TypeDeChamp.type_champs.fetch(:text) } } + let(:repetition_text_type_de_champ) { procedure.active_revision.children_of(repetition_type_de_champ).find { |tdc| tdc.type_champ == TypeDeChamp.type_champs.fetch(:text) } } let(:repetition_champ) { dossier.champs.find { |c| c.type_champ == TypeDeChamp.type_champs.fetch(:repetition) } } let(:rebased_repetition_champ) { dossier.champs.find { |c| c.type_champ == TypeDeChamp.type_champs.fetch(:repetition) } } From 633f0d1ce5f5a4c9bc64ae0a593cf4caebafbead Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Wed, 18 May 2022 10:51:31 +0200 Subject: [PATCH 2/2] remove_repetition --- app/models/procedure_revision.rb | 10 +++++++--- app/models/type_de_champ.rb | 7 +++++-- spec/models/procedure_revision_spec.rb | 2 +- spec/models/type_de_champ_shared_example.rb | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/app/models/procedure_revision.rb b/app/models/procedure_revision.rb index be1b03bf2..a8ad60d9f 100644 --- a/app/models/procedure_revision.rb +++ b/app/models/procedure_revision.rb @@ -157,9 +157,13 @@ class ProcedureRevision < ApplicationRecord def children_of(tdc) parent_revision_type_de_champ = revision_types_de_champ.find_by(type_de_champ: tdc) - types_de_champ - .where(procedure_revision_types_de_champ: { parent_id: parent_revision_type_de_champ.id }) - .order("procedure_revision_types_de_champ.position") + if parent_revision_type_de_champ.present? + types_de_champ + .where(procedure_revision_types_de_champ: { parent_id: parent_revision_type_de_champ.id }) + .order("procedure_revision_types_de_champ.position") + else + TypeDeChamp.none + end end private diff --git a/app/models/type_de_champ.rb b/app/models/type_de_champ.rb index 479658ce4..0d9f26574 100644 --- a/app/models/type_de_champ.rb +++ b/app/models/type_de_champ.rb @@ -433,8 +433,11 @@ class TypeDeChamp < ApplicationRecord end def remove_repetition - if !repetition? - types_de_champ.destroy_all + if !repetition? && procedure.present? + procedure + .draft_revision # action occurs only on draft + .children_of(self) + .destroy_all end end end diff --git a/spec/models/procedure_revision_spec.rb b/spec/models/procedure_revision_spec.rb index 5d756da02..65a5cc21f 100644 --- a/spec/models/procedure_revision_spec.rb +++ b/spec/models/procedure_revision_spec.rb @@ -409,7 +409,7 @@ describe ProcedureRevision do let(:procedure) { create(:procedure, :with_repetition) } before do - child = new_draft.types_de_champ_public.last.types_de_champ.first + child = new_draft.children_of(new_draft.types_de_champ_public.last).first new_draft.find_or_clone_type_de_champ(child.stable_id).update(type_champ: :drop_down_list, drop_down_options: ['one', 'two']) end diff --git a/spec/models/type_de_champ_shared_example.rb b/spec/models/type_de_champ_shared_example.rb index 333ec997f..3275cc1b6 100644 --- a/spec/models/type_de_champ_shared_example.rb +++ b/spec/models/type_de_champ_shared_example.rb @@ -101,7 +101,7 @@ shared_examples 'type_de_champ_spec' do let(:target_type_champ) { TypeDeChamp.type_champs.fetch(:text) } it 'removes the children types de champ' do - expect(tdc.types_de_champ).to be_empty + expect(procedure.draft_revision.children_of(tdc)).to be_empty end end end