Files
roadwave/features/api/radio-live/comportement-auditeur.feature
jpgiannetti 37c62206ad feat(bdd): réorganiser features en catégories api/ui/e2e et créer ADR-024
Résolution des incohérences #10, #11, et #12 de l'analyse d'architecture.

## Phase 1 : Réorganisation Features BDD (Point #10 - RÉSOLU)

- Créer structure features/{api,ui,e2e}
- Déplacer 83 features en 3 catégories via git mv (historique préservé)
  - features/api/ : 53 features (tests API backend)
  - features/ui/ : 22 features (tests UI mobile)
  - features/e2e/ : 8 features (tests end-to-end)

Domaines déplacés :
- API : authentication, recommendation, rgpd-compliance, content-creation,
  moderation, monetisation, premium, radio-live, publicites
- UI : audio-guides, navigation, interest-gauges, mode-offline,
  partage, profil, recherche
- E2E : abonnements, error-handling

## Phase 2 : Mise à jour Documentation

### ADR-007 - Tests BDD
- Ajouter section "Convention de Catégorisation des Features"
- Documenter règles api/ui/e2e avec exemples concrets
- Spécifier step definitions (backend Go, mobile Dart)

### ADR-024 - Stratégie CI/CD Monorepo (NOUVEAU)
- Créer ADR dédié pour stratégie CI/CD avec path filters
- Architecture workflows séparés (backend.yml, mobile.yml, shared.yml)
- Configuration path filters détaillée avec exemples YAML
- Matrice de déclenchement et optimisations (~70% gain temps CI)
- Plan d'implémentation (~2h, reporté jusqu'au développement)

### ADR-016 - Organisation Monorepo
- Simplifier en retirant section CI/CD détaillée
- Ajouter référence vers ADR-024 pour stratégie CI/CD

### INCONSISTENCIES-ANALYSIS.md
- Point #10 (Tests BDD synchronisés) :  RÉSOLU
  - Catégorisation features implémentée
  - ADR-007 mis à jour avec convention complète
- Point #11 (70/30 Split paiements) :  ANNULÉ (faux problème)
  - ADR-009 et Règle 18 parfaitement cohérents
  - Documentation exhaustive existante (formule, SQL, comparaisons)
- Point #12 (Monorepo path filters) : ⏸️ DOCUMENTÉ
  - Architecture CI/CD complète dans ADR-024
  - Implémentation reportée (projet en phase documentation)
- Métriques mises à jour :
  - MODERATE : 6/9 traités (4 résolus + 1 annulé + 1 documenté)
  - ADR à jour : 100% (19/19 avec ADR-024)

## Phase 3 : Validation

- Structure features validée (api/ui/e2e, aucun répertoire restant)
- Historique Git préservé (git mv, renommages détectés)
- 83 features total (API: 53, UI: 22, E2E: 8)

Closes: Point #10 (résolu), Point #11 (annulé), Point #12 (documenté)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 11:31:41 +01:00

