feat(gherkin): compléter couverture règles métier avec 47 features manquantes
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.
This commit is contained in:
239
features/api/audio-guides/detection-mode-deplacement.feature
Normal file
239
features/api/audio-guides/detection-mode-deplacement.feature
Normal file
@@ -0,0 +1,239 @@
|
||||
# language: fr
|
||||
|
||||
@api @audio-guides @geolocation @mvp
|
||||
Fonctionnalité: Détection automatique du mode de déplacement
|
||||
|
||||
En tant qu'utilisateur
|
||||
Je veux que l'application détecte automatiquement mon mode de déplacement
|
||||
Afin d'adapter l'expérience audio-guide (voiture, piéton, vélo, transports)
|
||||
|
||||
Contexte:
|
||||
Étant donné que le système utilise les capteurs suivants pour la détection:
|
||||
| Capteur | Utilisation |
|
||||
| GPS (vitesse) | Vitesse de déplacement |
|
||||
| Accéléromètre | Détection de la marche |
|
||||
| Gyroscope | Détection de mouvements |
|
||||
| Bluetooth | Connexion CarPlay/Android Auto |
|
||||
| Activité (CoreMotion) | walking, running, cycling, automotive |
|
||||
|
||||
Scénario: Détection automatique du mode voiture
|
||||
Étant donné un utilisateur "alice@roadwave.fr" en déplacement
|
||||
Quand le système détecte les indicateurs suivants:
|
||||
| Indicateur | Valeur |
|
||||
| Vitesse GPS | 45 km/h |
|
||||
| Accélération longitudinale | Typique d'une voiture|
|
||||
| Bluetooth connecté | CarPlay |
|
||||
| Activity Recognition | automotive |
|
||||
| Stabilité du mouvement | Haute |
|
||||
Alors le mode de déplacement "voiture" est sélectionné avec confiance: 95%
|
||||
Et l'interface passe en mode voiture:
|
||||
| Caractéristique | État |
|
||||
| Notifications visuelles | Minimales |
|
||||
| Notifications audio | Prioritaires |
|
||||
| Affichage des distances | Mètres + temps ETA |
|
||||
| Auto-play au point d'intérêt | Activé |
|
||||
Et un événement "TRAVEL_MODE_DETECTED_CAR" est enregistré
|
||||
Et la métrique "travel_mode.detected.car" est incrémentée
|
||||
|
||||
Scénario: Détection automatique du mode piéton
|
||||
Étant donné un utilisateur "bob@roadwave.fr" en déplacement
|
||||
Quand le système détecte les indicateurs suivants:
|
||||
| Indicateur | Valeur |
|
||||
| Vitesse GPS | 4 km/h |
|
||||
| Accéléromètre | Pattern de marche |
|
||||
| Fréquence de pas | 110 pas/min |
|
||||
| Activity Recognition | walking |
|
||||
| Bluetooth connecté | Non |
|
||||
Alors le mode de déplacement "piéton" est sélectionné avec confiance: 92%
|
||||
Et l'interface passe en mode piéton:
|
||||
| Caractéristique | État |
|
||||
| Notifications visuelles | Complètes |
|
||||
| Navigation libre | Activée |
|
||||
| Affichage carte | Complet |
|
||||
| Auto-play publicité | Autorisé |
|
||||
Et un événement "TRAVEL_MODE_DETECTED_WALKING" est enregistré
|
||||
Et la métrique "travel_mode.detected.walking" est incrémentée
|
||||
|
||||
Scénario: Détection automatique du mode vélo
|
||||
Étant donné un utilisateur "charlie@roadwave.fr" en déplacement
|
||||
Quand le système détecte les indicateurs suivants:
|
||||
| Indicateur | Valeur |
|
||||
| Vitesse GPS | 18 km/h |
|
||||
| Accéléromètre | Vibrations régulières|
|
||||
| Pattern de mouvement | Cyclique |
|
||||
| Activity Recognition | cycling |
|
||||
| Variations de vitesse | Moyennes |
|
||||
Alors le mode de déplacement "vélo" est sélectionné avec confiance: 88%
|
||||
Et l'interface passe en mode vélo:
|
||||
| Caractéristique | État |
|
||||
| Notifications visuelles | Limitées |
|
||||
| Notifications audio | Prioritaires |
|
||||
| Affichage des distances | Mètres |
|
||||
| Auto-play au point d'intérêt | Optionnel |
|
||||
Et un événement "TRAVEL_MODE_DETECTED_CYCLING" est enregistré
|
||||
Et la métrique "travel_mode.detected.cycling" est incrémentée
|
||||
|
||||
Scénario: Détection automatique du mode transports en commun
|
||||
Étant donné un utilisateur "david@roadwave.fr" en déplacement
|
||||
Quand le système détecte les indicateurs suivants:
|
||||
| Indicateur | Valeur |
|
||||
| Vitesse GPS | 35 km/h avec arrêts |
|
||||
| Pattern d'arrêts | Régulier (stations) |
|
||||
| Accéléromètre | Stationnaire par moments|
|
||||
| Précision GPS | Variable (tunnels) |
|
||||
| Activity Recognition | automotive + stationary |
|
||||
Alors le mode de déplacement "transports" est sélectionné avec confiance: 80%
|
||||
Et l'interface passe en mode transports:
|
||||
| Caractéristique | État |
|
||||
| Notifications visuelles | Complètes |
|
||||
| Auto-play aux stations | Activé |
|
||||
| Affichage carte | Complet |
|
||||
| Prise en compte des tunnels | Activée |
|
||||
Et un événement "TRAVEL_MODE_DETECTED_TRANSIT" est enregistré
|
||||
Et la métrique "travel_mode.detected.transit" est incrémentée
|
||||
|
||||
Scénario: Changement dynamique de mode détecté (voiture → piéton)
|
||||
Étant donné un utilisateur "eve@roadwave.fr" en mode voiture
|
||||
Et il roule à 50 km/h
|
||||
Quand l'utilisateur se gare et sort de la voiture:
|
||||
| Temps | Vitesse | Activity | Bluetooth |
|
||||
| T+0s | 50 km/h | automotive | CarPlay |
|
||||
| T+30s | 0 km/h | stationary | CarPlay |
|
||||
| T+60s | 0 km/h | stationary | Déconnecté|
|
||||
| T+90s | 4 km/h | walking | Non |
|
||||
Alors le mode bascule automatiquement de "voiture" à "piéton"
|
||||
Et une notification discrète s'affiche: "Mode piéton activé"
|
||||
Et l'interface s'adapte instantanément au mode piéton
|
||||
Et un événement "TRAVEL_MODE_CHANGED" est enregistré avec transition: "car_to_walking"
|
||||
Et la métrique "travel_mode.transition.car_to_walking" est incrémentée
|
||||
|
||||
Scénario: Changement dynamique de mode détecté (piéton → vélo)
|
||||
Étant donné un utilisateur "frank@roadwave.fr" en mode piéton
|
||||
Et il marche à 4 km/h
|
||||
Quand l'utilisateur monte sur un vélo:
|
||||
| Temps | Vitesse | Activity | Pattern |
|
||||
| T+0s | 4 km/h | walking | Marche |
|
||||
| T+10s | 8 km/h | cycling | Cyclique |
|
||||
| T+20s | 15 km/h | cycling | Cyclique |
|
||||
| T+30s | 18 km/h | cycling | Cyclique stable|
|
||||
Alors le mode bascule automatiquement de "piéton" à "vélo"
|
||||
Et une notification s'affiche: "Mode vélo activé"
|
||||
Et les paramètres audio sont ajustés pour réduire les notifications visuelles
|
||||
Et un événement "TRAVEL_MODE_CHANGED" est enregistré avec transition: "walking_to_cycling"
|
||||
Et la métrique "travel_mode.transition.walking_to_cycling" est incrémentée
|
||||
|
||||
Scénario: Détection ambiguë avec faible confiance
|
||||
Étant donné un utilisateur "grace@roadwave.fr" en déplacement
|
||||
Quand le système détecte des indicateurs contradictoires:
|
||||
| Indicateur | Valeur |
|
||||
| Vitesse GPS | 12 km/h |
|
||||
| Activity Recognition | unknown |
|
||||
| Accéléromètre | Pattern irrégulier |
|
||||
| Confiance de détection | 45% |
|
||||
Alors le mode actuel est conservé (pas de changement)
|
||||
Et une icône d'interrogation s'affiche discrètement
|
||||
Et l'utilisateur peut forcer manuellement le mode via un menu rapide
|
||||
Et un événement "TRAVEL_MODE_UNCERTAIN" est enregistré
|
||||
Et la métrique "travel_mode.uncertain" est incrémentée
|
||||
|
||||
Scénario: Forçage manuel du mode de déplacement
|
||||
Étant donné un utilisateur "henry@roadwave.fr" en mode auto-détecté "piéton"
|
||||
Mais il est en réalité en voiture (passager)
|
||||
Quand l'utilisateur ouvre le menu rapide et sélectionne "Mode voiture"
|
||||
Alors le mode "voiture" est forcé manuellement
|
||||
Et l'auto-détection est temporairement désactivée pour 30 minutes
|
||||
Et un événement "TRAVEL_MODE_FORCED_MANUAL" est enregistré avec ancienMode: "walking", nouveauMode: "car"
|
||||
Et la métrique "travel_mode.manual_override" est incrémentée
|
||||
Et après 30 minutes, l'auto-détection se réactive automatiquement
|
||||
|
||||
Scénario: Mode stationnaire détecté (arrêt prolongé)
|
||||
Étant donné un utilisateur "iris@roadwave.fr" en mode voiture
|
||||
Et il est arrêté à un feu rouge depuis 2 minutes
|
||||
Quand le système détecte:
|
||||
| Indicateur | Valeur |
|
||||
| Vitesse GPS | 0 km/h |
|
||||
| Activity Recognition | stationary |
|
||||
| Durée d'immobilité | 120 secondes |
|
||||
| Bluetooth connecté | CarPlay |
|
||||
Alors le mode reste "voiture" (pas de changement)
|
||||
Mais un flag "stationary" est activé
|
||||
Et l'audio en cours continue de jouer normalement
|
||||
Et aucun nouveau contenu n'est déclenché automatiquement
|
||||
Et un événement "TRAVEL_MODE_STATIONARY" est enregistré
|
||||
Et la métrique "travel_mode.stationary" est incrémentée
|
||||
|
||||
Scénario: Reprise du mouvement après mode stationnaire
|
||||
Étant donné un utilisateur "jack@roadwave.fr" en mode "voiture stationary"
|
||||
Et il est arrêté depuis 3 minutes
|
||||
Quand le système détecte:
|
||||
| Temps | Vitesse | Activity |
|
||||
| T+0s | 0 km/h | stationary |
|
||||
| T+5s | 10 km/h | automotive |
|
||||
| T+10s | 30 km/h | automotive |
|
||||
Alors le flag "stationary" est désactivé
|
||||
Et le mode "voiture" normal est restauré
|
||||
Et la logique de déclenchement automatique des audio-guides est réactivée
|
||||
Et un événement "TRAVEL_MODE_RESUMED" est enregistré
|
||||
Et la métrique "travel_mode.resumed" est incrémentée
|
||||
|
||||
Scénario: Gestion des permissions de localisation et capteurs
|
||||
Étant donné un utilisateur "kate@roadwave.fr" qui lance l'application
|
||||
Quand les permissions suivantes sont refusées:
|
||||
| Permission | État |
|
||||
| Localisation GPS | Refusée |
|
||||
| Motion & Fitness | Refusée |
|
||||
Alors l'auto-détection du mode est désactivée
|
||||
Et un message s'affiche: "Pour bénéficier de l'expérience optimale, activez les permissions de localisation et mouvement"
|
||||
Et un bouton "Activer les permissions" redirige vers les Réglages
|
||||
Et l'utilisateur doit sélectionner manuellement son mode de déplacement
|
||||
Et un événement "TRAVEL_MODE_PERMISSIONS_DENIED" est enregistré
|
||||
Et la métrique "travel_mode.permissions_denied" est incrémentée
|
||||
|
||||
Scénario: Optimisation de la batterie avec détection adaptative
|
||||
Étant donné un utilisateur "luke@roadwave.fr" avec batterie < 20%
|
||||
Quand le mode économie d'énergie est activé
|
||||
Alors la fréquence de détection du mode est réduite:
|
||||
| Mode normal | Mode économie d'énergie |
|
||||
| Toutes les 5s | Toutes les 30s |
|
||||
Et l'utilisation du GPS est optimisée (requêtes moins fréquentes)
|
||||
Et l'accéléromètre et gyroscope sont consultés moins souvent
|
||||
Et la précision de détection peut être légèrement réduite
|
||||
Et un événement "TRAVEL_MODE_BATTERY_SAVER" est enregistré
|
||||
Et la métrique "travel_mode.battery_saver.enabled" est incrémentée
|
||||
|
||||
Scénario: Historique des modes de déplacement pour statistiques
|
||||
Étant donné un utilisateur "mary@roadwave.fr" qui utilise l'application depuis 1 mois
|
||||
Quand l'utilisateur accède à "Mon compte > Statistiques > Modes de déplacement"
|
||||
Alors l'utilisateur voit un graphique avec répartition:
|
||||
| Mode | Temps total | Pourcentage |
|
||||
| Voiture | 15h 30min | 45% |
|
||||
| Piéton | 12h 10min | 35% |
|
||||
| Vélo | 5h 20min | 15% |
|
||||
| Transports | 1h 40min | 5% |
|
||||
Et des insights sont affichés: "Vous utilisez principalement RoadWave en voiture"
|
||||
Et les données sont conservées de manière agrégée pour respecter le RGPD
|
||||
|
||||
Scénario: Métriques de performance de la détection
|
||||
Étant donné que le système traite 100 000 détections de mode par heure
|
||||
Quand les métriques de performance sont collectées
|
||||
Alors les indicateurs suivants sont respectés:
|
||||
| Métrique | Valeur cible |
|
||||
| Temps de détection du mode | < 100ms |
|
||||
| Précision de détection (voiture) | > 95% |
|
||||
| Précision de détection (piéton) | > 90% |
|
||||
| Précision de détection (vélo) | > 85% |
|
||||
| Taux de transitions incorrectes | < 5% |
|
||||
| Consommation batterie par détection | < 0.01% |
|
||||
Et les métriques sont exportées vers le système de monitoring
|
||||
Et des alertes sont déclenchées si la précision < 80%
|
||||
|
||||
Scénario: A/B testing des algorithmes de détection
|
||||
Étant donné que le système teste 2 algorithmes de détection:
|
||||
| Algorithme | Description |
|
||||
| A | Basé sur CoreMotion uniquement |
|
||||
| B | Combinaison capteurs + ML |
|
||||
Quand un utilisateur "nathan@roadwave.fr" est assigné au groupe B
|
||||
Alors l'algorithme B est utilisé pour la détection
|
||||
Et les métriques de précision sont tracées séparément par algorithme
|
||||
Et les événements incluent le tag "algorithm_version: B"
|
||||
Et après analyse, l'algorithme le plus performant est déployé à 100%
|
||||
Reference in New Issue
Block a user