diff --git a/app/models/champ.rb b/app/models/champ.rb index c3ccf0774..56e62bb2d 100644 --- a/app/models/champ.rb +++ b/app/models/champ.rb @@ -94,7 +94,7 @@ class Champ < ApplicationRecord end def child? - parent_id.present? + row_id.present? end # used for the `required` html attribute diff --git a/app/models/champs/repetition_champ.rb b/app/models/champs/repetition_champ.rb index 7ea9d83cd..0731dea3e 100644 --- a/app/models/champs/repetition_champ.rb +++ b/app/models/champs/repetition_champ.rb @@ -37,7 +37,7 @@ class Champs::RepetitionChamp < Champ end def blank? - champs.empty? + row_ids.empty? end def search_terms diff --git a/spec/models/champ_spec.rb b/spec/models/champ_spec.rb index 50b033a58..6375ee4dd 100644 --- a/spec/models/champ_spec.rb +++ b/spec/models/champ_spec.rb @@ -8,31 +8,50 @@ describe Champ do let(:champ) { Champ.new(value: value) } let(:value) { '' } let(:mandatory) { true } - before { allow(champ).to receive(:type_de_champ).and_return(type_de_champ) } - context 'when mandatory and blank' do - it { expect(champ.mandatory_blank?).to be(true) } - end + context 'with champ' do + before { allow(champ).to receive(:type_de_champ).and_return(type_de_champ) } - context 'when carte mandatory and blank' do - let(:type_de_champ) { build(:type_de_champ_carte, mandatory: mandatory) } - let(:champ) { Champs::CarteChamp.new(value: value) } - let(:value) { nil } - it { expect(champ.mandatory_blank?).to be(true) } - end + context 'when mandatory and blank' do + it { expect(champ.mandatory_blank?).to be(true) } + end - context 'when multiple_drop_down_list mandatory and blank' do - let(:type_de_champ) { build(:type_de_champ_multiple_drop_down_list, mandatory: mandatory) } - let(:champ) { Champs::MultipleDropDownListChamp.new(value: value) } - let(:value) { '[]' } - it { expect(champ.mandatory_blank?).to be(true) } - end + context 'when carte mandatory and blank' do + let(:type_de_champ) { build(:type_de_champ_carte, mandatory: mandatory) } + let(:champ) { Champs::CarteChamp.new(value: value) } + let(:value) { nil } + it { expect(champ.mandatory_blank?).to be(true) } + end - context 'when repetition blank' do - let(:type_de_champ) { build(:type_de_champ_repetition) } - let(:champ) { Champs::RepetitionChamp.new } + context 'when multiple_drop_down_list mandatory and blank' do + let(:type_de_champ) { build(:type_de_champ_multiple_drop_down_list, mandatory: mandatory) } + let(:champ) { Champs::MultipleDropDownListChamp.new(value: value) } + let(:value) { '[]' } + it { expect(champ.mandatory_blank?).to be(true) } + end - it { expect(champ.blank?).to be(true) } + context 'when repetition blank' do + let(:type_de_champ) { build(:type_de_champ_repetition) } + let(:champ) { Champs::RepetitionChamp.new(dossier: Dossier.new(revision: ProcedureRevision.new)) } + + it { expect(champ.blank?).to be(true) } + end + + context 'when not blank' do + let(:value) { 'yop' } + it { expect(champ.mandatory_blank?).to be(false) } + end + + context 'when not mandatory' do + let(:mandatory) { false } + it { expect(champ.mandatory_blank?).to be(false) } + end + + context 'when not mandatory or blank' do + let(:value) { 'u' } + let(:mandatory) { false } + it { expect(champ.mandatory_blank?).to be(false) } + end end context 'when repetition not blank' do @@ -42,22 +61,6 @@ describe Champ do it { expect(champ.blank?).to be(false) } end - - context 'when not blank' do - let(:value) { 'yop' } - it { expect(champ.mandatory_blank?).to be(false) } - end - - context 'when not mandatory' do - let(:mandatory) { false } - it { expect(champ.mandatory_blank?).to be(false) } - end - - context 'when not mandatory or blank' do - let(:value) { 'u' } - let(:mandatory) { false } - it { expect(champ.mandatory_blank?).to be(false) } - end end describe "associations" do @@ -125,7 +128,7 @@ describe Champ do let(:standalone_champ) { build(:champ, type_de_champ: build(:type_de_champ), dossier: build(:dossier)) } let(:public_sections) { dossier.champs_public.filter(&:header_section?) } let(:private_sections) { dossier.champs_private.filter(&:header_section?) } - let(:sections_in_repetition) { champ_in_repetition.parent.champs.filter(&:header_section?) } + let(:sections_in_repetition) { dossier.champs.filter(&:child?).filter(&:header_section?) } it 'returns the sibling sections of a champ' do expect(public_sections).not_to be_empty diff --git a/spec/services/procedure_export_service_spec.rb b/spec/services/procedure_export_service_spec.rb index a92466a17..34cecb9f1 100644 --- a/spec/services/procedure_export_service_spec.rb +++ b/spec/services/procedure_export_service_spec.rb @@ -390,11 +390,11 @@ describe ProcedureExportService do context 'with long libelle composed of utf8 characteres' do before do - procedure.active_revision.types_de_champ_public.each do |c| - c.update!(libelle: "#{c.id} - ?/[] ééé ééé ééééééé ééééééé éééééééé. ééé éé éééééééé éé ééé. ééééé éééééééé ééé ééé.") + procedure.active_revision.types_de_champ_public.each do |type_de_champ| + type_de_champ.update!(libelle: "#{type_de_champ.id} - ?/[] ééé ééé ééééééé ééééééé éééééééé. ééé éé éééééééé éé ééé. ééééé éééééééé ééé ééé.") end - champ_repetition.champs.each do |c| - c.type_de_champ.update!(libelle: "#{c.id} - Quam rem nam maiores numquam dolorem nesciunt. Cum et possimus et aut. Fugit voluptas qui qui.") + procedure.active_revision.children_of(champ_repetition.type_de_champ).each do |type_de_champ| + type_de_champ.update!(libelle: "#{type_de_champ.id} - Quam rem nam maiores numquam dolorem nesciunt. Cum et possimus et aut. Fugit voluptas qui qui.") end end @@ -417,7 +417,7 @@ describe ProcedureExportService do context 'with empty repetition' do before do dossiers.flat_map { |dossier| dossier.champs_public.filter(&:repetition?) }.each do |champ| - champ.champs.destroy_all + Champ.where(row_id: champ.row_ids).destroy_all end end