From 5c9101d15f0d3bba2e7fa6476b861756abaaaec8 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 30 Jun 2023 14:25:23 +0200 Subject: [PATCH 1/2] bug(merge_fork): un dossier etant sur une revision passee avec une repetition qui a ete supprime ne peut merge_fork --- app/models/concerns/dossier_clone_concern.rb | 5 +---- .../concern/dossier_clone_concern_spec.rb | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/models/concerns/dossier_clone_concern.rb b/app/models/concerns/dossier_clone_concern.rb index 5c02ea731..b5987cdec 100644 --- a/app/models/concerns/dossier_clone_concern.rb +++ b/app/models/concerns/dossier_clone_concern.rb @@ -172,9 +172,6 @@ module DossierCloneConcern champs_to_remove += diff[:removed] champs_to_remove .filter { !_1.child? || !champs_to_remove.include?(_1.parent) } - .each do |champ| - champ.rows.flatten.each(&:destroy!) if champ.repetition? - champ.destroy! - end + .each(&:destroy!) end end diff --git a/spec/models/concern/dossier_clone_concern_spec.rb b/spec/models/concern/dossier_clone_concern_spec.rb index 6a28316d3..8ebe82ef6 100644 --- a/spec/models/concern/dossier_clone_concern_spec.rb +++ b/spec/models/concern/dossier_clone_concern_spec.rb @@ -341,5 +341,22 @@ RSpec.describe DossierCloneConcern do expect(Dossier.exists?(forked_dossier.id)).to be_falsey end end + + context 'with old revision having repetition' do + let(:added_champ) { nil } + let(:removed_champ) { dossier.champs.find(&:repetition?) } + let(:updated_champ) { nil } + + before do + dossier.champs.each do |champ| + champ.update(value: 'old value') + end + procedure.draft_revision.remove_type_de_champ(removed_champ.stable_id) + procedure.publish_revision! + end + it 'works' do + expect { subject }.not_to raise_error(ActiveRecord::InvalidForeignKey) + end + end end end From d4f4998999adba6eac04920b53ef57c99a5e86e8 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 30 Jun 2023 14:26:04 +0200 Subject: [PATCH 2/2] =?UTF-8?q?fix(merge=5Ffork):=20un=20dossier=20etant?= =?UTF-8?q?=20sur=20une=20revision=20passee=20avec=20une=20repetition=20qu?= =?UTF-8?q?i=20a=20ete=20supprim=C3=A9e=20peut=20merge=5Ffork?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/concerns/dossier_clone_concern.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/models/concerns/dossier_clone_concern.rb b/app/models/concerns/dossier_clone_concern.rb index b5987cdec..5c02ea731 100644 --- a/app/models/concerns/dossier_clone_concern.rb +++ b/app/models/concerns/dossier_clone_concern.rb @@ -172,6 +172,9 @@ module DossierCloneConcern champs_to_remove += diff[:removed] champs_to_remove .filter { !_1.child? || !champs_to_remove.include?(_1.parent) } - .each(&:destroy!) + .each do |champ| + champ.rows.flatten.each(&:destroy!) if champ.repetition? + champ.destroy! + end end end