Files
roadwave/features/api/audio-guides/pieton-pub-autoplay.feature
jpgiannetti c48222cc63 feat(gherkin): compléter couverture règles métier avec 47 features manquantes
Ajout de 47 features Gherkin (~650 scénarios) pour couvrir 100% des règles métier :

- Authentification (5) : validation mot de passe, tentatives connexion, multi-device, 2FA, récupération
- Audio-guides (12) : détection mode, création, navigation piéton/voiture, ETA, gestion points, progression
- Navigation (5) : notifications minimalistes, décompte 5s, stationnement, historique, basculement auto
- Création contenu (3) : image auto, restrictions modification, suppression
- Radio live (2) : enregistrement auto, interdictions modération
- Droits auteur (6) : fair use 30s, détection musique, signalements, sanctions, appels
- Modération (9) : badges Bronze/Argent/Or, score fiabilité, utilisateur confiance, audit, anti-abus
- Premium (2) : webhooks Mangopay, tarification multi-canal
- Profil/Partage/Recherche (5) : badge vérifié, stats arrondies, partage premium, filtres avancés, carte

Tous les scénarios incluent edge cases, métriques de performance et conformité RGPD.
Couverture fonctionnelle MVP maintenant complète.
2026-02-03 21:25:47 +01:00

222 lines
12 KiB
Gherkin

