Improve numeric field validation errors (#4076)

Usager : améliore le message d'erreur lorsque la valeur d'un champ numérique est invalide
This commit is contained in:
Pierre de La Morinerie 2019-07-11 15:13:38 +02:00 committed by GitHub
commit d3a7bc271e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 26 additions and 4 deletions

View file

@ -1,5 +1,11 @@
class Champs::DecimalNumberChamp < Champ class Champs::DecimalNumberChamp < Champ
validates :value, numericality: { allow_nil: true, allow_blank: true } validates :value, numericality: {
allow_nil: true,
allow_blank: true,
message: -> (object, data) {
"« #{object.libelle} » " + object.errors.generate_message(data[:attribute].downcase, :not_a_number)
}
}
def for_export def for_export
processed_value processed_value

View file

@ -1,5 +1,12 @@
class Champs::IntegerNumberChamp < Champ class Champs::IntegerNumberChamp < Champ
validates :value, numericality: { only_integer: true, allow_nil: true, allow_blank: true } validates :value, numericality: {
only_integer: true,
allow_nil: true,
allow_blank: true,
message: -> (object, data) {
"« #{object.libelle} » " + object.errors.generate_message(data[:attribute].downcase, :not_an_integer)
}
}
def for_export def for_export
processed_value processed_value

View file

@ -128,6 +128,7 @@ fr:
messages: messages:
blank: "doit être rempli" blank: "doit être rempli"
not_a_number: 'doit être un nombre' not_a_number: 'doit être un nombre'
not_an_integer: 'doit être un nombre entier (sans chiffres après la virgule)'
greater_than: "doit être supérieur à %{count}" greater_than: "doit être supérieur à %{count}"
greater_than_or_equal_to: "doit être supérieur ou égal à %{count}" greater_than_or_equal_to: "doit être supérieur ou égal à %{count}"
less_than: "doit être inférieur à %{count}" less_than: "doit être inférieur à %{count}"

View file

@ -0,0 +1,5 @@
fr:
activerecord:
attributes:
champs:
value: La valeur du champ

View file

@ -1,7 +1,7 @@
require 'spec_helper' require 'spec_helper'
describe Champs::DecimalNumberChamp do describe Champs::DecimalNumberChamp do
subject { Champs::DecimalNumberChamp.new(value: value) } subject { build(:champ_decimal_number, value: value).tap(&:valid?) }
describe '#valid?' do describe '#valid?' do
context 'when the value is integer number' do context 'when the value is integer number' do
@ -20,6 +20,7 @@ describe Champs::DecimalNumberChamp do
let(:value) { 'toto' } let(:value) { 'toto' }
it { is_expected.to_not be_valid } it { is_expected.to_not be_valid }
it { expect(subject.errors[:value]).to eq(["« #{subject.libelle} » doit être un nombre"]) }
end end
context 'when the value is blank' do context 'when the value is blank' do

View file

@ -1,7 +1,7 @@
require 'spec_helper' require 'spec_helper'
describe Champs::IntegerNumberChamp do describe Champs::IntegerNumberChamp do
subject { Champs::IntegerNumberChamp.new(value: value) } subject { build(:champ_integer_number, value: value).tap(&:valid?) }
describe '#valid?' do describe '#valid?' do
context 'when the value is integer number' do context 'when the value is integer number' do
@ -14,12 +14,14 @@ describe Champs::IntegerNumberChamp do
let(:value) { 2.6 } let(:value) { 2.6 }
it { is_expected.to_not be_valid } 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)"]) }
end end
context 'when the value is not a number' do context 'when the value is not a number' do
let(:value) { 'toto' } let(:value) { 'toto' }
it { is_expected.to_not be_valid } 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)"]) }
end end
context 'when the value is blank' do context 'when the value is blank' do