Files
roadwave/features/api/navigation/auto-switching-modes.feature
jpgiannetti c48222cc63 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.
2026-02-03 21:25:47 +01:00

235 lines
12 KiB
Gherkin

# language: fr
@api @navigation @mode-detection @mvp
Fonctionnalité: Basculement automatique entre modes voiture et piéton
En tant que système de navigation
Je veux détecter automatiquement le mode de déplacement de l'utilisateur
Et basculer entre mode voiture et mode piéton selon la vitesse GPS
Afin d'optimiser l'expérience utilisateur sans action manuelle
Contexte:
Étant donné un utilisateur authentifié avec l'application active
Et la géolocalisation est activée et autorisée
Et les permissions de géolocalisation en arrière-plan sont accordées
# ============================================================================
# DÉTECTION INITIALE DU MODE AU DÉMARRAGE
# ============================================================================
Scénario: Démarrage application à vitesse piéton (0-4 km/h)
Étant donné l'utilisateur ouvre l'application
Et les 3 premières lectures GPS montrent des vitesses de [0, 2, 3] km/h
Quand le système détermine le mode initial
Alors le mode "piéton" doit être activé par défaut
Et les notifications push géolocalisées doivent être activées
Et un rayon de détection de 200m doit être appliqué
Scénario: Démarrage application en mouvement (≥5 km/h)
Étant donné l'utilisateur ouvre l'application
Et les 3 premières lectures GPS montrent des vitesses de [30, 35, 32] km/h
Quand le système détermine le mode initial
Alors le mode "voiture" doit être activé par défaut
Et les notifications in-app avec compteur 7s doivent être activées
Et l'ETA doit être calculé pour les contenus géolocalisés
Scénario: Démarrage avec GPS instable - mode par défaut
Étant donné l'utilisateur ouvre l'application
Et les lectures GPS sont erratiques : [0, 45, 2, 60, 1] km/h
Quand le système ne peut pas déterminer le mode avec confiance
Alors le mode "piéton" doit être activé par défaut (mode le plus sûr)
Et une modal doit demander à l'utilisateur de confirmer son mode
Et le choix utilisateur doit être mémorisé pour la session
# ============================================================================
# BASCULEMENT VOITURE → PIÉTON (vitesse <5 km/h soutenue)
# ============================================================================
Scénario: Arrêt prolongé déclenche basculement piéton
Étant donné l'utilisateur est en mode voiture
Et la vitesse moyenne sur 2 minutes est de 2 km/h (embouteillage ou arrêt)
Quand le système détecte cette condition pendant 2 minutes consécutives
Alors le mode doit basculer automatiquement vers "piéton"
Et une notification toast doit informer : "Mode piéton activé"
Et les notifications push géolocalisées doivent être activées
Et le cooldown voiture actif doit être annulé
Scénario: Stationnement confirmé (vitesse = 0 pendant 2 minutes)
Étant donné l'utilisateur est en mode voiture
Et la vitesse GPS est de 0 km/h pendant 2 minutes consécutives
Et la précision GPS est <20m (pas de perte signal)
Quand le système détecte l'arrêt prolongé
Alors le mode doit basculer vers "piéton"
Et une notification doit proposer : "Voulez-vous activer le mode piéton ?"
Et si l'utilisateur ne répond pas, le basculement doit être automatique après 30 secondes
Scénario: Embouteillage prolongé (vitesse <5 km/h mais en mouvement)
Étant donné l'utilisateur est en mode voiture à 35 km/h
Et la vitesse chute à 3 km/h et oscille entre 0-4 km/h
Et cette condition dure 3 minutes
Quand le système détecte un mouvement résiduel (pas totalement arrêté)
Alors le mode "voiture" doit être maintenu temporairement
Mais le calcul ETA doit passer en mode "vitesse lente"
Et après 5 minutes <5 km/h, le mode piéton doit être proposé
Scénario: Feu rouge ou arrêt temporaire ne déclenche PAS de basculement
Étant donné l'utilisateur est en mode voiture à 50 km/h
Et la vitesse chute à 0 km/h pendant 45 secondes (feu rouge)
Quand le système évalue les conditions
Alors le mode "voiture" doit être maintenu
Car la durée <2 minutes (seuil de basculement)
Et aucune notification ne doit être affichée
# ============================================================================
# BASCULEMENT PIÉTON → VOITURE (vitesse ≥5 km/h soutenue)
# ============================================================================
Scénario: Démarrage voiture déclenche basculement automatique
Étant donné l'utilisateur est en mode piéton
Et la vitesse passe de 0 km/h à 15 km/h en 10 secondes
Et la vitesse reste 10 km/h pendant 30 secondes
Quand le système détecte une accélération soutenue
Alors le mode doit basculer automatiquement vers "voiture"
Et une notification toast doit informer : "Mode voiture activé"
Et les notifications in-app avec ETA doivent être activées
Et les notifications push piéton doivent être désactivées
Scénario: Course à pied ou vélo lent ne déclenche PAS de basculement voiture
Étant donné l'utilisateur est en mode piéton
Et la vitesse monte à 8 km/h et oscille entre 6-10 km/h
Quand le système évalue les conditions
Alors le mode "piéton" doit être maintenu
Car la vitesse reste <15 km/h (seuil de confiance pour voiture)
Et l'utilisateur peut basculer manuellement si nécessaire
Scénario: Trajet en bus ou vélo rapide (15-25 km/h)
Étant donné l'utilisateur est en mode piéton
Et la vitesse passe à 20 km/h et reste stable
Quand le système détecte une vitesse 15 km/h pendant 1 minute
Alors une notification doit proposer : "Passer en mode véhicule ?"
Et si l'utilisateur accepte, basculer en mode "voiture"
Et si l'utilisateur refuse, mémoriser le choix pour 30 minutes
Scénario: Sortie de transport en commun
Étant donné l'utilisateur est en mode piéton
Et la vitesse était de 0 km/h (dans le bus)
Et la vitesse monte soudainement à 40 km/h (bus démarre)
Puis retombe à 2 km/h après 5 minutes (descente du bus)
Quand le système détecte ce pattern
Alors le mode "piéton" doit être maintenu
Et aucun basculement automatique ne doit être déclenché
Car les transports en commun sont ambigus
# ============================================================================
# BASCULEMENT AVEC AUDIO-GUIDE EN COURS
# ============================================================================
Scénario: Basculement voiture → piéton pendant audio-guide voiture
Étant donné l'utilisateur écoute un audio-guide en mode voiture
Et l'utilisateur se gare (vitesse = 0 km/h pendant 2 minutes)
Quand le système bascule en mode piéton
Alors l'audio-guide doit continuer en mode piéton
Et les séquences restantes doivent s'adapter au mode piéton :
| voiture | piéton |
| Déclenchement automatique GPS | Navigation manuelle |
| Distance affichée en mètres | Distance masquée |
| Flèche direction | Pas de flèche |
Et une notification doit informer : "Audio-guide adapté au mode piéton"
Scénario: Basculement piéton → voiture pendant audio-guide piéton
Étant donné l'utilisateur écoute un audio-guide en mode piéton
Et l'audio-guide est configuré pour "piéton uniquement"
Et l'utilisateur monte en voiture (vitesse passe à 30 km/h)
Quand le système bascule en mode voiture
Alors l'audio-guide doit être mis en pause automatiquement
Et une notification doit proposer : "Mettre l'audio-guide en pause ?"
Et si confirmé, sauvegarder la progression pour reprise ultérieure
# ============================================================================
# GESTION DES TRANSITIONS ET EDGE CASES
# ============================================================================
Scénario: Basculement rapide voiture → piéton → voiture (indécision)
Étant donné l'utilisateur est en mode voiture
Et la vitesse oscille : 40 km/h 0 km/h (1 min) 35 km/h 0 km/h (1 min)
Quand le système détecte une instabilité de mode
Alors le mode "voiture" doit être maintenu par défaut
Et un délai de stabilisation de 3 minutes doit être appliqué
Et aucune notification de basculement ne doit être envoyée
Scénario: Tunnel ou perte GPS ne déclenche PAS de basculement
Étant donné l'utilisateur est en mode voiture à 90 km/h
Et le signal GPS est perdu pendant 2 minutes (tunnel)
Quand le système détecte l'absence de signal GPS
Alors le mode "voiture" doit être maintenu
Et la dernière vitesse connue doit être utilisée
Et aucun basculement ne doit être déclenché
Scénario: Utilisateur force le mode manuellement
Étant donné l'utilisateur est en mode voiture automatique
Et l'utilisateur bascule manuellement en mode piéton via l'interface
Quand le basculement manuel est effectué
Alors le mode manuel doit être prioritaire pendant 30 minutes
Et les basculements automatiques doivent être désactivés pendant cette période
Et un flag "manual_override" doit être loggé
Scénario: Reprise après override manuel
Étant donné l'utilisateur a forcé le mode piéton il y a 35 minutes
Et la vitesse actuelle est de 60 km/h depuis 5 minutes
Quand la période d'override (30 min) expire
Alors le système doit reprendre la détection automatique
Et basculer en mode voiture car vitesse 5 km/h
Et notifier l'utilisateur du basculement
# ============================================================================
# IMPACT SUR LES AUTRES FONCTIONNALITÉS
# ============================================================================
Scénario: Basculement annule le cooldown notification voiture
Étant donné l'utilisateur est en mode voiture
Et un cooldown de 10 minutes est actif (notification ignorée)
Quand le mode bascule vers piéton
Alors le cooldown doit être immédiatement annulé
Et les notifications piéton doivent être activées
Car les mécanismes de notification sont différents entre modes
Scénario: Basculement adapte le rayon de détection géolocalisée
Étant donné l'utilisateur est en mode voiture
Et le rayon de détection pour contenus géolocalisés est adaptatif (basé sur vitesse)
Quand le mode bascule vers piéton
Alors le rayon de détection doit être fixé à 200m
Et les contenus hors rayon doivent être retirés de la file d'attente
Et une nouvelle recherche géospatiale doit être effectuée
Scénario: Quota notifications indépendant du mode
Étant donné l'utilisateur a reçu 4 notifications en mode voiture (quota 4/6)
Quand le mode bascule vers piéton
Alors le compteur de quota doit être conservé (toujours 4/6)
Car le quota de 6/heure s'applique globalement (tous modes confondus)
# ============================================================================
# MÉTRIQUES & ANALYTICS
# ============================================================================
Scénario: Logging des basculements de mode pour analytics
Étant donné l'utilisateur bascule de voiture à piéton
Quand le basculement est effectué
Alors un événement analytics doit être loggé :
| event_type | mode_switch |
| from_mode | car |
| to_mode | pedestrian |
| trigger | speed_threshold |
| speed_kmh | 1.5 |
| duration_previous_mode | 1800 |
| manual_override | false |
| timestamp | 2026-02-03 14:30:00 |
Et ces métriques doivent alimenter le dashboard de monitoring
Scénario: Détection pattern utilisateur (majoritairement piéton vs voiture)
Étant donné l'utilisateur utilise l'application depuis 30 jours
Et 80% du temps d'écoute est en mode piéton
Quand le système analyse le comportement
Alors un flag "primary_mode: pedestrian" doit être défini
Et le mode par défaut au démarrage doit être "piéton"
Et l'algorithme de recommandation doit favoriser les audio-guides piétons