diff --git a/app/models/logic/champ_value.rb b/app/models/logic/champ_value.rb index bad3fe362a4..bd4d31f0020 100644 --- a/app/models/logic/champ_value.rb +++ b/app/models/logic/champ_value.rb @@ -6,7 +6,10 @@ class Logic::ChampValue < Logic::Term :decimal_number, :drop_down_list, :multiple_drop_down_list, - :departements + :communes, + :epci, + :departements, + :regions ) CHAMP_VALUE_TYPE = { @@ -61,7 +64,11 @@ def type(type_de_champs) CHAMP_VALUE_TYPE.fetch(:boolean) when MANAGED_TYPE_DE_CHAMP.fetch(:integer_number), MANAGED_TYPE_DE_CHAMP.fetch(:decimal_number) CHAMP_VALUE_TYPE.fetch(:number) - when MANAGED_TYPE_DE_CHAMP.fetch(:drop_down_list), MANAGED_TYPE_DE_CHAMP.fetch(:departements) + when MANAGED_TYPE_DE_CHAMP.fetch(:drop_down_list), + MANAGED_TYPE_DE_CHAMP.fetch(:communes), + MANAGED_TYPE_DE_CHAMP.fetch(:epci), + MANAGED_TYPE_DE_CHAMP.fetch(:departements), + MANAGED_TYPE_DE_CHAMP.fetch(:regions) CHAMP_VALUE_TYPE.fetch(:enum) when MANAGED_TYPE_DE_CHAMP.fetch(:multiple_drop_down_list) CHAMP_VALUE_TYPE.fetch(:enums) @@ -95,8 +102,12 @@ def ==(other) def options(type_de_champs) tdc = type_de_champ(type_de_champs) - if tdc.departement? + + case tdc.type_champ + when MANAGED_TYPE_DE_CHAMP.fetch(:communes), MANAGED_TYPE_DE_CHAMP.fetch(:epci), MANAGED_TYPE_DE_CHAMP.fetch(:departements) APIGeoService.departements.map { ["#{_1[:code]} – #{_1[:name]}", _1[:code]] } + when MANAGED_TYPE_DE_CHAMP.fetch(:regions) + APIGeoService.regions.map { ["#{_1[:code]} – #{_1[:name]}", _1[:code]] } else opts = tdc.drop_down_list_enabled_non_empty_options.map { |option| [option, option] } if tdc.drop_down_other? diff --git a/spec/components/types_de_champ_editor/conditions_component_spec.rb b/spec/components/types_de_champ_editor/conditions_component_spec.rb index 7a840b59675..ffce44546ed 100644 --- a/spec/components/types_de_champ_editor/conditions_component_spec.rb +++ b/spec/components/types_de_champ_editor/conditions_component_spec.rb @@ -81,6 +81,30 @@ end end + context 'communes' do + let(:communes) { create(:type_de_champ_communes) } + let(:upper_tdcs) { [communes] } + let(:condition) { empty_operator(champ_value(communes.stable_id), constant(true)) } + let(:departement_options) { APIGeoService.departements.map { "#{_1[:code]} – #{_1[:name]}" } } + + it do + expect(page).to have_select('type_de_champ[condition_form][rows][][operator_name]', with_options: ['Est']) + expect(page).to have_select('type_de_champ[condition_form][rows][][value]', options: (['Sélectionner'] + departement_options)) + end + end + + context 'epcis' do + let(:epcis) { create(:type_de_champ_epci) } + let(:upper_tdcs) { [epcis] } + let(:condition) { empty_operator(champ_value(epcis.stable_id), constant(true)) } + let(:departement_options) { APIGeoService.departements.map { "#{_1[:code]} – #{_1[:name]}" } } + + it do + expect(page).to have_select('type_de_champ[condition_form][rows][][operator_name]', with_options: ['Est']) + expect(page).to have_select('type_de_champ[condition_form][rows][][value]', options: (['Sélectionner'] + departement_options)) + end + end + context 'departements' do let(:departements) { create(:type_de_champ_departements) } let(:upper_tdcs) { [departements] } @@ -92,6 +116,18 @@ expect(page).to have_select('type_de_champ[condition_form][rows][][value]', options: (['Sélectionner'] + departement_options)) end end + + context 'regions' do + let(:regions) { create(:type_de_champ_regions) } + let(:upper_tdcs) { [regions] } + let(:condition) { empty_operator(champ_value(regions.stable_id), constant(true)) } + let(:region_options) { APIGeoService.regions.map { "#{_1[:code]} – #{_1[:name]}" } } + + it do + expect(page).to have_select('type_de_champ[condition_form][rows][][operator_name]', with_options: ['Est']) + expect(page).to have_select('type_de_champ[condition_form][rows][][value]', options: (['Sélectionner'] + region_options)) + end + end end context 'and 2 conditions' do