Aller au contenu

Vue filtrée pour Administrateur Planificateur Gestionnaire de patrimoine Enseignant Étudiant Tout afficher

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

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.

Compte aliceRé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

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

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

Compte aliceAdministration → 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
  • 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.

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.

  • 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. »
Documentation technique source (3)