Approbations
Vérifié contre le produit le .
| Domaine | Approbations — la file, les trois décisions, l’expiration automatique |
| Durée | ~10 min |
| Niveau | complet |
| Étiquette | manuel — le badge qui bouge sans rechargement exige deux navigateurs simultanés |
Préparation
Section intitulée « Préparation »Socle B. Le montage est sur la préparation commune.
Comptes : bob (« Demandeur »), alice (administratrice, qui porte
booking.approve).
État de départ : sur le profil « Demandeur », poser la seule règle « Approbation requise », sans type de salle sélectionné — elle s’applique alors à toutes les salles. Retirer toute autre règle. Toute réservation de bob deviendra ainsi une demande de réservation Une occupation en attente de validation : elle bloque déjà la salle, mais elle peut encore être refusée. .
Deux navigateurs : bob dans l’un, alice dans l’autre, tous deux connectés.
1. Demande, puis validation
Section intitulée « 1. Demande, puis validation »| # | Action | Résultat attendu |
|---|---|---|
| 1.1 | bob réserve A-101, motif « Répétition » | avant l’envoi, l’étiquette « Partira en demande d’approbation » ; puis « Demande d’approbation envoyée. » |
| 1.2 | bob → « Mes réservations » | la ligne porte le statut « En attente d’approbation » |
| 1.3 | Chez alice, sans recharger | un compteur apparaît sur l’entrée « Validations » de la navigation |
| 1.4 | alice → Validations | la demande est là, avec le demandeur, la salle, le créneau, le motif et « Demandée le … » |
| 1.5 | alice → « Valider » | « Demande validée — réservation confirmée. » ; la demande quitte la file |
| 1.6 | Chez bob, sans recharger | le statut passe à « Confirmée » |
| 1.7 | alice recharge et retente la même validation | la demande n’est plus dans la file — elle a été traitée |
2. Refus avec motif
Section intitulée « 2. Refus avec motif »| # | Action | Résultat attendu |
|---|---|---|
| 2.1 | bob soumet une nouvelle demande | elle apparaît dans la file d’alice |
| 2.2 | alice → « Refuser » sans rien saisir | le bouton de confirmation reste inactif — le motif est obligatoire |
| 2.3 | Saisir « Salle réservée aux examens », confirmer | « Demande refusée. Le demandeur est informé. » |
| 2.4 | Chez bob | statut « Refusée », avec le motif affiché : « Refusée : Salle réservée aux examens » |
| 2.5 | Rechercher ce créneau | la salle est de nouveau disponible — un refus libère |
3. Alternative en un clic
Section intitulée « 3. Alternative en un clic »| # | Action | Résultat attendu |
|---|---|---|
| 3.1 | bob soumet une demande sur A-101 | elle apparaît dans la file |
| 3.2 | alice → « Proposer une alternative » | le dialogue « Proposer une autre salle » liste les salles libres du même créneau |
| 3.3 | Choisir A-102, message « A-102 est plus adaptée », valider | « Alternative proposée au demandeur. » ; la demande d’origine est close et A-101 libérée |
| 3.4 | Chez bob | « Alternative proposée : A-102 », avec un bouton « Accepter » |
| 3.5 | bob clique « Accepter » | une nouvelle réservation est créée, qui repasse par les règles de son profil |
| 3.6 | bob clique « Accepter » une seconde fois | le bouton a disparu — l’offre se consomme une seule fois |
4. La portée d’un approbateur
Section intitulée « 4. La portée d’un approbateur »Compte dave, « Valideur A », limité au campus A.
| # | Action | Résultat attendu |
|---|---|---|
| 4.1 | bob demande une salle du campus A (A-101) | dave voit la demande dans sa file |
| 4.2 | bob demande B-201 (campus B) | dave ne la voit pas ; alice, non limitée, la voit |
| 4.3 | Comparer le compteur de dave et celui d’alice | ils diffèrent — chacun compte ce qui le concerne |
C’est le seul écran du produit où la portée d’un rôle est réellement appliquée. Le détail est sur Rôles.
5. L’expiration automatique
Section intitulée « 5. L’expiration automatique »| # | Action | Résultat attendu |
|---|---|---|
| 5.1 | bob demande une salle sur un créneau qui commence dans quelques minutes | la demande apparaît dans la file |
| 5.2 | Ne rien faire, attendre le passage de l’heure de début, puis une minute de plus | la demande quitte la file sans que personne ne l’ait décidée |
| 5.3 | Chez bob | statut « Expirée », sans motif — personne n’a refusé |
| 5.4 | Rechercher ce créneau | la salle est libre — l’expiration l’a libérée |
Pièges connus
Section intitulée « Pièges connus »- Une demande en attente occupe déjà la salle. Elle ne peut pas être doublée pendant qu’elle attend, et c’est pourquoi son expiration compte.
- Le contrôle d’expiration passe environ toutes les minutes. Une demande peut rester visible quelques dizaines de secondes après l’heure de son créneau : ce n’est pas un blocage.
- Une alternative est un refus, plus une offre. La salle d’origine est libérée avant que bob n’ait vu quoi que ce soit ; quelqu’un d’autre peut la prendre entre-temps.
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 |
|---|---|---|
| File d’approbation, trois décisions | STORY-017 |
V34 |
| Règle « Approbation requise » | STORY-012 |
V61 |
| Portée d’un rôle appliquée | STORY-004 |
— |
| Badge en temps réel | STORY-014 |
— |
| Expiration automatique | STORY-017 |
— |
Couvert par les tests automatisés : apps/api/src/approvals/approvals.e2e.spec.ts. Les trois
décisions et le filtrage par portée y sont couverts côté API ; le badge en temps réel et la
consommation de l’offre côté demandeur ne le sont pas.
Checklist
Section intitulée « Checklist »- Règle « Approbation requise » seule sur le profil « Demandeur »
- bob réserve → « Partira en demande d’approbation » puis « Demande d’approbation envoyée. »
- Chez alice sans recharger → un compteur apparaît sur « Validations »
- « Valider » → « Demande validée — réservation confirmée. », et chez bob le statut passe à « Confirmée » sans rechargement
- « Refuser » sans motif → le bouton reste inactif
- Refus motivé → chez bob, « Refusée » avec le motif affiché
- Après refus, la salle est de nouveau disponible
- « Proposer une alternative » → chez bob, « Alternative proposée : A-102 » + « Accepter »
- Second clic sur « Accepter » → le bouton a disparu
- dave, limité au campus A, ne voit pas la demande sur B-201
- Demande non traitée avant son créneau → « Expirée », sans motif, salle libérée
Écrans concernés
Section intitulée « Écrans concernés »- Approbations — l’écran principal du scénario.
- Réservations — d’où partent les demandes, et où le demandeur suit leur sort.
- Règles de réservation — la règle qui alimente la file.
- Journal d'audit — chaque décision y laisse une entrée.