9.3 KiB
TEST_ENVIRONMENT.md — Expria Frontend
Document de référence — Version 1.0 Ce document décrit comment configurer et utiliser l'environnement de test frontend. Complément au
TEST_ENVIRONMENT.mdbackend (qui décrit la base de données Supabase et les comptes de test).
1. Principe
L'environnement de test frontend permet de faire tourner le code React localement, connecté soit au backend de production (api.expria.app), soit à une instance backend locale (pour tests isolés).
Règles absolues :
- Ne jamais utiliser de comptes réels (utilisateurs payants) pour les tests
- Utiliser exclusivement les 4 comptes
@gmail.comdocumentés dans le backend - Ne jamais committer les fichiers
.env(présents dans.gitignore)
2. Prérequis
| Outil | Version minimum | Vérification |
|---|---|---|
| Node.js | 20.x LTS | node --version |
| npm | 10.x | npm --version |
| Git | 2.x | git --version |
| Navigateur moderne | Chrome 120+, Firefox 120+, Safari 17+ | — |
Recommandé :
- VS Code (ou Cursor) avec extensions : ESLint, Prettier, Tailwind CSS IntelliSense, Vitest
- DevTools React (extension navigateur)
3. Configuration — mode dev connecté au backend de production
C'est le mode par défaut. Le frontend local appelle https://api.expria.app.
Fichier .env à créer à la racine du projet
# URL du backend de production
VITE_API_URL=https://api.expria.app
# Supabase (clé publique uniquement)
VITE_SUPABASE_URL=https://<project>.supabase.co
VITE_SUPABASE_ANON_KEY=<clé publique à obtenir auprès de Hermann>
# Flags de features (à ajuster selon le sprint)
VITE_ENABLE_T2_LIVE=false
# Monitoring (optionnel)
VITE_SENTRY_DSN=
Les vraies valeurs sont à récupérer dans :
- Le coffre-fort de Hermann (1Password / Bitwarden)
- Ou auprès de Hermann directement
Après modification du .env, redémarrer le dev server (Vite charge les env au démarrage seulement).
Lancement
npm install
npm run dev
Le frontend est disponible sur http://localhost:5173 (port Vite par défaut).
4. Configuration — mode dev connecté au backend local
Utile quand on veut :
- Tester une modification backend avant déploiement
- Déboguer un flux complet frontend + backend
- Travailler sans connexion internet stable
Prérequis
Le backend doit tourner localement dans un autre terminal :
cd D:\expria-backend
npm run dev
# Backend disponible sur http://localhost:3000 (vérifier le port exact)
Fichier .env (ajustement)
VITE_API_URL=http://localhost:3000
# Le reste reste identique
Points d'attention
- CORS : le backend doit autoriser
http://localhost:5173dans sa configuration CORS. À vérifier dansexpria-backend/src/index.ts. Si CORS bloque les requêtes, voir SEC-02 dansSECURITY.md. - WebSocket T2 : devient
ws://localhost:3000/t2/live(non sécurisé en dev local). Acceptable pour le dev. - Supabase : reste en production même en dev local (Supabase n'a pas de mode local simple). Les comptes de test
@gmail.comfonctionnent identiquement.
5. Comptes de test (rappel)
Identiques aux comptes documentés dans expria-backend/docs/TEST_ENVIRONMENT.md :
| Plan | Simulations utilisées | Cas testé | |
|---|---|---|---|
| test.free@gmail.com | free | 0 | Parcours Free normal |
| test.standard@gmail.com | standard | 12 | Parcours Standard complet |
| test.premium@gmail.com | premium | 28 | Parcours Premium complet |
| test.quota@gmail.com | free | 5 | Blocage quota Free |
Mot de passe commun : Expria2025!test
Les comptes sont créés par le script SQL de expria-backend/docs/TEST_ENVIRONMENT.md §3. Si un compte manque ou est corrompu, demander à Hermann de rejouer le script côté Supabase.
6. Scénarios de test spécifiques
6.1 Simuler un utilisateur Free qui atteint le quota
- Se connecter avec
test.free@gmail.com - Utiliser
test.quota@gmail.comà la place (qui a déjà 5/5 utilisées) - Tenter de lancer une simulation → modal de blocage doit apparaître
Ne pas essayer de forcer le compteur en soumettant 5 simulations réelles — ça consomme des appels à DeepSeek (payant) et pollue la base.
6.2 Simuler un changement de plan
Pour tester le flux d'upgrade sans vraiment payer :
- Aller sur
/pricingavectest.free@gmail.com - Cliquer "Choisir Standard"
- Sur la page Stripe Checkout, utiliser la carte de test
4242 4242 4242 4242 - Date d'expiration : n'importe laquelle dans le futur
- CVC : n'importe lequel (3 chiffres)
Le webhook Stripe met à jour plan = 'standard' dans Supabase. Pour revenir à l'état initial après test, Hermann peut rejouer le script de reset de expria-backend/docs/TEST_ENVIRONMENT.md §5.
6.3 Simuler un paiement refusé
Même flux que 6.2 mais avec la carte 4000 0000 0000 0002. Stripe retourne "paiement refusé". Le plan reste inchangé, le message d'erreur doit s'afficher clairement.
6.4 Simuler une session expirée
- Se connecter normalement
- Ouvrir DevTools → Application → Local Storage
- Trouver la clé contenant le JWT Supabase (
sb-<project>-auth-token) - Modifier la valeur pour casser le token (changer 1 caractère)
- Rafraîchir la page
- Le frontend doit détecter le JWT invalide → message "Session expirée" + redirect
/login
Ce test vérifie SEC-06 (gestion des sessions expirées).
6.5 Simuler T2 Live sans avoir Premium
- Se connecter avec
test.free@gmail.comoutest.standard@gmail.com - Accéder à l'URL
/t2-livedirectement - Le frontend doit afficher un PaywallModal ou rediriger
- Si malgré tout une requête WebSocket est envoyée, le backend doit fermer la connexion avec close code 4003 (
PLAN_INSUFFICIENT)
7. Matrice de compatibilité navigateurs
Ces navigateurs sont ceux que Claude Code doit considérer comme supportés. Tester au minimum sur les deux premiers.
| Navigateur | Version minimum | Priorité de test | Notes |
|---|---|---|---|
| Chrome (desktop) | 120 | 🔴 obligatoire | Majoritaire chez les utilisateurs |
| Chrome Mobile (Android) | 120 | 🔴 obligatoire | Audience Afrique = mobile-first |
| Safari Mobile (iOS) | 17 | 🟡 recommandé | Audience Canada = iPhone courant |
| Firefox (desktop) | 120 | 🟢 optionnel | Usage faible |
| Safari Desktop | 17 | 🟢 optionnel | Niche |
Attention particulière pour mobile Android (Afrique) :
- Connexions 3G/4G instables → vérifier que retry dans
api-client.tsgère bien - RAM limitée → éviter les listes illimitées, paginer
- Clavier virtuel qui masque les inputs → vérifier scroll automatique
Test mobile rapide via DevTools : Chrome → F12 → Toggle device toolbar → sélectionner "iPhone 12" ou "Galaxy S20".
Test mobile réel : idéal avant chaque release production, via un vrai téléphone ou un service comme BrowserStack (payant).
8. Simulation de conditions réseau dégradées
Dans Chrome DevTools → Network tab → Throttling dropdown :
- Fast 3G : simule une connexion 3G typique (Afrique)
- Slow 3G : simule une connexion 2G (zones rurales)
- Offline : simule une perte réseau
Tests à effectuer en mode "Fast 3G" :
- Login : doit répondre en < 10s
- Submit simulation : timeout à 30s doit fonctionner
- T2 Live : doit tenir la connexion WebSocket ou échouer gracieusement
9. Procédure avant chaque session Claude Code
[ ] D:\expria-frontend existe et contient docs/ à jour
[ ] .env est configuré (demander à Hermann si nécessaire)
[ ] npm install a été exécuté récemment (dernière modification package.json)
[ ] npm run dev démarre sans erreur
[ ] Login test.free@gmail.com fonctionne
[ ] Un commit Git propre existe avant de commencer
[ ] Les documents de référence ont été lus (cf. ONBOARDING.md §7)
10. Procédure après chaque session Claude Code
[ ] npm run typecheck : 0 erreur
[ ] npm run test : 0 échec
[ ] Les tests du Golden Dataset concernés ont été rejoués (cf. GOLDEN_DATASET.md)
[ ] Si modifications d'état (profils de test modifiés par des actions de test),
rejouer le script de reset backend
[ ] Un commit Git a été fait avec un message clair
[ ] CHANGELOG.md mis à jour
11. Debugging
Erreur "CORS blocked" au démarrage
- Vérifier que le backend autorise
http://localhost:5173 - Vérifier que
VITE_API_URLdans.envpointe vers la bonne URL backend - Voir SEC-02 dans
SECURITY.md
Erreur "Invalid JWT" après login
- Le JWT expire au bout de ~1h, se déconnecter et se reconnecter
- Vider le localStorage (DevTools → Application → Clear site data)
- Vérifier que
VITE_SUPABASE_URLcorrespond bien au projet Supabase utilisé par le backend
Les variables d'environnement ne sont pas prises en compte
- Vite charge
.envau démarrage uniquement — redémarrernpm run devaprès modification - Les variables doivent commencer par
VITE_pour être exposées côté client - Vérifier qu'il n'y a pas d'espace autour du
=dans.env
WebSocket T2 Live ne se connecte pas
- Vérifier
VITE_ENABLE_T2_LIVE=truedans.env - Vérifier que l'utilisateur est bien Premium
- Ouvrir DevTools → Network → filtrer par "WS" pour voir le handshake WebSocket
- Vérifier les close codes : 4001 = auth, 4003 = plan insuffisant
12. Historique
| Version | Date | Changements |
|---|---|---|
| 1.0 | 2026-04-17 | Création initiale |