210 lines
9.9 KiB
Gherkin
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# language: fr
Fonctionnalité: Comportement auditeur pendant un live
En tant qu'auditeur
Je veux écouter des lives de manière stable
Afin de profiter du contenu en temps réel sans coupures
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: Rejoindre un live avec buffer de synchronisation 15 secondes
Quand je clique sur "Rejoindre le live"
Alors la connexion au flux HLS s'établit
Et je commence à écouter avec un décalage de 15 secondes par rapport au créateur
Et le buffer de 15 secondes garantit une lecture stable
Scénario: Justification du buffer 15 secondes
Étant donné les alternatives de buffer possibles:
| buffer | stabilité 3G | stabilité 4G | décalage perceptible | décision |
| 5s | Faible | Moyenne | Non | |
| 10s | Moyenne | Bonne | Non | |
| 15s | Bonne | Excellente | Léger acceptable | |
| 20s+ | Excellente | Excellente | Oui | |
Alors le buffer optimal est 15 secondes
Scénario: Lecture stable sur réseau 3G
Étant donné que je suis sur réseau 3G
Et que j'écoute un live
Quand des micro-coupures réseau surviennent
Alors le buffer de 15 secondes absorbe les coupures
Et la lecture continue sans interruption perceptible
Scénario: Lecture stable sur réseau 4G
Étant donné que je suis sur réseau 4G
Et que j'écoute un live
Alors la lecture est fluide
Et le buffer de 15 secondes prévient les coupures lors de changement de cellule
Scénario: Continuation du live en sortant de la zone géographique
Étant donné que j'écoute un live régional "Île-de-France"
Et que je suis situé en Île-de-France
Quand je me déplace et sors du département
Alors le live continue de jouer normalement
Et je peux écouter jusqu'à la fin naturelle du live
Et après la fin du live, l'algorithme propose du contenu correspondant à ma nouvelle position
Scénario: Abonné dans la zone reçoit notification push
Étant donné que je suis abonné au créateur "JeanDupont"
Et que je suis situé en Île-de-France
Quand "JeanDupont" démarre un live en Île-de-France
Alors je reçois une notification push "🔴 JeanDupont est en direct : [Titre du live]"
Et quand je tape sur la notification, l'app s'ouvre et le live démarre immédiatement
Scénario: Abonné hors zone ne reçoit pas de notification
Étant donné que je suis abonné au créateur "JeanDupont"
Et que je suis situé à Lyon
Quand "JeanDupont" démarre un live en Île-de-France
Alors je ne reçois pas de notification push
Et cela évite la frustration de ne pas pouvoir écouter un live hors zone
Scénario: Découverte d'un live via l'algorithme de recommandation
Étant donné que je suis dans la zone géographique du live
Et que je navigue dans l'app avec "Suivant"
Quand l'algorithme propose un live en cours
Alors je vois l'indicateur "🔴 EN DIRECT"
Et je peux choisir de le rejoindre ou de passer au suivant
Scénario: Reconnexion rapide après coupure réseau (moins de 90 secondes)
Étant donné que j'écoute un live
Quand je perds ma connexion réseau pendant 45 secondes
Et que je retrouve ma connexion
Alors je reprends le live au moment actuel (pas au buffer ancien)
Et le saut temporel est transparent (pas de message d'erreur)
Et je ne rate que quelques secondes de contenu
Scénario: Reconnexion longue après coupure réseau (90 secondes ou plus)
Étant donné que j'écoute un live
Quand je perds ma connexion réseau pendant 90 secondes
Et que je retrouve ma connexion
Alors je vois le message "Live en cours perdu, passage au contenu suivant"
Et l'algorithme propose automatiquement le contenu suivant
Et je peux manuellement revenir au live s'il est toujours en cours
Scénario: Interactions disponibles pendant le live - Like
Étant donné que j'écoute un live
Et que mon véhicule est à l'arrêt
Quand je clique sur le bouton " Like"
Alors le like est enregistré immédiatement
Et le compteur de likes visible par le créateur s'incrémente
Et ma jauge d'intérêt pour les tags du live augmente de +2%
Scénario: Interactions disponibles pendant le live - Abonnement
Étant donné que j'écoute un live
Et que je ne suis pas encore abonné au créateur
Quand je clique sur le bouton "S'abonner"
Alors je m'abonne au créateur
Et ma jauge d'intérêt pour tous les tags du créateur augmente de +5%
Et je recevrai des notifications pour ses prochains lives
Scénario: Interactions disponibles pendant le live - Skip
Étant donné que j'écoute un live
Quand j'appuie sur "Suivant" (ou commande au volant)
Alors je quitte le live immédiatement
Et l'algorithme propose le contenu suivant
Et si j'ai écouté moins de 10 secondes, ma jauge d'intérêt diminue de -0.5%
Scénario: Commande Précédent désactivée pendant un live
Étant donné que j'écoute un live
Quand j'appuie sur "Précédent" (ou commande au volant)
Alors rien ne se passe
Et un message d'information s'affiche brièvement "Précédent non disponible sur les lives"
Scénario: Chat en direct désactivé (décision définitive)
Étant donné que j'écoute un live
Alors aucune interface de chat n'est disponible
Et je ne peux pas envoyer de messages au créateur
Et je ne peux pas voir de messages d'autres auditeurs
Et cette fonctionnalité ne sera jamais implémentée
Scénario: Réactions emoji désactivées (décision définitive)
Étant donné que j'écoute un live
Alors aucune réaction emoji n'est disponible
Et je ne peux pas envoyer d'emoji en temps réel
Et cette fonctionnalité ne sera jamais implémentée
Scénario: Message d'information sur l'absence de chat
Étant donné que j'écoute mon premier live
Quand j'accède à l'interface du live
Alors je vois un bandeau informatif "💬 Les discussions ne sont pas disponibles sur RoadWave pour garantir votre sécurité en voiture et éviter le harcèlement."
Et ce bandeau n'apparaît qu'une seule fois (première expérience)
Scénario: Signalement d'un live en cours
Étant donné que j'écoute un live
Et que le contenu me semble inapproprié
Quand je clique sur le bouton "Signaler"
Alors je vois les catégories de signalement:
| catégorie |
| Haine et violence |
| Contenu sexuel |
| Illégalité |
| Droits d'auteur |
| Désinformation dangereuse |
| Harcèlement |
| Autre |
Et quand je sélectionne une catégorie
Alors le signalement est envoyé en priorité selon la catégorie
Et un modérateur peut écouter le live en temps réel si besoin
Scénario: Statistiques visibles par les auditeurs pendant le live
Étant donné que j'écoute un live
Quand je consulte les informations du live
Alors je vois:
| information | exemple valeur |
| Nombre d'auditeurs | 247 personnes |
| Durée du live | 1h 23min |
| Nom du créateur | @JeanDupont |
| Zone de diffusion | Île-de-France |
| Tags | Actualité, Société |
Mais je ne vois pas les likes ou autres métriques détaillées
Scénario: Compteur d'auditeurs arrondi pour préserver la vie privée
Étant donné que j'écoute un live avec exactement 247 auditeurs
Quand je consulte le nombre d'auditeurs
Alors je vois "~250 auditeurs" (arrondi à la dizaine supérieure)
Scénario: Qualité audio adaptative pendant le live
Étant donné que j'écoute un live
Quand ma connexion passe de 4G à 3G
Alors la qualité audio s'adapte automatiquement
Et je passe de 48 kbps à 24 kbps Opus
Et la transition est transparente sans coupure
Scénario: Consommation de données pendant un live
Étant donné que j'écoute un live en qualité standard 48 kbps
Et que j'écoute pendant 1 heure
Alors j'ai consommé environ 21.6 MB de données mobiles
Et cette consommation est affichée dans les paramètres de l'app
Scénario: Lecture du replay après la fin du live
Étant donné que j'écoute un live depuis 30 minutes
Quand le créateur arrête le live
Alors je vois le message "Le live est terminé. Le replay sera disponible dans quelques minutes"
Et le contenu suivant est automatiquement proposé après 2 secondes
Scénario: Notification de disponibilité du replay
Étant donné que j'ai écouté un live jusqu'à la fin
Et que le replay est publié 8 minutes plus tard
Quand je rouvre l'application
Alors je vois une notification in-app "Le replay de [Titre] est maintenant disponible"
Et je peux cliquer pour l'écouter immédiatement
Scénario: Aucune publicité pendant un live pour utilisateurs gratuits
Étant donné que je suis un utilisateur gratuit
Et que j'écoute un live
Alors aucune publicité n'est insérée pendant le live
Et la publicité apparaît seulement entre le live et le contenu suivant
Scénario: Détection de contexte voiture pendant un live
Étant donné que j'écoute un live
Et que ma vitesse est supérieure à 10 km/h
Alors l'interface tactile est désactivée pour la sécurité
Et seules les commandes au volant sont actives (Play/Pause/Suivant)
Scénario: Détection de contexte piéton pendant un live
Étant donné que j'écoute un live
Et que ma vitesse est inférieure à 5 km/h
Alors l'interface tactile complète est disponible
Et je peux liker, m'abonner, signaler via l'écran tactile