245 lines
10 KiB
Gherkin
245 lines
10 KiB
Gherkin
# language: fr
|
|
Fonctionnalité: Limites d'abonnements et désabonnement
|
|
En tant qu'auditeur
|
|
Je veux gérer mes abonnements de manière équilibrée
|
|
Afin de suivre mes créateurs préférés sans être submergé
|
|
|
|
Contexte:
|
|
Étant donné que l'API RoadWave est disponible
|
|
Et que je suis connecté en tant qu'auditeur
|
|
|
|
Scénario: Limite maximale de 200 abonnements
|
|
Étant donné que je suis abonné à 199 créateurs
|
|
Quand j'essaie de m'abonner à un 200ème créateur
|
|
Alors l'abonnement réussit
|
|
Et je suis maintenant abonné à 200 créateurs
|
|
|
|
Scénario: Impossible de dépasser 200 abonnements
|
|
Étant donné que je suis déjà abonné à 200 créateurs
|
|
Quand j'essaie de m'abonner à un nouveau créateur
|
|
Alors l'action échoue
|
|
Et je vois le message:
|
|
"""
|
|
Vous suivez déjà 200 créateurs. Désabonnez-vous d'un créateur pour en suivre un nouveau.
|
|
"""
|
|
|
|
Scénario: Suggestion de désabonnement de créateurs inactifs
|
|
Étant donné que je suis abonné à 200 créateurs
|
|
Et que j'essaie de m'abonner à un nouveau créateur
|
|
Quand je vois le message de limite atteinte
|
|
Alors je vois aussi une suggestion:
|
|
"""
|
|
Vous n'avez pas écouté [Créateur X] depuis 6 mois, le désabonner ?
|
|
"""
|
|
Et un bouton "Désabonner" est proposé pour ce créateur
|
|
|
|
Scénario: Liste triable des abonnements
|
|
Étant donné que je suis abonné à 150 créateurs
|
|
Quand j'accède à ma liste d'abonnements
|
|
Alors je peux trier par:
|
|
| critère | ordre |
|
|
| Date d'abonnement | Plus récent / Plus ancien |
|
|
| Nombre de contenus écoutés| Plus écoutés / Moins écoutés |
|
|
| Dernière activité créateur| Plus récent / Plus ancien |
|
|
| Ordre alphabétique | A-Z / Z-A |
|
|
|
|
Scénario: Abonnement initial augmente les jauges de +5%
|
|
Étant donné que mes jauges d'intérêt sont:
|
|
| catégorie | valeur initiale |
|
|
| Automobile | 60% |
|
|
| Voyage | 55% |
|
|
Et qu'un créateur tague ses contenus "Automobile" et "Voyage"
|
|
Quand je m'abonne à ce créateur
|
|
Alors mes jauges évoluent:
|
|
| catégorie | nouvelle valeur |
|
|
| Automobile | 65% (+5%) |
|
|
| Voyage | 60% (+5%) |
|
|
|
|
Scénario: Abonnement avec créateur ayant 3 tags
|
|
Étant donné qu'un créateur tague ses contenus:
|
|
| tags |
|
|
| Automobile, Voyage, Technologie |
|
|
Et que mes jauges sont toutes à 50%
|
|
Quand je m'abonne à ce créateur
|
|
Alors les 3 jauges augmentent de +5%:
|
|
| catégorie | nouvelle valeur |
|
|
| Automobile | 55% |
|
|
| Voyage | 55% |
|
|
| Technologie | 55% |
|
|
|
|
Scénario: Désabonnement diminue les jauges de -5%
|
|
Étant donné que je suis abonné à un créateur avec tags "Politique" et "Économie"
|
|
Et que mes jauges sont:
|
|
| catégorie | valeur actuelle |
|
|
| Politique | 70% |
|
|
| Économie | 65% |
|
|
Quand je me désabonne de ce créateur
|
|
Alors mes jauges évoluent:
|
|
| catégorie | nouvelle valeur |
|
|
| Politique | 65% (-5%) |
|
|
| Économie | 60% (-5%) |
|
|
|
|
Scénario: Désabonnement sans confirmation
|
|
Étant donné que je consulte le profil d'un créateur suivi
|
|
Quand je clique sur "Se désabonner"
|
|
Alors le désabonnement est immédiat
|
|
Et aucune popup de confirmation n'apparaît
|
|
Car l'action est réversible (je peux me réabonner)
|
|
|
|
Scénario: Réabonnement possible immédiatement
|
|
Étant donné que je viens de me désabonner d'un créateur
|
|
Quand je consulte à nouveau son profil
|
|
Alors le bouton "S'abonner" est affiché
|
|
Et je peux me réabonner immédiatement
|
|
Et mes jauges augmentent à nouveau de +5%
|
|
|
|
Scénario: Effet symétrique abonnement/désabonnement
|
|
Étant donné qu'un créateur a les tags "Musique" et "Culture"
|
|
Et que ma jauge Musique est à 50%
|
|
Quand je m'abonne puis me désabonne immédiatement
|
|
Alors ma jauge revient exactement à 50%
|
|
Et il n'y a pas de perte ou gain net
|
|
|
|
Scénario: Abonnement ne dépasse pas 100% de jauge
|
|
Étant donné que ma jauge Automobile est à 97%
|
|
Et qu'un créateur tague ses contenus "Automobile"
|
|
Quand je m'abonne à ce créateur
|
|
Alors ma jauge Automobile passe à 100% (limite max)
|
|
Et l'augmentation effective est de +3% seulement
|
|
|
|
Scénario: Désabonnement ne descend pas sous 0%
|
|
Étant donné que ma jauge Politique est à 3%
|
|
Et que je suis abonné à un créateur avec tag "Politique"
|
|
Quand je me désabonne de ce créateur
|
|
Alors ma jauge Politique passe à 0% (limite min)
|
|
Et la diminution effective est de -3% seulement
|
|
|
|
Scénario: Créateur ne voit pas qui est abonné (privacy)
|
|
Étant donné que je suis abonné au créateur "JeanDupont"
|
|
Quand "JeanDupont" consulte ses statistiques
|
|
Alors il voit le nombre total d'abonnés (ex: "1,247 abonnés")
|
|
Mais il ne voit pas la liste des utilisateurs abonnés
|
|
Et mon identité reste privée
|
|
|
|
Scénario: Créateur voit uniquement le nombre total d'abonnés
|
|
Étant donné que je suis créateur
|
|
Et que j'ai 523 abonnés
|
|
Quand je consulte mes statistiques
|
|
Alors je vois "523 abonnés"
|
|
Mais je ne peux pas:
|
|
| action interdite |
|
|
| Voir la liste des abonnés |
|
|
| Contacter mes abonnés individuellement|
|
|
| Voir leurs profils |
|
|
|
|
Scénario: Pas d'abonnement mutuel visible
|
|
Étant donné que je suis abonné au créateur "Alice"
|
|
Et qu'"Alice" est abonnée à mon compte créateur
|
|
Quand je consulte le profil d'"Alice"
|
|
Alors je ne vois pas d'indication qu'elle est abonnée à moi
|
|
Et il n'y a pas de badge "Abonné mutuellement"
|
|
|
|
Scénario: Performance avec 200 abonnements
|
|
Étant donné que je suis abonné à 200 créateurs
|
|
Quand l'algorithme calcule ma recommandation
|
|
Alors la requête SQL utilise un JOIN sur la table abonnements
|
|
Et la table est indexée sur user_id et creator_id
|
|
Et le temps de calcul reste inférieur à 50ms
|
|
|
|
Scénario: Impact sur la recommandation avec beaucoup d'abonnements
|
|
Étant donné que je suis abonné à 150 créateurs très actifs
|
|
Et qu'ils publient collectivement 100 contenus par jour
|
|
Quand l'algorithme génère ma file de 5 contenus
|
|
Alors environ 60-70% des contenus proviennent de créateurs suivis (grâce au boost +30%)
|
|
Mais 30-40% proviennent de nouveaux créateurs (découverte)
|
|
|
|
Scénario: Notification de désabonnement au créateur (non implémenté)
|
|
Étant donné que je me désabonne d'un créateur
|
|
Alors le créateur ne reçoit aucune notification
|
|
Et il ne peut pas savoir qui s'est désabonné
|
|
Car cela préserve la privacy et évite le harcèlement
|
|
|
|
Scénario: Statistiques d'abonnements pour l'utilisateur
|
|
Étant donné que je suis abonné à 87 créateurs
|
|
Quand j'accède à mes statistiques d'abonnements
|
|
Alors je vois:
|
|
| métrique | exemple valeur |
|
|
| Nombre total d'abonnements | 87 / 200 |
|
|
| Créateurs les plus écoutés | Top 10 avec % écoute |
|
|
| Créateurs non écoutés depuis 6 mois | 12 créateurs |
|
|
| Nouveaux contenus non écoutés | 23 contenus |
|
|
|
|
Scénario: Recherche dans la liste d'abonnements
|
|
Étant donné que je suis abonné à 120 créateurs
|
|
Quand j'accède à ma liste d'abonnements
|
|
Alors je peux chercher par nom de créateur
|
|
Et les résultats sont filtrés en temps réel
|
|
Et je trouve rapidement un créateur spécifique
|
|
|
|
Scénario: Export de la liste d'abonnements (RGPD)
|
|
Étant donné que je demande l'export de mes données
|
|
Quand l'export est généré
|
|
Alors la liste de mes abonnements est incluse:
|
|
```json
|
|
{
|
|
"subscriptions": [
|
|
{
|
|
"creator_name": "JeanDupont",
|
|
"creator_id": "abc123",
|
|
"subscribed_at": "2025-06-15T10:30:00Z"
|
|
},
|
|
...
|
|
]
|
|
}
|
|
```
|
|
|
|
Scénario: Suppression compte utilisateur et impact sur abonnements
|
|
Étant donné que je suis abonné à 50 créateurs
|
|
Quand je supprime définitivement mon compte
|
|
Alors tous mes abonnements sont supprimés
|
|
Et le compteur d'abonnés de chaque créateur est décrémenté de -1
|
|
Et les jauges n'existent plus (données supprimées)
|
|
|
|
Scénario: Suppression compte créateur et impact sur abonnés
|
|
Étant donné que je suis abonné au créateur "Bob"
|
|
Quand "Bob" supprime son compte créateur
|
|
Alors je suis automatiquement désabonné
|
|
Et mes jauges diminuent de -5% pour les tags de "Bob"
|
|
Et je ne vois plus "Bob" dans ma liste d'abonnements
|
|
|
|
Scénario: Limite 200 justifiée par usage réaliste
|
|
Étant donné que la moyenne d'abonnements sur YouTube est de ~50-100 chaînes
|
|
Et que Twitter limite à 5000 follows (mais moyenne ~150)
|
|
Quand RoadWave fixe la limite à 200
|
|
Alors cela couvre largement 99% des utilisateurs
|
|
Et évite les abus (comptes spam suivant tout le monde)
|
|
|
|
Scénario: Table PostgreSQL optimisée pour abonnements
|
|
Étant donné la structure de table subscriptions:
|
|
```sql
|
|
CREATE TABLE subscriptions (
|
|
user_id UUID,
|
|
creator_id UUID,
|
|
subscribed_at TIMESTAMP,
|
|
PRIMARY KEY (user_id, creator_id)
|
|
);
|
|
CREATE INDEX idx_user_subscriptions ON subscriptions(user_id);
|
|
CREATE INDEX idx_creator_subscribers ON subscriptions(creator_id);
|
|
```
|
|
Alors les requêtes d'abonnements sont O(1) avec index
|
|
Et le count d'abonnés par créateur est rapide
|
|
Et la vérification "est abonné ?" est instantanée
|
|
|
|
Scénario: Détection d'abonnements abusifs
|
|
Étant donné qu'un utilisateur s'abonne à 200 créateurs en moins de 5 minutes
|
|
Quand le système détecte cette activité suspecte
|
|
Alors un rate limiting est appliqué (max 10 abonnements/minute)
|
|
Et l'utilisateur voit "Trop d'actions rapides. Veuillez réessayer dans 1 minute"
|
|
Et cela prévient les bots de spam
|
|
|
|
Scénario: Badge créateur vérifié visible dans abonnements
|
|
Étant donné que je suis abonné à 3 créateurs dont 1 vérifié
|
|
Quand je consulte ma liste d'abonnements
|
|
Alors le créateur vérifié a un badge ✓ bleu
|
|
Et les créateurs non vérifiés n'ont pas de badge
|