Initial commit

This commit is contained in:
jpgiannetti
2026-01-31 11:45:11 +01:00
commit f99fb3c614
166 changed files with 115155 additions and 0 deletions

View File

@@ -0,0 +1,193 @@
# language: fr
Fonctionnalité: Upload et encodage de contenu audio
En tant que créateur
Je veux uploader mon contenu audio
Afin qu'il soit encodé et disponible pour les auditeurs
Contexte:
Étant donné que l'API RoadWave est disponible
Et que je suis un créateur connecté
Scénario: Upload fichier MP3 valide
Quand j'uploade un fichier MP3 de 50 MB et 30 minutes
Alors l'upload réussit
Et le fichier est envoyé vers OVH Object Storage temporaire
Et un job d'encodage asynchrone est lancé
Scénario: Upload fichier AAC valide (.aac)
Quand j'uploade un fichier AAC de 80 MB et 1 heure
Alors l'upload réussit
Et le fichier est accepté
Et l'encodage démarre
Scénario: Upload fichier M4A valide
Quand j'uploade un fichier M4A de 100 MB et 2 heures
Alors l'upload réussit
Et le fichier est traité comme AAC
Et l'encodage démarre
Scénario: Rejet fichier WAV (non supporté)
Quand j'essaie d'uploader un fichier WAV
Alors l'upload échoue
Et je vois le message "Format non supporté. Utilisez MP3 ou AAC (.mp3, .aac, .m4a)"
Scénario: Rejet fichier FLAC (non supporté)
Quand j'essaie d'uploader un fichier FLAC
Alors l'upload échoue
Et je vois le message "Format non supporté. Utilisez MP3 ou AAC (.mp3, .aac, .m4a)"
Scénario: Validation taille maximale 200 MB
Quand j'essaie d'uploader un fichier MP3 de 201 MB
Alors l'upload échoue
Et je vois le message "Fichier trop volumineux (max 200 MB)"
Scénario: Upload à la limite de 200 MB accepté
Quand j'uploade un fichier MP3 de exactement 200 MB
Alors l'upload réussit
Et le fichier est accepté
Scénario: Validation durée maximale 4 heures
Quand j'essaie d'uploader un fichier de 4h 10min
Alors l'upload échoue
Et je vois le message "Durée trop longue (max 4 heures)"
Scénario: Upload à la limite de 4h accepté
Quand j'uploade un fichier de exactement 4 heures
Alors l'upload réussit
Et le fichier est accepté
Scénario: Validation format côté client
Quand je sélectionne un fichier dans l'interface
Alors la validation du format est faite immédiatement côté client
Et je suis informé avant même de lancer l'upload si le format est invalide
Scénario: Double validation côté backend
Étant donné qu'un fichier a passé la validation client
Quand le backend reçoit le fichier
Alors une validation supplémentaire est effectuée
Et le format et l'intégrité sont vérifiés
Scénario: Pipeline d'encodage - étape 1 upload
Quand j'uploade un fichier MP3 valide
Alors le fichier est stocké temporairement dans OVH Object Storage
Et un job d'encodage est mis en file d'attente
Scénario: Pipeline d'encodage - validation format
Étant donné qu'un job d'encodage est lancé
Quand le worker Go traite le fichier
Alors le format est validé avec FFmpeg
Et l'intégrité du fichier est vérifiée
Scénario: Pipeline d'encodage - génération 3 profils Opus
Étant donné qu'un fichier audio est validé
Quand l'encodage démarre
Alors 3 profils Opus sont générés:
| qualité | bitrate | usage |
| Basse | 24 kbps | 2G/Edge |
| Standard | 48 kbps | 3G |
| Haute | 64 kbps | 4G/5G |
Scénario: Pipeline d'encodage - génération segments HLS
Étant donné que les profils Opus sont générés
Quand l'encodage continue
Alors un fichier manifest .m3u8 est créé
Et des segments .ts sont générés
Et le contenu est prêt pour streaming HLS
Scénario: Pipeline d'encodage - génération image par défaut
Étant donné que l'encodage est en cours
Quand les métadonnées sont traitées
Alors une image de couverture par défaut est générée
Et l'image fait 800×800px au format PNG
Scénario: Pipeline d'encodage - suppression fichier original
Étant donné que l'encodage est terminé avec succès
Quand tous les fichiers de sortie sont générés
Alors le fichier original MP3/AAC est supprimé
Et seuls les profils Opus et HLS sont conservés
Et l'espace de stockage est économisé
Scénario: Temps d'encodage contenu 5 minutes
Étant donné qu'un fichier de 5 minutes est uploadé
Quand l'encodage démarre
Alors l'encodage prend environ 30 secondes
Et je reçois une notification "Contenu prêt à publier"
Scénario: Temps d'encodage podcast 1 heure
Étant donné qu'un fichier de 1 heure est uploadé
Quand l'encodage démarre
Alors l'encodage prend environ 5 minutes
Et une barre de progression est affichée
Scénario: Temps d'encodage podcast 4 heures
Étant donné qu'un fichier de 4 heures est uploadé
Quand l'encodage démarre
Alors l'encodage prend environ 20 minutes
Et je peux fermer l'app (traitement asynchrone)
Scénario: Notification "Contenu prêt à publier"
Étant donné que mon contenu est en cours d'encodage
Quand l'encodage se termine avec succès
Alors je reçois une notification push " Votre contenu est prêt à publier"
Et je peux accéder à l'interface de publication
Scénario: Échec d'encodage - fichier corrompu
Étant donné qu'un fichier MP3 corrompu est uploadé
Quand l'encodage démarre
Alors l'encodage échoue
Et je reçois une notification " Erreur d'encodage: fichier corrompu"
Et le fichier temporaire est supprimé
Scénario: Écoute accélérée - vitesses disponibles
Étant donné qu'un contenu est publié
Quand un auditeur écoute le contenu
Alors il peut choisir parmi les vitesses:
| vitesse | usage |
| 0.75x | Compréhension difficile |
| 1.0x | Normal (défaut) |
| 1.25x | Gain léger |
| 1.5x | Podcasts longs |
| 2.0x | Survol rapide |
Scénario: Écoute accélérée pour modérateurs
Étant donné que je suis un modérateur
Et qu'un contenu de 30 secondes est à valider
Quand je l'écoute à 2.0x
Alors je termine l'écoute en 15 secondes
Et ma productivité est doublée
Scénario: Écoute accélérée pour auditeurs
Étant donné que je suis un auditeur
Et qu'un podcast de 1 heure est disponible
Quand je configure la vitesse à 1.5x
Alors j'écoute le podcast en 40 minutes
Et je gagne 20 minutes
Scénario: Sauvegarde préférence vitesse d'écoute
Étant donné que je configure la vitesse à 1.5x
Quand j'écoute plusieurs contenus
Alors tous les contenus sont lus à 1.5x par défaut
Et ma préférence est sauvegardée
Scénario: Scalabilité horizontale des workers
Étant donné que 100 contenus sont uploadés simultanément
Quand les jobs d'encodage sont distribués
Alors plusieurs workers Go traitent les jobs en parallèle
Et Kubernetes scale automatiquement les pods
Et tous les contenus sont encodés sans délai excessif
Scénario: Statut d'encodage visible
Étant donné que mon contenu est en cours d'encodage
Quand je consulte mes contenus
Alors je vois le statut:
| état | affichage |
| En attente | File d'attente |
| En cours | Encodage en cours (45%) |
| Terminé | Prêt à publier |
| Échec | Erreur - Réessayer |
Scénario: Réessayer après échec d'encodage
Étant donné que l'encodage de mon contenu a échoué
Quand je clique sur "Réessayer"
Alors un nouveau job d'encodage est lancé
Et je peux tenter à nouveau