diff --git a/app/models/question_saisie.rb b/app/models/question_saisie.rb index a41e56ce9..34e4d4500 100644 --- a/app/models/question_saisie.rb +++ b/app/models/question_saisie.rb @@ -10,6 +10,8 @@ class QuestionSaisie < Question has_many :reponses, class_name: 'Choix', foreign_key: :question_id, dependent: :destroy accepts_nested_attributes_for :reponses, allow_destroy: true + before_save :parametre_prix_avec_centimes, if: -> { type_saisie == 'prix_avec_centimes' } + def as_json(_options = nil) json = base_json json.merge!(json_audio_fields, additional_json_fields) @@ -19,6 +21,11 @@ def bonnes_reponses reponses.where(type_choix: :bon)&.pluck(:intitule)&.join(' | ') end + def parametre_prix_avec_centimes + self.reponse_placeholder = '0,00' if reponse_placeholder.blank? + self.suffix_reponse = '€' if suffix_reponse.blank? + end + private def base_json @@ -36,7 +43,8 @@ def base_attributes 'placeholder' => reponse_placeholder, 'description' => description, 'texte_a_trous' => texte_a_trous, - 'aide' => aide + 'aide' => aide, + 'max_length' => type_saisie == 'prix_avec_centimes' ? 6 : nil } end diff --git a/db/migrate/20241211075936_rattrape_questions_saisies_prix_avec_centimes.rb b/db/migrate/20241211075936_rattrape_questions_saisies_prix_avec_centimes.rb new file mode 100644 index 000000000..fc88347fb --- /dev/null +++ b/db/migrate/20241211075936_rattrape_questions_saisies_prix_avec_centimes.rb @@ -0,0 +1,5 @@ +class RattrapeQuestionsSaisiesPrixAvecCentimes < ActiveRecord::Migration[7.2] + def up + QuestionSaisie.where(type_saisie: 'prix_avec_centimes').update_all(reponse_placeholder: '0,00', suffix_reponse: '€') + end +end diff --git a/db/schema.rb b/db/schema.rb index 536c8e31d..e0d474ede 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.2].define(version: 2024_12_06_064741) do +ActiveRecord::Schema[7.2].define(version: 2024_12_11_075936) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" enable_extension "plpgsql" diff --git a/spec/models/question_saisie_spec.rb b/spec/models/question_saisie_spec.rb index cd0922c07..32b8c6f2f 100644 --- a/spec/models/question_saisie_spec.rb +++ b/spec/models/question_saisie_spec.rb @@ -40,7 +40,7 @@ description illustration modalite_reponse type sous_type placeholder reponses texte_a_trous consigne_audio demarrage_audio_modalite_reponse aide score - metacompetence]) + metacompetence max_length]) expect(json['type']).to eql('saisie') expect(json['sous_type']).to eql('texte') expect(json['placeholder']).to eql('écrivez ici') @@ -70,4 +70,37 @@ end end end + + describe '#parametre_prix_avec_centimes' do + context 'sans reponse_placeholder et suffix_reponse spécifiés' do + let(:question_saisie) { create(:question_saisie, type_saisie: 'prix_avec_centimes') } + + it 'paramétre les champs par défaut' do + question_saisie.parametre_prix_avec_centimes + expect(question_saisie.reponse_placeholder).to eql('0,00') + expect(question_saisie.suffix_reponse).to eql('€') + end + end + + context 'avec reponse_placeholder et suffix_reponse spécifiés' do + let(:question_saisie) do + create(:question_saisie, type_saisie: 'prix_avec_centimes', reponse_placeholder: '1.000', + suffix_reponse: '$') + end + + it 'ne met pas à jour les champs si ils sont déjà renseignés' do + expect(question_saisie.reponse_placeholder).to eql('1.000') + expect(question_saisie.suffix_reponse).to eql('$') + end + end + + context 'quand le type de saisie n est pas prix_avec_centimes' do + let(:question_saisie) { create(:question_saisie, type_saisie: 'texte') } + + it 'ne met pas à jour les champs' do + expect(question_saisie.reponse_placeholder).to be_nil + expect(question_saisie.suffix_reponse).to be_nil + end + end + end end