feat(gherkin): ajouter features interactions et navigation

Couverture complète des règles métier 05-interactions-navigation.md :

API (Backend) :
- File d'attente : pré-calcul 5 contenus, recalcul auto (>10km, 10min, <3 contenus), invalidation, Redis cache
- Notifications géolocalisées : calcul ETA, déclenchement 7s avant, quota 6/h, cooldown 10min, tracking GPS
- Jauges d'intérêt : architecture services séparés (Calculation + Update), pattern addition points absolus, persistance Redis/PostgreSQL

UI (Frontend) :
- Mode piéton : notifications push arrière-plan, rayon 200m, permissions stratégie progressive, geofencing iOS/Android
- Basculement automatique voiture↔piéton : détection vitesse GPS, hysteresis 10s, transition transparente

Fichiers créés :
- features/api/navigation/file-attente.feature
- features/api/navigation/notifications-geolocalisees.feature
- features/ui/navigation/mode-pieton-notifications-push.feature

Fichiers enrichis :
- features/api/interest-gauges/evolution-jauges.feature (ajout scénarios architecture backend)
This commit is contained in:
jpgiannetti
2026-02-02 22:41:00 +01:00
parent 852240b5ec
commit ea77aa8ac7
4 changed files with 1055 additions and 0 deletions

View File

