diff --git a/features/ui/recommendation/filtrage-politique-ui.feature b/features/ui/recommendation/filtrage-politique-ui.feature new file mode 100644 index 0000000..f394805 --- /dev/null +++ b/features/ui/recommendation/filtrage-politique-ui.feature @@ -0,0 +1,234 @@ +# language: fr +Fonctionnalité: UI - Filtrage contenu politique + En tant qu'utilisateur + Je veux contrôler mon exposition au contenu politique + Afin d'adapter mon expérience selon mes préférences + + Contexte: + Étant donné que l'application RoadWave est ouverte + Et que je suis connecté + + Scénario: Accéder aux paramètres de contenu politique + Quand j'ouvre les paramètres + Et que je clique sur "Contenu politique" + Alors je vois l'écran "Gestion du contenu politique" + Et je vois trois options: + | option | icône | description | + | Masquer | 🚫 | 0% de contenus politiques | + | Équilibré | ⚖️ | Selon vos intérêts (défaut) | + | Mes préférences | ❤️ | Basé sur votre jauge "Politique" | + + Scénario: Option "Équilibré" par défaut + Étant donné que je suis un nouvel utilisateur + Quand je consulte les paramètres de contenu politique + Alors l'option "Équilibré" est sélectionnée par défaut + Et je vois "(Recommandé)" à côté + Et je vois la description: + """ + Les contenus politiques sont recommandés selon + l'algorithme standard (intérêts, géo, engagement) + + Votre jauge "Politique" actuelle: 50% + """ + + Scénario: Sélectionner l'option "Masquer" + Étant donné que l'option "Équilibré" est active + Quand je clique sur le bouton radio "Masquer" + Alors l'option "Masquer" est sélectionnée + Et je vois l'icône 🚫 "Aucun contenu politique" + Et je vois un message de confirmation: + """ + Tous les contenus tagués "Politique" seront + exclus de vos recommandations. + + Vous ne verrez aucun contenu politique. + """ + Et je vois "Sauvegarder" en bas de l'écran + + Scénario: Sauvegarder l'option "Masquer" + Étant donné que j'ai sélectionné "Masquer" + Quand je clique sur "Sauvegarder" + Alors je vois une animation de confirmation + Et je vois "Contenu politique masqué ✓" + Et je retourne à l'écran précédent + Et un badge "🚫 Politique" apparaît sur l'écran principal (optionnel) + + Scénario: Badge indicateur sur l'écran principal + Étant donné que j'ai activé "Masquer contenu politique" + Quand je retourne à l'écran principal + Alors je vois un petit badge "🚫" en haut + Et en tapant dessus, je vois "Contenu politique masqué" + Et je peux accéder rapidement aux paramètres + + Scénario: Recommandations sans contenu politique + Étant donné que j'ai activé "Masquer contenu politique" + Quand je consulte mes recommandations + Alors je ne vois aucun contenu tagué "Politique" + Et je vois "Filtré: Politique masqué" en bas de l'écran + Et tous les contenus affichés n'ont pas le tag "Politique" + + Scénario: Sélectionner l'option "Mes préférences" + Quand je clique sur le bouton radio "Mes préférences" + Alors l'option "Mes préférences" est sélectionnée + Et je vois l'icône ❤️ "Selon votre jauge" + Et je vois: + """ + Les contenus politiques seront recommandés + selon votre jauge "Politique" + + Votre jauge actuelle: 45% + Plus vous écoutez de contenu politique, plus + vous en recevrez de recommandations. + """ + + Scénario: Recherche avec filtrage politique actif + Étant donné que j'ai activé "Masquer contenu politique" + Quand je recherche "actualités France" + Alors les résultats excluent les contenus tagués "Politique" + Et je vois "Résultats filtrés (Politique masqué)" + + Scénario: Recherche explicite contenu politique malgré filtre + Étant donné que j'ai activé "Masquer contenu politique" + Quand je recherche en filtrant par tag "Politique" + Alors les contenus politiques sont affichés + Et je vois un avertissement: + """ + ⚠️ Recherche explicite de contenu politique + + Vos paramètres masquent ce type de contenu, + mais vous avez fait une recherche explicite. + """ + + Scénario: Partage de contenu politique avec filtre actif + Étant donné que j'ai activé "Masquer contenu politique" + Et qu'un ami me partage un lien vers un contenu politique + Quand j'ouvre le lien + Alors je vois un avertissement: + """ + 🚫 Contenu politique + + Ce contenu est tagué "Politique" et est + normalement masqué par vos paramètres. + + Voulez-vous l'écouter quand même? + """ + Et je peux choisir "Écouter" ou "Retour" + + Scénario: Confirmer l'écoute de contenu politique partagé + Étant donné que je vois l'avertissement de contenu politique partagé + Quand je clique sur "Écouter" + Alors le contenu se lance normalement + Et je vois le tag "Politique" bien visible + Et le contenu ne réactive pas le filtrage politique + + Scénario: Désactiver le filtrage politique + Étant donné que j'ai activé "Masquer contenu politique" + Quand je retourne aux paramètres de contenu politique + Et que je sélectionne "Équilibré" + Et que je sauvegarde + Alors le filtrage est levé + Et je vois "Contenu politique à nouveau visible" + Et le badge "🚫" disparaît de l'écran principal + + Scénario: Statistiques sur contenu politique masqué + Étant donné que j'ai activé "Masquer contenu politique" depuis 30 jours + Quand je consulte mes statistiques + Alors je vois: + | métrique | valeur | + | Contenus politiques masqués | 142 | + | Depuis | 30 j | + | Contenus écoutés sans politique| 85 | + + Scénario: Notification de contenu politique disponible + Étant donné que j'ai activé "Masquer contenu politique" + Et qu'un événement politique majeur se produit dans ma région + Quand RoadWave a des contenus pertinents tagués "Politique" + Alors je reçois une notification optionnelle: + """ + 📰 Actualités locales importantes + + Des contenus politiques pertinents sont disponibles + dans votre zone. + + Vos paramètres masquent ce type de contenu. + Modifier les paramètres? + """ + Et je peux ignorer ou modifier mes paramètres + + Scénario: Mode Kids force le masquage politique + Étant donné que le Mode Kids est activé + Quand je consulte les paramètres de contenu politique + Alors l'option "Masquer" est sélectionnée et verrouillée + Et je vois "(Forcé par Mode Kids)" + Et je ne peux pas modifier ce paramètre + Et les autres options sont grisées + + Scénario: Désactiver Mode Kids déverrouille filtrage politique + Étant donné que le Mode Kids est activé + Et que le filtrage politique est forcé + Quand je désactive le Mode Kids + Alors les options de filtrage politique sont déverrouillées + Et je peux sélectionner "Équilibré" ou "Mes préférences" + + Scénario: Jauge "Politique" visible dans les paramètres + Étant donné que je suis sur l'écran de contenu politique + Et que l'option "Mes préférences" est sélectionnée + Quand je consulte ma jauge "Politique" + Alors je vois une barre de progression: ▓▓▓▓▓▒▒▒▒▒ 45% + Et je vois "Plus vous écoutez, plus votre jauge augmente" + + Scénario: Impact du filtrage sur les recommandations + Étant donné que j'ai activé "Masquer contenu politique" + Quand je consulte mes recommandations + Alors je vois "12 contenus disponibles (Politique masqué)" + Et je sais combien de contenus sont exclus + + Scénario: Créer profil avec filtrage politique personnalisé + Étant donné que je crée un profil "🚗 Trajet quotidien" + Quand je configure le paramètre "Politique" sur "Masquer" + Alors ce profil masque automatiquement le contenu politique + Quand je crée un profil "🛣️ Road trip" + Et que je configure "Politique" sur "Équilibré" + Alors ce profil affiche le contenu politique selon l'algorithme + + Scénario: Switch entre profils avec paramètres politiques différents + Étant donné que le profil "Trajet quotidien" masque le contenu politique + Et que le profil "Road trip" affiche le contenu politique + Quand je passe de "Trajet quotidien" à "Road trip" + Alors le contenu politique réapparaît dans les recommandations + Et je vois "Contenu politique visible (profil Road trip)" + + Scénario: Tooltip explicatif sur les options + Quand je tape sur l'icône ℹ️ à côté de "Équilibré" + Alors je vois un tooltip: + """ + Équilibré (Recommandé) + + Les contenus politiques sont recommandés comme + tout autre contenu, selon l'algorithme standard. + + Votre jauge "Politique" évolue naturellement + selon vos écoutes. + """ + + Scénario: Message MVP - pas de classification gauche/droite + Quand je consulte l'écran de contenu politique + Alors je vois en bas: + """ + ℹ️ Version MVP + + Actuellement, les contenus sont simplement tagués + "Politique" sans classification gauche/droite. + + Des options avancées seront disponibles dans + une future version. + """ + + Scénario: Export RGPD inclut historique filtrage politique + Étant donné que j'ai modifié mes paramètres politiques 3 fois + Quand je demande l'export RGPD + Alors l'export inclut: + | information | inclus | + | Historique paramètre politique| ✅ | + | Dates de modification | ✅ | + | Contenus politiques masqués | ✅ | diff --git a/features/ui/recommendation/mode-kids-ui.feature b/features/ui/recommendation/mode-kids-ui.feature new file mode 100644 index 0000000..1bcb064 --- /dev/null +++ b/features/ui/recommendation/mode-kids-ui.feature @@ -0,0 +1,261 @@ +# language: fr +Fonctionnalité: UI - Mode Kids pour utilisateurs 13-15 ans + En tant que parent ou adolescent + Je veux activer et utiliser le Mode Kids facilement + Afin de protéger les mineurs des contenus inappropriés + + Contexte: + Étant donné que l'application RoadWave est ouverte + Et que je suis connecté + + Scénario: Activer le Mode Kids depuis les paramètres + Étant donné que je suis un utilisateur de 14 ans + Et que le Mode Kids n'est pas activé + Quand j'ouvre les paramètres + Et que je clique sur "Mode Kids" + Alors je vois l'écran "Mode Kids" + Et je vois un toggle désactivé + Et je vois une description: + """ + Mode Kids (13-15 ans) + + Filtrage automatique: + ✓ Uniquement contenus "Tous publics" + ✓ Exclusion contenus 16+ et 18+ + ✓ Pas de contenu politique + ✓ Aucune publicité + + Interface standard, filtrage intelligent. + """ + + Scénario: Activer le toggle Mode Kids + Étant donné que je suis sur l'écran Mode Kids + Quand je bascule le toggle sur "Activé" + Alors je vois une animation de confirmation + Et le toggle devient vert + Et je vois le message "Mode Kids activé - Contenus filtrés pour 13-15 ans ✓" + Et un badge "🛡️ Mode Kids" apparaît sur l'écran principal + + Scénario: Badge Mode Kids visible sur l'écran principal + Étant donné que le Mode Kids est activé + Quand je retourne à l'écran principal + Alors je vois un badge "🛡️ Mode Kids" en haut à droite + Et ce badge est bien visible + Et je peux taper dessus pour accéder rapidement aux paramètres + + Scénario: Notification après activation Mode Kids + Quand j'active le Mode Kids + Alors je vois une notification détaillée: + """ + Mode Kids activé 🛡️ + + ✓ Contenus "Tous publics" uniquement + ✓ Contenus politiques masqués + ✓ Aucune publicité + + Vous pouvez désactiver ce mode à tout moment + dans les paramètres. + """ + Et je peux cliquer sur "Compris" + + Scénario: Filtrage visuel des contenus en Mode Kids + Étant donné que le Mode Kids est activé + Quand je consulte les recommandations + Alors je ne vois que des contenus avec le badge "Tous publics ✓" + Et aucun contenu 13+, 16+, ou 18+ n'est affiché + Et je vois "Filtré par Mode Kids" en bas de l'écran + + Scénario: Tentative d'accès à un contenu 16+ via lien partagé + Étant donné que le Mode Kids est activé + Et qu'un ami me partage un lien vers un contenu 16+ + Quand j'ouvre le lien + Alors je vois un écran de blocage: + """ + 🛡️ Contenu non accessible + + Ce contenu est classé 16+ et n'est pas + accessible en Mode Kids. + + Désactivez le Mode Kids dans les paramètres + pour accéder à ce contenu. + """ + Et je vois un bouton "Retour" + Et je ne peux pas accéder au contenu + + Scénario: Recherche filtrée en Mode Kids + Étant donné que le Mode Kids est activé + Quand je recherche "débat politique" + Alors seuls les contenus "Tous publics" apparaissent + Et je vois "Résultats filtrés (Mode Kids actif)" + Et les contenus politiques ou 16+ sont exclus + + Scénario: Aucune publicité en Mode Kids + Étant donné que le Mode Kids est activé + Et que je suis un utilisateur gratuit + Quand j'écoute plusieurs contenus + Alors aucune publicité n'est diffusée + Et je ne vois aucune interruption publicitaire + Et je vois "Écoute sans publicité (Mode Kids)" dans les paramètres + + Scénario: Désactiver le Mode Kids + Étant donné que le Mode Kids est activé + Quand j'ouvre les paramètres Mode Kids + Et que je bascule le toggle sur "Désactivé" + Alors je vois une confirmation "Désactiver le Mode Kids?" + Et je vois "Tous les contenus seront à nouveau accessibles" + Quand je confirme + Alors le Mode Kids est désactivé + Et le badge "🛡️ Mode Kids" disparaît + Et je vois "Mode Kids désactivé" + + Scénario: Parent active Mode Kids pour son enfant + Étant donné que je suis le parent d'un utilisateur de 13 ans + Et que j'ai accès au compte de mon enfant via contrôle parental + Quand j'active le Mode Kids + Et que je définis un code PIN parental + Alors le Mode Kids est activé sur le compte enfant + Et seul le code PIN peut le désactiver + + Scénario: Enfant essaie de désactiver Mode Kids avec PIN parental + Étant donné que le Mode Kids est activé avec PIN parental + Quand mon enfant essaie de désactiver le Mode Kids + Alors il voit un écran "Code PIN parental requis" + Et il doit saisir le code PIN à 4 chiffres + Si le code est incorrect + Alors je vois "Code incorrect" et le Mode Kids reste actif + + Scénario: Code PIN correct désactive le Mode Kids + Étant donné que le Mode Kids est activé avec PIN parental + Quand je saisis le code PIN correct + Alors le Mode Kids peut être désactivé + Et je vois "Mode Kids désactivé (autorisé par parent)" + + Scénario: Profil "Enfants" avec Mode Kids automatique + Étant donné que je crée un profil "👶 Enfants" + Quand j'active le Mode Kids dans ce profil + Alors le profil active automatiquement le Mode Kids + Et tous les autres paramètres sont forcés: + | paramètre | valeur | + | Politique | Masquer (verrouillé) | + | Publicité | Aucune (verrouillé) | + + Scénario: Switch entre profil normal et profil Kids + Étant donné que j'ai un profil "Road trip" (normal) + Et un profil "Enfants" (Mode Kids) + Quand je passe du profil "Road trip" à "Enfants" + Alors le Mode Kids s'active automatiquement + Et je vois "Mode Kids activé 🛡️" + Quand je repasse à "Road trip" + Alors le Mode Kids se désactive + Et je vois "Mode Kids désactivé" + + Scénario: Audio-guide accessible en Mode Kids + Étant donné que le Mode Kids est activé + Et qu'un audio-guide "Tous publics" existe au Louvre + Quand je suis à proximité du Louvre + Alors l'audio-guide est proposé normalement + Et toutes les séquences "Tous publics" sont accessibles + Et je vois le badge "Tous publics ✓" + + Scénario: Statistiques d'écoute en Mode Kids + Étant donné que le Mode Kids est activé + Quand je consulte mes statistiques + Alors je vois: + | métrique | valeur | + | Contenus écoutés (Mode Kids) | 45 | + | Heures d'écoute | 23h | + | Catégories favorites | Culture | + Et je vois "Mode Kids actif depuis le 15/01/2026" + + Scénario: Notification pour contenu inapproprié détecté + Étant donné que le Mode Kids est activé + Et qu'un contenu classé "Tous publics" contient du langage inapproprié signalé + Quand je commence l'écoute + Alors je vois un avertissement "Contenu signalé par la communauté" + Et je peux choisir "Continuer" ou "Passer" + + Scénario: Interface visuelle identique en Mode Kids + Étant donné que le Mode Kids est activé + Quand je navigue dans l'app + Alors l'interface est identique au mode normal + Et il n'y a pas d'interface "enfant" spéciale + Et seul le filtrage de contenu est actif + Et le badge "🛡️ Mode Kids" indique le mode actif + + Scénario: Badge "Tous publics" sur les contenus + Étant donné que le Mode Kids est activé + Quand je consulte les détails d'un contenu + Alors je vois clairement le badge "Tous publics ✓" + Et la classification d'âge est bien visible + Et je sais que le contenu est adapté + + Scénario: Onglet "Mode Kids" dans paramètres + Quand j'ouvre les paramètres + Alors je vois un onglet dédié "Mode Kids" + Et il est bien visible + Et je peux y accéder rapidement + + Scénario: Activer Mode Kids depuis un profil + Étant donné que je crée un nouveau profil + Quand je vois l'option "Activer Mode Kids pour ce profil" + Et que je l'active + Alors le Mode Kids est lié à ce profil uniquement + Et se désactive automatiquement quand je change de profil + + Scénario: Compteur de contenus disponibles en Mode Kids + Étant donné que le Mode Kids est activé + Quand je consulte l'écran Mode Kids dans les paramètres + Alors je vois "~2,450 contenus 'Tous publics' disponibles dans votre zone" + Et je sais qu'il y a suffisamment de contenu + + Scénario: Message explicatif pour utilisateurs 16+ + Étant donné que je suis un utilisateur de 18 ans + Quand j'active le Mode Kids + Alors je vois un message: + """ + Mode Kids activé + + Même si vous avez plus de 15 ans, ce mode + filtre les contenus 16+ et 18+. + + Seuls les contenus "Tous publics" seront accessibles. + """ + + Scénario: Désactivation automatique à 16 ans (optionnel) + Étant donné que je suis un utilisateur de 15 ans + Et que le Mode Kids est activé + Quand j'atteins 16 ans (anniversaire) + Alors je reçois une notification: + """ + 🎂 Joyeux anniversaire! + + Vous avez maintenant 16 ans. + Le Mode Kids peut être désactivé si vous le souhaitez. + + Accédez à tous les contenus adaptés à votre âge. + """ + Et je peux choisir de garder ou désactiver le Mode Kids + + Scénario: Export données RGPD inclut historique Mode Kids + Étant donné que le Mode Kids a été activé pendant 6 mois + Quand je demande l'export RGPD + Alors l'export inclut: + | information | inclus | + | Historique Mode Kids | ✅ | + | Dates activation/désactiv.| ✅ | + | Contenus écoutés filtrés | ✅ | + + Scénario: Onboarding Mode Kids pour nouveaux utilisateurs 13-15 ans + Étant donné que je m'inscris à RoadWave + Et que j'ai 14 ans + Quand je termine l'inscription + Alors je vois un écran de bienvenue: + """ + Bienvenue sur RoadWave! 👋 + + Nous avons détecté que vous avez 14 ans. + + Souhaitez-vous activer le Mode Kids? + Filtrage automatique pour contenus adaptés. + """ + Et je peux choisir "Activer" ou "Plus tard" diff --git a/features/ui/recommendation/notifications-geo.feature b/features/ui/recommendation/notifications-geo.feature new file mode 100644 index 0000000..98d25a1 --- /dev/null +++ b/features/ui/recommendation/notifications-geo.feature @@ -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 "" existe à proximité + Quand je reçois la notification + Alors je vois le 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é diff --git a/features/ui/recommendation/parametres-personnalisation.feature b/features/ui/recommendation/parametres-personnalisation.feature new file mode 100644 index 0000000..96487ad --- /dev/null +++ b/features/ui/recommendation/parametres-personnalisation.feature @@ -0,0 +1,314 @@ +# language: fr +Fonctionnalité: UI - Paramètres de personnalisation et profils + En tant qu'utilisateur + Je veux personnaliser mon expérience avec des curseurs et profils + Afin d'adapter l'application à mes différents contextes d'usage + + Contexte: + Étant donné que l'application RoadWave est ouverte + Et que je suis connecté + + Scénario: Accéder aux paramètres de personnalisation + Quand j'ouvre le menu principal + Et que je clique sur "Paramètres" + Et que je clique sur "Personnalisation" + Alors je vois l'écran "Personnalisation des recommandations" + Et je vois trois curseurs disponibles: + | curseur | icône | description | + | Géolocalisation | 📍 | Local ← slider → National | + | Découverte | 🎲 | 0% ← slider → 50% | + | Politique | ⚖️ | Masquer / Équilibré / Préféré | + + Scénario: Déplacer le curseur Géolocalisation vers Local + Étant donné que je suis sur l'écran de personnalisation + Et que le curseur Géolocalisation est au centre (défaut) + Quand je déplace le curseur vers la gauche (Local) + Alors le curseur se positionne à 30% (local) + Et je vois le texte "Recommandations locales privilégiées" + Et un indicateur visuel montre que la zone géographique est réduite + Et je vois "Portée: ~50 km" + + Scénario: Déplacer le curseur Géolocalisation vers National + Étant donné que je suis sur l'écran de personnalisation + Quand je déplace le curseur Géolocalisation vers la droite (National) + Alors le curseur se positionne à 80% (national) + Et je vois le texte "Découverte nationale activée" + Et je vois "Portée: toute la France" + Et une carte de France s'affiche avec la zone en surbrillance + + Scénario: Régler le curseur Découverte à 0% + Quand je déplace le curseur Découverte tout à gauche (0%) + Alors le curseur est à 0% + Et je vois l'icône 🎯 "Personnalisé max" + Et je vois le message "Aucune surprise, uniquement vos préférences" + Et un badge "0% aléatoire" s'affiche + + Scénario: Régler le curseur Découverte à 10% (défaut) + Quand je déplace le curseur Découverte à 10% + Alors je vois l'icône ⚖️ "Équilibré" + Et je vois "1 contenu sur 10 sera une découverte" + Et c'est marqué comme "(Recommandé)" + + Scénario: Régler le curseur Découverte à 30% + Quand je déplace le curseur Découverte à 30% + Alors je vois l'icône 🎲 "Découverte élevée" + Et je vois "3 contenus sur 10 seront des découvertes" + + Scénario: Régler le curseur Découverte à 50% (max) + Quand je déplace le curseur Découverte tout à droite (50%) + Alors je vois l'icône 🌍 "Découverte max" + Et je vois "50% de contenus aléatoires" + Et je vois le message "Explorez tout RoadWave!" + + Scénario: Sélectionner option Politique "Masquer" + Étant donné que le paramètre Politique est sur "Équilibré" (défaut) + Quand je clique sur le bouton radio "Masquer" + Alors l'option "Masquer contenu politique" est sélectionnée + Et je vois l'icône 🚫 "Aucun contenu politique" + Et je vois "0% de contenus tagués Politique" + + Scénario: Sélectionner option Politique "Équilibré" + Quand je clique sur le bouton radio "Équilibré" + Alors l'option est sélectionnée + Et je vois l'icône ⚖️ "Équilibré" + Et je vois "Contenu politique selon vos intérêts" (défaut MVP) + + Scénario: Sélectionner option Politique "Mes préférences" + Quand je clique sur le bouton radio "Mes préférences" + Alors l'option est sélectionnée + Et je vois l'icône ❤️ "Selon votre jauge Politique" + Et je vois "Basé sur votre jauge 'Politique': 45%" + + Scénario: Sauvegarder les modifications de paramètres + Étant donné que j'ai modifié les 3 curseurs + Quand je clique sur "Sauvegarder" + Alors je vois une animation de confirmation + Et je vois "Paramètres enregistrés ✓" + Et je retourne à l'écran précédent + Et les nouvelles recommandations utilisent ces paramètres + + Scénario: Annuler les modifications de paramètres + Étant donné que j'ai modifié les curseurs + Et que je n'ai pas sauvegardé + Quand je clique sur "Retour" + Alors je vois une popup "Sauvegarder les modifications?" + Et je vois deux boutons "Sauvegarder" et "Abandonner" + Quand je clique sur "Abandonner" + Alors les paramètres ne sont pas modifiés + Et je retourne à l'écran précédent + + Scénario: Créer un nouveau profil personnalisé + Étant donné que je suis sur l'écran de personnalisation + Quand je clique sur "Créer un profil" + Alors je vois un popup "Nouveau profil" + Et je peux saisir un nom de profil + Et je peux choisir une icône: + | icône | description | + | 🚗 | Trajet quotidien | + | 🛣️ | Road trip | + | 👶 | Enfants | + | 🏃 | Sport | + | 🎵 | Musique | + + Scénario: Créer profil "Trajet quotidien" + Quand je crée un profil nommé "Trajet quotidien" + Et que je choisis l'icône 🚗 + Et que je configure: + | paramètre | valeur | + | Géolocalisation | Local | + | Découverte | 5% | + | Politique | Masquer | + Et que je clique sur "Créer le profil" + Alors le profil "🚗 Trajet quotidien" est créé + Et je le vois dans la liste des profils + Et je vois "Profil créé avec succès" + + Scénario: Créer profil "Road trip" + Quand je crée un profil nommé "Road trip" + Et que je choisis l'icône 🛣️ + Et que je configure: + | paramètre | valeur | + | Géolocalisation | Régional | + | Découverte | 30% | + | Politique | Équilibré | + Alors le profil est créé et sauvegardé + + Scénario: Créer profil "Enfants" avec Mode Kids + Quand je crée un profil nommé "Enfants" + Et que je choisis l'icône 👶 + Et que j'active "Mode Kids" + Alors le profil est créé avec: + | paramètre | valeur | + | Mode Kids | Activé | + | Politique | Masquer (forcé) | + | Publicité | Aucune (forcé) | + Et les autres paramètres sont grisés/verrouillés + + Scénario: Afficher la liste des profils + Étant donné que j'ai créé 3 profils: + | nom | icône | actif | + | Trajet quotidien | 🚗 | Non | + | Road trip | 🛣️ | Oui | + | Enfants | 👶 | Non | + Quand je consulte l'écran de personnalisation + Alors je vois la section "Mes profils" + Et je vois mes 3 profils sous forme de cartes + Et le profil "Road trip" est marqué avec un badge "Actif" + + Scénario: Activer un profil existant + Étant donné que le profil "Road trip" est actif + Et que je vois le profil "Trajet quotidien" + Quand je clique sur la carte "Trajet quotidien" + Alors je vois un popup de confirmation "Activer ce profil?" + Et je vois un aperçu des paramètres du profil + Quand je confirme + Alors le profil "Trajet quotidien" devient actif + Et je vois une animation de transition + Et je vois "Profil 'Trajet quotidien' activé ✓" + Et le badge "Actif" se déplace sur ce profil + + Scénario: Indicateur visuel du profil actif + Étant donné que le profil "Road trip" est actif + Quand je consulte l'écran principal + Alors je vois en haut de l'écran un badge "🛣️ Road trip" + Et ce badge indique quel profil est actuellement utilisé + Et je peux taper dessus pour switcher rapidement + + Scénario: Switcher rapidement de profil depuis l'écran principal + Étant donné que je suis sur l'écran principal + Et que le profil "Road trip" est actif + Quand je tape sur le badge "🛣️ Road trip" + Alors je vois une liste déroulante de tous mes profils + Quand je sélectionne "🚗 Trajet quotidien" + Alors le profil change instantanément + Et je vois "Profil changé" + Et les recommandations se rechargent + + Scénario: Modifier un profil existant + Étant donné que j'ai un profil "Trajet quotidien" + Quand je fais un appui long sur la carte du profil + Alors je vois un menu contextuel avec: + | action | icône | + | Modifier | ✏️ | + | Dupliquer | 📋 | + | Supprimer | 🗑️ | + Quand je clique sur "Modifier" + Alors je peux modifier les paramètres du profil + Et je sauvegarde les changements + + Scénario: Dupliquer un profil + Étant donné que j'ai un profil "Road trip" + Quand je fais un appui long et choisis "Dupliquer" + Alors un nouveau profil "Road trip (copie)" est créé + Et il a les mêmes paramètres que l'original + Et je peux le renommer et modifier + + Scénario: Supprimer un profil + Étant donné que j'ai un profil "Ancien profil" + Quand je fais un appui long et choisis "Supprimer" + Alors je vois une confirmation "Supprimer ce profil?" + Quand je confirme + Alors le profil est supprimé + Et je vois "Profil supprimé" + + Scénario: Impossible de supprimer le profil actif + Étant donné que le profil "Road trip" est actif + Quand je fais un appui long et choisis "Supprimer" + Alors je vois "Impossible de supprimer le profil actif" + Et je dois d'abord activer un autre profil + + Scénario: Synchronisation profils entre devices + Étant donné que j'ai créé 2 profils sur mon iPhone + Quand je me connecte sur mon iPad + Alors je vois mes 2 profils automatiquement synchronisés + Et le profil actif sur iPhone est aussi actif sur iPad + Et je vois "Profils synchronisés depuis iPhone" + + Scénario: Modification profil synchronisée en temps réel + Étant donné que j'ai ouvert l'app sur iPhone et iPad + Quand je modifie un profil sur iPhone + Alors le profil est mis à jour sur iPad en temps réel + Et je vois une notification "Profil mis à jour" sur iPad + + Scénario: Auto-switch selon contexte (détection trajet) + Étant donné que j'ai un profil "Trajet quotidien" + Et que l'option "Auto-switch intelligent" est activée + Quand l'app détecte que je suis sur mon trajet habituel (GPS récurrent) + Alors le profil "Trajet quotidien" s'active automatiquement + Et je vois une notification "Profil 'Trajet quotidien' activé" + Et je peux annuler en 5 secondes + + Scénario: Désactiver l'auto-switch intelligent + Étant donné que l'auto-switch est activé + Quand je désactive l'option dans les paramètres + Alors aucun changement automatique de profil n'est fait + Et je garde le contrôle total + + Scénario: Limitation nombre de profils + Étant donné que j'ai créé 5 profils (maximum) + Quand j'essaie de créer un 6ème profil + Alors je vois "Limite de 5 profils atteinte" + Et je dois supprimer un profil pour en créer un nouveau + + Scénario: Blocage modification paramètres en conduite + Étant donné que je suis en conduite (vitesse GPS > 10 km/h) + Quand j'essaie d'ouvrir les paramètres de personnalisation + Alors l'accès est bloqué + Et je vois "⚠️ Configurez avant de prendre la route" + Et je dois arrêter le véhicule pour modifier + + Scénario: Warning au lancement app + Quand je lance l'application pour la première fois + Alors je vois un message de bienvenue + Et je vois "Configurez vos préférences avant de prendre la route" + Et je peux accéder directement aux paramètres + Ou "Configurer plus tard" + + Scénario: Profil par défaut pour nouveaux utilisateurs + Étant donné que je viens de m'inscrire + Quand j'ouvre l'app pour la première fois + Alors un profil "Par défaut" est créé automatiquement + Et il a les paramètres standards: + | paramètre | valeur | + | Géolocalisation | Équilibré | + | Découverte | 10% | + | Politique | Équilibré | + + Scénario: Prévisualisation des modifications en temps réel + Étant donné que je modifie le curseur Géolocalisation + Quand je déplace le curseur + Alors je vois une prévisualisation en temps réel: + | élément | affichage | + | Rayon géographique | Cercle sur mini-carte | + | Nombre contenus impactés | "~250 contenus à proximité"| + | Distance max | "100 km" | + + Scénario: Tooltip explicatif sur chaque curseur + Quand je tape sur l'icône ℹ️ à côté du curseur Géolocalisation + Alors je vois un tooltip explicatif: + """ + Géolocalisation + + Local: Privilégie les contenus très proches (< 50 km) + National: Découvrez des contenus de toute la France + + Idéal en Local pour les trajets quotidiens, + en National pour les road trips. + """ + + Scénario: Exporter/Importer profils + Étant donné que j'ai configuré mes profils parfaitement + Quand je clique sur "Exporter mes profils" + Alors un fichier JSON est généré + Et je peux le partager avec un autre appareil + Quand j'importe ce fichier sur un autre appareil + Alors tous mes profils sont restaurés + + Scénario: Reset profils aux valeurs par défaut + Étant donné que j'ai modifié tous mes paramètres + Quand je clique sur "Réinitialiser aux valeurs par défaut" + Alors je vois une confirmation + Quand je confirme + Alors tous les profils sont supprimés + Et un profil "Par défaut" est recréé + Et je vois "Paramètres réinitialisés"