Réservation et quotas
Vérifié contre le produit le .
| Domaine | Réservation & quotas — la recherche de disponibilité, le parcours de réservation, les règles de profil |
| Durée | ~16 min |
| Niveau | complet |
| Étiquette | manuel — le bloc de temps réel exige deux navigateurs simultanés, et la course à deux ne se scripte pas honnêtement |
Préparation
Section intitulée « Préparation »Socle B — l’établissement construit à la main, avec ses quatre salles et ses comptes. Le montage est sur la préparation commune.
Comptes : alice (administratrice), bob (« Demandeur », room.book).
État de départ : aucune réservation L'occupation d'une salle par une personne pour un usage ponctuel, en dehors des cours — une réunion, une soutenance, du travail en groupe. n’existe, et le profil « Demandeur » n’a aucune règle.
1. La recherche de disponibilité
Section intitulée « 1. La recherche de disponibilité »Compte alice → Réservation.
| # | Action | Résultat attendu |
|---|---|---|
| 1.1 | Ouvrir la page | la date du jour et une plage horaire sont pré-remplies ; les quatre salles sont listées |
| 1.2 | Saisir « Capacité min. » = 50 |
seule A-102 reste ; la saisie est temporisée, la liste se met à jour après un court instant |
| 1.3 | « Filtres avancés » → cocher Projecteur et Tableau blanc | seule A-102 — les équipements se cumulent en ET, pas en OU |
| 1.4 | Décocher les deux, cocher « Accessible PMR » | seule A-103 |
| 1.5 | Décocher, choisir le bâtiment BAT-B | seule B-201 |
| 1.6 | Copier l’adresse de la page, l’ouvrir dans un nouvel onglet | les filtres sont restaurés — l’état vit dans l’URL |
| 1.7 | Saisir une heure de fin antérieure à l’heure de début | « L’heure de fin doit être après l’heure de début. », et aucune recherche n’est lancée |
| 1.8 | Remettre des critères larges | « 4 salle(s) disponible(s) » |
La période gelée — alice crée une période dans Calendrier : type « Vacances », case « Geler les réservations » cochée, sur une semaine future.
| # | Action | Résultat attendu |
|---|---|---|
| 1.9 | Rechercher une date dans cette période | le bandeau « Les réservations sont gelées pendant “…”. » apparaît ; les salles restent listées |
2. Le parcours de réservation
Section intitulée « 2. Le parcours de réservation »Compte alice.
| # | Action | Résultat attendu |
|---|---|---|
| 2.1 | Sur le résultat A-101, cliquer « Réserver » | le formulaire s’ouvre pré-rempli — salle et créneau repris |
| 2.2 | Motif « Réunion », 8 participants, valider | l’étiquette « Confirmation immédiate » est visible avant l’envoi ; puis « Réservation confirmée. » |
| 2.3 | Relancer la même recherche | A-101 a disparu des résultats |
| 2.4 | Onglet « Mes réservations » | la ligne apparaît sous « À venir », statut « Confirmée » |
La récurrence, et ses conflits partiels :
| # | Action | Résultat attendu |
|---|---|---|
| 2.5 | Réserver B-201 un lundi futur, 09:00–10:00 | « Réservation confirmée. » |
| 2.6 | Nouvelle réservation B-201, même heure, en partant du lundi précédent, cocher « Répéter cette réservation », chaque semaine, jusqu’à trois semaines plus tard | l’aperçu liste les occurrences ; celle de l’étape 2.5 est barrée, et le bouton devient « Réserver les 3 disponibles » |
| 2.7 | Ajouter une « Date à exclure » correspondant à une occurrence | elle disparaît de la liste, le compte du bouton baisse |
| 2.8 | Valider | « Réservation confirmée. » puis « 1 occurrence(s) en conflit ont été ignorées. » ; les lignes apparaissent avec l’étiquette « Récurrente » |
| 2.9 | Sur une occurrence → « Annuler » → « Toutes les occurrences à venir » | celle-ci et les suivantes passent « Annulée » ; les précédentes restent « Confirmée » |
| 2.10 | Rechercher un créneau qui vient d’être libéré | la salle est de retour dans les résultats |
| 2.11 | Sur une réservation → « Modifier » | le formulaire se rouvre pré-rempli ; valider annule l’ancienne et en crée une nouvelle |
3. Le temps réel
Section intitulée « 3. Le temps réel »Deux navigateurs : alice dans l’un, bob dans l’autre, mêmes filtres de recherche, une salle libre visible chez les deux.
| # | Action | Résultat attendu |
|---|---|---|
| 3.1 | alice réserve la salle | chez bob, la salle disparaît des résultats sans aucune action — pas de rechargement |
| 3.2 | alice annule | chez bob, la salle réapparaît seule |
| 3.3 | Couper le réseau de bob quelques secondes, puis le rétablir | la connexion se rétablit seule et la liste se resynchronise |
La course à deux — alice et bob ouvrent le formulaire sur la même salle et le même créneau, puis valident presque simultanément.
| # | Action | Résultat attendu |
|---|---|---|
| 3.4 | Les deux valident | un seul gagne ; le perdant lit « Cette salle vient d’être prise. Alternatives sur le même créneau : » suivi de salles cliquables |
| 3.5 | Le perdant clique une alternative | le formulaire se re-pré-remplit sur cette salle |
4. Les règles de profil
Section intitulée « 4. Les règles de profil »Compte alice → Administration → Règles de réservation → profil « Demandeur ». Les tests se jouent avec bob.
Videz les règles entre chaque cas pour les isoler.
| # | Règle posée | Ce que bob fait | Résultat attendu |
|---|---|---|---|
| 4.1 | « Types de salles » en mode « Exclure » sur le type de A-101 et A-102 | lance une recherche | ces salles sont absentes, et le compte annonce « 2 salle(s) masquée(s) par vos règles de réservation » |
| 4.2 | « Durée max par réservation » = 60 min | réserve un créneau de 2 h | « Durée trop longue : 120 min demandées, maximum 60 min. » |
| 4.3 | « Heures max par semaine » = 2 h | réserve 2 h, puis 1 h la même semaine | la première passe ; la seconde donne « Quota atteint : 2 h réservées cette semaine sur 2 h autorisées. » |
| 4.4 | (même règle) | réserve 1 h la semaine suivante | « Réservation confirmée. » — le quota est hebdomadaire, pas glissant |
| 4.5 | « Horizon de réservation » = 7 jours | réserve dans 30 jours | « Réservation trop lointaine : J+30 demandé, maximum J+7. » |
| 4.6 | « Plage horaire autorisée » = 08:00–12:00 | réserve à 14:00 | « Réservations autorisées uniquement entre 08:00 et 12:00. » |
| 4.7 | Retirer toutes les règles | relance une réservation quelconque | « Réservation confirmée. » — un profil sans règle réserve sans restriction |
Pièges connus
Section intitulée « Pièges connus »- Le quota compte les demandes en attente, pas seulement les réservations confirmées. Une demande soumise à validation consomme déjà le quota — c’est ce qui surprend au cas 4.3 si un test d’approbation a été joué avant.
- La semaine du quota est celle du créneau visé, du lundi au lundi dans le fuseau de l’établissement. Ce ne sont pas sept jours glissants depuis aujourd’hui.
- Une modification est une annulation suivie d’une création. L’ancienne réservation apparaît en « Annulée » dans la liste — ce n’est pas un doublon, c’est la trace du geste.
Les pièges transverses — environnement, authentification, fraîcheur des données — sont rassemblés sur Les pièges connus.
Traçabilité
Section intitulée « Traçabilité »| Ce qui est couvert | Story | Vue |
|---|---|---|
| Recherche de disponibilité | STORY-015 |
V30 |
| Parcours de réservation, récurrence, annulation | STORY-016 |
V32, V33 |
| Temps réel et resynchronisation | STORY-014 |
— |
| Règles de profil et quotas | STORY-012 |
V61 |
| Anti-conflit et occupation unifiée | STORY-013 |
— |
Couvert par les tests automatisés : apps/api/src/occupancy/availability-search.e2e.spec.ts,
apps/api/src/occupancy/booking-flow.e2e.spec.ts,
apps/api/src/booking-rules/booking-rules.e2e.spec.ts. Les blocs 1, 2 et 4 y sont largement
couverts côté API ; le bloc 3 ne l’est pas et reste la vraie raison de jouer ce scénario à la
main.
Checklist
Section intitulée « Checklist »- Recherche : capacité, équipements en ET, PMR, bâtiment → chaque filtre réduit la liste
- Adresse copiée dans un nouvel onglet → les filtres sont restaurés
- Heure de fin avant heure de début → « L’heure de fin doit être après l’heure de début. »
- Période gelée → « Les réservations sont gelées pendant “…”. »
- Réserver A-101 → « Réservation confirmée. » et la salle disparaît des résultats
- Récurrence avec occurrence en conflit → « Réserver les 3 disponibles »
- Annuler « Toutes les occurrences à venir » → les précédentes restent « Confirmée »
- Deux navigateurs : alice réserve → la salle disparaît chez bob sans rechargement
- Course à deux → « Cette salle vient d’être prise. Alternatives sur le même créneau : »
- Règle de durée → « Durée trop longue : 120 min demandées, maximum 60 min. »
- Quota hebdomadaire → « Quota atteint : 2 h réservées cette semaine sur 2 h autorisées. »
- Horizon → « Réservation trop lointaine : J+30 demandé, maximum J+7. »
- Profil vidé de ses règles → « Réservation confirmée. »
Écrans concernés
Section intitulée « Écrans concernés »- Réservations — l’écran principal du scénario.
- Règles de réservation — où se posent les règles.
- Calendrier académique — la période gelée.
- Approbations — la suite, quand une règle impose une validation.