feat(gherkin): ajouter features UI pour algorithme de recommandation
Création de 4 features Gherkin UI pour l'expérience utilisateur liée à l'algorithme de recommandation: - parametres-personnalisation.feature: Interface curseurs (géo, découverte, politique), profils sauvegardables, auto-switch, synchronisation multi-devices - mode-kids-ui.feature: Interface Mode Kids, activation/désactivation, badge, PIN parental, filtrage visuel contenus, onboarding 13-15 ans - filtrage-politique-ui.feature: Interface paramètres contenu politique, options Masquer/Équilibré/Préférences, badges, notifications, recherche - notifications-geo.feature: Notifications géographiques au passage <500m, types de logos, acceptation/rejet, gestion demi-tour, historique Complète les features API existantes (classification-geo, scoring, mode-kids, parametrabilite, etc.) avec l'expérience utilisateur mobile. Aligné avec règles métier 04-algorithme-recommandation.md (sections 2.1-2.11).
This commit is contained in:
256
features/ui/recommendation/notifications-geo.feature
Normal file
256
features/ui/recommendation/notifications-geo.feature
Normal file
@@ -0,0 +1,256 @@
|
||||
# language: fr
|
||||
Fonctionnalité: UI - Notifications géographiques
|
||||
En tant qu'utilisateur
|
||||
Je veux recevoir des notifications lors du passage près d'un point d'intérêt
|
||||
Afin de découvrir du contenu géolocalisé pertinent
|
||||
|
||||
Contexte:
|
||||
Étant donné que l'application RoadWave est ouverte
|
||||
Et que je suis connecté
|
||||
Et que la géolocalisation est activée
|
||||
|
||||
Scénario: Notification au passage <500m d'un point GPS
|
||||
Étant donné qu'un contenu "géo-ancré" existe au Louvre
|
||||
Et que j'écoute un podcast en cours
|
||||
Quand je passe à 400m du point GPS du Louvre
|
||||
Alors j'entends un bip court (notification sonore)
|
||||
Et je vois une notification visuelle apparaître
|
||||
Et la notification affiche:
|
||||
| élément | valeur |
|
||||
| Logo | 🏛️ (Culturel) |
|
||||
| Titre | "Histoire du Louvre" |
|
||||
| Distance | "À 400m" |
|
||||
| Durée | "12 min" |
|
||||
Et je dispose de 5 secondes pour réagir
|
||||
|
||||
Scénario: Types de logos selon le contenu
|
||||
Plan du Scénario: Logo selon le type de contenu
|
||||
Étant donné qu'un contenu de type "<type>" existe à proximité
|
||||
Quand je reçois la notification
|
||||
Alors je vois le logo "<logo>"
|
||||
|
||||
Exemples:
|
||||
| type | logo |
|
||||
| Info | 📍 |
|
||||
| Culturel | 🏛️ |
|
||||
| Commercial | 🍴 |
|
||||
| Événement | 🎭 |
|
||||
|
||||
Scénario: Accepter la notification - lecture immédiate
|
||||
Étant donné que je reçois une notification géo
|
||||
Quand je clique sur "Écouter" dans les 5 secondes
|
||||
Alors le contenu en cours s'arrête
|
||||
Et le nouveau contenu se lance immédiatement
|
||||
Et je vois "Lecture: Histoire du Louvre"
|
||||
|
||||
Scénario: Accepter via bouton au volant
|
||||
Étant donné que je reçois une notification géo
|
||||
Et que je conduis
|
||||
Quand j'appuie sur le bouton "Suivant" de mon volant
|
||||
Alors le contenu géolocalisé se lance
|
||||
Et je n'ai pas besoin de toucher l'écran
|
||||
|
||||
Scénario: Accepter via commande vocale
|
||||
Étant donné que je reçois une notification géo
|
||||
Quand je dis "Écouter"
|
||||
Alors le contenu géolocalisé se lance immédiatement
|
||||
Et je garde les mains sur le volant
|
||||
|
||||
Scénario: Ignorer la notification - délai 5 secondes
|
||||
Étant donné que je reçois une notification géo
|
||||
Quand je ne fais rien pendant 5 secondes
|
||||
Alors la notification disparaît automatiquement
|
||||
Et le contenu en cours continue normalement
|
||||
Et le contenu géo est ajouté à la file d'attente
|
||||
|
||||
Scénario: Notification ajoutée à la file si ignorée
|
||||
Étant donné que j'ignore une notification géo
|
||||
Quand je consulte ma file d'attente
|
||||
Alors je vois le contenu "Histoire du Louvre" dans la liste
|
||||
Et je peux l'écouter plus tard
|
||||
|
||||
Scénario: Notification publicitaire - son différent
|
||||
Étant donné qu'une publicité géolocalisée existe à proximité
|
||||
Quand je passe à <500m
|
||||
Alors j'entends un son différent (optionnel selon paramètres)
|
||||
Et je vois le logo 🍴 "Restaurant local"
|
||||
Et je vois "(Publicité)" bien visible
|
||||
Et je peux accepter ou ignorer comme un contenu normal
|
||||
|
||||
Scénario: Publicité ne coupe jamais le contenu en cours
|
||||
Étant donné que j'écoute un podcast
|
||||
Et qu'une pub géolocalisée existe à proximité
|
||||
Quand je reçois la notification pub
|
||||
Alors le podcast en cours continue sans interruption
|
||||
Et la pub s'intercalera uniquement entre deux séquences si acceptée
|
||||
|
||||
Scénario: Gestion du demi-tour - pas de re-notification
|
||||
Étant donné que j'ai reçu une notification pour le Louvre
|
||||
Et que j'ai ignoré la notification
|
||||
Quand je fais demi-tour et repasse à <500m du Louvre
|
||||
Alors je ne reçois pas de nouvelle notification
|
||||
Et le contenu reste dans la file d'attente
|
||||
|
||||
Scénario: Réinitialisation après 24h
|
||||
Étant donné que j'ai ignoré une notification pour le Louvre
|
||||
Et que 24 heures se sont écoulées
|
||||
Quand je repasse à <500m du Louvre
|
||||
Alors je reçois à nouveau la notification
|
||||
Et je peux choisir de l'écouter
|
||||
|
||||
Scénario: Notification visuelle discrète en mode conduite
|
||||
Étant donné que je conduis à 50 km/h
|
||||
Quand je reçois une notification géo
|
||||
Alors la notification apparaît en bas de l'écran
|
||||
Et elle est discrète pour ne pas distraire
|
||||
Et le texte est lisible rapidement
|
||||
Et l'animation est fluide
|
||||
|
||||
Scénario: Compteur de temps restant pour accepter
|
||||
Étant donné que je reçois une notification géo
|
||||
Quand la notification s'affiche
|
||||
Alors je vois un compteur circulaire "5...4...3...2...1"
|
||||
Et le cercle se vide progressivement
|
||||
Et je sais combien de temps il me reste
|
||||
|
||||
Scénario: Balayer pour ignorer rapidement
|
||||
Étant donné que je reçois une notification géo
|
||||
Quand je balaye la notification vers la droite
|
||||
Alors la notification disparaît immédiatement
|
||||
Et le contenu est ajouté à la file d'attente
|
||||
Et je vois "Ajouté à la file d'attente"
|
||||
|
||||
Scénario: Balayer pour accepter rapidement
|
||||
Étant donné que je reçois une notification géo
|
||||
Quand je balaye la notification vers la gauche
|
||||
Alors le contenu se lance immédiatement
|
||||
Et je vois "Lecture: Histoire du Louvre"
|
||||
|
||||
Scénario: Désactiver les notifications géo dans les paramètres
|
||||
Étant donné que je suis dans les paramètres
|
||||
Quand je désactive "Notifications géolocalisées"
|
||||
Alors je ne reçois plus de notifications au passage de points GPS
|
||||
Mais les contenus géo restent recommandés normalement dans la file
|
||||
|
||||
Scénario: Régler le rayon de déclenchement
|
||||
Étant donné que je suis dans les paramètres avancés
|
||||
Quand je modifie "Rayon de notification" de 500m à 1000m
|
||||
Alors les notifications se déclenchent à 1000m au lieu de 500m
|
||||
Et je reçois les notifications plus tôt
|
||||
|
||||
Scénario: Désactiver le son des notifications
|
||||
Étant donné que je suis dans les paramètres audio
|
||||
Quand je désactive "Son des notifications géo"
|
||||
Alors je reçois uniquement les notifications visuelles
|
||||
Et aucun bip n'est joué
|
||||
|
||||
Scénario: Désactiver uniquement les pubs géolocalisées
|
||||
Étant donné que je suis dans les paramètres
|
||||
Quand je désactive "Publicités géolocalisées"
|
||||
Alors je ne reçois plus de notifications pour les pubs
|
||||
Mais je reçois toujours les notifications pour les contenus organiques
|
||||
|
||||
Scénario: Notification en mode piéton
|
||||
Étant donné que je suis en mode piéton (vitesse < 5 km/h)
|
||||
Quand je passe à <500m d'un point GPS
|
||||
Alors je reçois la notification normalement
|
||||
Et la notification peut être plus détaillée (mode piéton)
|
||||
Et je vois une miniature du contenu
|
||||
|
||||
Scénario: Notification en mode voiture
|
||||
Étant donné que je conduis à 70 km/h
|
||||
Quand je reçois une notification géo
|
||||
Alors la notification est ultra-simplifiée
|
||||
Et je vois uniquement: Logo + Titre + "Écouter"
|
||||
Et l'interface est adaptée à la conduite
|
||||
|
||||
Scénario: Historique des notifications ignorées
|
||||
Étant donné que j'ai ignoré 5 notifications géo aujourd'hui
|
||||
Quand je consulte "Historique notifications"
|
||||
Alors je vois la liste des 5 notifications ignorées:
|
||||
| contenu | heure | lieu |
|
||||
| Histoire du Louvre | 14:30 | Paris 1er |
|
||||
| Restaurant local | 15:00 | Paris 8e |
|
||||
| Musée d'Orsay | 15:45 | Paris 7e |
|
||||
Et je peux les écouter depuis l'historique
|
||||
|
||||
Scénario: Notification avec aperçu vocal (optionnel)
|
||||
Étant donné que j'ai activé "Aperçu vocal" dans les paramètres
|
||||
Quand je reçois une notification géo
|
||||
Alors après le bip, j'entends: "Histoire du Louvre, 12 minutes, à 400 mètres"
|
||||
Et je peux accepter vocalement en disant "Écouter"
|
||||
|
||||
Scénario: Plusieurs notifications en cascade
|
||||
Étant donné que je suis dans une zone dense (Paris)
|
||||
Et qu'il y a 3 contenus géo-ancrés dans un rayon de 500m
|
||||
Quand je passe à proximité
|
||||
Alors je reçois la notification du contenu le plus proche en premier
|
||||
Et les autres notifications sont espacées de 30 secondes minimum
|
||||
Et je ne suis pas submergé de notifications
|
||||
|
||||
Scénario: Priorisation des notifications par pertinence
|
||||
Étant donné que 2 contenus sont à proximité:
|
||||
| contenu | distance | score_intérêts |
|
||||
| Audio-guide A | 300m | 0.9 |
|
||||
| Podcast B | 250m | 0.3 |
|
||||
Quand je dois recevoir une notification
|
||||
Alors "Audio-guide A" est notifié en premier (score plus élevé)
|
||||
Même si "Podcast B" est plus proche
|
||||
|
||||
Scénario: Notification lors d'une pause
|
||||
Étant donné que j'ai mis en pause mon contenu
|
||||
Quand je passe à <500m d'un point GPS
|
||||
Alors je reçois la notification normalement
|
||||
Et si j'accepte, le nouveau contenu se lance
|
||||
Et l'ancien contenu en pause reste en pause
|
||||
|
||||
Scénario: Carte avec points d'intérêt à proximité
|
||||
Étant donné que je consulte l'écran "Carte"
|
||||
Quand je zoome sur ma position
|
||||
Alors je vois des marqueurs pour tous les contenus géo-ancrés à <5km
|
||||
Et chaque marqueur affiche le logo du type de contenu
|
||||
Et je peux taper sur un marqueur pour voir les détails
|
||||
|
||||
Scénario: Prévisualiser les notifications à venir sur itinéraire
|
||||
Étant donné que j'ai saisi un itinéraire dans GPS
|
||||
Quand je consulte "Contenus sur votre route"
|
||||
Alors je vois la liste des contenus géo qui seront notifiés:
|
||||
| contenu | dans | type |
|
||||
| Histoire du Louvre | 5 min | 🏛️ Culturel |
|
||||
| Restaurant local | 12min | 🍴 Commercial|
|
||||
Et je peux pré-écouter ou ignorer d'avance
|
||||
|
||||
Scénario: Annuler une notification en cours
|
||||
Étant donné qu'une notification géo s'affiche
|
||||
Et que le compteur est à 3 secondes
|
||||
Quand je tape sur ❌ "Fermer"
|
||||
Alors la notification disparaît immédiatement
|
||||
Et le contenu est ajouté à la file d'attente
|
||||
|
||||
Scénario: Badge compteur de notifications ignorées
|
||||
Étant donné que j'ai ignoré 3 notifications géo
|
||||
Quand je consulte l'écran principal
|
||||
Alors je vois un badge "3" sur l'icône "File d'attente"
|
||||
Et je sais qu'il y a 3 contenus géo en attente
|
||||
|
||||
Scénario: Animation fluide de la notification
|
||||
Quand une notification géo apparaît
|
||||
Alors elle glisse du bas vers le haut de l'écran
|
||||
Et l'animation dure 300ms
|
||||
Et elle est fluide (60 FPS)
|
||||
Et elle ne bloque pas l'interface principale
|
||||
|
||||
Scénario: Notification en arrière-plan (app fermée)
|
||||
Étant donné que l'app est fermée
|
||||
Et que les notifications sont autorisées
|
||||
Quand je passe à <500m d'un point GPS
|
||||
Alors je reçois une notification push système:
|
||||
"""
|
||||
🏛️ RoadWave
|
||||
|
||||
Histoire du Louvre
|
||||
À 400m • 12 min
|
||||
|
||||
Ouvrir pour écouter
|
||||
"""
|
||||
Et en tapant dessus, l'app s'ouvre et le contenu peut être lancé
|
||||
Reference in New Issue
Block a user