Ajout de 47 features Gherkin (~650 scénarios) pour couvrir 100% des règles métier : - Authentification (5) : validation mot de passe, tentatives connexion, multi-device, 2FA, récupération - Audio-guides (12) : détection mode, création, navigation piéton/voiture, ETA, gestion points, progression - Navigation (5) : notifications minimalistes, décompte 5s, stationnement, historique, basculement auto - Création contenu (3) : image auto, restrictions modification, suppression - Radio live (2) : enregistrement auto, interdictions modération - Droits auteur (6) : fair use 30s, détection musique, signalements, sanctions, appels - Modération (9) : badges Bronze/Argent/Or, score fiabilité, utilisateur confiance, audit, anti-abus - Premium (2) : webhooks Mangopay, tarification multi-canal - Profil/Partage/Recherche (5) : badge vérifié, stats arrondies, partage premium, filtres avancés, carte Tous les scénarios incluent edge cases, métriques de performance et conformité RGPD. Couverture fonctionnelle MVP maintenant complète.
251 lines
11 KiB
Gherkin
251 lines
11 KiB
Gherkin
# 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
|