Files
roadwave/features/api/content-creation/upload-encodage.feature
jpgiannetti 267f574467 feat(gherkin): améliorer scénarios content-creation avec edge cases
- Ajouter scénarios edge cases pour robustesse production
- Aligner fichiers Gherkin avec règles métier section 4
- Préciser suppression OVH Object Storage + NGINX Cache
- Ajouter gestion états transitoires (encodage, validation)
- Ajouter limites et timeouts (uploads, brouillons)

Scénarios ajoutés :
- upload-encodage : timeout, reprise, limites uploads, conservation fichiers
- modification-suppression : suppression pendant encodage, blocage modification en validation
- metadonnees-publication : blocage pendant encodage, limite brouillons, nettoyage auto
- validation-premiers-contenus : verrouillage concurrence modérateurs

Total : +12 scénarios pour 137 scénarios au total
2026-02-01 21:21:09 +01:00

232 lines
9.2 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.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
Scénario: Timeout upload après 30 minutes
Étant donné que mon upload dure plus de 30 minutes
Quand le timeout est atteint
Alors l'upload est annulé
Et je vois le message "Upload interrompu, veuillez réessayer"
Et je peux reprendre l'upload
Scénario: Reprise upload après interruption réseau
Étant donné que mon upload a échoué à 75%
Quand je clique sur "Reprendre"
Alors l'upload reprend à partir de 75%
Et le fichier partiel est conservé temporairement
Scénario: Limite de 3 uploads simultanés
Étant donné que j'ai déjà 3 uploads en cours
Quand j'essaie d'uploader un 4ème fichier
Alors l'upload est refusé
Et je vois le message "Maximum 3 uploads simultanés. Attendez qu'un upload se termine."
Scénario: Détection fichier corrompu pendant upload
Étant donné que j'uploade un fichier MP3 corrompu
Quand le backend détecte la corruption
Alors l'upload est rejeté immédiatement
Et je vois le message "Fichier corrompu, veuillez vérifier votre fichier"
Et je n'attends pas la fin de l'encodage
Scénario: Fichier original conservé pendant 48h après échec
Étant donné que mon encodage a échoué
Quand je clique sur "Réessayer" dans les 48h
Alors le fichier original est encore disponible
Et un nouvel encodage démarre sans réupload
Scénario: Fichier original supprimé après 48h
Étant donné que mon encodage a échoué il y a 48h
Quand j'essaie de réessayer
Alors je dois réuploader le fichier
Et je vois le message "Fichier original expiré, veuillez réuploader"