# language: fr
@api @audio-guides @advertising @pedestrian @mvp
Fonctionnalité: Auto-play publicités en mode piéton uniquement
En tant qu'utilisateur piéton
Je peux recevoir des publicités audio en auto-play à proximité de commerces
Afin que les commerçants puissent promouvoir leurs offres de manière contextualisée
Contexte:
Étant donné que le système de publicité respecte les règles suivantes:
| Règle | Valeur |
| Auto-play autorisé uniquement en mode | Piéton |
| Durée max d'une publicité | 30 secondes |
| Fréquence max par commerce | 1 par jour |
| Distance min entre 2 pubs différentes | 200 mètres |
| Nombre max de pubs par heure | 3 |
| Possibilité de skip après | 5 secondes |
Scénario: Déclenchement automatique d'une publicité en mode piéton
Étant donné un utilisateur "alice@roadwave.fr" en mode piéton
Et elle marche dans la rue avec l'application active
Quand elle passe à 30 mètres du café "Le Parisien" avec publicité active
Alors la publicité audio "Café Le Parisien - 10% de réduction" démarre automatiquement
Et une notification visuelle s'affiche:
| Élément | Contenu |
| Icône | Logo du café |
| Titre | Publicité - Le Parisien |
| Distance | À 30m de vous |
| Action | [Passer] disponible après 5s |
| Durée | 0:25 |
Et l'audio en cours (si existant) est mis en pause
Et un événement "AD_AUTOPLAY_TRIGGERED" est enregistré
Et la métrique "ads.autoplay.triggered" est incrémentée
Scénario: Aucun auto-play en mode voiture
Étant donné un utilisateur "bob@roadwave.fr" en mode voiture
Et il roule à 40 km/h avec l'application active
Quand il passe à 30 mètres d'un commerce avec publicité active
Alors aucune publicité n'est déclenchée automatiquement
Et la publicité peut être affichée dans la liste "Publicités à proximité"
Et l'utilisateur peut choisir manuellement de l'écouter
Et un événement "AD_SKIPPED_CAR_MODE" est enregistré
Et la métrique "ads.skipped.car_mode" est incrémentée
Scénario: Aucun auto-play en mode vélo
Étant donné un utilisateur "charlie@roadwave.fr" en mode vélo
Et il roule à 15 km/h avec l'application active
Quand il passe à 30 mètres d'un commerce avec publicité active
Alors aucune publicité n'est déclenchée automatiquement
Et la sécurité de l'utilisateur à vélo est préservée
Et un événement "AD_SKIPPED_CYCLING_MODE" est enregistré
Et la métrique "ads.skipped.cycling_mode" est incrémentée
Scénario: Skip d'une publicité après 5 secondes
Étant donné un utilisateur "david@roadwave.fr" en mode piéton
Et une publicité a démarré automatiquement il y a 6 secondes
Quand l'utilisateur clique sur le bouton "Passer"
Alors la publicité s'arrête immédiatement
Et l'audio en cours précédent reprend (si existant)
Et un événement "AD_SKIPPED_BY_USER" est enregistré avec temps_ecoute: 6s
Et la métrique "ads.skipped.by_user" est incrémentée
Et le commerçant est facturé pour 6 secondes d'écoute seulement
Scénario: Bouton "Passer" désactivé pendant les 5 premières secondes
Étant donné un utilisateur "eve@roadwave.fr" en mode piéton
Et une publicité vient de démarrer
Quand l'utilisateur clique sur le bouton "Passer" à T+2 secondes
Alors le bouton est grisé et non cliquable
Et un message s'affiche: "Disponible dans 3 secondes"
Et un compteur à rebours est visible: 3... 2... 1...
Alors à T+5 secondes, le bouton devient actif
Et un événement "AD_SKIP_ATTEMPTED_TOO_EARLY" est enregistré
Et la métrique "ads.skip.too_early" est incrémentée
Scénario: Publicité écoutée en entier
Étant donné un utilisateur "frank@roadwave.fr" en mode piéton
Et une publicité de 25 secondes a démarré automatiquement
Quand l'utilisateur écoute la publicité jusqu'à la fin sans cliquer sur "Passer"
Alors la publicité se termine naturellement
Et l'audio en cours précédent reprend automatiquement
Et un événement "AD_COMPLETED" est enregistré avec temps_ecoute: 25s
Et la métrique "ads.completed" est incrémentée
Et le commerçant est facturé pour la publicité complète (tarif plein)
Scénario: Limitation à 3 publicités par heure
Étant donné un utilisateur "grace@roadwave.fr" en mode piéton
Et elle a déjà écouté 3 publicités dans la dernière heure:
| Commerce | Temps écoulé |
| Café Le Parisien | Il y a 10min |
| Boulangerie Paul | Il y a 30min |
| Restaurant Tokyo | Il y a 50min |
Quand elle passe à 30 mètres d'un 4ème commerce avec publicité
Alors aucune publicité n'est déclenchée automatiquement
Et un compteur s'affiche discrètement: "Prochaine pub disponible dans 10 min"
Et un événement "AD_RATE_LIMITED" est enregistré
Et la métrique "ads.rate_limited" est incrémentée
Scénario: Limitation à 1 publicité par commerce par jour
Étant donné un utilisateur "henry@roadwave.fr" en mode piéton
Et il a déjà écouté la publicité du "Café Le Parisien" ce matin à 10h
Quand il repasse devant le même café à 16h
Alors aucune publicité n'est déclenchée automatiquement
Et le café n'apparaît pas dans la liste "Publicités à proximité"
Et un événement "AD_ALREADY_SHOWN_TODAY" est enregistré
Et la métrique "ads.deduplication.same_day" est incrémentée
Scénario: Distance minimale de 200m entre 2 publicités différentes
Étant donné un utilisateur "iris@roadwave.fr" en mode piéton
Et elle vient d'écouter une publicité du "Café Le Parisien" il y a 1 minute
Quand elle marche et passe à 50 mètres de la "Boulangerie Paul" (150m du café)
Alors aucune publicité n'est déclenchée automatiquement
Et un événement "AD_TOO_CLOSE_TO_PREVIOUS" est enregistré
Et la métrique "ads.skipped.too_close" est incrémentée
Quand elle continue et passe à 250 mètres de la "Librairie Gibert" (250m du café)
Alors la publicité de la librairie peut être déclenchée
Scénario: Désactivation complète des publicités (utilisateur Premium)
Étant donné un utilisateur "jack@roadwave.fr" Premium en mode piéton
Et il a désactivé les publicités dans ses paramètres
Quand il passe à 30 mètres de commerces avec publicités actives
Alors aucune publicité n'est jamais déclenchée
Et aucune publicité n'apparaît dans la liste "Publicités à proximité"
Et un événement "AD_BLOCKED_PREMIUM" est enregistré
Et la métrique "ads.blocked.premium" est incrémentée
Scénario: Mise en pause de l'audio en cours lors du déclenchement d'une pub
Étant donné un utilisateur "kate@roadwave.fr" en mode piéton
Et elle écoute un podcast "Histoire de Paris" à la position 12min 30s
Quand une publicité se déclenche automatiquement
Alors le podcast est mis en pause immédiatement
Et la position de lecture est sauvegardée: 12min 30s
Et la publicité démarre
Quand la publicité se termine (skip ou écoute complète)
Alors le podcast reprend automatiquement à la position 12min 30s
Et un événement "AD_CONTENT_PAUSED_RESUMED" est enregistré
Et la métrique "ads.content.paused_resumed" est incrémentée
Scénario: Ciblage géographique précis de la publicité
Étant donné un commerçant "Le Parisien" avec publicité active
Et il a configuré un rayon de déclenchement de 50 mètres
Et un utilisateur "luke@roadwave.fr" en mode piéton
Quand l'utilisateur est à 60 mètres du commerce
Alors aucune publicité n'est déclenchée
Quand l'utilisateur marche et arrive à 45 mètres du commerce
Alors la publicité se déclenche automatiquement
Et un événement "AD_GEO_TRIGGERED" est enregistré avec distance: 45m
Et la métrique "ads.geo.triggered" est incrémentée
Scénario: Publicité contextuelle basée sur les intérêts de l'utilisateur
Étant donné un utilisateur "mary@roadwave.fr" en mode piéton
Et ses jauges d'intérêts sont:
| Catégorie | Niveau |
| Gastronomie | 85% |
| Culture | 60% |
| Sport | 20% |
Et deux commerces ont des publicités actives à proximité:
| Commerce | Catégorie | Distance |
| Restaurant Le Gourmet | Gastronomie | 40m |
| Salle de sport FitClub| Sport | 35m |
Quand l'utilisateur passe à proximité des deux commerces
Alors la publicité du restaurant est priorisée et déclenchée
Et la publicité de la salle de sport est ignorée (faible intérêt)
Et un événement "AD_INTEREST_MATCHED" est enregistré avec categorie: "gastronomie", score: 85
Et la métrique "ads.interest_matching.applied" est incrémentée
Scénario: Affichage d'informations complémentaires pendant la publicité
Étant donné un utilisateur "nathan@roadwave.fr" en mode piéton
Et une publicité du "Café Le Parisien" est en cours de lecture
Quand l'utilisateur consulte l'écran
Alors il voit les informations suivantes:
| Élément | Contenu |
| Logo du commerce | [Image] |
| Nom du commerce | Café Le Parisien |
| Type d'établissement | Café-Brasserie |
| Distance | À 30m de vous |
| Itinéraire | [Bouton "Y aller"] |
| Offre spéciale | 10% de réduction avec ce code: ROADWAVE10|
| Horaires | Ouvert maintenant - Ferme à 22h |
| Note | 4.5/5 (230 avis) |
Et l'utilisateur peut cliquer sur "Y aller" pour lancer la navigation
Et un événement "AD_INFO_DISPLAYED" est enregistré
Scénario: Tracking de la conversion (visite effective du commerce)
Étant donné un utilisateur "olive@roadwave.fr" en mode piéton
Et elle a écouté la publicité du "Café Le Parisien" il y a 5 minutes
Quand elle clique sur "Y aller" et se rend au café
Et entre dans un rayon de 10 mètres du café
Alors un événement "AD_CONVERSION_VISIT" est enregistré
Et la métrique "ads.conversions.visits" est incrémentée
Et le commerçant voit cette conversion dans ses statistiques
Et une notification discrète s'affiche: "Profitez de votre réduction avec le code ROADWAVE10"
Scénario: Métriques de performance des publicités pour les commerçants
Étant donné un commerçant "Le Parisien" avec publicité active depuis 7 jours
Quand le commerçant consulte ses statistiques
Alors il voit les métriques suivantes:
| Métrique | Valeur |
| Nombre d'impressions (déclenchements)| 450 |
| Taux d'écoute complète | 35% |
| Taux de skip moyen | 65% |
| Durée moyenne d'écoute | 12s |
| Nombre de clics "Y aller" | 25 |
| Nombre de visites confirmées | 18 |
| Taux de conversion | 4% |
| Coût total | 45 |
| Coût par visite | 2.50 |
Et les métriques sont mises à jour en temps réel
Scénario: A/B testing des publicités pour optimisation
Étant donné un commerçant "Le Parisien" avec 2 versions de publicité:
| Version | Description | Durée |
| A | Voix masculine, tonalité formelle | 25s |
| B | Voix féminine, tonalité décontractée | 25s |
Quand le système diffuse aléatoirement les 2 versions (50/50)
Alors les métriques sont collectées séparément:
| Métrique | Version A | Version B |
| Taux d'écoute complète | 32% | 42% |
| Taux de conversion | 3.5% | 5.2% |
Et le commerçant peut choisir de diffuser uniquement la version B
Et un événement "AD_AB_TEST_COMPLETED" est enregistré