# 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.md` backend (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.com` documenté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://.supabase.co VITE_SUPABASE_ANON_KEY= # 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 ```bash 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 : ```bash 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:5173` dans sa configuration CORS. À vérifier dans `expria-backend/src/index.ts`. Si CORS bloque les requêtes, voir SEC-02 dans `SECURITY.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.com` fonctionnent identiquement. --- ## 5. Comptes de test (rappel) Identiques aux comptes documentés dans `expria-backend/docs/TEST_ENVIRONMENT.md` : | Email | 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 1. Se connecter avec `test.free@gmail.com` 2. Utiliser `test.quota@gmail.com` à la place (qui a déjà 5/5 utilisées) 3. 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 : 1. Aller sur `/pricing` avec `test.free@gmail.com` 2. Cliquer "Choisir Standard" 3. Sur la page Stripe Checkout, utiliser la carte de test `4242 4242 4242 4242` 4. Date d'expiration : n'importe laquelle dans le futur 5. 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 1. Se connecter normalement 2. Ouvrir DevTools → Application → Local Storage 3. Trouver la clé contenant le JWT Supabase (`sb--auth-token`) 4. Modifier la valeur pour casser le token (changer 1 caractère) 5. Rafraîchir la page 6. 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 1. Se connecter avec `test.free@gmail.com` ou `test.standard@gmail.com` 2. Accéder à l'URL `/t2-live` directement 3. Le frontend doit afficher un PaywallModal ou rediriger 4. 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.ts` gè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_URL` dans `.env` pointe 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_URL` correspond bien au projet Supabase utilisé par le backend ### Les variables d'environnement ne sont pas prises en compte - Vite charge `.env` au démarrage uniquement — redémarrer `npm run dev` aprè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=true` dans `.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 |