ajout d'un nettoyage des options des types_de_champ lors de la publication d'une procedure ou d'une nouvelle revision
This commit is contained in:
parent
4f62590b7a
commit
e88d84cf57
3 changed files with 149 additions and 0 deletions
|
@ -325,6 +325,7 @@ class Procedure < ApplicationRecord
|
||||||
Procedure.transaction do
|
Procedure.transaction do
|
||||||
if brouillon?
|
if brouillon?
|
||||||
reset!
|
reset!
|
||||||
|
cleanup_types_de_champ_options!
|
||||||
end
|
end
|
||||||
|
|
||||||
other_procedure = other_procedure_with_path(path)
|
other_procedure = other_procedure_with_path(path)
|
||||||
|
@ -347,6 +348,12 @@ class Procedure < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def cleanup_types_de_champ_options!
|
||||||
|
draft_revision.types_de_champ.each do |type_de_champ|
|
||||||
|
type_de_champ.update!(options: type_de_champ.clean_options)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def suggested_path(administrateur)
|
def suggested_path(administrateur)
|
||||||
if path_customized?
|
if path_customized?
|
||||||
return path
|
return path
|
||||||
|
@ -807,6 +814,7 @@ class Procedure < ApplicationRecord
|
||||||
|
|
||||||
def publish_revision!
|
def publish_revision!
|
||||||
reset!
|
reset!
|
||||||
|
cleanup_types_de_champ_options!
|
||||||
transaction do
|
transaction do
|
||||||
self.published_revision = draft_revision
|
self.published_revision = draft_revision
|
||||||
self.draft_revision = create_new_revision
|
self.draft_revision = create_new_revision
|
||||||
|
|
|
@ -677,6 +677,24 @@ class TypeDeChamp < ApplicationRecord
|
||||||
.parameterize
|
.parameterize
|
||||||
end
|
end
|
||||||
|
|
||||||
|
OPTS_BY_TYPE = {
|
||||||
|
type_champs.fetch(:header_section) => [:header_section_level],
|
||||||
|
type_champs.fetch(:explication) => [:collapsible_explanation_enabled, :collapsible_explanation_text],
|
||||||
|
type_champs.fetch(:textarea) => [:character_limit],
|
||||||
|
type_champs.fetch(:carte) => TypesDeChamp::CarteTypeDeChamp::LAYERS,
|
||||||
|
type_champs.fetch(:drop_down_list) => [:drop_down_other, :drop_down_options],
|
||||||
|
type_champs.fetch(:multiple_drop_down_list) => [:drop_down_options],
|
||||||
|
type_champs.fetch(:linked_drop_down_list) => [:drop_down_options, :drop_down_secondary_libelle, :drop_down_secondary_description],
|
||||||
|
type_champs.fetch(:piece_justificative) => [:old_pj, :skip_pj_validation, :skip_content_type_pj_validation],
|
||||||
|
type_champs.fetch(:titre_identite) => [:old_pj, :skip_pj_validation, :skip_content_type_pj_validation],
|
||||||
|
type_champs.fetch(:expression_reguliere) => [:expression_reguliere, :expression_reguliere_error_message, :expression_reguliere_exemple_text]
|
||||||
|
}
|
||||||
|
|
||||||
|
def clean_options
|
||||||
|
kept_keys = OPTS_BY_TYPE.fetch(type_champ.to_s) { [] }
|
||||||
|
options.slice(*kept_keys.map(&:to_s))
|
||||||
|
end
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
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
|
||||||
|
|
|
@ -290,4 +290,127 @@ describe TypeDeChamp do
|
||||||
|
|
||||||
it { is_expected.to eq("1-tres-interessant-bilan") }
|
it { is_expected.to eq("1-tres-interessant-bilan") }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#clean_options' do
|
||||||
|
subject { procedure.published_revision.types_de_champ.first.options }
|
||||||
|
|
||||||
|
let(:procedure) { create(:procedure) }
|
||||||
|
|
||||||
|
context "Header section" do
|
||||||
|
let(:type_de_champ) { create(:type_de_champ_header_section, procedure:) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
type_de_champ.update!(options: { 'header_section_level' => '1', 'key' => 'value' })
|
||||||
|
procedure.publish_revision!
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'keeping only the header_section_level' do
|
||||||
|
is_expected.to eq({ 'header_section_level' => '1' })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "Explication" do
|
||||||
|
let(:type_de_champ) { create(:type_de_champ_explication, procedure:) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
type_de_champ.update!(options: { 'collapsible_explanation_enabled' => '1', 'collapsible_explanation_text' => 'hello', 'key' => 'value' })
|
||||||
|
procedure.publish_revision!
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'keeping only the collapsible_explanation keys' do
|
||||||
|
is_expected.to eq({ 'collapsible_explanation_enabled' => '1', 'collapsible_explanation_text' => 'hello' })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "Text area" do
|
||||||
|
let(:type_de_champ) { create(:type_de_champ_textarea, procedure:) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
type_de_champ.update!(options: { 'character_limit' => '400', 'key' => 'value' })
|
||||||
|
procedure.publish_revision!
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'keeping only the character limit' do
|
||||||
|
is_expected.to eq({ 'character_limit' => '400' })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "Carte" do
|
||||||
|
let(:type_de_champ) { create(:type_de_champ_carte, procedure:) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
type_de_champ.update!(options: { 'unesco' => '0', 'key' => 'value' })
|
||||||
|
procedure.publish_revision!
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'keeping only the layers' do
|
||||||
|
is_expected.to eq({ 'unesco' => '0' })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "Simple drop down_list" do
|
||||||
|
let(:type_de_champ) { create(:type_de_champ_drop_down_list, procedure:) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
type_de_champ.update!(options: { 'drop_down_other' => '0', 'drop_down_options' => ['Premier choix', 'Deuxième choix'], 'key' => 'value' })
|
||||||
|
procedure.publish_revision!
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'keeping only the drop_down_other and drop_down_options' do
|
||||||
|
is_expected.to eq({ 'drop_down_other' => '0', 'drop_down_options' => ['Premier choix', 'Deuxième choix'] })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "Multiple drop down_list" do
|
||||||
|
let(:type_de_champ) { create(:type_de_champ_multiple_drop_down_list, procedure:) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
type_de_champ.update!(options: { 'drop_down_options' => ['Premier choix', 'Deuxième choix'], 'key' => 'value' })
|
||||||
|
procedure.publish_revision!
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'keeping only the drop_down_options' do
|
||||||
|
is_expected.to eq({ 'drop_down_options' => ['Premier choix', 'Deuxième choix'] })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "Linked drop down list" do
|
||||||
|
let(:type_de_champ) { create(:type_de_champ_linked_drop_down_list, procedure:) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
type_de_champ.update!(options: { 'drop_down_options' => ['--Fromage--', 'bleu de sassenage', 'picodon', '--Dessert--', 'éclair', 'tarte aux pommes'], 'key' => 'value' })
|
||||||
|
procedure.publish_revision!
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'keeping only the drop_down_options' do
|
||||||
|
is_expected.to eq({ 'drop_down_options' => ['--Fromage--', 'bleu de sassenage', 'picodon', '--Dessert--', 'éclair', 'tarte aux pommes'] })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "Piece justificative" do
|
||||||
|
let(:type_de_champ) { create(:type_de_champ_piece_justificative, procedure:) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
type_de_champ.update!(options: { 'old_pj' => '123', 'skip_pj_validation' => '1', 'skip_content_type_pj_validation' => '1', 'key' => 'value' })
|
||||||
|
procedure.publish_revision!
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'keeping only the old_pj, skip_validation_pj and skip_content_type_pj_validation' do
|
||||||
|
is_expected.to eq({ 'old_pj' => '123', 'skip_pj_validation' => '1', 'skip_content_type_pj_validation' => '1' })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "Expression reguliere" do
|
||||||
|
let(:type_de_champ) { create(:type_de_champ_expression_reguliere, procedure:) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
type_de_champ.update!(options: { 'expression_reguliere' => '\d{9}', 'expression_reguliere_error_message' => 'error', 'expression_reguliere_exemple_text' => '123456789', 'key' => 'value' })
|
||||||
|
procedure.publish_revision!
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'keeping only the expression_reguliere, expression_reguliere_error_message and expression_reguliere_exemple_text' do
|
||||||
|
is_expected.to eq({ 'expression_reguliere' => '\d{9}', 'expression_reguliere_error_message' => 'error', 'expression_reguliere_exemple_text' => '123456789' })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue