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>
This commit is contained in:
209
features/api/radio-live/comportement-auditeur.feature
Normal file
209
features/api/radio-live/comportement-auditeur.feature
Normal file
@@ -0,0 +1,209 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user