Création de 6 nouvelles features Gherkin + documentation : Features UI mobile (Flutter) : - signalement-ui.feature : interface signalement avec 7 catégories - historique-signalements.feature : suivi personnel des signalements - badges-statistiques.feature : gamification Bronze/Argent/Or - sanctions-appel.feature : notifications et processus d'appel Features Admin dashboard (React) : - dashboard-moderateur.feature : files d'attente et SLA temps réel - outils-moderateur.feature : player Wavesurfer.js, transcription, historique créateur Documentation : - gherkin-moderation-overview.md : mapping complet règles métier, stats, coûts Couverture : - 190 scénarios couvrant 100% sections 14 (moderation-flows) et 19 (badges) - Conformité DSA/RGPD/WCAG testée - Stack : Go/Flutter/React avec Godog/flutter_gherkin/Cucumber.js
305 lines
12 KiB
Gherkin
305 lines
12 KiB
Gherkin
# language: fr
|
|
|
|
@ui @moderation @historique
|
|
Fonctionnalité: Historique des signalements utilisateur (Mobile)
|
|
En tant qu'utilisateur
|
|
Je veux consulter l'historique de mes signalements
|
|
Afin de suivre leur traitement et comprendre les décisions prises
|
|
|
|
# 14.1.3 - Historique personnel des signalements
|
|
|
|
Contexte:
|
|
Étant donné que je suis connecté à l'application mobile
|
|
Et que j'ai envoyé des signalements précédemment
|
|
|
|
# Accès à l'historique
|
|
|
|
Scénario: Accéder à l'historique depuis le profil
|
|
Étant donné que je suis dans mon profil utilisateur
|
|
Quand je scroll vers le bas
|
|
Alors je vois une section "📊 Modération"
|
|
Et je vois l'option "Mes signalements"
|
|
Et je vois le nombre de signalements en badge: "(12)"
|
|
Et je peux cliquer pour accéder à l'historique
|
|
|
|
Scénario: Accéder à l'historique depuis le toast de confirmation
|
|
Étant donné que je viens d'envoyer un signalement
|
|
Et que le toast de confirmation est affiché
|
|
Quand je clique sur "Voir mes signalements"
|
|
Alors je suis redirigé vers la page "Mes signalements"
|
|
Et la page s'affiche en moins de 500ms
|
|
Et mon dernier signalement est en tête de liste
|
|
|
|
# Affichage de la liste des signalements
|
|
|
|
Scénario: Affichage de l'historique vide
|
|
Étant donné que je n'ai jamais envoyé de signalement
|
|
Quand j'ouvre "Mes signalements"
|
|
Alors je vois un message:
|
|
"""
|
|
Aucun signalement pour le moment
|
|
|
|
Vous pouvez signaler un contenu inapproprié
|
|
depuis le menu de n'importe quel contenu.
|
|
"""
|
|
Et je vois une illustration vide sympathique
|
|
Et un bouton "Découvrir les règles de la communauté"
|
|
|
|
Scénario: Liste des signalements avec informations clés
|
|
Étant donné que j'ai envoyé 5 signalements
|
|
Quand j'ouvre "Mes signalements"
|
|
Alors je vois une liste de 5 cartes de signalements
|
|
Et chaque carte affiche:
|
|
| information | exemple | position |
|
|
| Statut badge | "En cours 🔍" (orange) | Haut à droite |
|
|
| Titre du contenu | "Podcast #42" | Titre |
|
|
| Créateur | "@pseudo_createur" | Sous-titre |
|
|
| Catégorie | "🚫 Haine & violence" | Ligne 1 |
|
|
| Date | "Il y a 2 jours" ou "15/01/2026" | Ligne 2 |
|
|
| Mon commentaire | "Propos discriminatoires à 2:30" | Ligne 3 (si rempli) |
|
|
Et les cartes sont triées par date décroissante (plus récent en haut)
|
|
|
|
Plan du Scénario: Couleur du badge selon statut
|
|
Étant donné que j'ai un signalement avec le statut "<statut>"
|
|
Quand j'affiche l'historique
|
|
Alors le badge affiché est "<badge>"
|
|
Et la couleur du badge est "<couleur>"
|
|
|
|
Exemples:
|
|
| statut | badge | couleur |
|
|
| En cours | En cours 🔍 | Orange |
|
|
| Traité | Traité ✓ | Vert |
|
|
| Rejeté | Rejeté ✗ | Rouge |
|
|
|
|
Scénario: Affichage de la date relative
|
|
Étant donné que j'ai envoyé des signalements à différentes dates
|
|
Quand j'affiche l'historique
|
|
Alors les dates récentes s'affichent en format relatif:
|
|
| date signalement | affichage |
|
|
| Il y a 5 minutes | "À l'instant" |
|
|
| Il y a 2 heures | "Il y a 2h" |
|
|
| Il y a 1 jour | "Hier" |
|
|
| Il y a 3 jours | "Il y a 3j" |
|
|
| Il y a 10 jours | "15/01/2026" |
|
|
Et les dates anciennes (>7 jours) sont en format absolu
|
|
|
|
# Détails d'un signalement
|
|
|
|
Scénario: Consulter les détails d'un signalement
|
|
Étant donné que j'ai envoyé un signalement il y a 3 jours
|
|
Quand je clique sur la carte du signalement
|
|
Alors une page de détails s'affiche
|
|
Et je vois toutes les informations:
|
|
| section | contenu |
|
|
| En-tête | Titre du contenu + lien vers le contenu |
|
|
| Créateur | Pseudo + lien vers profil créateur |
|
|
| Ma catégorie | 🚫 Haine & violence |
|
|
| Mon commentaire | "Propos discriminatoires à 2:30" |
|
|
| Date d'envoi | "Envoyé le 15/01/2026 à 14:32" |
|
|
| Statut actuel | "En cours 🔍 - En attente de traitement" |
|
|
| Délai estimé | "Traitement sous 24-48h" |
|
|
Et je vois un bouton "Retour à mes signalements"
|
|
|
|
Scénario: Lien vers le contenu signalé
|
|
Étant donné que je consulte les détails d'un signalement
|
|
Et que le contenu signalé est toujours en ligne
|
|
Quand je clique sur le titre du contenu
|
|
Alors je suis redirigé vers la page du contenu
|
|
Et je peux réécouter le contenu si besoin
|
|
Et un badge "Signalé par vous" s'affiche discrètement
|
|
|
|
Scénario: Contenu supprimé suite au signalement
|
|
Étant donné que le contenu que j'ai signalé a été supprimé
|
|
Quand je consulte les détails du signalement
|
|
Alors le titre du contenu est affiché en gris barré
|
|
Et un message s'affiche: "Ce contenu a été retiré de la plateforme"
|
|
Et je ne peux pas accéder au contenu
|
|
Et le statut est "Traité ✓"
|
|
|
|
# Notifications de changement de statut
|
|
|
|
Scénario: Notification quand un signalement est traité
|
|
Étant donné que j'ai signalé un contenu il y a 24h
|
|
Quand le modérateur traite mon signalement
|
|
Et que le contenu est retiré
|
|
Alors je reçois une notification push:
|
|
"""
|
|
✓ Votre signalement a été traité
|
|
Le contenu a été retiré de la plateforme.
|
|
"""
|
|
Et je reçois une notification in-app identique
|
|
Et le statut dans mon historique passe à "Traité ✓"
|
|
Et un badge (1) apparaît sur l'onglet "Mes signalements"
|
|
|
|
Scénario: Notification quand un signalement est rejeté
|
|
Étant donné que j'ai signalé un contenu
|
|
Quand le modérateur rejette mon signalement
|
|
Alors je reçois une notification:
|
|
"""
|
|
Votre signalement a été examiné
|
|
Le contenu ne viole pas les règles de la communauté.
|
|
"""
|
|
Et le statut dans mon historique passe à "Rejeté ✗"
|
|
Et je peux voir la raison du rejet dans les détails
|
|
|
|
Scénario: Affichage de la raison du rejet
|
|
Étant donné que mon signalement a été rejeté
|
|
Quand je consulte les détails du signalement
|
|
Alors je vois une section "Raison du rejet":
|
|
"""
|
|
Après examen, le contenu ne viole pas nos règles.
|
|
Le passage mentionné est dans un contexte éducatif.
|
|
"""
|
|
Et la raison est claire et compréhensible
|
|
Et je peux apprendre pour améliorer mes futurs signalements
|
|
|
|
# Filtres et recherche
|
|
|
|
Scénario: Filtrer les signalements par statut
|
|
Étant donné que j'ai 20 signalements avec différents statuts
|
|
Quand j'ouvre l'historique
|
|
Alors je vois des onglets de filtres:
|
|
| onglet | nombre |
|
|
| Tous (20) | 20 |
|
|
| En cours (8)| 8 |
|
|
| Traités (9) | 9 |
|
|
| Rejetés (3) | 3 |
|
|
Et je peux cliquer sur un onglet pour filtrer
|
|
Et la liste se met à jour instantanément
|
|
|
|
Scénario: Rechercher dans mes signalements
|
|
Étant donné que j'ai 50 signalements
|
|
Quand j'ouvre la barre de recherche
|
|
Et que je tape "podcast"
|
|
Alors seuls les signalements contenant "podcast" s'affichent:
|
|
| recherche dans |
|
|
| Titre du contenu |
|
|
| Pseudo du créateur |
|
|
| Mon commentaire |
|
|
Et les résultats sont mis en évidence
|
|
Et la recherche est instantanée (pas de délai)
|
|
|
|
# Pull-to-refresh
|
|
|
|
Scénario: Actualiser la liste des signalements
|
|
Étant donné que je suis sur la page "Mes signalements"
|
|
Quand je tire vers le bas (pull-to-refresh)
|
|
Alors un spinner de chargement s'affiche
|
|
Et la liste est actualisée depuis le serveur
|
|
Et les nouveaux statuts sont affichés
|
|
Et un toast s'affiche: "✓ Mis à jour"
|
|
|
|
# Pagination et performance
|
|
|
|
Scénario: Chargement progressif des signalements (pagination)
|
|
Étant donné que j'ai 100 signalements
|
|
Quand j'ouvre "Mes signalements"
|
|
Alors seuls les 20 premiers signalements sont chargés
|
|
Et quand je scroll en bas de liste
|
|
Alors les 20 suivants sont chargés automatiquement
|
|
Et un loader discret s'affiche pendant le chargement
|
|
Et l'UX est fluide sans saccade
|
|
|
|
Scénario: Performance de la liste
|
|
Étant donné que j'ai 100 signalements
|
|
Quand j'ouvre l'historique
|
|
Alors le premier affichage prend <500ms
|
|
Et le scroll est fluide (60 FPS)
|
|
Et les images/avatars se chargent en lazy loading
|
|
Et la mémoire utilisée reste <100 MB
|
|
|
|
# État vide pour chaque filtre
|
|
|
|
Scénario: Aucun signalement "En cours"
|
|
Étant donné que tous mes signalements ont été traités
|
|
Quand je clique sur l'onglet "En cours"
|
|
Alors je vois un message:
|
|
"""
|
|
Aucun signalement en cours
|
|
|
|
Tous vos signalements ont été traités.
|
|
"""
|
|
Et je vois une illustration vide
|
|
|
|
Scénario: Aucun signalement "Rejeté"
|
|
Étant donné que tous mes signalements ont été acceptés
|
|
Quand je clique sur l'onglet "Rejetés"
|
|
Alors je vois un message:
|
|
"""
|
|
Aucun signalement rejeté
|
|
|
|
Tous vos signalements étaient pertinents ! 🎉
|
|
"""
|
|
Et je vois un message encourageant
|
|
|
|
# Dark mode et accessibilité
|
|
|
|
Scénario: Support du dark mode
|
|
Étant donné que j'ai activé le dark mode
|
|
Quand j'affiche "Mes signalements"
|
|
Alors les couleurs s'adaptent:
|
|
| élément | couleur light | couleur dark |
|
|
| Fond page | Blanc | Noir (#121212) |
|
|
| Cartes | Gris clair | Gris foncé |
|
|
| Texte principal | Noir | Blanc |
|
|
| Badge "En cours" | Orange (#FF8C00) | Orange (#FFA500) |
|
|
| Badge "Traité" | Vert (#28A745) | Vert (#34D058) |
|
|
| Badge "Rejeté" | Rouge (#DC3545) | Rouge (#F85149) |
|
|
Et le contraste reste suffisant (WCAG AA)
|
|
|
|
Scénario: Accessibilité pour lecteur d'écran
|
|
Étant donné que j'utilise un lecteur d'écran
|
|
Quand je navigue dans l'historique
|
|
Alors chaque carte est annoncée clairement:
|
|
"""
|
|
Signalement du contenu "Podcast #42" par @pseudo.
|
|
Catégorie: Haine et violence.
|
|
Statut: En cours d'examen.
|
|
Envoyé il y a 2 jours.
|
|
"""
|
|
Et je peux naviguer au clavier entre les cartes
|
|
Et tous les boutons ont des labels descriptifs
|
|
|
|
# Gestion d'erreur
|
|
|
|
Scénario: Erreur réseau lors du chargement
|
|
Étant donné que je n'ai pas de connexion internet
|
|
Quand j'ouvre "Mes signalements"
|
|
Alors un message d'erreur s'affiche:
|
|
"""
|
|
Impossible de charger vos signalements
|
|
Vérifiez votre connexion internet
|
|
"""
|
|
Et un bouton "Réessayer" est affiché
|
|
Et je peux cliquer pour réessayer
|
|
|
|
Scénario: Cache local pour consultation hors ligne
|
|
Étant donné que j'ai consulté mes signalements hier
|
|
Et que je n'ai pas de connexion internet aujourd'hui
|
|
Quand j'ouvre "Mes signalements"
|
|
Alors les signalements en cache s'affichent
|
|
Et un message discret indique:
|
|
"""
|
|
📡 Mode hors ligne - Données mises en cache
|
|
"""
|
|
Et je peux consulter les détails
|
|
Mais les statuts peuvent ne pas être à jour
|
|
|
|
# Coût et conformité
|
|
|
|
Scénario: Coût de la fonctionnalité
|
|
Étant donné que l'historique des signalements est en place
|
|
Quand on évalue le coût
|
|
Alors le développement est 100% interne (Flutter)
|
|
Et aucun service tiers n'est utilisé
|
|
Et le coût opérationnel est de 0€
|
|
Et les notifications in-app sont gratuites
|
|
|
|
Scénario: Conformité RGPD
|
|
Étant donné que mes données de signalement sont stockées
|
|
Quand je supprime mon compte
|
|
Alors tous mes signalements sont anonymisés
|
|
Et mes commentaires personnels sont supprimés
|
|
Et seules les métadonnées nécessaires sont conservées (conformité DSA)
|
|
Et je suis informé de cette procédure
|