From 374d7630842482d51bdb492fb64461c925381e60 Mon Sep 17 00:00:00 2001 From: mfo Date: Sat, 30 Mar 2024 08:03:19 +0100 Subject: [PATCH] fix(Champs::IntegerNumberChamp): validates Champs::IntegerNumberChamp respecting it's validation context. --- app/models/champs/integer_number_champ.rb | 2 +- .../champs/integer_number_champ_spec.rb | 21 ++++++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/models/champs/integer_number_champ.rb b/app/models/champs/integer_number_champ.rb index deaf3b5f9..b913cf9c6 100644 --- a/app/models/champs/integer_number_champ.rb +++ b/app/models/champs/integer_number_champ.rb @@ -7,7 +7,7 @@ class Champs::IntegerNumberChamp < Champ # i18n-tasks-use t('errors.messages.not_an_integer') "« #{object.libelle} » " + object.errors.generate_message(:value, :not_an_integer) } - } + }, if: -> { validate_champ_value? || validation_context == :prefill } def for_export processed_value diff --git a/spec/models/champs/integer_number_champ_spec.rb b/spec/models/champs/integer_number_champ_spec.rb index d7cb82569..3eaf9bc8c 100644 --- a/spec/models/champs/integer_number_champ_spec.rb +++ b/spec/models/champs/integer_number_champ_spec.rb @@ -1,37 +1,42 @@ describe Champs::IntegerNumberChamp do - subject { build(:champ_integer_number, value: value).tap(&:valid?) } + let(:champ) { build(:champ_integer_number, value:) } + subject { champ.validate(:champs_public_value) } describe '#valid?' do context 'when the value is integer number' do let(:value) { 2 } - it { is_expected.to be_valid } + it { is_expected.to be_truthy } end context 'when the value is decimal number' do let(:value) { 2.6 } - it { is_expected.to_not be_valid } - it { expect(subject.errors[:value]).to eq(["« #{subject.libelle} » doit être un nombre entier (sans chiffres après la virgule)"]) } + it 'is not valid and contains errors' do + is_expected.to be_falsey + expect(champ.errors[:value]).to eq(["« #{champ.libelle} » doit être un nombre entier (sans chiffres après la virgule)"]) + end end context 'when the value is not a number' do let(:value) { 'toto' } - it { is_expected.to_not be_valid } - it { expect(subject.errors[:value]).to eq(["« #{subject.libelle} » doit être un nombre entier (sans chiffres après la virgule)"]) } + it 'is not valid and contains errors' do + is_expected.to be_falsey + expect(champ.errors[:value]).to eq(["« #{champ.libelle} » doit être un nombre entier (sans chiffres après la virgule)"]) + end end context 'when the value is blank' do let(:value) { '' } - it { is_expected.to be_valid } + it { is_expected.to be_truthy } end context 'when the value is nil' do let(:value) { nil } - it { is_expected.to be_valid } + it { is_expected.to be_truthy } end end end