From b3558c497d4b218b7b5baa1a202beff0f87ddc5b Mon Sep 17 00:00:00 2001 From: Pierre de La Morinerie Date: Tue, 7 Jan 2020 16:59:11 +0000 Subject: [PATCH] dossiers: make `build_default_individual` explicit It avoid the use of callbacks, and may avoid situations where an empty individual is implicitely created. --- app/controllers/users/dossiers_controller.rb | 4 +++- app/models/dossier.rb | 13 ++++++------- spec/factories/dossier.rb | 3 +++ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/controllers/users/dossiers_controller.rb b/app/controllers/users/dossiers_controller.rb index 69faa767c..2baaab0fe 100644 --- a/app/controllers/users/dossiers_controller.rb +++ b/app/controllers/users/dossiers_controller.rb @@ -231,11 +231,13 @@ module Users return redirect_to url_for dossiers_path end - dossier = Dossier.create!( + dossier = Dossier.new( groupe_instructeur: procedure.defaut_groupe_instructeur, user: current_user, state: Dossier.states.fetch(:brouillon) ) + dossier.build_default_individual + dossier.save! if dossier.procedure.for_individual redirect_to identite_dossier_path(dossier) diff --git a/app/models/dossier.rb b/app/models/dossier.rb index c10dc54dc..96d2f08c2 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -207,9 +207,6 @@ class Dossier < ApplicationRecord delegate :france_connect_information, to: :user before_validation :update_state_dates, if: -> { state_changed? } - before_validation :build_default_individual, - if: -> { new_record? && procedure.for_individual? && individual.blank? } - before_save :build_default_champs, if: Proc.new { groupe_instructeur_id_was.nil? } before_save :update_search_terms @@ -241,10 +238,12 @@ class Dossier < ApplicationRecord end def build_default_individual - self.individual = if france_connect_information.present? - Individual.from_france_connect(france_connect_information) - else - Individual.new + if procedure.for_individual? && individual.blank? + self.individual = if france_connect_information.present? + Individual.from_france_connect(france_connect_information) + else + Individual.new + end end end diff --git a/spec/factories/dossier.rb b/spec/factories/dossier.rb index 313b49d40..73224330c 100644 --- a/spec/factories/dossier.rb +++ b/spec/factories/dossier.rb @@ -15,9 +15,12 @@ FactoryBot.define do procedure = create(:procedure, :published, :with_type_de_champ, :with_type_de_champ_private) end + # Assign the procedure to the dossier through the groupe_instructeur if dossier.groupe_instructeur.nil? dossier.groupe_instructeur = procedure.defaut_groupe_instructeur end + + dossier.build_default_individual end trait :with_entreprise do