From 5a7bd24fbaabdf84e5a74a9cc473c1a8a650cf52 Mon Sep 17 00:00:00 2001 From: Pierre de La Morinerie Date: Mon, 20 Jul 2020 17:20:44 +0200 Subject: [PATCH] models: require belong_to associations on type_de_champ - Make `type_de_champ.procedure` a requirement; - Move the procedure_id assignation to `before_validation` (otherwise the record is invalid, and never gets saved); --- app/models/type_de_champ.rb | 4 ++-- spec/factories/type_de_champ.rb | 2 ++ spec/models/type_de_champ_shared_example.rb | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/models/type_de_champ.rb b/app/models/type_de_champ.rb index 51b02e2da..68a031009 100644 --- a/app/models/type_de_champ.rb +++ b/app/models/type_de_champ.rb @@ -49,7 +49,7 @@ class TypeDeChamp < ApplicationRecord repetition: 'repetition' } - belongs_to :procedure + belongs_to :procedure, optional: false belongs_to :revision, class_name: 'ProcedureRevision', optional: true belongs_to :parent, class_name: 'TypeDeChamp', optional: true @@ -73,8 +73,8 @@ class TypeDeChamp < ApplicationRecord serialize :options, WithIndifferentAccess after_initialize :set_dynamic_type + before_validation :setup_procedure after_create :populate_stable_id - before_save :setup_procedure attr_reader :dynamic_type diff --git a/spec/factories/type_de_champ.rb b/spec/factories/type_de_champ.rb index 12264375f..340f6060d 100644 --- a/spec/factories/type_de_champ.rb +++ b/spec/factories/type_de_champ.rb @@ -7,6 +7,8 @@ FactoryBot.define do mandatory { false } add_attribute(:private) { false } + association :procedure + factory :type_de_champ_text do type_champ { TypeDeChamp.type_champs.fetch(:text) } end diff --git a/spec/models/type_de_champ_shared_example.rb b/spec/models/type_de_champ_shared_example.rb index f29d3de4b..30c455363 100644 --- a/spec/models/type_de_champ_shared_example.rb +++ b/spec/models/type_de_champ_shared_example.rb @@ -156,14 +156,14 @@ shared_examples 'type_de_champ_spec' do describe "repetition" do let(:procedure) { create(:procedure) } let(:type_de_champ) { create(:type_de_champ_repetition, procedure: procedure) } - let(:type_de_champ_text) { create(:type_de_champ_text) } + let(:type_de_champ_text) { create(:type_de_champ_text, procedure: procedure) } let(:type_de_champ_integer_number_attrs) { attributes_for(:type_de_champ_integer_number) } it "associates nested types_de_champ to the parent procedure" do expect(type_de_champ.types_de_champ.size).to eq(0) expect(procedure.types_de_champ.size).to eq(1) - procedure.update(types_de_champ_attributes: [ + procedure.update!(types_de_champ_attributes: [ { id: type_de_champ.id, libelle: type_de_champ.libelle,