add champ validation

This commit is contained in:
simon lehericey 2021-10-05 14:03:30 +02:00
parent c76d1043fa
commit 40d0cfcdc4
5 changed files with 76 additions and 6 deletions

View file

@ -19,6 +19,10 @@
# type_de_champ_id :integer
#
class Champs::CnafChamp < Champs::TextChamp
# see https://github.com/betagouv/api-particulier/blob/master/src/presentation/middlewares/cnaf-input-validation.middleware.ts
validates :numero_allocataire, format: { with: /\A\d{1,7}\z/ }, if: -> { code_postal.present? }
validates :code_postal, format: { with: /\A\w{5}\z/ }, if: -> { numero_allocataire.present? }
store_accessor :value_json, :numero_allocataire, :code_postal
def fetch_external_data?

View file

@ -274,6 +274,12 @@ en:
taken: is already used for procedure. You cannot use it because it belongs to another administrator.
# taken_can_be_claimed: est identique à celui dune autre de vos procedures publiées. Si vous publiez cette procedure, lancienne sera dépubliée et ne sera plus accessible au public. Les utilisateurs qui ont commencé un brouillon vont pouvoir le déposer.
invalid: is not valid. It must countain between 3 and 50 characters among a-z, 0-9, '_' and '-'.
"champs/cnaf_champ":
attributes:
numero_allocataire:
invalid: "must be a maximum of 7 digits"
code_postal:
invalid: "must be 5 characters long"
errors:
messages:
dossier_not_found: "The file does not exist or you do not have access to it."

View file

@ -280,6 +280,12 @@ fr:
taken: est déjà utilisé par une démarche. Vous ne pouvez pas lutiliser car il appartient à un autre administrateur.
taken_can_be_claimed: est identique à celui dune autre de vos démarches publiées. Si vous publiez cette démarche, lancienne sera dépubliée et ne sera plus accessible au public. Les utilisateurs qui ont commencé un brouillon vont pouvoir le déposer.
invalid: nest pas valide. Il doit comporter au moins 3 caractères, au plus 50 caractères et seuls les caractères a-z, 0-9, '_' et '-' sont autorisés.
"champs/cnaf_champ":
attributes:
numero_allocataire:
invalid: "doit être composé au maximum de 7 chiffres"
code_postal:
invalid: "doit posséder 5 caractères"
errors:
messages:
saml_not_authorized: "Vous nêtes pas autorisé à accéder à ce service."

View file

@ -1,6 +0,0 @@
fr:
activerecord:
attributes:
champ:
value: La valeur du champ
piece_justificative_file: La pièce justificative

View file

@ -33,4 +33,64 @@ describe Champs::CnafChamp, type: :model do
it { expect(JSON.parse(champ.external_id)).to eq({ "code_postal" => "12345", "numero_allocataire" => "1234567" }) }
end
end
describe '#validate' do
let(:numero_allocataire) { '1234567' }
let(:code_postal) { '12345' }
let(:champ) { described_class.new(dossier: create(:dossier), type_de_champ: create(:type_de_champ_cnaf)) }
subject { champ.valid? }
before do
champ.numero_allocataire = numero_allocataire
champ.code_postal = code_postal
end
context 'when numero_allocataire and code_postal are valids' do
it { is_expected.to be true }
end
context 'when numero_allocataire and code_postal are nil' do
let(:numero_allocataire) { nil }
let(:code_postal) { nil }
it { is_expected.to be true }
end
context 'when only code_postal is nil' do
let(:code_postal) { nil }
it do
is_expected.to be false
expect(champ.errors.full_messages).to eq(["Code postal doit posséder 5 caractères"])
end
end
context 'when only numero_allocataire is nil' do
let(:numero_allocataire) { nil }
it do
is_expected.to be false
expect(champ.errors.full_messages).to eq(["Numero allocataire doit être composé au maximum de 7 chiffres"])
end
end
context 'when numero_allocataire is invalid' do
let(:numero_allocataire) { '123456a' }
it do
is_expected.to be false
expect(champ.errors.full_messages).to eq(["Numero allocataire doit être composé au maximum de 7 chiffres"])
end
end
context 'when code_postal is invalid' do
let(:code_postal) { '123456' }
it do
is_expected.to be false
expect(champ.errors.full_messages).to eq(["Code postal doit posséder 5 caractères"])
end
end
end
end