Skip to content
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

Bugfix: le RDV doit afficher l'adresse du responsable, pas du proche #4812

Merged
merged 3 commits into from
Nov 28, 2024

Conversation

francois-ferrandis
Copy link
Contributor

@francois-ferrandis francois-ferrandis commented Nov 14, 2024

En faisant du fuzzing dans #4809, une spec est passée au rouge :

context "when rdv is at home" do

L'intention de cette spec est de vérifier que lorsqu'on a un RDV avec un proche et un responsable, c'est l'adresse du responsable que l'on veut afficher. Or, dans le code, c'est l'adresse du proche qui est affichée !

Pourquoi cette spec était au vert ? Plusieurs raisons :

  • le RDV testé n'était lié qu'au proche et pas au responsable
  • l'adresse générée dans la factory :user est toujours la même, donc dans la spec les deux usagers ont la même adresse, donc it { is_expected.to eq responsible.address } passe mais ça ne nous apprend rien
  • mais surtout, le code implémente l'inverse de la spec (code original dans [Agent][tunnel de prise de RDV] rendre le remplissage du "lieu" obligatoire #714) :
responsibles = users.where.not(responsible_id: [nil])

Ce code récupère les users qui ont un responsible_id, donc les proches !

Comportement attendu

À mon avis, le comportement attendu est :

  • si seul le responsable a une adresse : on l'affiche
  • si seul le proche a une adresse, on l'affiche
  • si les deux ont une adresse, on affiche celle du responsable

Je ne suis vraiment pas sûr de mon coup niveau métier donc je vais demander l'avis du public.

Info importante : on est dans le troisième cas pour environ 200 usagers, et dans beaucoup de cas cas les adresses ont juste une virgule de différence.

Il est important de noter que jusqu'ici, c'est donc l'adresse du proche qui est affichée, et que ce fix consiste donc en un changement de comportement métier.

@francois-ferrandis francois-ferrandis self-assigned this Nov 14, 2024
@victormours
Copy link
Contributor

C'est entièrement possible que la description de la spec soit fausse, et que l'implémentation actuelle soit satisfaisante pour le métier.

Je pense que ça vaudrait le coup de clarifier où on indique l'adresse du proche et celle du responsable dans l'interface (et lecture et écriture), et qu'on soit capable de dire si ça a du sens.

Copy link
Contributor

@adipasquale adipasquale left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🙇 merci de prendre le temps de te pencher là dessus, et bravo pour la détection de cette spec via le fuzzing 👏

Je rejoins Victor qu’une bonne piste d’amélioration serait d’expliciter de quel usager on affiche l’adresse dans les cas ambigus. Je vois que c’est explicité dans tous les cas dans l’étape 3 du admin rdv wizard : https://github.com/betagouv/rdv-service-public/blob/production/app/views/admin/rdv_wizard_steps/step3.html.slim#L35. On pourrait éventuellement rajouter la précision directement dans les méthodes address, address_complete, address_without_personal_information.

Néanmoins j’approuve cette PR car je pense que c’est déjà un beau pas en avant :

  • on corrige le code qui fait l’inverse de ce qu’il prétend
  • on corrige les specs
  • le code est amélioré en rapprochant user_for_home_rdv du AddressConcern.

Je pense que le changement de comportement est tout à fait acceptable vu le peu de nombre de cas et que tu as l’air de dire que c’est souvent insignifiant.

@@ -53,4 +53,9 @@ def address_without_personal_information
Motif.human_attribute_value(:location_type, :phone)
end
end

def user_for_home_rdv
proches, responsables = users.partition(&:responsible_id)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

élégant 👏 j’avais un doute que ça soit une légère régression de perfs de ne plus faire de distinction sur le loaded? mais après réfléxion j’imagine que rails ne va pas recharger les users si tu appelles partition dessus 🤔

Copy link
Contributor Author

@francois-ferrandis francois-ferrandis Nov 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On aurait pu continuer de faire la distinction sur le loaded?, mais fait le pari que si l'association n'est pas chargée, ça ne coûte pas beaucoup plus cher de charger tous les users, puisque le nombre d'usager souvent 1, parfois 2-3 (c'est pour les RDVs individuels).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, et aussi :

  • on peut faire le pari que tous les #users seront utilisés ailleurs aussi
  • c'est facile de preloader l'association #users, d'ailleurs on le fait dans Admin::RdvsController
  • le code est plus simple ici si on ne fait pas cette tentative d'optimisation (et on peut utiliser ce magnifique partition que j'aime)

@francois-ferrandis
Copy link
Contributor Author

C'est entièrement possible que la description de la spec soit fausse, et que l'implémentation actuelle soit satisfaisante pour le métier.

Je pense surtout que c'est tellement marginal que je doute qu'un⋅e seul⋅e agent sache quelle adresse est censée s'afficher.

Je pense que ça vaudrait le coup de clarifier où on indique l'adresse du proche et celle du responsable dans l'interface (et lecture et écriture), et qu'on soit capable de dire si ça a du sens.

En effet ça vaudrait le coup, mais ça demande du temps supplémentaire à implémenter, et je pense qu'on peut merger cette PR et garder l'amélioration pour plus tard.

🙇 merci de prendre le temps de te pencher là dessus, et bravo pour la détection de cette spec via le fuzzing 👏

Je rejoins Victor qu’une bonne piste d’amélioration serait d’expliciter de quel usager on affiche l’adresse dans les cas ambigus. Je vois que c’est explicité dans tous les cas dans l’étape 3 du admin rdv wizard : https://github.com/betagouv/rdv-service-public/blob/production/app/views/admin/rdv_wizard_steps/step3.html.slim#L35. On pourrait éventuellement rajouter la précision directement dans les méthodes address, address_complete, address_without_personal_information.

Néanmoins j’approuve cette PR car je pense que c’est déjà un beau pas en avant :

* on corrige le code qui fait l’inverse de ce qu’il prétend

* on corrige les specs

* le code est amélioré en rapprochant `user_for_home_rdv` du `AddressConcern`.

Je pense que le changement de comportement est tout à fait acceptable vu le peu de nombre de cas et que tu as l’air de dire que c’est souvent insignifiant.

Merci beaucoup, je suis 100 % aligné. 🚀

@francois-ferrandis francois-ferrandis merged commit 5a53d88 into production Nov 28, 2024
15 checks passed
@francois-ferrandis francois-ferrandis deleted the frf/rdv-address-bug branch November 28, 2024 09:08
@francois-ferrandis
Copy link
Contributor Author

J'ai créé une issue pour aller plus loin et clarifier l'interface : #4850

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: ✅ Done
Development

Successfully merging this pull request may close these issues.

3 participants