fix(dossier): fix apply_diff with multiple changed rows

This commit is contained in:
Paul Chavard 2024-10-16 14:15:26 +02:00
parent 3b9efbc5ca
commit c417614695
No known key found for this signature in database
2 changed files with 5 additions and 6 deletions

View file

@ -153,14 +153,11 @@ module DossierCloneConcern
diff[:added].each { _1.update_column(:dossier_id, id) } diff[:added].each { _1.update_column(:dossier_id, id) }
# a bit of a hack to work around unicity index
remove_group_id = ULID.generate
diff[:updated].each do |champ| diff[:updated].each do |champ|
champs_index.fetch(champ.public_id).update(row_id: remove_group_id) champs_index.fetch(champ.public_id)&.destroy!
champ.update_column(:dossier_id, id) champ.update_column(:dossier_id, id)
end end
Champ.where(row_id: remove_group_id).destroy_all
diff[:removed].each(&:destroy!) diff[:removed].each(&:destroy!)
end end
end end

View file

@ -334,15 +334,17 @@ RSpec.describe DossierCloneConcern do
subject { dossier.merge_fork(forked_dossier) } subject { dossier.merge_fork(forked_dossier) }
context 'with updated champ' do context 'with updated champ' do
let(:repetition_champ) { dossier.project_champs_public.last }
let(:updated_champ) { forked_dossier.champs.find { _1.stable_id == 99 } } let(:updated_champ) { forked_dossier.champs.find { _1.stable_id == 99 } }
let(:updated_repetition_champ) { forked_dossier.champs.find { _1.stable_id == 994 } } let(:updated_repetition_champs) { forked_dossier.champs.filter { _1.stable_id == 994 } }
before do before do
repetition_champ.add_row(updated_by: 'test')
dossier.champs.each do |champ| dossier.champs.each do |champ|
champ.update(value: 'old value') champ.update(value: 'old value')
end end
updated_champ.update(value: 'new value') updated_champ.update(value: 'new value')
updated_repetition_champ.update(value: 'new value in repetition') updated_repetition_champs.each { _1.update(value: 'new value in repetition') }
dossier.debounce_index_search_terms_flag.remove dossier.debounce_index_search_terms_flag.remove
end end