fix(fork): dossier forkable when associated objects to champs are not valid

This commit is contained in:
Colin Darie 2023-07-26 11:44:36 +02:00
parent 9571981856
commit fb470c1504
No known key found for this signature in database
GPG key ID: 8C76CADD40253590
2 changed files with 21 additions and 1 deletions

View file

@ -246,7 +246,7 @@ class Champ < ApplicationRecord
value_attributes = fork || !private? ? [:value, :value_json, :data, :external_id] : []
relationships = fork || !private? ? [:etablissement, :geo_areas] : []
deep_clone(only: champ_attributes + value_attributes, include: relationships) do |original, kopy|
deep_clone(only: champ_attributes + value_attributes, include: relationships, validate: !fork) do |original, kopy|
PiecesJustificativesService.clone_attachments(original, kopy)
end
end

View file

@ -207,6 +207,26 @@ RSpec.describe DossierCloneConcern do
# rubocop:enable Lint/BooleanSymbol
end
context 'when associated record is invalid' do
let(:procedure) do
create(:procedure, types_de_champ_public: [
{ type: :carte, libelle: "Carte", stable_id: 992, mandatory: true }
])
end
before do
champ = dossier.champs.find { _1.stable_id == 992 }
geo_area = build(:geo_area, champ:, geometry: { "i'm" => "invalid" })
geo_area.save!(validate: false)
end
it 'can still fork' do
new_dossier.champs.load # load relation so champs are validated below
expect(new_dossier.champs.find { _1.stable_id == 992 }.geo_areas.first).not_to be_valid
end
end
end
end
end