in admin RDV forms, warn when agents have other RDVs ending shortly before
Created by: adipasquale
Cette PR est relativement simple après le gros refacto des admin RDV forms.
Screenshots
Pour l'agent courant
Pour un autre agent, dans le scope
Pour un autre agent, hors scope
Multi agent
Un point un peu tricky c'est le multi-agent. Il faut prendre en compte le fait que le RDV qu'on est en train de créer peut avoir plusieurs agents, et que le RDV qui est potentiellement en conflit a une autre liste d'agents et il faut faire l'intersection.
Aussi, on ne veut pas afficher plusieurs warnings pour des RDVs d'un même agent comme :
- Attention, Martine a un RDV finissant à 15h30
- Attention, Martine a un RDV finissant à 15h45
- Attention, Martine a un RDV finissant à 16h00
etc, il faut bien prendre le dernier pour chaque agent.
RDVs s'enchainant
il faut aussi dans ce cas gerer le cas ou on aligne un RDV avec le dernier, mais ou les precedents pourraient etre considérés en conflit.
- un RDV existe et finit a 14h15
- un autre RDV existe et finit a 14h30
- j'essaie de creer un autre RDV commencant a 14h30
- => il faut accepter sans warning, ne pas dire "attention il y en a un qui finit a 15".
Implem
J'avais commencé par rajouter de la logique dans le modèle Rdv mais finalement je pense qu'il y en a assez pour l'extraire. J'ai fait un "service model" à part qui s'appelle RdvStartCoherence
et qui a deux méthodes publiques : rdvs_ending_shortly_before
et rdvs_ending_shortly_before?
Pour les specs rajoutées dans cette PR j'essaie de limiter au max le fait de tester des dépendances sans le vouloir. C'est à dire que si je teste la classe A qui fait appel à la classe B, je mocke les appels et les valeurs renvoyées par B. Je mets des expect ou des allow selon qu'il y ait des effets de bords attendus ou non, cf https://medium.com/@christiancarey1/writing-specs-like-sandi-metz-9f2acf5026cb
ecrire les specs m'ont fait réaliser qu'il y avait un gros défaut d'implem dans le rdvformconcern
: un unless au lieu d'un if