Initial commit
This commit is contained in:
177
features/navigation/commande-precedent.feature
Normal file
177
features/navigation/commande-precedent.feature
Normal file
@@ -0,0 +1,177 @@
|
||||
# language: fr
|
||||
Fonctionnalité: Commande "Précédent"
|
||||
En tant qu'auditeur
|
||||
Je veux que le bouton "Précédent" ait un comportement intelligent
|
||||
Afin de rejouer le contenu actuel ou revenir au précédent selon la progression
|
||||
|
||||
Contexte:
|
||||
Étant donné que l'API RoadWave est disponible
|
||||
Et qu'un utilisateur est connecté
|
||||
|
||||
Scénario: Précédent après <10s revient au contenu précédent
|
||||
Étant donné que j'ai écouté le contenu "A" pendant 2 minutes
|
||||
Et que j'écoute maintenant le contenu "B" depuis 5 secondes
|
||||
Quand j'appuie sur "Précédent"
|
||||
Alors la lecture revient au contenu "A"
|
||||
Et la position de lecture est à 2 minutes (position exacte sauvegardée)
|
||||
Et le contenu "B" reste en historique
|
||||
|
||||
Scénario: Précédent après ≥10s rejoue le contenu actuel
|
||||
Étant donné que j'écoute le contenu "C" depuis 15 secondes
|
||||
Quand j'appuie sur "Précédent"
|
||||
Alors le contenu "C" rejoue depuis le début (position 0:00)
|
||||
Et la lecture ne revient pas au contenu précédent
|
||||
Et la progress bar revient à 0%
|
||||
|
||||
Scénario: Précédent exactement à 10s rejoue le contenu actuel
|
||||
Étant donné que j'écoute le contenu "D" depuis exactement 10 secondes
|
||||
Quand j'appuie sur "Précédent"
|
||||
Alors le contenu "D" rejoue depuis le début
|
||||
Et la lecture ne revient pas au contenu précédent
|
||||
|
||||
Scénario: Précédent sur le premier contenu de session
|
||||
Étant donné que je viens de démarrer l'application
|
||||
Et que j'écoute le contenu "Premier" depuis 3 secondes
|
||||
Quand j'appuie sur "Précédent"
|
||||
Alors le contenu "Premier" rejoue depuis le début
|
||||
Et aucun contenu précédent n'existe
|
||||
|
||||
Scénario: Historique de navigation limité à 10 contenus
|
||||
Étant donné que j'ai écouté 10 contenus [C1, C2, ..., C10]
|
||||
Et que l'historique Redis contient 10 entrées
|
||||
Quand je passe au contenu C11
|
||||
Alors le contenu C1 est supprimé de l'historique (FIFO)
|
||||
Et l'historique contient [C2, C3, ..., C10, C11]
|
||||
Et la taille reste à 10 contenus maximum
|
||||
|
||||
Scénario: Position exacte sauvegardée dans l'historique
|
||||
Étant donné que j'écoute le contenu "A" (durée 5 minutes)
|
||||
Quand j'atteins 2 minutes 30 secondes
|
||||
Et que j'appuie sur "Suivant"
|
||||
Alors l'historique enregistre:
|
||||
| content_id | position_seconds | listened_at |
|
||||
| A | 150 | 2026-01-21T10:30:00 |
|
||||
Quand je reviens au contenu "A" via "Précédent"
|
||||
Alors la lecture reprend exactement à 2 minutes 30 secondes
|
||||
|
||||
Scénario: Navigation arrière sur plusieurs contenus
|
||||
Étant donné que j'ai écouté dans l'ordre: A (2min), B (30s), C (3min)
|
||||
Et que j'écoute maintenant D depuis 1 seconde
|
||||
Quand j'appuie sur "Précédent" (1ère fois)
|
||||
Alors je reviens au contenu C à la position 3 minutes
|
||||
Quand j'appuie sur "Précédent" (<10s sur C)
|
||||
Alors je reviens au contenu B à la position 30 secondes
|
||||
Quand j'appuie sur "Précédent" (<10s sur B)
|
||||
Alors je reviens au contenu A à la position 2 minutes
|
||||
|
||||
Scénario: Précédent après milieu du contenu rejoue depuis début
|
||||
Étant donné que j'écoute un contenu de 5 minutes
|
||||
Quand j'atteins 2 minutes 30 secondes (milieu)
|
||||
Et que j'appuie sur "Précédent"
|
||||
Alors le contenu actuel rejoue depuis 0:00
|
||||
Et je ne reviens pas au contenu précédent
|
||||
|
||||
Scénario: Enchaînement Suivant puis Précédent rapide
|
||||
Étant donné que j'écoute le contenu "A" depuis 1 minute
|
||||
Quand j'appuie sur "Suivant"
|
||||
Alors le contenu "B" démarre
|
||||
Quand j'appuie immédiatement sur "Précédent" (2s après)
|
||||
Alors je reviens au contenu "A" à la position 1 minute
|
||||
Et le contenu "B" reste dans l'historique
|
||||
|
||||
Scénario: Transition fluide avec animation 0.3s
|
||||
Étant donné que j'appuie sur "Précédent"
|
||||
Quand le changement de contenu se produit
|
||||
Alors la transition audio utilise un fade out/in de 0.3 secondes
|
||||
Et la progress bar revient avec une animation fluide
|
||||
Et l'interface ne montre aucun message de confirmation
|
||||
|
||||
Scénario: Historique survit au changement de réseau
|
||||
Étant donné que j'ai un historique de 5 contenus en cache Redis
|
||||
Quand je perds la connexion réseau temporairement
|
||||
Et que je reviens en ligne
|
||||
Alors l'historique de navigation est toujours disponible
|
||||
Et je peux toujours utiliser "Précédent"
|
||||
|
||||
Scénario: Historique stocké en Redis avec structure complète
|
||||
Étant donné que j'ai écouté 3 contenus
|
||||
Quand je consulte le cache Redis
|
||||
Alors la structure est:
|
||||
"""
|
||||
user:{user_id}:history = [
|
||||
{content_id: "C3", position_seconds: 45, listened_at: "2026-01-21T10:33:00Z"},
|
||||
{content_id: "C2", position_seconds: 120, listened_at: "2026-01-21T10:30:00Z"},
|
||||
{content_id: "C1", position_seconds: 180, listened_at: "2026-01-21T10:27:00Z"}
|
||||
]
|
||||
"""
|
||||
Et l'ordre est du plus récent au plus ancien
|
||||
|
||||
Scénario: Précédent sur contenu en cours au début (<10s) du premier
|
||||
Étant donné que je démarre une session avec le contenu "Initial"
|
||||
Et que j'écoute depuis 3 secondes
|
||||
Quand j'appuie sur "Précédent"
|
||||
Alors le contenu "Initial" rejoue depuis le début
|
||||
Et aucune erreur n'est générée
|
||||
Et l'historique reste vide
|
||||
|
||||
Scénario: Compteur de temps respecte les seuils exacts
|
||||
Étant donné que j'écoute un contenu
|
||||
Quand le temps écoulé est de 9.9 secondes
|
||||
Et que j'appuie sur "Précédent"
|
||||
Alors je reviens au contenu précédent
|
||||
Quand le temps écoulé est de 10.0 secondes
|
||||
Et que j'appuie sur "Précédent"
|
||||
Alors le contenu actuel rejoue depuis le début
|
||||
|
||||
Scénario: Progress bar visuelle reflète le retour exact
|
||||
Étant donné que j'ai écouté le contenu "A" jusqu'à 75% (3min45 sur 5min)
|
||||
Et que je suis passé au contenu "B"
|
||||
Quand je reviens au contenu "A" via "Précédent"
|
||||
Alors la progress bar affiche 75%
|
||||
Et l'indicateur de temps affiche "3:45 / 5:00"
|
||||
Et la lecture reprend exactement à cet endroit
|
||||
|
||||
Scénario: Métadonnées d'historique incluent timestamp précis
|
||||
Étant donné que j'écoute un contenu "X" pendant 45 secondes à 10:30:15
|
||||
Quand je passe au contenu suivant
|
||||
Alors l'historique enregistre:
|
||||
| content_id | position_seconds | listened_at |
|
||||
| X | 45 | 2026-01-21T10:30:15Z |
|
||||
Et le timestamp précis permet l'analyse d'usage
|
||||
|
||||
Scénario: Suppression FIFO respecte l'ordre chronologique
|
||||
Étant donné un historique de [C1@10:00, C2@10:02, ..., C10@10:20]
|
||||
Quand j'ajoute C11 à 10:22
|
||||
Alors C1 (le plus ancien) est supprimé
|
||||
Et l'historique contient [C2@10:02, ..., C11@10:22]
|
||||
Et la taille reste exactement 10 entrées
|
||||
|
||||
Plan du Scénario: Comportement selon temps écouté
|
||||
Étant donné que j'écoute un contenu depuis <temps> secondes
|
||||
Quand j'appuie sur "Précédent"
|
||||
Alors l'action est <comportement>
|
||||
|
||||
Exemples:
|
||||
| temps | comportement |
|
||||
| 1 | revenir au contenu précédent |
|
||||
| 5 | revenir au contenu précédent |
|
||||
| 9 | revenir au contenu précédent |
|
||||
| 10 | rejouer le contenu actuel depuis 0:00 |
|
||||
| 11 | rejouer le contenu actuel depuis 0:00 |
|
||||
| 30 | rejouer le contenu actuel depuis 0:00 |
|
||||
| 180 | rejouer le contenu actuel depuis 0:00 |
|
||||
|
||||
Plan du Scénario: Positions de reprise exactes
|
||||
Étant donné que j'écoute un contenu de 10 minutes
|
||||
Quand j'atteins <position> et passe au suivant
|
||||
Et que je reviens via "Précédent"
|
||||
Alors la lecture reprend exactement à <position>
|
||||
|
||||
Exemples:
|
||||
| position |
|
||||
| 0:15 |
|
||||
| 1:30 |
|
||||
| 3:45 |
|
||||
| 5:00 |
|
||||
| 7:23 |
|
||||
| 9:50 |
|
||||
Reference in New Issue
Block a user