feat(gherkin): compléter et aligner Gherkins radio-live avec règles métiers
Ajouts : - Nouveau fichier comportement-auditeur-live.feature couvrant section 7.3 - Buffer synchronisation 15s et justification vs alternatives - Continuation hors zone géographique - Reconnexion après coupure (<90s vs ≥90s) - Interactions disponibles (Like, Abonnement, Skip) - Décision définitive : pas de chat ni réactions emoji - Justification complète (sécurité routière, modération, DSA EU) Corrections : - Séparation claire contenu violent (Strike 3) vs contenu illégal (Strike 4) - Ajout scénario dédié pour contenu illégal avec ban définitif - Clarification notification autorités pour contenus illégaux Alignement 100% avec docs/regles-metier/12-radio-live.md
This commit is contained in:
275
features/api/radio-live/comportement-auditeur-live.feature
Normal file
275
features/api/radio-live/comportement-auditeur-live.feature
Normal file
@@ -0,0 +1,275 @@
|
||||
# language: fr
|
||||
Fonctionnalité: Comportement auditeur pendant un live
|
||||
En tant qu'auditeur
|
||||
Je veux écouter un live avec une expérience stable et sécurisée
|
||||
Afin de profiter du contenu en temps réel sans distraction
|
||||
|
||||
Contexte:
|
||||
Étant donné que l'API RoadWave est disponible
|
||||
Et que je suis connecté en tant qu'auditeur
|
||||
Et qu'un créateur diffuse actuellement un live
|
||||
|
||||
Scénario: Buffer de synchronisation 15 secondes
|
||||
Étant donné qu'un créateur parle en direct
|
||||
Quand je rejoins le live
|
||||
Alors j'entends l'audio avec un décalage de 15 secondes
|
||||
Et ce buffer permet une stabilité optimale sur connexion 3G/4G
|
||||
Et le buffer absorbe les fluctuations réseau courtes
|
||||
|
||||
Scénario: Justification buffer 15 secondes vs alternatives
|
||||
Étant donné les différentes options de buffer possibles:
|
||||
| Buffer | Stabilité 3G | Décalage perçu | Décision |
|
||||
| 5s | Faible | Imperceptible | Rejeté |
|
||||
| 10s | Moyenne | Faible | Rejeté |
|
||||
| 15s | Excellente | Acceptable | Choisi |
|
||||
| 20s+ | Très haute | Trop élevé | Rejeté |
|
||||
Alors le buffer de 15 secondes est le meilleur compromis
|
||||
Et la stabilité sur réseau mobile est prioritaire
|
||||
|
||||
Scénario: Continuation du live si sortie de zone géographique
|
||||
Étant donné que j'écoute un live régional "Île-de-France"
|
||||
Et que je suis situé à Paris
|
||||
Quand je me déplace et sors de l'Île-de-France
|
||||
Alors le live continue de jouer normalement
|
||||
Et aucune coupure brutale ne se produit
|
||||
Et l'écoute se termine naturellement
|
||||
|
||||
Scénario: Justification continuation hors zone
|
||||
Étant donné que j'écoute activement un live
|
||||
Quand je sors de la zone géographique ciblée
|
||||
Alors le système ne coupe pas le live
|
||||
Car une coupure brutale dégraderait l'expérience utilisateur
|
||||
Et l'écoute engagée doit pouvoir se terminer naturellement
|
||||
Mais après la fin du live, l'algorithme reprend le fonctionnement normal
|
||||
|
||||
Scénario: Après fin du live, algorithme normal reprend
|
||||
Étant donné que j'ai écouté un live hors zone jusqu'à sa fin
|
||||
Quand le live se termine
|
||||
Alors l'algorithme de recommandation reprend son fonctionnement normal
|
||||
Et je ne reçois plus de contenus hors de ma zone géographique actuelle
|
||||
|
||||
Scénario: Reconnexion rapide après coupure réseau (<90s)
|
||||
Étant donné que j'écoute un live
|
||||
Et que je perds ma connexion réseau pendant 30 secondes
|
||||
Quand ma connexion revient
|
||||
Alors je me reconnecte automatiquement au live
|
||||
Et je reprends l'écoute au moment actuel du live
|
||||
Et je ne reprends pas au buffer ancien (saut temporel transparent)
|
||||
|
||||
Scénario: Reconnexion après coupure réseau de 89 secondes
|
||||
Étant donné que j'écoute un live
|
||||
Et que je perds ma connexion réseau pendant 89 secondes
|
||||
Quand ma connexion revient
|
||||
Alors je me reconnecte au live en cours
|
||||
Et je reprends au moment actuel
|
||||
Car le seuil de 90 secondes n'est pas atteint
|
||||
|
||||
Scénario: Coupure réseau longue (≥90s) - Passage contenu suivant
|
||||
Étant donné que j'écoute un live
|
||||
Et que je perds ma connexion réseau pendant 90 secondes ou plus
|
||||
Quand ma connexion revient
|
||||
Alors je vois le message "Live en cours perdu, passage au contenu suivant"
|
||||
Et l'algorithme me propose un contenu normal (non-live)
|
||||
Et je ne rejoins pas le live précédent
|
||||
|
||||
Scénario: Saut temporel transparent lors de reconnexion
|
||||
Étant donné que j'écoute un live au timestamp 00:05:00
|
||||
Et que je perds ma connexion pendant 45 secondes
|
||||
Quand je me reconnecte
|
||||
Alors je reprends l'écoute au timestamp actuel du live (environ 00:05:45)
|
||||
Et le saut de 45 secondes est transparent
|
||||
Et je ne réentends pas les 45 secondes manquées
|
||||
|
||||
Scénario: Like disponible pendant le live (véhicule arrêté)
|
||||
Étant donné que j'écoute un live
|
||||
Et que mon véhicule est à l'arrêt
|
||||
Quand je clique sur le bouton cœur ❤️
|
||||
Alors un like est enregistré
|
||||
Et mes jauges d'intérêt augmentent de +2% selon les tags du live
|
||||
Et le créateur voit son compteur de likes s'incrémenter en temps réel
|
||||
|
||||
Scénario: Like désactivé pendant le live (véhicule en mouvement)
|
||||
Étant donné que j'écoute un live
|
||||
Et que mon véhicule est en mouvement
|
||||
Quand j'essaie d'accéder aux interactions
|
||||
Alors le bouton cœur est désactivé
|
||||
Et je vois le message "Interactions disponibles uniquement véhicule à l'arrêt"
|
||||
Car la sécurité routière est prioritaire
|
||||
|
||||
Scénario: Abonnement au créateur pendant le live (véhicule arrêté)
|
||||
Étant donné que j'écoute un live d'un créateur non suivi
|
||||
Et que mon véhicule est à l'arrêt
|
||||
Quand je clique sur "S'abonner"
|
||||
Alors l'abonnement est enregistré
|
||||
Et mes jauges d'intérêt augmentent de +5% selon les tags du créateur
|
||||
Et je recevrai des notifications pour ses prochains lives
|
||||
|
||||
Scénario: Skip disponible pendant le live
|
||||
Étant donné que j'écoute un live
|
||||
Quand je clique sur le bouton "Skip" (suivant)
|
||||
Alors je quitte le live immédiatement
|
||||
Et l'algorithme me propose le contenu suivant
|
||||
Et je ne peux pas revenir au live via "Précédent"
|
||||
|
||||
Scénario: Bouton "Précédent" désactivé pendant un live
|
||||
Étant donné que j'écoute un live
|
||||
Quand je regarde les contrôles de lecture
|
||||
Alors le bouton "Précédent" est désactivé (grisé)
|
||||
Car il n'y a pas de sens sur un flux temps réel
|
||||
Et je ne peux pas revenir en arrière dans un live
|
||||
|
||||
Scénario: Chat en direct jamais disponible (décision définitive)
|
||||
Étant donné que j'écoute un live
|
||||
Quand je cherche une fonctionnalité de chat
|
||||
Alors aucun bouton de chat n'est disponible
|
||||
Et aucune interface de messagerie n'est présente
|
||||
Car cette fonctionnalité ne sera jamais implémentée
|
||||
|
||||
Scénario: Message explicatif sur absence de chat
|
||||
Étant donné que j'essaie de chercher comment discuter pendant un live
|
||||
Quand j'accède à l'aide ou aux FAQ
|
||||
Alors je vois le message:
|
||||
"""
|
||||
💬 Les discussions ne sont pas disponibles sur RoadWave pour garantir votre sécurité en voiture et éviter le harcèlement.
|
||||
|
||||
RoadWave privilégie l'écoute passive pour:
|
||||
- Votre sécurité au volant (pas de distraction)
|
||||
- Votre bien-être (pas de harcèlement, toxicité)
|
||||
- Une expérience audio apaisante
|
||||
"""
|
||||
|
||||
Scénario: Réactions emoji jamais disponibles (décision définitive)
|
||||
Étant donné que j'écoute un live
|
||||
Quand je cherche des réactions emoji ou boutons interactifs
|
||||
Alors aucune réaction emoji n'est disponible
|
||||
Car cette fonctionnalité ne sera jamais implémentée
|
||||
Et seuls les likes explicites sont autorisés (véhicule arrêté)
|
||||
|
||||
Scénario: Justification absence chat et réactions
|
||||
Étant donné les raisons de l'absence de chat:
|
||||
| Raison | Justification |
|
||||
| Sécurité routière | Pas de distraction en voiture (focus UX) |
|
||||
| Harcèlement | Évite contenu haineux, insultes, trolling |
|
||||
| Modération | Pas de coût modération temps réel (impossible à scale) |
|
||||
| Simplicité | Écoute passive = expérience uniforme |
|
||||
| Bien-être | Évite toxicité, harcèlement (fléau réseaux sociaux) |
|
||||
| Juridique | Pas de risque contentieux modération chat (DSA EU) |
|
||||
| Différenciation | Positionnement "audio safe" vs plateformes toxiques |
|
||||
Alors cette décision est définitive et non négociable
|
||||
Et RoadWave se positionne comme une plateforme d'écoute passive sécurisée
|
||||
|
||||
Scénario: Compteur d'auditeurs en temps réel visible
|
||||
Étant donné que j'écoute un live
|
||||
Quand je regarde l'interface
|
||||
Alors je vois le nombre d'auditeurs simultanés "247 auditeurs en direct"
|
||||
Et ce compteur se met à jour toutes les 10 secondes
|
||||
Et cela donne une indication de la popularité du live
|
||||
|
||||
Scénario: Indicateur "En direct" clair
|
||||
Étant donné que j'écoute un live
|
||||
Alors je vois clairement un badge rouge "🔴 EN DIRECT"
|
||||
Et je comprends immédiatement que c'est un flux temps réel
|
||||
Et pas un contenu enregistré
|
||||
|
||||
Scénario: Pas de barre de progression sur live
|
||||
Étant donné que j'écoute un live
|
||||
Quand je regarde les contrôles de lecture
|
||||
Alors il n'y a pas de barre de progression
|
||||
Car on ne peut pas se déplacer dans un flux temps réel
|
||||
Et seule la durée écoulée est affichée (ex: "23:45 écoulées")
|
||||
|
||||
Scénario: Transition fluide live vers contenu suivant
|
||||
Étant donné que j'écoute un live
|
||||
Quand le live se termine naturellement
|
||||
Alors le délai de transition habituel de 2 secondes démarre
|
||||
Et le contenu suivant est annoncé normalement
|
||||
Et l'expérience est cohérente avec les contenus classiques
|
||||
|
||||
Scénario: Notification de fin de live
|
||||
Étant donné que j'écoute un live
|
||||
Quand le créateur arrête le live
|
||||
Alors j'entends "Ce live se termine dans 5... 4... 3... 2... 1"
|
||||
Et je vois le message "Live terminé"
|
||||
Et je suis notifié que le replay sera disponible sous peu
|
||||
|
||||
Scénario: Qualité audio adaptative selon connexion
|
||||
Étant donné que j'écoute un live en 4G
|
||||
Et que ma connexion se dégrade vers 3G
|
||||
Quand la bande passante diminue
|
||||
Alors le player HLS natif adapte automatiquement la qualité
|
||||
Et le buffer de 15 secondes absorbe les fluctuations
|
||||
Et l'écoute reste fluide sans coupure
|
||||
|
||||
Scénario: Consommation data pendant écoute live
|
||||
Étant donné que j'écoute un live en Opus 48 kbps
|
||||
Quand j'écoute pendant 1 heure
|
||||
Alors je consomme environ 21.6 MB de data
|
||||
Et cette information peut être affichée dans les paramètres
|
||||
Et l'utilisateur peut être averti si réseau cellulaire
|
||||
|
||||
Scénario: Tunnel ou coupure réseau courte (<15s)
|
||||
Étant donné que j'écoute un live
|
||||
Et que je passe dans un tunnel pendant 10 secondes
|
||||
Quand je ressors du tunnel
|
||||
Alors le buffer de 15 secondes a absorbé la coupure
|
||||
Et l'écoute reprend sans interruption perceptible
|
||||
Et je n'ai même pas remarqué la coupure
|
||||
|
||||
Scénario: Notifications désactivables pour les lives
|
||||
Étant donné que je suis abonné à un créateur
|
||||
Et que je reçois des notifications de ses lives
|
||||
Quand j'accède aux paramètres de notification
|
||||
Alors je peux désactiver spécifiquement les notifications "Live en direct"
|
||||
Et je continue à recevoir les autres notifications
|
||||
Et cela me permet de contrôler les interruptions
|
||||
|
||||
Scénario: Statistiques d'écoute personnelles après un live
|
||||
Étant donné que j'ai écouté un live pendant 45 minutes
|
||||
Quand je consulte mon historique d'écoute
|
||||
Alors je vois l'entrée "[DIRECT] [Titre du live]"
|
||||
Et la durée d'écoute "45 min"
|
||||
Et la date/heure de diffusion
|
||||
Et un lien vers le replay si disponible
|
||||
|
||||
Plan du Scénario: Reconnexion selon durée de coupure
|
||||
Étant donné que j'écoute un live
|
||||
Et que je perds ma connexion pendant <duree_coupure> secondes
|
||||
Quand ma connexion revient
|
||||
Alors le comportement est <comportement>
|
||||
|
||||
Exemples:
|
||||
| duree_coupure | comportement |
|
||||
| 10 | Reconnexion au live en cours |
|
||||
| 30 | Reconnexion au live en cours |
|
||||
| 60 | Reconnexion au live en cours |
|
||||
| 89 | Reconnexion au live en cours |
|
||||
| 90 | Passage au contenu suivant |
|
||||
| 120 | Passage au contenu suivant |
|
||||
|
||||
Plan du Scénario: Actions disponibles selon état véhicule
|
||||
Étant donné que j'écoute un live
|
||||
Et que mon véhicule est <etat_vehicule>
|
||||
Quand j'essaie d'effectuer l'action <action>
|
||||
Alors le résultat est <resultat>
|
||||
|
||||
Exemples:
|
||||
| etat_vehicule | action | resultat |
|
||||
| arrêté | Like | Autorisé |
|
||||
| arrêté | Abonnement | Autorisé |
|
||||
| arrêté | Skip | Autorisé |
|
||||
| en mouvement | Like | Bloqué |
|
||||
| en mouvement | Abonnement | Bloqué |
|
||||
| en mouvement | Skip | Autorisé |
|
||||
|
||||
Plan du Scénario: Interactions jamais disponibles
|
||||
Étant donné que j'écoute un live
|
||||
Quand je cherche l'interaction <interaction>
|
||||
Alors elle est <disponibilite>
|
||||
Car <raison>
|
||||
|
||||
Exemples:
|
||||
| interaction | disponibilite | raison |
|
||||
| Chat en direct | Jamais disponible | Sécurité routière + modération impossible |
|
||||
| Réactions emoji | Jamais disponible | Sécurité routière + distraction |
|
||||
| Précédent | Jamais disponible | Pas de sens sur flux temps réel |
|
||||
| Seek (avancer) | Jamais disponible | Pas de sens sur flux temps réel |
|
||||
Reference in New Issue
Block a user