# language: fr Fonctionnalité: Contenus géolocalisés en mode voiture En tant qu'utilisateur en voiture Je veux recevoir des notifications de contenus géolocalisés au bon moment Afin de découvrir du contenu contextuel sans distraction au volant Contexte: Étant donné que l'API RoadWave est disponible Et que l'application est ouverte (premier plan) Et que le GPS est activé Et que l'utilisateur est en mode voiture (vitesse ≥ 5 km/h) # 17.2 - Détection et notification (Calcul ETA) Scénario: Calcul ETA et notification 7 secondes avant le point GPS Étant donné qu'un contenu géolocalisé existe à la Tour Eiffel (48.8584, 2.2945) Et que je me déplace à 50 km/h vers ce point Et que je suis à 98 mètres du point (ETA = 7 secondes) Quand le système calcule l'ETA Alors une notification est déclenchée immédiatement Et le compteur "7" s'affiche avec l'icône 🏛️ Et une notification sonore (bip court) est jouée Plan du Scénario: Calcul ETA à différentes vitesses Étant donné qu'un contenu géolocalisé existe à un point GPS Et que je me déplace à km/h Quand je suis à mètres du point Alors l'ETA calculé est secondes Et la notification est déclenchée : Exemples: | vitesse | distance | eta | notification | | 10 | 19 | 7 | Oui | | 50 | 98 | 7 | Oui | | 130 | 252 | 7 | Oui | | 50 | 200 | 14 | Non | | 10 | 50 | 18 | Non | Scénario: Notification immédiate si vitesse <5 km/h ET distance <50m Étant donné qu'un contenu géolocalisé existe à 30m de ma position Et que ma vitesse est 3 km/h (arrêté à un feu rouge) Quand le système détecte cette situation Alors une notification est déclenchée immédiatement Et je n'ai pas besoin d'attendre le calcul ETA # 17.2.2 - Format de notification minimaliste Scénario: Notification minimaliste sans texte (sécurité routière) Étant donné qu'une notification géolocalisée est déclenchée Quand la notification s'affiche Alors les éléments suivants sont visibles: | élément | présent | | Icône du tag | ✅ | | Compteur 7→1 | ✅ | | Son bref (bip) | ✅ | | Titre texte | ❌ | | Description | ❌ | | Cover image | ❌ | | Bouton Annuler | ❌ | Plan du Scénario: Icônes selon le tag du contenu Étant donné qu'un contenu géolocalisé avec le tag est disponible Quand la notification s'affiche Alors l'icône est affichée Exemples: | tag | icone | | Culture générale | 🏛️ | | Histoire | 📜 | | Voyage | ✈️ | | Famille | 👨‍👩‍👧 | | Musique | 🎵 | | Sport | ⚽ | | Technologie | 💻 | | Automobile | 🚗 | Scénario: Compteur décrémentant de 7 à 1 Étant donné qu'une notification géolocalisée s'affiche Quand le compteur démarre Alors le compteur affiche "7" Et après 1 seconde, il affiche "6" Et après 2 secondes, il affiche "5" Et après 3 secondes, il affiche "4" Et après 4 secondes, il affiche "3" Et après 5 secondes, il affiche "2" Et après 6 secondes, il affiche "1" Et après 7 secondes, la notification disparaît # 17.2.2b - Conformité CarPlay / Android Auto Scénario: Notification sonore uniquement en mode CarPlay Étant donné que l'application est connectée à CarPlay Et qu'un contenu géolocalisé est détecté (ETA 7s) Quand la notification est déclenchée Alors seule la notification sonore (bip) est jouée Et aucun overlay visuel n'est affiché (icône, compteur) Et l'utilisateur peut valider via le bouton "Suivant" au volant Scénario: Notification sonore uniquement en mode Android Auto Étant donné que l'application est connectée à Android Auto Et qu'un contenu géolocalisé est détecté (ETA 7s) Quand la notification est déclenchée Alors seule la notification sonore (bip) est jouée Et aucun overlay visuel n'est affiché Et l'utilisateur peut valider via le bouton "Suivant" au volant Scénario: Notification complète (sonore + visuelle) en mode normal Étant donné que l'application n'est PAS connectée à CarPlay/Android Auto Et qu'un contenu géolocalisé est détecté Quand la notification est déclenchée Alors la notification sonore (bip) est jouée Et l'overlay visuel s'affiche (icône + compteur 7→1) # 17.2.3 - Décompte après validation Scénario: Validation via bouton "Suivant" et décompte 5 secondes Étant donné qu'une notification géolocalisée est affichée (compteur à 5) Et que j'écoute un podcast Quand j'appuie sur le bouton "Suivant" Alors le compteur bascule à "5" (décompte final) Et le contenu actuel continue de jouer normalement Et le compteur décrémente: 5→4→3→2→1 Et après 5 secondes, le contenu géolocalisé démarre (fade in 0.3s) Scénario: Transition fluide avec fade out/in Étant donné que le décompte atteint "0" Quand le contenu géolocalisé doit démarrer Alors le contenu actuel fait un fade out de 0.3s Et le contenu géolocalisé fait un fade in de 0.3s Et il n'y a pas de silence entre les deux Scénario: Contenu actuel se termine pendant le décompte Étant donné que j'ai validé la notification (décompte 5s démarre) Et que mon contenu actuel se termine après 2 secondes Quand le contenu actuel se termine Alors le contenu suivant du buffer démarre immédiatement Et le décompte continue (3→2→1) Et à la fin du décompte, le contenu géolocalisé remplace le buffer Scénario: Ignorance de la notification (pas de clic pendant 7s) Étant donné qu'une notification géolocalisée s'affiche (compteur 7) Quand 7 secondes s'écoulent sans que j'appuie sur "Suivant" Alors la notification disparaît automatiquement Et le contenu géolocalisé est perdu (pas d'insertion dans la file) Et un cooldown de 10 minutes est activé # 17.3 - Limitation anti-spam Scénario: Quota de 6 contenus géolocalisés par heure Étant donné que j'ai validé 6 notifications géolocalisées dans la dernière heure Quand un 7ème contenu géolocalisé est détecté Alors aucune notification n'est envoyée Et le contenu n'est pas inséré dans la file Scénario: Fenêtre glissante de 60 minutes Étant donné que j'ai validé 6 contenus géolocalisés Et que le premier contenu a été validé il y a 61 minutes Quand un nouveau contenu géolocalisé est détecté Alors la notification est envoyée (quota libéré : 5/6) Et le compteur horaire est mis à jour Plan du Scénario: Gestion du quota horaire Étant donné que notifications ont été validées dans la dernière heure Quand un nouveau contenu géolocalisé est détecté Alors la notification est Exemples: | nb_valides | action | | 0 | envoyée | | 3 | envoyée | | 5 | envoyée | | 6 | non envoyée | | 7 | non envoyée | Scénario: Exception audio-guides multi-séquences (comptent comme 1) Étant donné que j'ai démarré un audio-guide avec 8 séquences Et que cet audio-guide compte comme 1 contenu dans le quota Quand toutes les séquences de l'audio-guide sont lues Alors mon quota reste à 1/6 Et je peux encore valider 5 contenus géolocalisés simples # 17.3.2 - Cooldown après ignorance Scénario: Cooldown de 10 minutes après notification ignorée Étant donné qu'une notification géolocalisée a été ignorée (pas de clic) Et qu'un cooldown de 10 minutes est activé Quand 5 minutes s'écoulent Et qu'un nouveau contenu géolocalisé est détecté Alors aucune notification n'est envoyée (cooldown actif) Scénario: Cooldown expire après 10 minutes Étant donné qu'un cooldown a été activé il y a 10 minutes Quand un nouveau contenu géolocalisé est détecté Alors la notification est envoyée (cooldown expiré) Scénario: Pas de cooldown si notification validée Étant donné qu'une notification géolocalisée est affichée Quand j'appuie sur "Suivant" dans les 7 secondes Alors aucun cooldown n'est activé Et la prochaine notification pourra être envoyée normalement # 17.4 - Navigation avec contenus géolocalisés Scénario: Contenu géolocalisé dans l'historique de navigation Étant donné que j'écoute un contenu du buffer Et que j'ai validé un contenu géolocalisé "Tour Eiffel" Et que j'ai écouté 42 secondes du contenu géolocalisé Quand j'appuie sur "Suivant" (skip) Et que j'appuie ensuite sur "Précédent" Alors le contenu géolocalisé reprend à 42 secondes Scénario: Contenu ignoré n'entre pas dans l'historique Étant donné qu'une notification géolocalisée a été ignorée Quand j'appuie sur "Précédent" Alors le contenu géolocalisé ignoré n'apparaît PAS dans l'historique Et je reviens au contenu d'avant Scénario: Skip pendant le décompte annule l'insertion Étant donné que j'ai validé une notification (décompte 5s en cours) Et que le compteur affiche "3" Quand j'appuie à nouveau sur "Suivant" Alors le décompte est annulé Et le contenu suivant du buffer démarre Et le contenu géolocalisé n'entre PAS dans l'historique # 17.5 - Basculement automatique voiture ↔ piéton Scénario: Détection mode piéton (vitesse <5 km/h stable 10s) Étant donné que je suis en mode voiture Et que ma vitesse passe à 3 km/h Quand cette vitesse reste stable pendant 10 secondes Alors le mode piéton est activé automatiquement Et les notifications passent en mode push arrière-plan (si permission accordée) Scénario: Détection mode voiture (vitesse ≥5 km/h stable 10s) Étant donné que je suis en mode piéton Et que ma vitesse passe à 15 km/h Quand cette vitesse reste stable pendant 10 secondes Alors le mode voiture est activé automatiquement Et les notifications passent en mode sonore + icône (app premier plan requise) Scénario: Hysteresis pour éviter basculements intempestifs Étant donné que ma vitesse passe de 20 km/h à 3 km/h (arrêt feu rouge) Et que ma vitesse remonte à 20 km/h après 8 secondes Quand le système vérifie le mode Alors aucun basculement n'a lieu (hysteresis de 10s non atteinte) Et je reste en mode voiture Plan du Scénario: Effets du basculement voiture → piéton Étant donné que je bascule de voiture à piéton Quand le basculement est effectué Alors les paramètres suivants changent: | paramètre | voiture | piéton | | App requise | Premier plan | Arrière-plan OK | | Notification | Sonore + icône + compteur| Push système | | Rayon détection | ETA 7s (variable) | 200m fixes | | Type contenu | Tous géolocalisés | Audio-guides uniquement | # 17.6 - Edge cases Scénario: Haute vitesse (130 km/h sur autoroute) Étant donné que je roule à 130 km/h (36.1 m/s) Et qu'un contenu géolocalisé est à 252 mètres Quand l'ETA de 7s est atteint Et que je valide la notification Alors le décompte 5s démarre Et le contenu géolocalisé démarre encore avant le point GPS (72m avant) Scénario: Multiples points géolocalisés proches (route touristique) Étant donné que 3 châteaux sont espacés de 800m chacun Et que je valide la notification du Château A Quand j'arrive près du Château B (57s plus tard à 50 km/h) Alors la notification du Château B est envoyée (quota 2/6, pas de cooldown) Scénario: Mode stationnement (vitesse <1 km/h pendant 2 min) Étant donné que je me gare à 30m d'un château Et que ma vitesse est <1 km/h pendant 2 minutes Quand le mode stationnement est détecté Alors aucune notification de contenu géolocalisé n'est envoyée Et le système bascule automatiquement en mode piéton Scénario: Reprise conduite après stationnement Étant donné que je suis en mode stationnement Et que ma vitesse passe à 20 km/h pendant 10 secondes Quand le système détecte la reprise de conduite Alors le mode voiture est réactivé Et les notifications géolocalisées reprennent (si quota non atteint) # Distinction contenus géolocalisés simples vs audio-guides Scénario: Contenu géolocalisé simple (1 séquence unique) Étant donné qu'un contenu géolocalisé simple existe à un point GPS Quand la notification est déclenchée (ETA 7s) Et que je valide Alors le contenu démarre après décompte 5s Et à la fin du contenu, le buffer normal reprend Et ce contenu compte 1/6 dans le quota Scénario: Audio-guide multi-séquences (2+ séquences enchaînées) Étant donné qu'un audio-guide avec 8 séquences existe Quand je démarre l'audio-guide Et que les séquences s'enchaînent automatiquement (GPS ou manuel) Alors l'audio-guide entier compte 1/6 dans le quota Et les séquences ne déclenchent PAS de notification avec compteur 7s Et elles se déclenchent au point GPS exact (rayon 30m) # Gestion erreurs Scénario: GPS désactivé en mode voiture Étant donné que je suis en mode voiture Quand le GPS est désactivé Alors aucune notification géolocalisée ne peut être envoyée Et un message d'erreur s'affiche: "GPS requis pour les contenus géolocalisés" Scénario: App en arrière-plan en mode voiture Étant donné que je suis en mode voiture Et que l'app passe en arrière-plan Quand un contenu géolocalisé est détecté Alors aucune notification n'est envoyée (app premier plan requise) Et le contenu n'est pas perdu (sera proposé si app rouverte dans le rayon) Scénario: Permission "Always Location" refusée (mode piéton indisponible) Étant donné que je refuse la permission "Always Location" Quand ma vitesse passe <5 km/h Alors le mode piéton n'est PAS activé Et le mode voiture reste actif (avec permission "When In Use") Et aucune notification arrière-plan n'est envoyée