-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Refonte de la validation des numéros de pré-demande ANTS #4770
Conversation
e196083
to
ffbff7e
Compare
1306362
to
cc02afd
Compare
@@ -5,17 +5,9 @@ class Admin::UserForm | |||
|
|||
validate :validate_duplicates | |||
|
|||
delegate :ignore_benign_errors, :ignore_benign_errors=, :add_benign_error, :benign_errors, :not_benign_errors, :errors_are_all_benign?, to: :user | |||
delegate :ants_pre_demande_number, :ignore_benign_errors, :ignore_benign_errors=, :add_benign_error, :benign_errors, :not_benign_errors, :errors_are_all_benign?, to: :user |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nécessaire pour le validateur AntsPreDemandeNumberValidation
@user_attributes = @attributes[:user]&.with_indifferent_access | ||
@user&.assign_attributes(@attributes.fetch(:user, {})) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
on fait ce changement pour :
- ne plus avoir besoin d’utiliser la variable d’instance @user_attributes dans le validateur de numéro de téléphone l.88
- pouvoir utiliser
AntsPreDemandeNumberValidation
sur le user directement
on se rapproche peu à peu d’un form object plus classique.
Comme indiqué plus bas, pour continuer de nettoyer ce form object, il faudrait utiliser form_for(rdv_wizard)
dans la vue plutôt que form_for(user)
.
# définies sur le user et on ne peut pas simplement appeler `validates_with AntsPreDemandeNumberValidation` | ||
# dans ce form model | ||
if rdv.requires_ants_predemande_number? | ||
@user.singleton_class.validates_with(AntsPreDemandeNumberValidation) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cette ligne avec singleton_class
est un peu impressionnante, mais ça me paraît en fait assez adapté dans l’état de ce form model actuel. Vu qu’on utilise form_for(user)
ça semble « logique » de rajouter des validations sur le user
. C’est en fait très similaire à ce qu’on fait déjà à savoir avoir le validateur dans ce form object mais ajouter les erreurs sur le user.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
malheureusement GitHub n’affiche pas le diff unifié avec le service supprimé mais il y a très peu de changements à part qu’on appelle record
plutôt que user
cc02afd
to
94aec7d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ça me semble très bien merci 🙏🏻
J’apprécie beaucoup le fait qu’on ait beaucoup plus de tests sur ce type de validateurs.
Après, je me demande à quel point on devait répéter certaines choses au niveau des specs.
Et je préfère largement cette approche sous forme de validateur plutôt que sous forme de service.
Note
PR à lire commit par commit
Contexte
Je m’intéresse aux problèmes de codes ANTS invalides qu’on stocke en base : issue #4777 . J’envisage une solution pour corriger ce problème, cette PR est une (seconde) étape préliminaire avant le correctif.
Problèmes que cette PR attaque
Il y a d’autres problèmes (cf plus bas) mais ils seront attaqués dans des PRs successives
Solution
1er commit: specs
Je rajoute des specs plus ou moins exhaustives aux trois form models appelant le service de validation des numéros de pré-demande ANTS :
UserRdvWizard::Step1
,Admin::UserForm
etBeneficiaireForm
2e commit : refacto
Je transforme le service de validation en un validateur custom ActiveModel.
Cela me semble un peu plus facilement lisible, découvrable et réutilisable.
Détails
Je rajoute des specs pour ces différentes validations actuellement effectuées sur les numéros ANTS par le service :
validated
BenignErrors
Problèmes à corriger dans des PRs ultérieures