Réorganise la documentation du projet selon les principes du Domain-Driven Design (DDD) pour améliorer la cohésion, la maintenabilité et l'alignement avec l'architecture modulaire du backend. **Structure cible:** ``` docs/domains/ ├── README.md (Context Map) ├── _shared/ (Core Domain) ├── recommendation/ (Supporting Subdomain) ├── content/ (Supporting Subdomain) ├── moderation/ (Supporting Subdomain) ├── advertising/ (Generic Subdomain) ├── premium/ (Generic Subdomain) └── monetization/ (Generic Subdomain) ``` **Changements effectués:** Phase 1: Création de l'arborescence des 7 bounded contexts Phase 2: Déplacement des règles métier (01-19) vers domains/*/rules/ Phase 3: Déplacement des diagrammes d'entités vers domains/*/entities/ Phase 4: Déplacement des diagrammes flux/états/séquences vers domains/*/ Phase 5: Création des README.md pour chaque domaine Phase 6: Déplacement des features Gherkin vers domains/*/features/ Phase 7: Création du Context Map (domains/README.md) Phase 8: Mise à jour de mkdocs.yml pour la nouvelle navigation Phase 9: Correction automatique des liens internes (script fix-markdown-links.sh) Phase 10: Nettoyage de l'ancienne structure (regles-metier/, diagrammes/, features/) **Configuration des tests:** - Makefile: godog run docs/domains/*/features/ - scripts/generate-bdd-docs.py: features_dir → docs/domains **Avantages:** ✅ Cohésion forte: toute la doc d'un domaine au même endroit ✅ Couplage faible: domaines indépendants, dépendances explicites ✅ Navigabilité améliorée: README par domaine = entrée claire ✅ Alignement code/docs: miroir de backend/internal/ ✅ Onboarding facilité: exploration domaine par domaine ✅ Tests BDD intégrés: features au plus près des règles métier Voir docs/REFACTOR-DDD.md pour le plan complet.
108 lines
5.3 KiB
Gherkin
108 lines
5.3 KiB
Gherkin
# language: fr
|
|
Fonctionnalité: Récupération de compte
|
|
En tant qu'utilisateur ayant oublié son mot de passe
|
|
Je veux pouvoir réinitialiser mon mot de passe via email
|
|
Afin de récupérer l'accès à mon compte
|
|
|
|
Contexte:
|
|
Étant donné que l'API RoadWave est disponible
|
|
Et qu'un utilisateur existe avec l'email "user@test.fr"
|
|
|
|
Scénario: Demander la réinitialisation du mot de passe
|
|
Quand je clique sur "Mot de passe oublié"
|
|
Et que je saisis mon email "user@test.fr"
|
|
Alors je reçois un email avec un lien de réinitialisation
|
|
Et le lien expire dans 1 heure
|
|
Et je vois le message "Email de réinitialisation envoyé"
|
|
|
|
Scénario: Email inexistant lors de la demande de réinitialisation
|
|
Quand je demande une réinitialisation pour l'email "inexistant@test.fr"
|
|
Alors je vois le même message "Email de réinitialisation envoyé"
|
|
Mais aucun email n'est envoyé (sécurité - pas d'énumération d'emails)
|
|
|
|
Scénario: Réinitialiser le mot de passe avec un lien valide
|
|
Étant donné que j'ai demandé une réinitialisation de mot de passe
|
|
Et que j'ai reçu le lien de réinitialisation
|
|
Quand je clique sur le lien
|
|
Et que je saisis un nouveau mot de passe "NouveauPass123"
|
|
Et que je confirme le nouveau mot de passe "NouveauPass123"
|
|
Alors mon mot de passe est modifié avec succès
|
|
Et je suis déconnecté de tous mes appareils sauf celui en cours
|
|
Et je reçois un email de confirmation de changement
|
|
|
|
Scénario: Lien de réinitialisation expiré
|
|
Étant donné que j'ai demandé une réinitialisation il y a 2 heures
|
|
Quand j'essaie d'utiliser le lien
|
|
Alors je vois le message "Ce lien a expiré"
|
|
Et je peux demander un nouveau lien
|
|
|
|
Scénario: Nouveau mot de passe ne respecte pas les règles
|
|
Étant donné que j'ai un lien de réinitialisation valide
|
|
Quand je saisis un nouveau mot de passe "faible"
|
|
Alors la réinitialisation échoue
|
|
Et je vois le message "Le mot de passe doit contenir au moins 8 caractères, 1 majuscule et 1 chiffre"
|
|
|
|
Scénario: Confirmation du mot de passe ne correspond pas
|
|
Étant donné que j'ai un lien de réinitialisation valide
|
|
Quand je saisis un nouveau mot de passe "NouveauPass123"
|
|
Et que je confirme avec un mot de passe différent "AutrePass123"
|
|
Alors la réinitialisation échoue
|
|
Et je vois le message "Les mots de passe ne correspondent pas"
|
|
|
|
Scénario: Limite de demandes de réinitialisation
|
|
Étant donné que j'ai déjà demandé 3 réinitialisations dans la dernière heure
|
|
Quand je demande une 4ème réinitialisation
|
|
Alors la demande échoue
|
|
Et je vois le message "Maximum 3 demandes par heure. Réessayez plus tard."
|
|
|
|
Scénario: Compteur de demandes se réinitialise après 1 heure
|
|
Étant donné que j'ai demandé 3 réinitialisations
|
|
Et que 1 heure s'est écoulée
|
|
Quand je demande une nouvelle réinitialisation
|
|
Alors la demande réussit
|
|
Et je reçois un email avec un nouveau lien
|
|
|
|
Scénario: Email de notification de changement de mot de passe
|
|
Étant donné que je viens de réinitialiser mon mot de passe
|
|
Alors je reçois un email de confirmation avec:
|
|
| sujet | Votre mot de passe a été modifié |
|
|
| contenu_contient | Votre mot de passe a été modifié |
|
|
| date_heure | présente |
|
|
| appareil | présent |
|
|
| localisation | présente |
|
|
| action_urgence | Lien si ce n'était pas vous |
|
|
|
|
Scénario: Notification push si changement depuis appareil non reconnu
|
|
Étant donné que je me suis toujours connecté depuis mon iPhone
|
|
Et que je réinitialise mon mot de passe depuis un PC Windows
|
|
Alors je reçois une notification push sur mon iPhone avec:
|
|
| titre | Mot de passe modifié |
|
|
| message | Depuis Windows - Paris, France |
|
|
| action | Sécuriser le compte si ce n'est pas vous |
|
|
|
|
Scénario: Déconnexion de tous les appareils après réinitialisation
|
|
Étant donné que je suis connecté sur 4 appareils différents
|
|
Et que je réinitialise mon mot de passe depuis un navigateur web
|
|
Alors les 3 autres appareils sont déconnectés immédiatement
|
|
Et seule la session du navigateur web reste active
|
|
Et je vois le message "Vous avez été déconnecté des autres appareils par sécurité"
|
|
|
|
Scénario: Lien de réinitialisation invalide si déjà utilisé
|
|
Étant donné que j'ai réinitialisé mon mot de passe avec un lien
|
|
Quand j'essaie de réutiliser le même lien
|
|
Alors je vois le message "Ce lien a déjà été utilisé"
|
|
Et je peux demander un nouveau lien si nécessaire
|
|
|
|
Scénario: Nouveau lien invalide l'ancien
|
|
Étant donné que j'ai demandé une réinitialisation et reçu un lien
|
|
Quand je demande une nouvelle réinitialisation
|
|
Alors l'ancien lien est invalidé
|
|
Et seul le nouveau lien fonctionne
|
|
|
|
Scénario: Réinitialisation débloque un compte bloqué
|
|
Étant donné que mon compte est bloqué après 5 tentatives de connexion
|
|
Quand je réinitialise mon mot de passe via email
|
|
Alors le blocage est levé immédiatement
|
|
Et je peux me connecter avec le nouveau mot de passe
|
|
Et le compteur de tentatives est remis à 0
|