- Body SolidWorks v1 → 02_PRODUITS_PHYSIQUES/Microphone/Conception/ - Studio Mic KiCAD (DIYPerks) → 02_PRODUITS_PHYSIQUES/R&D_References/DIY/ - cleanup_ports.sh → 04_INFRA_DEPLOIEMENT/ - mockup_jeu_ux → 11_RECHERCHE_&_LAB/ - Printables → 12_DOCUMENTATION/Imprimables/ - Screenshots, ideas, one.html → _BROUILLON/ - all-talas (23Go) → 13_ARCHIVES/ - Supprimé all-talas.zip (20Go doublon), lock files LibreOffice - Nettoyé .gitignore - Remote → Forgejo (10.0.20.105:3000) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
11 KiB
11 KiB
Scénarios de tests fonctionnels — Veza
Tests par module : critères d'acceptation, cas limites, flows à valider. Chaque scénario = un test qui doit passer avant mise en production. Dernière mise à jour : avril 2026.
Organisation
Priorité des tests
| Priorité | Signification | Quand exécuter |
|---|---|---|
| P0 | Bloquant production — si échec, pas de deploy | Chaque PR |
| P1 | Critique — à corriger dans les 24h si regression | Chaque release |
| P2 | Important — à corriger avant la prochaine release | Hebdomadaire |
| P3 | Nice-to-have — à corriger quand possible | Mensuel |
Format d'un scénario
[ID] Titre
Priorité: PX | Type: unit/integ/e2e
Préconditions: ...
Étapes:
1. ...
2. ...
Résultat attendu: ...
Cas limites: ...
Module 1 — Authentification
AUTH-001 — Inscription email + password
P0 | e2e
- Préconditions : aucun compte existant
- Étapes :
- POST /auth/register { email, password, username }
- Vérifier email reçu (lien de vérification)
- Cliquer le lien
- Vérifier que le compte est actif
- Résultat : compte créé, JWT retourné, email vérifié
- Cas limites :
- Email déjà pris → erreur 409
- Username déjà pris → erreur 409
- Password < 12 car → erreur 400
- Password pwned (HIBP) → warning (V1.5)
- Email invalide → erreur 400
- Lien de vérification expiré (> 24h) → erreur + lien "renvoyer"
AUTH-002 — Login + JWT
P0 | integ
- Étapes :
- POST /auth/login { email, password }
- Vérifier cookies HTTP-only (access + refresh)
- GET /auth/me avec cookie
- Résultat : user info retournée
- Cas limites :
- Mauvais password → 401 (pas de distinction "email inconnu")
- Compte verrouillé (5 échecs) → 429 + message "réessaie dans 15 min"
- Compte non vérifié → 403 "vérifie ton email"
AUTH-003 — Refresh token
P0 | integ
- Étapes :
- Login → obtenir access + refresh
- Attendre expiration access (ou simuler)
- POST /auth/refresh avec refresh cookie
- Résultat : nouveau access token, refresh token tourné
- Cas limites :
- Refresh expiré → 401
- Refresh révoqué (post-logout) → 401
- Double utilisation du même refresh → 401 + révoquer TOUTES les sessions (detection replay)
AUTH-004 — 2FA TOTP
P1 | integ
- Étapes :
- POST /auth/2fa/setup → QR code
- POST /auth/2fa/verify { code } → activation
- Logout + login → reçoit { requires_2fa: true }
- POST /auth/login/2fa { temp_token, code }
- Résultat : login complet
- Cas limites :
- Code TOTP incorrect → 401
- Code TOTP expiré (> 30s window) → 401
- Backup code utilisé → OK, code invalidé
- Tous backup codes utilisés → message "configure un nouveau 2FA"
AUTH-005 — OAuth Discord
P1 | e2e
- Étapes :
- GET /auth/oauth/discord → redirect Discord
- User autorise → callback avec code
- Backend échange code → crée/lie le compte
- Résultat : JWT retourné, compte actif
- Cas limites :
- State mismatch → 400
- Discord down → erreur propre "service temporairement indisponible"
- Email Discord déjà lié à un compte local → propose de lier
AUTH-006 — Rate limiting auth
P0 | integ
- Étapes :
- Envoyer 6 POST /auth/login (mauvais password)
- Résultat : 429 au 6e avec Retry-After header
- Vérifier : IP différente ne bloque pas
Module 2 — Tracks (morceaux)
TRACK-001 — Upload + processing
P0 | integ
- Étapes :
- POST /tracks (metadata)
- PUT upload URL (binaire WAV)
- POST /tracks/:id/publish
- Attendre event "transcoding.completed"
- GET /tracks/:id
- Résultat : track publié, HLS manifest disponible, waveform générée
- Cas limites :
- Fichier > 500 MB → 413
- Format non supporté (.exe, .pdf) → 415
- ClamAV détecte virus → status "removed" + notif admin
- Upload interrompu → status "draft" conservé, reprise possible
TRACK-002 — Lecture streaming
P0 | e2e
- Étapes :
- GET /tracks/:id → HLS manifest URL
- Charger dans player HLS.js
- Vérifier lecture audio
- Résultat : audio jouable, adaptatif (qualité s'adapte au réseau)
- Cas limites :
- Track privé sans auth → 401
- Track supprimé → 404
- Connexion lente → fallback bitrate bas
TRACK-003 — Permissions
P1 | integ
- Vérifier :
- User A ne peut pas DELETE /tracks/:id de user B → 403
- User A ne peut pas PUT /tracks/:id de user B → 403
- Track privé de user A non visible par user B → 404
- Track avec lien secret accessible avec le bon token
Module 3 — Samples & Presets
SAMPLE-001 — Upload pack complet
P0 | integ
- Même flow que TRACK-001 mais avec .zip
- Vérifications supplémentaires :
- Extraction liste fichiers post-upload
- Preview MP3 généré automatiquement
- Tags indexés pour recherche
SAMPLE-002 — Téléchargement
P1 | integ
- Étapes :
- GET /samples/packs/:id/download
- Vérifier URL signée MinIO
- Vérifier incrément downloads_count
- Cas limites :
- Pack supprimé → 404
- Rate limit (50 downloads/h) → 429
SAMPLE-003 — Remix (arbre)
P1 | integ
- Étapes :
- Créer pack parent
- POST /samples/packs/:id/remix (nouveau pack)
- GET /samples/packs/:parent_id/remixes
- Résultat : arbre parent → enfant visible
- Cas limites :
- Parent avec remix_allowed=false → 403
- Licence incompatible → erreur
SAMPLE-004 — Recherche et filtres
P1 | integ
- Tester chaque combinaison de filtres :
- type + genre + bpm_min/max + key + tags + licence
- sort=recent|popular|downloads
- Pagination (page + limit)
- Résultat : résultats cohérents, pas de crash
Module 4 — Troc
TROC-001 — Flow complet création → closing
P0 | e2e
- Étapes :
- User A : POST /trades/listings (créer annonce)
- User B : POST /trades/listings/:id/interest
- Vérifier : DM créé entre A et B
- User A : POST /trades/listings/:id/conclude { concluded_with: B }
- User B : POST /trades/listings/:id/recognition { badges: ['reliable'] }
- Résultat : annonce "conclue", badges sur profil B
- Cas limites :
- Auto-intérêt (creator == interested) → 403
- Conclude avec user non-intéressé → 400
- Double reconnaissance → 409
TROC-002 — Détection anti-argent
P1 | unit
- POST /trades/listings avec "je cherche 100€" → 400
- POST avec "échange contre euros" → 400
- POST avec "je propose un mix" → OK
TROC-003 — Limites
P1 | integ
- 6e annonce active → 400 "max 5 annonces actives"
- 3e annonce dans la journée → 400 "max 2/jour"
Module 5 — Shop
SHOP-001 — Parcours achat complet
P0 | e2e
- Étapes :
- GET /shop/products/talas-one → fiche produit
- POST /shop/cart/items { variant_id, qty: 1 }
- POST /shop/checkout/validate { addresses }
- POST /shop/orders → commande créée
- POST /payments/create → redirect Mollie
- Webhook Mollie payment.paid
- Vérifier : order status = "paid", email confirmé, facture générée
- Cas limites :
- Stock = 0 → erreur au checkout
- Réservation expirée (15 min) → stock libéré
- Webhook Mollie en double → idempotent (pas de double charge)
- Paiement échoué → order annulé, stock libéré
SHOP-002 — Réservation stock concurrente
P0 | integ
- Étapes :
- Stock = 1 unité
- User A et user B tentent checkout simultanément
- Résultat : un seul réussit, l'autre reçoit "rupture de stock"
- Vérifier : pas de survente (stock négatif impossible)
SHOP-003 — Calcul prix
P0 | unit
- Vérifier :
- Prix base + options = total correct
- TVA = 0% (franchise en base) avec mention légale
- Frais de port ajoutés au total
- Fees Mollie pas facturés au client (absorbés)
SHOP-004 — Remboursement
P1 | integ
- Étapes :
- Commande payée
- Admin : POST /admin/payments/:id/refund
- Webhook Mollie refund.paid
- Vérifier : order status "refunded", facture d'avoir, stock ré-incrémenté
Module 6 — Cloud Perso
CLOUD-001 — CRUD fichiers
P1 | integ
- Upload, download, rename, delete, restore
- Vérifier quotas mis à jour après chaque action
CLOUD-002 — Isolation
P0 | integ
- User A ne peut pas :
- Lister les fichiers de user B
- Télécharger un fichier de user B
- Supprimer un fichier de user B
- Même via manipulation d'URL / brute-force UUID
CLOUD-003 — Partage
P1 | integ
- Créer lien partagé → accessible sans auth
- Lien avec password → exige le bon password
- Lien expiré → 410 Gone
- Max downloads atteint → 403
Module 7 — Formation
LEARN-001 — Inscription et progression
P1 | integ
- Enroll → start lesson → complete lesson → progress updated
- Vérifier progress_percent recalculé correctement
LEARN-002 — Video streaming
P1 | e2e
- Leçon vidéo → HLS manifest → lecture dans player
- Position sauvegardée → reprise au bon endroit
LEARN-003 — Permissions contenu
P1 | integ
- Leçon non-preview sans enrollment → 403
- Leçon preview → accessible sans enrollment
- Seul le content_creator peut modifier son cours
Module 8 — Chat et notifications
CHAT-001 — DM entre users
P1 | integ
- Créer conversation, envoyer message, recevoir (WebSocket)
CHAT-002 — Groupes
P1 | integ
- Poster dans un groupe, voir les messages des autres
- Permissions : modérateur peut supprimer
NOTIF-001 — Notifications
P2 | integ
- Vérifier que chaque action génère la bonne notif :
- Like sur track → notif au créateur
- Intérêt troc → notif à l'annonceur
- Commande payée → email client
- SAV message → notif user
Module 9 — Performance
PERF-001 — Temps de réponse API
P1 | load test
- GET /tracks (feed) : p95 < 200ms sous 100 req/s
- GET /tracks/:id : p95 < 100ms
- POST /auth/login : p95 < 500ms
PERF-002 — Streaming concurrence
P1 | load test
- 100 connexions WebSocket simultanées → pas de drop
PERF-003 — Upload concurrence
P2 | load test
- 20 uploads simultanés → pas de timeout, pas de corruption
Outils de test
| Couche | Outil | Langage |
|---|---|---|
| Unit backend | go test |
Go |
| Unit Rust | cargo test |
Rust |
| Unit frontend | Vitest | TypeScript |
| Integration API | go test + httptest |
Go |
| E2E | Playwright | TypeScript |
| Load | k6 | JavaScript |
| Sécurité | OWASP ZAP, Nuclei | - |
| Visual | Storybook + Chromatic | TypeScript |
Exécution en CI
# Chaque PR
- go test ./...
- cargo test
- npm run test
- govulncheck ./...
- cargo audit
- npm audit --audit-level=high
- gitleaks detect
# Nightly
- playwright test (e2e)
- k6 run perf-tests.js (load)
- trivy image scan
# Pre-release
- OWASP checklist manuelle
- Pentest ciblé si code critique modifié
Voir aussi
- Tableaux_Validation/CHECKLIST_VALIDATION_V0 — checklist pré-vente (86 items)
- Audit_Sécurité/PLAN_AUDIT_SECURITE — tests sécurité spécifiques
- Tests_Hardware/PROTOCOLES_TESTS_HARDWARE — tests matériel
- ARCHITECTURE_VEZA — composants à tester
- 05_EXPERIENCE_UTILISATEUR/Flux_Utilisateurs/PARCOURS_UTILISATEURS_VEZA — flows à valider en e2e