Skip to content

Commit

Permalink
Merge pull request #11135 from demarches-simplifiees/be_lax_with_drop…
Browse files Browse the repository at this point in the history
…_down

ETQ instructeur / usager, je vois toujours les choix que j'ai sélectionné dans une liste mm si l'admin a changé les options
  • Loading branch information
LeSim authored Dec 12, 2024
2 parents fe7c19f + a362e95 commit f839f5a
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 50 deletions.
24 changes: 6 additions & 18 deletions app/models/columns/champ_column.rb
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def typed_value(champ)
when :date
parse_datetime(value)&.to_date
when :enum
parse_enum(value)
value
when :enums
parse_enums(value)
else
Expand All @@ -91,13 +91,13 @@ def cast_value(champ)
when ['integer_number', 'text'], ['decimal_number', 'text'] # number to text
value
when ['drop_down_list', 'multiple_drop_down_list'] # single list can become multi
[parse_enum(value)].compact_blank
[value]
when ['drop_down_list', 'text'] # single list can become text
parse_enum(value)
value
when ['multiple_drop_down_list', 'drop_down_list'] # multi list can become single
parse_enums(value)&.first
parse_enums(value).first
when ['multiple_drop_down_list', 'text'] # multi list can become text
parse_enums(value)&.join(', ')
parse_enums(value).join(', ')
when ['date', 'datetime'] # date <=> datetime
parse_datetime(value)&.to_datetime
when ['datetime', 'date'] # may lose some data, but who cares ?
Expand All @@ -116,19 +116,7 @@ def parse_boolean(value)
end
end

def parse_enum(value)
return value if options_for_select.blank?
value if options_for_select.to_set(&:second).member?(value)
end

def parse_enums(value)
values = JSON.parse(value)
return values if options_for_select.blank?
options = options_for_select.to_set(&:second)
values.filter { options.member?(_1) }
rescue JSON::ParserError
nil
end
def parse_enums(value) = JSON.parse(value) rescue nil

def parse_datetime(value) = Time.zone.parse(value) rescue nil
end
13 changes: 0 additions & 13 deletions app/models/types_de_champ/drop_down_list_type_de_champ.rb
Original file line number Diff line number Diff line change
@@ -1,17 +1,4 @@
# frozen_string_literal: true

class TypesDeChamp::DropDownListTypeDeChamp < TypesDeChamp::TypeDeChampBase
def champ_blank?(champ)
super || !champ_value_in_options?(champ)
end

private

def champ_value_in_options?(champ)
champ_with_other_value?(champ) || drop_down_options.include?(champ.value)
end

def champ_with_other_value?(champ)
drop_down_other? && champ.value_json&.fetch('other', false)
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def selected_options(champ)
[champ.value]
else
JSON.parse(champ.value)
end.filter { drop_down_options.include?(_1) }
end
rescue JSON::ParserError
[]
end
Expand Down
16 changes: 0 additions & 16 deletions spec/models/columns/champ_column_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -121,14 +121,6 @@ def column(label) = procedure.find_column(label:)
expect(column('multiple_drop_down_list').value(champ)).to eq(['val1'])
expect(column('text').value(champ)).to eq('val1')
end

context 'value not in options' do
let(:value) { 'toto' }

it do
expect(column('simple_drop_down_list').value(champ)).to eq(nil)
end
end
end

context 'from a multiple_drop_down_list' do
Expand All @@ -139,14 +131,6 @@ def column(label) = procedure.find_column(label:)
expect(column('simple_drop_down_list').value(champ)).to eq('val1')
expect(column('text').value(champ)).to eq('val1, val2')
end

context 'value not in options' do
let(:value) { '["toto","val2"]' }

it do
expect(column('multiple_drop_down_list').value(champ)).to eq(['val2'])
end
end
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions spec/models/concerns/dossier_rebase_concern_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -449,7 +449,7 @@
tdc_to_update.update(drop_down_options: ["option", "updated"])
end

it { expect { subject }.to change { dossier.project_champs_public.first.to_s }.from('v1').to('') }
it { expect { subject }.not_to change { dossier.project_champs_public.first.to_s } }
end

context 'when a dropdown unused option is removed' do
Expand Down Expand Up @@ -495,7 +495,7 @@
tdc_to_update.update(drop_down_options: ["option", "updated"])
end

it { expect { subject }.to change { dossier.project_champs_public.first.to_s }.from('v1, option').to('option') }
it { expect { subject }.not_to change { dossier.project_champs_public.first.to_s } }
end

context 'when a dropdown unused option is removed' do
Expand Down

0 comments on commit f839f5a

Please sign in to comment.