# language: fr @api @authentication @security @mvp Fonctionnalité: Validation des règles de mot de passe En tant que système d'authentification Je veux valider la complexité des mots de passe Afin de garantir la sécurité des comptes utilisateurs Contexte: Étant donné un utilisateur souhaite créer un compte ou modifier son mot de passe # ============================================================================ # VALIDATION LONGUEUR MINIMALE (8 CARACTÈRES) # ============================================================================ Scénario: Mot de passe valide avec 8 caractères minimum Étant donné l'utilisateur saisit le mot de passe "Azerty123" Quand le système valide le mot de passe Alors la validation doit réussir Et aucune erreur ne doit être affichée Scénario: Mot de passe trop court (7 caractères) Étant donné l'utilisateur saisit le mot de passe "Azert12" Quand le système valide le mot de passe Alors la validation doit échouer Et le message d'erreur doit être "Le mot de passe doit contenir au moins 8 caractères" Et le champ doit être marqué en rouge Scénario: Mot de passe très court (3 caractères) Étant donné l'utilisateur saisit le mot de passe "Ab1" Quand le système valide le mot de passe Alors la validation doit échouer Et le message d'erreur doit être "Le mot de passe doit contenir au moins 8 caractères" # ============================================================================ # VALIDATION MAJUSCULE REQUISE # ============================================================================ Scénario: Mot de passe valide avec au moins 1 majuscule Étant donné l'utilisateur saisit le mot de passe "Monpass123" Quand le système valide le mot de passe Alors la validation doit réussir Et le critère "majuscule" doit être validé avec une coche verte Scénario: Mot de passe sans majuscule Étant donné l'utilisateur saisit le mot de passe "monpass123" Quand le système valide le mot de passe Alors la validation doit échouer Et le message d'erreur doit être "Le mot de passe doit contenir au moins 1 majuscule" Scénario: Mot de passe avec plusieurs majuscules Étant donné l'utilisateur saisit le mot de passe "MonPASSword123" Quand le système valide le mot de passe Alors la validation doit réussir Car au moins 1 majuscule est présente # ============================================================================ # VALIDATION CHIFFRE REQUIS # ============================================================================ Scénario: Mot de passe valide avec au moins 1 chiffre Étant donné l'utilisateur saisit le mot de passe "Monpass1" Quand le système valide le mot de passe Alors la validation doit réussir Et le critère "chiffre" doit être validé avec une coche verte Scénario: Mot de passe sans chiffre Étant donné l'utilisateur saisit le mot de passe "Monpassword" Quand le système valide le mot de passe Alors la validation doit échouer Et le message d'erreur doit être "Le mot de passe doit contenir au moins 1 chiffre" Scénario: Mot de passe avec plusieurs chiffres Étant donné l'utilisateur saisit le mot de passe "Monpass123456" Quand le système valide le mot de passe Alors la validation doit réussir Car au moins 1 chiffre est présent # ============================================================================ # VALIDATION COMBINÉE DES 3 CRITÈRES # ============================================================================ Scénario: Mot de passe valide respectant tous les critères Étant donné l'utilisateur saisit le mot de passe "SecurePass2024!" Quand le système valide le mot de passe Alors la validation doit réussir Et tous les critères doivent être validés : | critère | statut | | longueur | ✓ | | majuscule | ✓ | | chiffre | ✓ | Scénario: Mot de passe échouant sur plusieurs critères Étant donné l'utilisateur saisit le mot de passe "pass" Quand le système valide le mot de passe Alors la validation doit échouer Et les messages d'erreur suivants doivent être affichés : | Le mot de passe doit contenir au moins 8 caractères | | Le mot de passe doit contenir au moins 1 majuscule | | Le mot de passe doit contenir au moins 1 chiffre | Scénario: Mot de passe long mais sans majuscule ni chiffre Étant donné l'utilisateur saisit le mot de passe "monmotdepasse" Quand le système valide le mot de passe Alors la validation doit échouer Et les messages d'erreur suivants doivent être affichés : | Le mot de passe doit contenir au moins 1 majuscule | | Le mot de passe doit contenir au moins 1 chiffre | # ============================================================================ # VALIDATION TEMPS RÉEL (FRONTEND) # ============================================================================ Scénario: Affichage progressif des critères pendant la saisie Étant donné l'utilisateur commence à saisir son mot de passe Quand l'utilisateur tape "m" Alors les critères suivants doivent être affichés : | critère | statut | | longueur | ✗ | | majuscule | ✗ | | chiffre | ✗ | Quand l'utilisateur tape "Mon" Alors les critères doivent être mis à jour : | critère | statut | | longueur | ✗ | | majuscule | ✓ | | chiffre | ✗ | Quand l'utilisateur tape "Monpass1" Alors les critères doivent être mis à jour : | critère | statut | | longueur | ✓ | | majuscule | ✓ | | chiffre | ✓ | Scénario: Feedback visuel temps réel Étant donné l'utilisateur saisit progressivement son mot de passe Quand un critère est validé Alors une coche verte ✓ doit apparaître à côté du critère Et le texte du critère doit passer en vert Quand un critère n'est pas validé Alors une croix rouge ✗ doit apparaître Et le texte du critère doit rester en gris ou rouge # ============================================================================ # VALIDATION BACKEND (SÉCURITÉ) # ============================================================================ Scénario: Validation backend en plus du frontend Étant donné l'utilisateur contourne la validation frontend Et envoie directement le mot de passe "weak" via API Quand le backend reçoit la requête Alors la validation backend doit rejeter le mot de passe Et retourner une erreur HTTP 400 Bad Request Et le message doit être : """ { "error": "invalid_password", "details": [ "Le mot de passe doit contenir au moins 8 caractères", "Le mot de passe doit contenir au moins 1 majuscule", "Le mot de passe doit contenir au moins 1 chiffre" ] } """ Scénario: Validation backend avec mot de passe valide Étant donné l'utilisateur envoie le mot de passe "SecurePass123" Quand le backend valide le mot de passe Alors la validation backend doit réussir Et le mot de passe doit être hashé avec bcrypt (coût 12) Et le hash doit être stocké dans la base de données # ============================================================================ # CAS LIMITES ET CARACTÈRES SPÉCIAUX # ============================================================================ Scénario: Mot de passe avec caractères spéciaux (acceptés) Étant donné l'utilisateur saisit le mot de passe "MonP@ss123!" Quand le système valide le mot de passe Alors la validation doit réussir Car les caractères spéciaux sont autorisés (mais non obligatoires) Scénario: Mot de passe avec espaces (acceptés) Étant donné l'utilisateur saisit le mot de passe "Mon Pass 123" Quand le système valide le mot de passe Alors la validation doit réussir Car les espaces sont autorisés Scénario: Mot de passe avec accents (acceptés) Étant donné l'utilisateur saisit le mot de passe "MônPàss123" Quand le système valide le mot de passe Alors la validation doit réussir Car les caractères accentués comptent comme des lettres Scénario: Mot de passe avec émojis (acceptés) Étant donné l'utilisateur saisit le mot de passe "MonPass123🔒" Quand le système valide le mot de passe Alors la validation doit réussir Car les émojis sont autorisés Scénario: Mot de passe vide Étant donné l'utilisateur laisse le champ mot de passe vide Quand le système valide le mot de passe Alors la validation doit échouer Et le message d'erreur doit être "Le mot de passe est requis" # ============================================================================ # MODIFICATION MOT DE PASSE # ============================================================================ Scénario: Changement de mot de passe avec validation Étant donné un utilisateur authentifié veut changer son mot de passe Et l'utilisateur saisit son ancien mot de passe "OldPass123" Et l'utilisateur saisit le nouveau mot de passe "NewSecure456" Quand le système valide le nouveau mot de passe Alors la validation doit réussir Et le nouveau mot de passe doit respecter les mêmes règles Et l'ancien mot de passe doit être vérifié avant le changement Scénario: Nouveau mot de passe identique à l'ancien (autorisé) Étant donné un utilisateur veut changer son mot de passe Et l'utilisateur saisit le nouveau mot de passe identique à l'ancien Quand le système valide le mot de passe Alors la validation doit réussir Car il n'y a pas de règle interdisant la réutilisation # ============================================================================ # MESSAGES D'AIDE ET UX # ============================================================================ Scénario: Affichage des règles avant saisie Étant donné l'utilisateur accède au formulaire d'inscription Quand le champ mot de passe reçoit le focus Alors une info-bulle doit s'afficher avec les règles : """ Votre mot de passe doit contenir : • Au moins 8 caractères • Au moins 1 majuscule • Au moins 1 chiffre """ Scénario: Indicateur de force du mot de passe Étant donné l'utilisateur saisit progressivement son mot de passe Quand l'utilisateur tape "Weak1" Alors l'indicateur de force doit afficher "Faible" en orange Quand l'utilisateur tape "Medium12" Alors l'indicateur de force doit afficher "Moyen" en jaune Quand l'utilisateur tape "VeryStrong123!" Alors l'indicateur de force doit afficher "Fort" en vert