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:
265
features/ui/navigation/mode-pieton-notifications-push.feature
Normal file
265
features/ui/navigation/mode-pieton-notifications-push.feature
Normal 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 |
|
||||
Reference in New Issue
Block a user