Files
roadwave/features/abonnements/limites-desabonnement.feature
2026-01-31 11:45:11 +01:00

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