Merge pull request #10411 from tchak/fix-dossier-projection

fix(dossier): fix projected value on linked_drop_down_list
This commit is contained in:
Colin Darie 2024-05-13 13:58:54 +00:00 committed by GitHub
commit cb85d62d78
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 9 additions and 8 deletions

View file

@ -687,7 +687,7 @@ class TypeDeChamp < ApplicationRecord
def champ_value(type_champ, champ) def champ_value(type_champ, champ)
dynamic_type_class = type_champ_to_class_name(type_champ).constantize dynamic_type_class = type_champ_to_class_name(type_champ).constantize
# special case for linked drop down champ it's blank implementation is not what you think # special case for linked drop down champ it's blank implementation is not what you think
if champ.blank? && (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) if (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) && champ.blank?
dynamic_type_class.champ_default_value dynamic_type_class.champ_default_value
else else
dynamic_type_class.champ_value(champ) dynamic_type_class.champ_value(champ)
@ -697,7 +697,7 @@ class TypeDeChamp < ApplicationRecord
def champ_value_for_api(type_champ, champ, version = 2) def champ_value_for_api(type_champ, champ, version = 2)
dynamic_type_class = type_champ_to_class_name(type_champ).constantize dynamic_type_class = type_champ_to_class_name(type_champ).constantize
# special case for linked drop down champ it's blank implementation is not what you think # special case for linked drop down champ it's blank implementation is not what you think
if champ.blank? && (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) if (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) && champ.blank?
dynamic_type_class.champ_default_api_value(version) dynamic_type_class.champ_default_api_value(version)
else else
dynamic_type_class.champ_value_for_api(champ, version) dynamic_type_class.champ_value_for_api(champ, version)
@ -707,7 +707,7 @@ class TypeDeChamp < ApplicationRecord
def champ_value_for_export(type_champ, champ, path = :value) def champ_value_for_export(type_champ, champ, path = :value)
dynamic_type_class = type_champ_to_class_name(type_champ).constantize dynamic_type_class = type_champ_to_class_name(type_champ).constantize
# special case for linked drop down champ it's blank implementation is not what you think # special case for linked drop down champ it's blank implementation is not what you think
if champ.blank? && (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) if (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) && champ.blank?
dynamic_type_class.champ_default_export_value(path) dynamic_type_class.champ_default_export_value(path)
else else
dynamic_type_class.champ_value_for_export(champ, path) dynamic_type_class.champ_value_for_export(champ, path)
@ -717,7 +717,7 @@ class TypeDeChamp < ApplicationRecord
def champ_value_for_tag(type_champ, champ, path = :value) def champ_value_for_tag(type_champ, champ, path = :value)
dynamic_type_class = type_champ_to_class_name(type_champ).constantize dynamic_type_class = type_champ_to_class_name(type_champ).constantize
# special case for linked drop down champ it's blank implementation is not what you think # special case for linked drop down champ it's blank implementation is not what you think
if champ.blank? && (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) if (type_champ != TypeDeChamp.type_champs.fetch(:linked_drop_down_list) || champ.nil? || champ.value.blank?) && champ.blank?
'' ''
else else
dynamic_type_class.champ_value_for_tag(champ, path) dynamic_type_class.champ_value_for_tag(champ, path)

View file

@ -3,23 +3,24 @@ describe DossierProjectionService do
subject { described_class.project(dossiers_ids, fields) } subject { described_class.project(dossiers_ids, fields) }
context 'with multiple dossier' do context 'with multiple dossier' do
let!(:procedure) { create(:procedure, :with_type_de_champ) } let!(:procedure) { create(:procedure, types_de_champ_public: [{}, { type: :linked_drop_down_list }]) }
let!(:dossier_1) { create(:dossier, procedure: procedure) } let!(:dossier_1) { create(:dossier, procedure: procedure) }
let!(:dossier_2) { create(:dossier, :en_construction, :archived, procedure: procedure) } let!(:dossier_2) { create(:dossier, :en_construction, :archived, procedure: procedure) }
let!(:dossier_3) { create(:dossier, :en_instruction, procedure: procedure) } let!(:dossier_3) { create(:dossier, :en_instruction, procedure: procedure) }
let(:dossiers_ids) { [dossier_3.id, dossier_1.id, dossier_2.id] } let(:dossiers_ids) { [dossier_3.id, dossier_1.id, dossier_2.id] }
let(:fields) do let(:fields) do
[ procedure.active_revision.types_de_champ_public.map do |type_de_champ|
{ {
"table" => "type_de_champ", "table" => "type_de_champ",
"column" => procedure.active_revision.types_de_champ_public[0].stable_id.to_s "column" => type_de_champ.stable_id.to_s
} }
] end
end end
before do before do
dossier_1.champs_public.first.update(value: 'champ_1') dossier_1.champs_public.first.update(value: 'champ_1')
dossier_1.champs_public.second.update(value: '["test"]')
dossier_2.champs_public.first.update(value: 'champ_2') dossier_2.champs_public.first.update(value: 'champ_2')
dossier_3.champs_public.first.destroy dossier_3.champs_public.first.destroy
end end