Files
roadwave/features/api/moderation/signalement.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

225 lines
10 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
@moderation @reporting
Fonctionnalité: Signalement de contenu inapproprié
# 14.1 - Signalement utilisateur
Contexte:
Étant donné que je suis un utilisateur connecté
Et que je suis en train d'écouter un contenu
# 14.1.1 - Catégories de signalement
Scénario: Affichage du formulaire de signalement
Étant donné que j'écoute un contenu inapproprié
Quand j'ouvre le menu du contenu
Et que je clique sur "Signaler"
Alors un formulaire de signalement s'affiche
Et le formulaire contient une liste déroulante "Catégorie du problème"
Et le formulaire contient un champ texte "Commentaire (optionnel)"
Et le formulaire contient un bouton "Envoyer le signalement"
Scénario: Liste des 7 catégories prédéfinies
Étant donné que le formulaire de signalement est affiché
Quand je clique sur la liste déroulante "Catégorie du problème"
Alors je vois les 7 catégories suivantes:
| icône | catégorie | description |
| 🚫 | Haine & violence | Incitation à la haine, discrimination, menaces |
| 🔞 | Contenu sexuel | Pornographie, contenu explicite |
| | Illégalité | Terrorisme, apologie de crimes |
| 🎵 | Droits d'auteur | Musique/contenu protégé non autorisé |
| 📧 | Spam | Publicité non sollicitée, répétition |
| | Fausse information | Désinformation sur santé, sécurité routière |
| 🔧 | Autre | Champ texte obligatoire si sélectionné |
Et chaque catégorie a une description claire
Scénario: Sélection de la catégorie "Haine & violence"
Étant donné que le formulaire de signalement est affiché
Quand je sélectionne la catégorie "🚫 Haine & violence"
Alors la catégorie est sélectionnée
Et la description "Incitation à la haine, discrimination, menaces" s'affiche
Et je peux passer au champ commentaire
Scénario: Catégorie "Autre" nécessite un commentaire obligatoire
Étant donné que le formulaire de signalement est affiché
Quand je sélectionne la catégorie "🔧 Autre"
Alors le champ "Commentaire" devient obligatoire
Et un message s'affiche: "Veuillez décrire le problème (obligatoire)"
Et le placeholder change en "Décrivez le problème rencontré"
Et je ne peux pas envoyer le signalement sans commentaire
# 14.1.2 - Commentaire du signaleur
Scénario: Champ commentaire optionnel avec incitation
Étant donné que le formulaire de signalement est affiché
Et que j'ai sélectionné une catégorie autre que "Autre"
Quand je consulte le champ "Commentaire"
Alors le champ est optionnel (pas d'astérisque rouge)
Et le placeholder indique "Décrivez le problème (optionnel mais recommandé)"
Et la limite de caractères est de 500
Et un compteur affiche "0/500"
Scénario: Envoi de signalement sans commentaire
Étant donné que j'ai sélectionné la catégorie "📧 Spam"
Et que je n'ai pas rempli le champ commentaire
Quand je clique sur "Envoyer le signalement"
Alors le signalement est envoyé avec succès
Et aucune erreur de validation ne s'affiche
Et le commentaire est enregistré comme vide
Scénario: Envoi de signalement avec commentaire
Étant donné que j'ai sélectionné la catégorie "🚫 Haine & violence"
Et que j'ai saisi le commentaire "Le créateur tient des propos discriminatoires à 2:30"
Quand je clique sur "Envoyer le signalement"
Alors le signalement est envoyé avec succès
Et le commentaire est enregistré avec le signalement
Et il sera visible par les modérateurs
Scénario: Limite de 500 caractères pour le commentaire
Étant donné que le formulaire de signalement est affiché
Quand je saisis un commentaire de 501 caractères
Alors le champ limite automatiquement à 500 caractères
Et le compteur affiche "500/500"
Et les caractères supplémentaires ne sont pas acceptés
# 14.1.3 - Confirmation après signalement
Scénario: Toast de confirmation après signalement
Étant donné que j'ai envoyé un signalement
Quand le signalement est enregistré
Alors un toast notification s'affiche
Et le toast contient le message " Signalement envoyé. Nous l'examinerons sous 24-48h."
Et le toast s'affiche pendant 5 secondes
Et le toast contient un bouton "Voir mes signalements"
Et je peux fermer le toast manuellement avec un bouton X
Scénario: Accès à l'historique des signalements via le toast
Étant donné que le toast de confirmation est affiché
Quand je clique sur "Voir mes signalements"
Alors je suis redirigé vers la page "Mes signalements"
Et je vois la liste de tous mes signalements
Et le signalement que je viens d'envoyer apparaît en premier
Scénario: Historique personnel des signalements
Étant donné que j'ai envoyé 3 signalements précédemment
Quand j'ouvre "Profil > Mes signalements"
Alors je vois la liste de mes 3 signalements
Et chaque signalement affiche:
| information | description |
| Titre du contenu | "Podcast #42" |
| Créateur | @pseudo_createur |
| Catégorie | 🚫 Haine & violence |
| Date | 15/01/2026 |
| Statut | En cours / Traité / Rejeté |
| Mon commentaire | Texte que j'ai saisi |
Et les signalements sont triés par date décroissante
Plan du Scénario: Statuts possibles d'un signalement
Étant donné que j'ai envoyé un signalement
Quand le statut du signalement est "<statut>"
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: Notification in-app si action prise
Étant donné que j'ai signalé un contenu il y a 24h
Quand le modérateur traite mon signalement
Et que le contenu est effectivement retiré
Alors je reçois une notification in-app
Et la notification indique "Votre signalement a été traité. Le contenu a été retiré."
Et le statut de mon signalement passe à "Traité "
Et je peux voir les détails de l'action prise
Scénario: Notification si signalement rejeté
Étant donné que j'ai signalé un contenu
Quand le modérateur rejette mon signalement
Alors je reçois une notification in-app
Et la notification indique "Votre signalement a été examiné. Le contenu ne viole pas les règles de la communauté."
Et le statut de mon signalement passe à "Rejeté "
Et je peux voir la raison du rejet
# Signalements multiples du même contenu
Scénario: Un contenu peut être signalé plusieurs fois
Étant donné qu'un contenu a déjà été signalé par 5 autres utilisateurs
Quand je signale le même contenu
Alors mon signalement est enregistré indépendamment
Et le compteur de signalements du contenu passe à 6
Et mon signalement rejoint la file d'attente de modération
Et les signalements cumulés augmentent la priorité de traitement
Scénario: Limite de signalements par utilisateur
Étant donné que j'ai déjà signalé le même contenu il y a 2 jours
Quand j'essaie de signaler à nouveau le même contenu
Alors un message m'informe "Vous avez déjà signalé ce contenu"
Et le formulaire de signalement n'est pas affiché
Et je peux consulter le statut de mon signalement précédent
# Signalements abusifs
Scénario: Détection de signalements abusifs répétés
Étant donné que j'ai envoyé 10 signalements ce mois-ci
Et que 8 d'entre eux ont été rejetés comme infondés
Quand j'essaie d'envoyer un nouveau signalement
Alors mon compte est marqué comme "signaleur suspect"
Et un avertissement s'affiche:
"""
Attention: vos signalements récents ont été majoritairement rejetés.
Les signalements abusifs peuvent entraîner des sanctions.
"""
Et je peux toujours envoyer le signalement
Mais mes futurs signalements auront une priorité réduite
Scénario: Sanction pour signalements abusifs graves
Étant donné que j'ai envoyé 20 signalements abusifs en 1 mois
Et que tous ont été rejetés comme volontairement faux
Quand le modérateur détecte le pattern abusif
Alors mon compte reçoit un avertissement formel
Et je perds la possibilité de signaler pendant 30 jours
Et je reçois un email m'expliquant la sanction
# Signalement depuis différents points de l'app
Scénario: Signalement depuis le player audio
Étant donné que j'écoute un contenu
Quand j'ouvre le menu "" du player
Alors je vois l'option "Signaler"
Et je peux ouvrir le formulaire de signalement
Scénario: Signalement depuis la page de détails du contenu
Étant donné que je consulte la page de détails d'un contenu
Quand je clique sur le bouton "" en haut à droite
Alors je vois l'option "Signaler"
Et je peux ouvrir le formulaire de signalement
Scénario: Signalement depuis l'historique d'écoute
Étant donné que je consulte mon historique d'écoute
Quand je clique sur "" à côté d'un contenu passé
Alors je vois l'option "Signaler"
Et je peux signaler ce contenu même si je ne l'écoute plus actuellement
# Anonymat du signaleur
Scénario: Identité du signaleur anonyme pour le créateur
Étant donné que j'ai signalé un contenu
Quand le créateur est notifié de la modération
Alors mon identité reste anonyme
Et le créateur ne peut pas savoir qui a signalé
Et seuls les modérateurs ont accès à l'identité du signaleur
# Coût de la solution
Scénario: Coût du système de signalement
Étant donné que le système de signalement est en place
Quand on calcule le coût
Alors le coût est de 0
Et le formulaire est développé en interne
Et aucun service tiers n'est utilisé
Et les notifications in-app sont gratuites