Apparence
Connexion
L'écran d'entrée de l'application (/login), et la seconde façon d'y arriver authentifié : le bouton Assumer l'identité du back-office, qui ouvre l'application dans la peau d'un autre compte.
Prérequis communs : la stack tourne (make up) et le compte de démonstration existe (make seed-demo — identifiant i.aubert, mot de passe demo1234).
1. Se connecter avec des identifiants valides
Tickets : — · Rôle : n'importe lequel · Prérequis : make seed-demo
Ouvrez
/loginsur l'application (voir l'index pour l'adresse de votre environnement).✅ Résultat attendu : la carte Connexion affiche les champs Identifiant et Mot de passe, le bouton Se connecter et le lien Mot de passe oublié ?.
Saisissez
i.aubertetdemo1234, puis Se connecter.✅ Résultat attendu : l'application ouvre le portail (adresse
/) et la navigation manager apparaît, avec l'entrée Utilisateurs.
Couverture automatique : e2e/login.spec.ts → « affiche la carte de connexion » et « une connexion réussie ouvre le portail ».
2. Refuser des identifiants incorrects
Tickets : — · Rôle : n'importe lequel · Prérequis : make seed-demo
Depuis
/login, saisissezi.aubertet un mot de passe faux.Cliquez sur Se connecter.
✅ Résultat attendu : un message d'erreur mentionnant des identifiants incorrects s'affiche, et vous restez sur
/login. Le message ne dit pas si c'est l'identifiant ou le mot de passe qui est faux.
Couverture automatique : e2e/login.spec.ts → « des identifiants invalides affichent une erreur ».
3. Se connecter depuis un téléphone
Tickets : — · Rôle : n'importe lequel · Prérequis : make seed-demo
Réduisez la fenêtre sous 768 px de large, ou ouvrez l'application sur un téléphone.
Ouvrez
/loginet connectez-vous.✅ Résultat attendu : la carte laisse place à la variante mobile — fond blanc pleine page, lien Mot de passe oublié ? ancré en bas. Tous les champs restent présents et la connexion ouvre le portail.
Couverture automatique : e2e/login.spec.ts → « rendu et connexion sur mobile », joué en 390 × 844.
4. Ouvrir l'application dans la peau d'un autre compte
Tickets : — · Rôle : Admin (compte is_staff) · Prérequis : make seed-demo et make seed-workforce
Connectez-vous au back-office (
/admin/sur l'hôte de l'API) avec un compte administrateur.Ouvrez la liste des utilisateurs et cliquez sur Assumer l'identité sur la ligne d'un salarié.
✅ Résultat attendu : un nouvel onglet s'ouvre sur l'application, déjà authentifié, et le portail affiche le nom du salarié choisi.
Ouvrez
/impersonatedirectement, sans jeton dans l'adresse.✅ Résultat attendu : l'application renvoie sur
/login. Aucune session n'est ouverte.
Couverture automatique : e2e/impersonate.spec.ts → « un token dans l'URL ouvre le portail », « sans token, retour à la connexion » et « rendu sur mobile ». L'étape 1 et 2 — le bouton du back-office lui-même — est à rejouer à la main ; côté serveur, backend/tests/test_auth.py couvre la fabrication du jeton.
5. Protéger le back-office par TOTP et codes de secours
Tickets : APAJH-24 · Rôle : compte actif avec Statut équipe, puis super-utilisateur · Prérequis : une application d'authentification et deux comptes de recette, dont un super-utilisateur
Ouvrez
/admin/, saisissez le mot de passe d'un compte avec Statut équipe qui n'a jamais enrôlé de second facteur.✅ Résultat attendu : le back-office affiche un QR et une clé manuelle ; aucune page d'administration n'est accessible avant validation du code.
Scannez le QR, saisissez le code à six chiffres, copiez les dix codes de secours puis confirmez leur sauvegarde.
✅ Résultat attendu : les dix codes ne sont affichés qu'à cette étape, puis l'accueil du back-office s'ouvre.
Déconnectez-vous, reconnectez-vous avec le mot de passe puis un nouveau code TOTP. Recommencez ensuite avec l'un des codes de secours à la place du TOTP, puis tentez de réutiliser ce même code.
✅ Résultat attendu : le TOTP et la première présentation du code de secours ouvrent le back-office ; la seconde présentation du code est refusée.
Avec le super-utilisateur vérifié, ouvrez la fiche du premier compte, choisissez Réinitialiser le second facteur et confirmez. Depuis une session déjà ouverte de ce compte, chargez une nouvelle page, puis reconnectez-vous.
✅ Résultat attendu : la session cible sort immédiatement du back-office ; le mot de passe conduit à un nouvel enrôlement avec un nouveau QR et dix nouveaux codes.
Couverture automatique : backend/tests/test_admin_mfa.py couvre l'enrôlement, le TOTP calculé, les codes de secours, leur usage unique, l'expiration de la pré-authentification, la réinitialisation et la révocation de session. Le parcours visuel du back-office reste à rejouer à la main.
Points d'attention
- Le back-office exige un second facteur ; le JWT du SPA n'en exige pas. Ce sont deux mécanismes d'authentification distincts.
- Le jeton d'accès vit 6 heures. Une session laissée ouverte plus longtemps redemande une connexion : ce n'est pas un défaut.