Files
roadwave/features/ui/audio-guides/creation-audio-guide.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

334 lines
14 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é: Création d'audio-guide multi-séquences
En tant que créateur de contenu
Je veux créer des audio-guides avec plusieurs séquences géolocalisées
Afin d'offrir des expériences guidées adaptées aux différents modes de déplacement
Contexte:
Étant donné que l'application RoadWave est démarrée
Et que le créateur "guide@example.com" est connecté
Et que son compte est vérifié
# 16.1 - Types d'audio-guides et modes de déplacement
Plan du Scénario: Détection automatique du mode selon la vitesse
Étant donné que l'utilisateur se déplace à <vitesse> km/h
Quand la vitesse est calculée sur 30 secondes
Alors le mode <mode> est suggéré automatiquement
Exemples:
| vitesse | mode |
| 3 | Piéton |
| 15 | Vélo |
| 35 | Voiture |
| 50 | Voiture |
Scénario: Suggestion de mode au démarrage avec confirmation
Étant donné qu'un audio-guide "Safari du Paugre" est disponible
Et que l'utilisateur se déplace à 35 km/h
Quand l'audio-guide démarre
Alors une popup s'affiche:
"""
Détection : 🚗 Voiture. Est-ce correct ?
[Oui] [Changer]
"""
Scénario: Changement manuel du mode détecté
Étant donné que le mode "Voiture" est suggéré automatiquement
Quand l'utilisateur clique sur "Changer"
Alors les 4 modes sont proposés:
| mode | emoji |
| Piéton | 🚶 |
| Voiture | 🚗 |
| Vélo | 🚴 |
| Transport | 🚌 |
Plan du Scénario: Caractéristiques par mode de déplacement
Étant donné un audio-guide configuré en mode <mode>
Alors les paramètres suivants sont appliqués:
| paramètre | valeur |
| Vitesse détection | <vitesse_detection> |
| Déclenchement | <declenchement> |
Exemples:
| mode | vitesse_detection | declenchement |
| Piéton | <5 km/h | Manuel (bouton Suivant) |
| Voiture | >10 km/h | Auto GPS + Manuel |
| Vélo | 5-25 km/h | Auto GPS + Manuel |
| Transport | Variable | Auto GPS + Manuel |
# 16.1.2 - Création d'un audio-guide (côté créateur)
Scénario: Accès au formulaire de création d'audio-guide
Étant donné que le créateur est sur son dashboard
Quand il clique sur "Créer un audio-guide"
Alors le formulaire de création s'affiche
Et le wizard guidé en 4 étapes est visible:
| étape | description |
| 1 | Infos générales |
| 2 | Ajout séquences |
| 3 | Preview carte |
| 4 | Validation modération |
Scénario: Étape 1 - Informations générales obligatoires
Étant donné que le créateur est sur l'étape 1 du wizard
Quand il complète le formulaire
Alors les champs suivants sont obligatoires:
| champ | contrainte |
| Titre | 5-100 caractères |
| Description | 10-500 caractères |
| Mode de déplacement | Choix parmi 4 |
| Tags | 1-3 tags |
| Classification âge | Tout public/13+/16+/18+ |
Scénario: Sélection du mode de déplacement
Étant donné que le créateur crée un audio-guide
Quand il sélectionne le mode "🚗 Voiture (GPS auto + manuel)"
Alors le champ "Vitesse recommandée" s'affiche
Et la plage suggérée est "30-50 km/h"
Scénario: Validation du titre
Étant donné que le créateur entre un titre
Quand le titre contient moins de 5 caractères
Alors un message d'erreur "Minimum 5 caractères" s'affiche
Et le bouton "Suivant" est désactivé
Scénario: Validation de la description
Étant donné que le créateur entre une description
Quand la description contient 520 caractères
Alors un message d'erreur "Maximum 500 caractères" s'affiche
Et les 20 caractères en trop sont surlignés en rouge
Scénario: Étape 2 - Ajout de la première séquence
Étant donné que le créateur est sur l'étape 2 "Ajout séquences"
Quand il clique sur "Ajouter séquence"
Alors le formulaire de séquence s'affiche avec:
| champ | requis | note |
| Titre séquence | | 5-80 caractères |
| Audio | | Upload MP3/AAC, max 200 MB |
| Point GPS | * | *Sauf mode piéton |
| Rayon déclenchement | * | *Sauf mode piéton, 10-200m |
Scénario: Ajout du point GPS pour une séquence
Étant donné que le créateur ajoute une séquence en mode "Voiture"
Quand il clique sur "📍 Ajouter point GPS"
Alors une carte s'affiche
Et il peut:
| action |
| Cliquer sur la carte |
| Entrer coordonnées manuelles |
| Utiliser sa position actuelle |
Scénario: Configuration du rayon de déclenchement avec preview
Étant donné qu'un point GPS est défini à (43.1234, 2.5678)
Quand le créateur ajuste le curseur de rayon
Alors le rayon varie de 10m à 200m
Et un cercle visuel est affiché sur la carte
Et la valeur actuelle s'affiche "30m"
Plan du Scénario: Rayon par défaut selon le mode
Étant donné un audio-guide en mode <mode>
Quand le créateur ajoute un point GPS
Alors le rayon par défaut est <rayon_defaut>
Exemples:
| mode | rayon_defaut |
| Voiture | 30m |
| Vélo | 50m |
| Transport | 100m |
Scénario: Suggestion intelligente du rayon
Étant donné un audio-guide en mode "Voiture" avec vitesse recommandée 30 km/h
Quand le créateur ajoute un point GPS
Alors une suggestion s'affiche: "Recommandé : 30m pour voiture à 30 km/h"
Scénario: Upload audio pour une séquence
Étant donné que le créateur crée une séquence "Introduction"
Quand il upload un fichier audio de 5 MB
Alors le fichier est vérifié:
| vérification | règle |
| Format | MP3, AAC, M4A |
| Taille max | 200 MB |
| Durée max | 15 minutes |
Scénario: Ordre des séquences modifiable
Étant donné un audio-guide avec 5 séquences:
| ordre | titre |
| 1 | Introduction |
| 2 | Les lions |
| 3 | Les girafes |
| 4 | Les éléphants |
| 5 | Conclusion |
Quand le créateur glisse "Les éléphants" en position 2
Alors l'ordre devient:
| ordre | titre |
| 1 | Introduction |
| 2 | Les éléphants |
| 3 | Les lions |
| 4 | Les girafes |
| 5 | Conclusion |
Scénario: Nombre minimum de séquences requis
Étant donné un audio-guide avec seulement 1 séquence
Quand le créateur tente de passer à l'étape suivante
Alors un message d'erreur s'affiche: "Minimum 2 séquences requis"
Et le bouton "Suivant" est désactivé
Scénario: Nombre maximum de séquences
Étant donné un audio-guide avec 50 séquences
Quand le créateur tente d'ajouter une 51ème séquence
Alors un message d'erreur s'affiche: "Maximum 50 séquences par audio-guide"
Et le bouton "+ Ajouter séquence" est désactivé
Scénario: Étape 3 - Preview carte avec tracé et points
Étant donné un audio-guide avec 5 séquences géolocalisées
Quand le créateur accède à l'étape 3 "Preview carte"
Alors une carte Leaflet s'affiche
Et les éléments suivants sont visibles:
| élément | description |
| Markers numérotés | 1, 2, 3, 4, 5 sur chaque point |
| Tracé entre points | Ligne pointillée connectant les points |
| Cercles de déclenchement | Rayon visuel autour de chaque point |
Scénario: Statistiques du parcours
Étant donné un audio-guide avec les séquences suivantes:
| séquence | durée | distance_au_suivant |
| 1 | 2:15 | 150m |
| 2 | 3:42 | 200m |
| 3 | 4:10 | 320m |
Quand les statistiques sont calculées
Alors le résumé suivant est affiché:
| métrique | valeur |
| Séquences | 3 complètes |
| Durée totale | 10:07 |
| Distance totale | 670m |
Scénario: Modification d'une séquence depuis la carte
Étant donné que la preview carte est affichée
Quand le créateur clique sur le marker "2"
Alors une popup s'affiche avec:
| information |
| Titre: "Les lions" |
| Durée: 3:42 |
| Rayon: 30m |
| [ Modifier] |
| [🗑 Supprimer] |
Scénario: Zone de diffusion géographique
Étant donné un audio-guide avec des points dans Paris
Quand le créateur définit la zone de diffusion
Alors il peut choisir:
| type | exemple |
| Polygon | Tracé manuel sur carte |
| Ville | Paris (API Nominatim) |
| Département | 75 - Paris |
| Région | Île-de-France |
Scénario: Étape 4 - Publication et validation modération
Étant donné un créateur qui publie ses 3 premiers audio-guides
Quand il clique sur " Publier audio-guide"
Alors un message s'affiche:
"""
Votre audio-guide est en cours de validation.
Notre équipe le vérifiera sous 24-48h.
Vous recevrez une notification dès validation.
"""
Scénario: Publication directe pour créateurs expérimentés
Étant donné un créateur ayant publié 5 audio-guides validés
Et aucun strike actif
Quand il publie un nouvel audio-guide
Alors l'audio-guide est publié immédiatement
Et il devient visible pour les utilisateurs
Et aucune validation manuelle n'est requise
Scénario: Mode piéton sans points GPS obligatoires
Étant donné un audio-guide en mode "🚶 Piéton"
Quand le créateur ajoute une séquence
Alors le champ "Point GPS" est optionnel
Et le champ "Rayon déclenchement" est masqué
Et un message info s'affiche: "Mode manuel : les séquences se déclenchent au clic utilisateur"
Scénario: Sauvegarde brouillon automatique
Étant donné que le créateur édite un audio-guide depuis 5 minutes
Quand il ajoute une nouvelle séquence
Alors l'audio-guide est sauvegardé en brouillon automatiquement
Et un toast "Brouillon sauvegardé" s'affiche brièvement
Scénario: Reprise d'un brouillon
Étant donné un audio-guide en brouillon "Safari du Paugre"
Et qu'il contient 3 séquences complètes
Quand le créateur retourne sur son dashboard
Alors le brouillon est visible avec le statut "📝 Brouillon"
Et un bouton "Continuer" est disponible
Et la progression "3/5 séquences" est affichée
Scénario: Suppression d'un brouillon
Étant donné un audio-guide en brouillon
Quand le créateur clique sur "🗑 Supprimer"
Alors une confirmation s'affiche:
"""
Supprimer ce brouillon ?
Toutes les séquences seront perdues.
[Annuler] [Supprimer définitivement]
"""
Scénario: Modification d'un audio-guide publié
Étant donné un audio-guide publié "Safari du Paugre"
Quand le créateur clique sur " Modifier"
Alors il peut modifier:
| élément modifiable | élément non modifiable |
| Titre | Mode de déplacement |
| Description | Points GPS |
| Tags | Rayons déclenchement |
| Séquences (ordre) | |
Et un avertissement s'affiche: "Les modifications structurelles nécessitent une nouvelle publication"
Scénario: Duplication d'un audio-guide existant
Étant donné un audio-guide publié "Visite Paris"
Quand le créateur clique sur "📋 Dupliquer"
Alors une copie est créée avec le titre "Visite Paris (copie)"
Et toutes les séquences sont copiées
Et le statut est "📝 Brouillon"
Et le créateur peut modifier avant publication
# Cas d'erreur
Scénario: Upload audio échoue (format non supporté)
Étant donné que le créateur upload un fichier "audio.wav"
Quand le format est vérifié
Alors un message d'erreur s'affiche: "Format non supporté. Utilisez MP3, AAC ou M4A"
Et le fichier est rejeté
Scénario: Upload audio échoue (taille trop grande)
Étant donné que le créateur upload un fichier de 250 MB
Quand la taille est vérifiée
Alors un message d'erreur s'affiche: "Fichier trop volumineux. Maximum 200 MB"
Et le fichier est rejeté
Scénario: Points GPS trop éloignés (alerte cohérence)
Étant donné un audio-guide en mode "Piéton"
Et une séquence au Louvre (Paris)
Quand le créateur ajoute une séquence à Lyon
Alors un avertissement s'affiche:
"""
Attention : distance importante entre points (465 km)
Vérifiez que le mode "Piéton" est approprié.
[Modifier le mode] [Continuer]
"""
Scénario: Pas de connexion lors de la sauvegarde
Étant donné que le créateur édite un audio-guide
Et que la connexion réseau est perdue
Quand il tente de sauvegarder
Alors le brouillon est sauvegardé localement
Et un message s'affiche: "Sauvegarde locale. Sera synchronisée à la reconnexion"
Et une icône " Hors ligne" s'affiche
Scénario: Reprise après perte de connexion
Étant donné un brouillon sauvegardé localement
Quand la connexion réseau est rétablie
Alors le brouillon est synchronisé automatiquement
Et un toast " Audio-guide synchronisé" s'affiche