@@ -0,0 +1,265 @@
# language: fr
Fonctionnalité: Mode piéton - Notifications push et basculement automatique
En tant qu'utilisateur à pied
Je veux recevoir des notifications push pour audio-guides à proximité
Afin d'être alerté même avec l'application en arrière-plan
Contexte:
Étant donné que l'application RoadWave est installée
Et que l'utilisateur est connecté
# Détection automatique mode piéton
Scénario: Basculement automatique vers mode piéton (vitesse < 5 km/h)
Étant donné que je suis en mode voiture (vitesse 50 km/h)
Quand ma vitesse GPS moyenne passe à 3 km/h pendant 10 secondes
Alors l'application bascule automatiquement en mode piéton
Et aucune popup de confirmation n'est affichée
Et les notifications passent de "sonores + icône" à "push arrière-plan"
Et le rayon de détection passe de 7s ETA à 200 mètres
Scénario: Basculement automatique vers mode voiture (vitesse ≥ 5 km/h)
Étant donné que je suis en mode piéton (vitesse 3 km/h)
Quand ma vitesse GPS moyenne passe à 20 km/h pendant 10 secondes
Alors l'application bascule automatiquement en mode voiture
Et aucune popup de confirmation n'est affichée
Et les notifications passent de "push arrière-plan" à "sonores + icône"
Et le rayon de détection passe de 200m à 7s ETA
Scénario: Hysteresis pour éviter basculements intempestifs
Étant donné que je suis en mode piéton (vitesse 3 km/h)
Quand ma vitesse passe brièvement à 6 km/h pendant 2 secondes
Et qu'elle redescend à 3 km/h
Alors le mode piéton est conservé
Et aucun basculement n'a lieu
Car la durée de 10 secondes stables n'a pas été atteinte
Scénario: Vitesse moyenne calculée sur 30 secondes
Étant donné que je suis en mode voiture
Et que mes vitesses sur 30 secondes sont: [50, 48, 52, 3, 2, 4, 3, 2, ...]
Quand la vitesse moyenne sur 30s devient < 5 km/h
Et qu'elle reste stable pendant 10 secondes
Alors le basculement vers mode piéton s'effectue
# Permissions et activation
Scénario: Permission "While Using App" demandée au premier lancement
Étant donné que c'est le premier lancement de l'application
Quand j'arrive sur l'onboarding
Alors une demande de permission "Autoriser la localisation pendant l'utilisation" s'affiche
Et l'explication est: "RoadWave utilise votre position pour proposer des contenus audio géolocalisés adaptés à votre trajet"
Quand j'accepte
Alors le mode voiture est pleinement fonctionnel
Et le mode piéton notifications push n'est PAS encore activé
Scénario: Permission "Always" demandée uniquement si user active mode piéton
Étant donné que j'utilise RoadWave avec permission "While Using App"
Et que je vais dans Réglages > Notifications audio-guides piéton
Quand je clique sur le toggle "Activer notifications piéton"
Alors un écran d'éducation s'affiche:
"""
📍 Notifications audio-guides piéton
Pour vous alerter d'audio-guides à proximité même
quand vous marchez avec l'app fermée, RoadWave a
besoin de votre position en arrière-plan.
Votre position sera utilisée pour :
Détecter monuments à 200m
Vous envoyer une notification
Votre position ne sera jamais :
Vendue à des tiers
Utilisée pour de la publicité
Cette fonctionnalité est optionnelle.
Vous pouvez utiliser RoadWave sans cette permission.
[Continuer] [Non merci]
"""
Quand je clique sur "Continuer"
Alors la demande système "Autoriser toujours" (iOS) ou "Autoriser tout le temps" (Android) s'affiche
Et le mode piéton push est activé si j'accepte
Scénario: Permission arrière-plan refusée désactive mode piéton push
Étant donné que je refuse la permission "Autoriser toujours"
Quand je reviens dans l'application
Alors le toggle "Notifications piéton" est grisé et désactivé
Et un message s'affiche: "Permission refusée. Mode piéton désactivé."
Et le mode voiture reste pleinement fonctionnel
Et je peux toujours utiliser les audio-guides en mode manuel
Scénario: Permission arrière-plan peut être accordée plus tard
Étant donné que j'ai refusé la permission arrière-plan
Quand je vais dans Réglages de l'app
Alors un bouton "Activer notifications piéton" est disponible
Et un lien vers les réglages système iOS/Android est fourni
Quand j'accorde la permission dans les réglages système
Et que je reviens dans l'app
Alors le mode piéton push est automatiquement activé
# Notifications push en arrière-plan
Scénario: Notification push quand app en arrière-plan (mode piéton)
Étant donné que je suis en mode piéton
Et que l'application est en arrière-plan (fermée)
Et que je marche à proximité du Louvre
Quand je passe dans le rayon de 200 mètres d'un audio-guide
Alors une notification push système s'affiche:
"""
Audio-guide à proximité
Musée du Louvre : La Joconde - @paris_museum
"""
Et je reçois la notification même si l'app est fermée
Scénario: Tap sur notification ouvre app sur le contenu
Étant donné qu'une notification push "Audio-guide à proximité" s'affiche
Quand je tape sur la notification
Alors l'application s'ouvre
Et je suis redirigé vers la page du contenu audio-guide
Et je peux démarrer la lecture manuellement
Et je peux voir la description, le créateur, la durée, etc.
Scénario: Geofencing iOS/Android pour économie batterie
Étant donné que le mode piéton est activé
Et que l'application utilise geofencing natif
Quand je me déplace à pied
Alors l'OS iOS/Android gère la détection de proximité
Et l'application n'a pas besoin d'être constamment active
Et la batterie est préservée (< 5% consommation supplémentaire)
Scénario: Rayon de détection 200 mètres en mode piéton
Étant donné que je suis en mode piéton
Et qu'un audio-guide existe à 250 mètres
Quand je me déplace
Alors aucune notification n'est envoyée (hors rayon)
Quand je passe à 180 mètres
Alors une notification push est envoyée
Car je suis dans le rayon de 200m
# Quota anti-spam mode piéton
Scénario: Même quota 6 notifications/heure en mode piéton
Étant donné que je suis en mode piéton
Et que j'ai reçu 6 notifications push dans la dernière heure
Quand je passe près d'un 7ème audio-guide
Alors aucune notification n'est envoyée
Et le quota horaire est respecté
Scénario: Cooldown 10 min si notification ignorée (app pas ouverte)
Étant donné qu'une notification push a été envoyée
Et que je ne l'ai pas ouverte dans les 10 minutes
Quand le système détecte l'ignorance
Alors un cooldown de 10 minutes est activé
Et aucune nouvelle notification n'est envoyée pendant 10 min
# Basculement automatique
Scénario: Basculement transparent sans friction
Étant donné que je marche à 3 km/h (mode piéton)
Et que je monte dans ma voiture
Quand ma vitesse passe à 50 km/h (stable 10s)
Alors le basculement vers mode voiture s'effectue automatiquement
Et je n'ai rien à faire
Et aucune popup ne m'interrompt
Et l'expérience est transparente
Scénario: Notifications adaptées automatiquement
Étant donné que je passe de piéton (3 km/h) à voiture (50 km/h)
Quand le basculement s'effectue
Alors les notifications push arrière-plan sont désactivées
Et les notifications sonores + icône (app ouverte) sont activées
Et le rayon passe de 200m à ETA 7 secondes
Et l'adaptation est immédiate
# Garantie RGPD et fonctionnalité optionnelle
Scénario: Application utilisable sans permission arrière-plan
Étant donné que je refuse la permission "Autoriser toujours"
Quand j'utilise RoadWave
Alors le mode voiture fonctionne à 100%
Et je peux accéder à tous les audio-guides en mode manuel
Et je peux télécharger des contenus offline
Et seules les notifications push piéton sont désactivées
Scénario: Révocation permission arrière-plan désactive mode piéton
Étant donné que le mode piéton push était actif
Quand je révoque la permission dans les réglages iOS/Android
Et que j'ouvre l'application
Alors un message s'affiche: "Permission arrière-plan révoquée. Mode piéton désactivé."
Et le toggle est grisé dans les réglages
Et le mode voiture reste fonctionnel
Scénario: Désactivation mode piéton dans réglages
Étant donné que le mode piéton push est actif
Quand je vais dans Réglages > Notifications audio-guides piéton
Et que je désactive le toggle
Alors les notifications push sont arrêtées
Et le geofencing est désactivé
Et la permission arrière-plan reste accordée (mais non utilisée)
Et je peux réactiver plus tard
# Messages d'information
Scénario: Message clair sur usage permission arrière-plan
Étant donné que je consulte les réglages
Quand j'affiche les informations sur le mode piéton
Alors je vois:
"""
RoadWave utilise votre position en arrière-plan uniquement
pour vous alerter d'audio-guides à proximité quand vous
marchez. Cette fonctionnalité peut être désactivée à tout
moment. Votre position n'est jamais partagée avec des tiers.
"""
# Cas limites
Scénario: Mode indéterminé si vitesse exactement 5 km/h
Étant donné que ma vitesse moyenne est exactement 5.0 km/h
Quand le système vérifie le mode
Alors le mode actuel est conservé (pas de basculement)
Car le seuil est strict (< 5 km/h pour piéton, ≥ 5 km/h pour voiture)
Scénario: Basculement impossible si GPS désactivé
Étant donné que je désactive le GPS
Quand le système tente de détecter la vitesse
Alors aucun basculement automatique ne se produit
Et le mode actuel est conservé par défaut
Et un message "GPS désactivé" s'affiche si je tente de naviguer
Scénario: Notification push ignorée ne consomme pas de quota
Étant donné qu'une notification push est envoyée
Et que je ne l'ouvre pas (ignorée)
Quand je consulte mon quota
Alors cette notification compte quand même dans le quota 6/h
Et le cooldown 10 min est activé
Plan du Scénario: Basculement selon vitesse
Étant donné que ma vitesse moyenne est <vitesse> km/h pendant 10s
Et que je suis en mode <mode_initial>
Quand le système détecte la vitesse stable
Alors le mode devient <mode_final>
Exemples:
| vitesse | mode_initial | mode_final |
| 2 | voiture | piéton |
| 3 | voiture | piéton |
| 4 | voiture | piéton |
| 5 | piéton | voiture |
| 10 | piéton | voiture |
| 50 | piéton | voiture |
| 130 | piéton | voiture |
Plan du Scénario: Rayon de détection selon mode
Étant donné que je suis en mode <mode>
Quand un contenu géolocalisé existe à <distance>
Alors une notification est <decision>
Exemples:
| mode | distance | decision |
| piéton | 150m | envoyée |
| piéton | 199m | envoyée |
| piéton | 201m | non envoyée |
| piéton | 300m | non envoyée |
| voiture | 98m (ETA 7s) | envoyée |
| voiture | 150m (ETA 10s) | non envoyée |