Initial commit
This commit is contained in:
293
features/profil/profil-createur.feature
Normal file
293
features/profil/profil-createur.feature
Normal file
@@ -0,0 +1,293 @@
|
||||
# language: fr
|
||||
|
||||
Fonctionnalité: Profil créateur
|
||||
En tant qu'utilisateur de RoadWave
|
||||
Je veux consulter les profils des créateurs
|
||||
Afin de découvrir leur contenu et décider de m'abonner
|
||||
|
||||
Contexte:
|
||||
Étant donné que l'application RoadWave est démarrée
|
||||
|
||||
# 15.2.1 - Structure de la page profil
|
||||
|
||||
Scénario: URL du profil créateur
|
||||
Étant donné un créateur avec le pseudo "paris_stories"
|
||||
Quand l'utilisateur accède au profil
|
||||
Alors l'URL est "https://roadwave.fr/@paris_stories"
|
||||
|
||||
Scénario: Informations principales du profil
|
||||
Étant donné un créateur "@paris_stories" avec les informations suivantes:
|
||||
| champ | valeur |
|
||||
| photo | avatar_120x120.jpg |
|
||||
| pseudo | paris_stories |
|
||||
| badge_vérifié | true |
|
||||
| bio | Histoires et anecdotes de Paris |
|
||||
| abonnés | 1200 |
|
||||
| contenus | 42 |
|
||||
| durée_totale | 18h |
|
||||
| écoutes_totales | 54000 |
|
||||
Quand le profil est affiché
|
||||
Alors les éléments suivants sont visibles:
|
||||
| élément | valeur affichée |
|
||||
| Photo profil | 120×120 px |
|
||||
| @pseudo | @paris_stories |
|
||||
| Badge vérifié | ✓ |
|
||||
| Bio | Histoires et... |
|
||||
| Nombre abonnés | 1.2K abonnés |
|
||||
| Nombre contenus | 42 contenus |
|
||||
| Durée totale | 18h de contenu créé |
|
||||
| Écoutes totales | 54K écoutes totales |
|
||||
|
||||
Plan du Scénario: Arrondi des statistiques publiques
|
||||
Étant donné un créateur avec <valeur_exacte> <métrique>
|
||||
Quand le profil est affiché
|
||||
Alors la valeur affichée est "<valeur_affichée>"
|
||||
|
||||
Exemples:
|
||||
| métrique | valeur_exacte | valeur_affichée |
|
||||
| abonnés | 342 | 342 |
|
||||
| abonnés | 1200 | 1.2K |
|
||||
| abonnés | 54000 | 54K |
|
||||
| abonnés | 1200000 | 1.2M |
|
||||
| écoutes | 842 | 842 |
|
||||
| écoutes | 5400 | 5.4K |
|
||||
| écoutes | 142000 | 142K |
|
||||
| écoutes | 2100000 | 2.1M |
|
||||
| durée (heures) | 18 | 18h |
|
||||
| durée (heures) | 142 | 142h |
|
||||
|
||||
Scénario: Bio avec markdown basique
|
||||
Étant donné un créateur avec la bio suivante en markdown:
|
||||
"""
|
||||
**Histoires de Paris** - Découvrez la capitale
|
||||
*Nouveau contenu chaque semaine*
|
||||
https://paris-stories.fr
|
||||
"""
|
||||
Quand le profil est affiché
|
||||
Alors le texte en gras "Histoires de Paris" est formaté
|
||||
Et le texte en italique "Nouveau contenu chaque semaine" est formaté
|
||||
Et le lien "https://paris-stories.fr" est cliquable
|
||||
|
||||
Scénario: Limitation de la bio à 300 caractères
|
||||
Étant donné un créateur qui entre une bio de 350 caractères
|
||||
Quand la bio est sauvegardée
|
||||
Alors seuls les 300 premiers caractères sont conservés
|
||||
Et un message "Maximum 300 caractères" s'affiche
|
||||
|
||||
Scénario: Boutons d'action principaux
|
||||
Étant donné que l'utilisateur consulte un profil créateur
|
||||
Quand la page est chargée
|
||||
Alors les boutons suivants sont visibles:
|
||||
| bouton | action |
|
||||
| S'abonner | Abonnement au créateur |
|
||||
| Partager profil | Menu de partage |
|
||||
| ••• | Menu contextuel |
|
||||
|
||||
Scénario: Menu contextuel du profil [•••]
|
||||
Étant donné que l'utilisateur clique sur le bouton [•••]
|
||||
Quand le menu s'ouvre
|
||||
Alors les options suivantes sont disponibles:
|
||||
| option | description |
|
||||
| Partager profil | Partager le lien du profil |
|
||||
| Signaler profil | Signaler spam ou usurpation d'identité |
|
||||
| Bloquer créateur | Masquer tous les contenus du créateur |
|
||||
|
||||
Scénario: Liste des contenus du créateur
|
||||
Étant donné un créateur avec 3 contenus publiés
|
||||
Quand le profil est affiché
|
||||
Alors chaque contenu affiche:
|
||||
| élément | exemple |
|
||||
| Cover image | Image 16:9 |
|
||||
| Titre | Balade à Paris |
|
||||
| Durée et écoutes | 12 min · 🎧 2.3K |
|
||||
| Localisation | 📍 Paris |
|
||||
| Bouton lecture | ▶️ |
|
||||
|
||||
Plan du Scénario: Options de tri des contenus
|
||||
Étant donné un créateur avec 10 contenus publiés
|
||||
Quand l'utilisateur sélectionne le tri "<option_tri>"
|
||||
Alors les contenus sont triés par <critère>
|
||||
|
||||
Exemples:
|
||||
| option_tri | critère |
|
||||
| Plus récents | Date publication DESC (défaut) |
|
||||
| Plus populaires | Écoutes × facteur temporel (90 jours) |
|
||||
| Plus anciens | Date publication ASC |
|
||||
|
||||
Scénario: Filtrage des contenus par tag
|
||||
Étant donné un créateur avec des contenus taggés "Voyage", "Histoire", "Gastronomie"
|
||||
Quand l'utilisateur filtre par tags "Voyage, Histoire"
|
||||
Alors seuls les contenus avec ces tags sont affichés
|
||||
Et le nombre de résultats est indiqué "12 contenus"
|
||||
|
||||
Scénario: Recherche locale dans le profil
|
||||
Étant donné que l'utilisateur consulte le profil de "@paris_stories"
|
||||
Et que le créateur a publié 50 contenus
|
||||
Quand l'utilisateur entre "Montmartre" dans la barre de recherche
|
||||
Alors la recherche s'effectue sur les titres et descriptions
|
||||
Et seuls les contenus correspondants sont affichés
|
||||
Et le placeholder indique "Rechercher dans les contenus de @paris_stories"
|
||||
|
||||
Scénario: Chargement paginé des contenus
|
||||
Étant donné un créateur avec 100 contenus publiés
|
||||
Quand le profil est affiché
|
||||
Alors 20 contenus sont chargés initialement
|
||||
Et un bouton "Charger plus" est visible en bas de page
|
||||
Quand l'utilisateur clique sur "Charger plus"
|
||||
Alors 20 contenus supplémentaires sont chargés
|
||||
|
||||
# 15.2.2 - Statistiques publiques
|
||||
|
||||
Scénario: Informations publiques visibles par tous
|
||||
Étant donné que l'utilisateur consulte un profil créateur
|
||||
Alors les informations suivantes sont publiques:
|
||||
| information | visible |
|
||||
| Photo et pseudo | ✅ |
|
||||
| Badge vérifié | ✅ |
|
||||
| Bio | ✅ |
|
||||
| Nombre abonnés | ✅ |
|
||||
| Nombre contenus | ✅ |
|
||||
| Durée totale créée | ✅ |
|
||||
| Écoutes totales | ✅ |
|
||||
|
||||
Scénario: Informations privées non visibles
|
||||
Étant donné que l'utilisateur consulte un profil créateur
|
||||
Alors les informations suivantes sont privées:
|
||||
| information | visible |
|
||||
| Liste des abonnés | ❌ |
|
||||
| Revenus | ❌ |
|
||||
| Localisation précise | ❌ |
|
||||
| Email | ❌ |
|
||||
|
||||
Scénario: Dashboard créateur avec métriques privées
|
||||
Étant donné que le créateur "@paris_stories" consulte son propre dashboard
|
||||
Quand la page statistiques est affichée
|
||||
Alors les métriques suivantes sont accessibles:
|
||||
| métrique | type |
|
||||
| Taux complétion moyen | 78% |
|
||||
| Évolution abonnés | Graphique |
|
||||
| Écoutes par contenu | Tableau |
|
||||
| Revenus | Dashboard |
|
||||
| Taux conversion Premium | Pourcentage |
|
||||
| Démographie (âge/zone) | Agrégée |
|
||||
|
||||
Scénario: Graphique d'évolution des abonnés
|
||||
Étant donné que le créateur consulte son dashboard
|
||||
Quand il sélectionne la période "30 jours"
|
||||
Alors un graphique d'évolution des abonnés est affiché
|
||||
Et les périodes disponibles sont:
|
||||
| période |
|
||||
| 30j |
|
||||
| 90j |
|
||||
| 1 an |
|
||||
|
||||
Scénario: Tableau détaillé des écoutes par contenu
|
||||
Étant donné un créateur avec 10 contenus publiés
|
||||
Quand il consulte le tableau des performances
|
||||
Alors chaque contenu affiche:
|
||||
| métrique | exemple |
|
||||
| Titre | Balade |
|
||||
| Écoutes totales | 2300 |
|
||||
| Écoutes complètes >80% | 1840 |
|
||||
| Taux complétion | 80% |
|
||||
| Likes | 420 |
|
||||
| Partages | 56 |
|
||||
|
||||
# 15.2.3 - Badge vérifié
|
||||
|
||||
Scénario: Affichage du badge vérifié
|
||||
Étant donné un créateur vérifié "@paris_stories"
|
||||
Quand son profil est affiché
|
||||
Alors le badge bleu "✓" est accolé au pseudo
|
||||
Et un tooltip "Compte vérifié" s'affiche au survol
|
||||
|
||||
Scénario: Badge vérifié visible partout
|
||||
Étant donné un créateur vérifié "@paris_stories"
|
||||
Alors le badge "✓" est affiché dans:
|
||||
| emplacement |
|
||||
| Page profil |
|
||||
| Player en lecture |
|
||||
| Résultats de recherche|
|
||||
| Notifications |
|
||||
|
||||
Plan du Scénario: Attribution automatique du badge selon critères
|
||||
Étant donné un créateur avec <critère>
|
||||
Quand les conditions sont validées
|
||||
Alors le badge vérifié est attribué <automatique>
|
||||
|
||||
Exemples:
|
||||
| critère | automatique |
|
||||
| KYC Mangopay validé | Oui |
|
||||
| ≥10K abonnés + compte >6 mois | Oui |
|
||||
| Célébrité / Média officiel | Manuel |
|
||||
|
||||
Scénario: Attribution automatique via KYC
|
||||
Étant donné un créateur qui complète son KYC Mangopay
|
||||
Quand les documents sont validés
|
||||
Alors le badge vérifié est attribué automatiquement
|
||||
Et une notification "Votre compte est maintenant vérifié ✓" est envoyée
|
||||
|
||||
Scénario: Attribution automatique à 10K abonnés
|
||||
Étant donné un créateur avec 9999 abonnés et un compte de 7 mois
|
||||
Quand il atteint 10000 abonnés
|
||||
Alors le badge vérifié est attribué automatiquement
|
||||
Et une notification de félicitations est envoyée
|
||||
|
||||
Scénario: Demande manuelle de vérification (célébrité)
|
||||
Étant donné un créateur reconnu publiquement
|
||||
Quand il soumet le formulaire de demande de vérification
|
||||
Alors une requête est créée pour l'équipe RoadWave
|
||||
Et l'équipe vérifie l'identité sous 48-72h
|
||||
Et le badge est attribué si validation réussie
|
||||
|
||||
Scénario: Retrait du badge en cas de suspension
|
||||
Étant donné un créateur vérifié avec le badge "✓"
|
||||
Quand sa monétisation est suspendue
|
||||
Alors le badge vérifié est retiré temporairement
|
||||
Et le badge est restauré après levée de la suspension
|
||||
|
||||
Scénario: Retrait définitif du badge pour strikes multiples
|
||||
Étant donné un créateur vérifié avec 3 strikes actifs
|
||||
Quand un 4ème strike est appliqué (ban)
|
||||
Alors le badge vérifié est retiré définitivement
|
||||
Et le compte est banni
|
||||
|
||||
Scénario: Retrait du badge pour usurpation d'identité
|
||||
Étant donné un créateur vérifié qui usurpe l'identité d'une célébrité
|
||||
Quand la fraude est détectée
|
||||
Alors le badge est retiré immédiatement
|
||||
Et le compte est banni
|
||||
Et une enquête est ouverte
|
||||
|
||||
# Cas d'erreur et limites
|
||||
|
||||
Scénario: Profil créateur supprimé
|
||||
Étant donné qu'un utilisateur tente d'accéder à "@deleted_user"
|
||||
Quand la page est chargée
|
||||
Alors un message "Ce profil n'existe pas ou a été supprimé" s'affiche
|
||||
|
||||
Scénario: Blocage d'un créateur
|
||||
Étant donné que l'utilisateur bloque le créateur "@spam_account"
|
||||
Quand l'utilisateur consulte son flux de recommandations
|
||||
Alors aucun contenu de "@spam_account" n'est affiché
|
||||
Et le créateur n'apparaît plus dans les recherches
|
||||
|
||||
Scénario: Déblocage d'un créateur
|
||||
Étant donné que l'utilisateur a bloqué "@paris_stories"
|
||||
Quand il accède à ses paramètres "Comptes bloqués"
|
||||
Et qu'il débloque "@paris_stories"
|
||||
Alors les contenus du créateur réapparaissent dans les recommandations
|
||||
|
||||
Scénario: Signalement d'un profil pour spam
|
||||
Étant donné que l'utilisateur signale le profil "@spam_account"
|
||||
Quand il sélectionne la raison "Spam"
|
||||
Alors le signalement est envoyé à la modération
|
||||
Et un message de confirmation s'affiche
|
||||
Et le profil reste visible jusqu'à décision de modération
|
||||
|
||||
Scénario: Signalement pour usurpation d'identité
|
||||
Étant donné que l'utilisateur signale le profil "@fake_celebrity"
|
||||
Quand il sélectionne "Usurpation d'identité"
|
||||
Et qu'il fournit une preuve
|
||||
Alors le signalement est priorisé (priorité HAUTE)
|
||||
Et l'équipe modération traite sous 24h
|
||||
Reference in New Issue
Block a user