# đŸŽ„ Guide des Tests E2E avec Documentation VidĂ©o KoproGo utilise Playwright pour les tests End-to-End qui gĂ©nĂšrent automatiquement des **vidĂ©os de documentation vivante** ! ## 🎯 Qu'est-ce que c'est ? Les tests E2E testent **toute la stack** : - ✅ Frontend (Astro + Svelte) - ✅ Backend (Rust + Actix-web) - ✅ Base de donnĂ©es (PostgreSQL) - ✅ API REST - ✅ PWA + Mode Offline Chaque test gĂ©nĂšre une **vidĂ©o** qui montre exactement comment l'application fonctionne ! ## 🚀 DĂ©marrage Rapide ### 1. Installation (une seule fois) ```bash cd frontend npm install npm run test:install # Installe Playwright + Chromium ``` ### 2. DĂ©marrer les Services **Terminal 1 - Backend:** ```bash cd backend docker-compose up -d postgres # Si pas dĂ©jĂ  dĂ©marrĂ© cargo run ``` **Terminal 2 - Frontend (optionnel si test:e2e dĂ©marre dĂ©jĂ  le serveur):** ```bash cd frontend npm run dev ``` ### 3. Lancer les Tests ```bash cd frontend npm run test:e2e # ExĂ©cute tous les tests + gĂ©nĂšre les vidĂ©os ``` ### 4. Voir les VidĂ©os ! 🎬 ```bash npm run test:e2e:report # Ouvre le rapport HTML avec vidĂ©os intĂ©grĂ©es ``` ## đŸ“č VidĂ©os GĂ©nĂ©rĂ©es AprĂšs chaque exĂ©cution, vous trouverez les vidĂ©os dans : ``` frontend/test-results/ ├── auth-Authentication-Flow-should-login-successfully-chromium/ │ └── video.webm ← VidĂ©o du parcours de login ├── pwa-offline-PWA-Capabilities-should-work-offline-chromium/ │ └── video.webm ← VidĂ©o du mode offline └── dashboards-Syndic-Dashboard-chromium/ └── video.webm ← VidĂ©o du dashboard ``` ## 🎬 Commandes Disponibles ```bash # Mode Headless (CI/CD) - GĂ©nĂšre les vidĂ©os npm run test:e2e # Mode UI - Interface graphique interactive npm run test:e2e:ui # Mode Headed - Voir le navigateur en action npm run test:e2e:headed # Mode Debug - Debug pas Ă  pas npm run test:e2e:debug # Voir le rapport avec vidĂ©os npm run test:e2e:report ``` ## 📝 Tests Disponibles ### 1. Tests d'Authentification (`auth.spec.ts`) ```bash npx playwright test auth.spec.ts ``` **Ce qui est testĂ© :** - ✅ Page de login accessible - ✅ Login avec appel API backend rĂ©el - ✅ Redirection vers dashboard selon le rĂŽle - ✅ Gestion d'erreurs (mauvais password) - ✅ Persistance de session (localStorage + IndexedDB) - ✅ Logout complet - ✅ CrĂ©ation de comptes pour chaque rĂŽle **VidĂ©o gĂ©nĂ©rĂ©e :** Parcours complet d'un utilisateur qui se connecte. ### 2. Tests des Dashboards (`dashboards.spec.ts`) ```bash npx playwright test dashboards.spec.ts ``` **Ce qui est testĂ© :** - ✅ Dashboard Syndic (gestion immeubles) - ✅ Dashboard Comptable (finances) - ✅ Dashboard CopropriĂ©taire (infos personnelles) - ✅ Dashboard SuperAdmin (vue plateforme) - ✅ Navigation entre sections - ✅ Permissions par rĂŽle **VidĂ©os gĂ©nĂ©rĂ©es :** Un parcours pour chaque type d'utilisateur. ### 3. Tests PWA et Offline (`pwa-offline.spec.ts`) ```bash npx playwright test pwa-offline.spec.ts ``` **Ce qui est testĂ© :** - ✅ Manifest.json valide - ✅ Service Worker enregistrĂ© - ✅ Indicateur online/offline - ✅ IndexedDB utilisĂ© - ✅ Mode offline fonctionnel - ✅ Queue de synchronisation **VidĂ©os gĂ©nĂ©rĂ©es :** DĂ©monstration du mode offline. ## 🎓 Cas d'Usage des VidĂ©os ### 1. Documentation d'Équipe ```bash # GĂ©nĂ©rer les vidĂ©os npm run test:e2e # Partager le rapport npm run test:e2e:report # Envoyer le lien dans Slack/Teams ``` ### 2. Onboarding DĂ©veloppeurs Les vidĂ©os montrent **exactement** comment l'application fonctionne : - Parcours utilisateur complet - Interactions frontend-backend - Mode offline en action ### 3. PrĂ©sentation Client/Stakeholders ```bash # ExĂ©cuter les tests en mode headed pour montrer en direct npm run test:e2e:headed # Ou partager les vidĂ©os du dernier run npm run test:e2e:report ``` ### 4. Debugging Si un test Ă©choue, la vidĂ©o montre **exactement** ce qui s'est passĂ© : ```bash npm run test:e2e:report # Cliquer sur le test qui a Ă©chouĂ© # Voir la vidĂ©o + screenshots + traces ``` ## 🔧 Configuration ### Modifier la qualitĂ© vidĂ©o Dans `frontend/playwright.config.ts` : ```typescript video: { mode: 'on', // Toujours enregistrer size: { width: 1920, height: 1080 } // HD } ``` ### Garder les vidĂ©os mĂȘme en cas de succĂšs Par dĂ©faut, **toutes les vidĂ©os sont gardĂ©es** (`mode: 'on'`) pour la documentation. Pour Ă©conomiser l'espace : ```typescript video: { mode: 'retain-on-failure' // Seulement en cas d'Ă©chec } ``` ## đŸ€– CI/CD avec GitHub Actions Le workflow `.github/workflows/e2e-tests.yml` : 1. ✅ Lance le backend + PostgreSQL 2. ✅ ExĂ©cute tous les tests E2E 3. ✅ GĂ©nĂšre les vidĂ©os 4. 📩 Sauvegarde les vidĂ©os comme **artifacts GitHub** 5. 💬 Commente la PR avec lien vers les vidĂ©os ### Voir les vidĂ©os dans GitHub Actions 1. Aller dans **Actions** tab 2. SĂ©lectionner le workflow run 3. Descendre vers **Artifacts** 4. TĂ©lĂ©charger `test-videos-XXX.zip` Les vidĂ©os sont gardĂ©es **30 jours** ! ## 📊 Rapport HTML Interactif Le rapport HTML contient : ``` playwright-report/ ├── index.html ← Page principale ├── data/ ← DonnĂ©es des tests └── trace/ ← Traces Playwright ``` **Contenu du rapport :** - đŸŽ„ VidĂ©os de chaque test (embedded) - 📾 Screenshots Ă  chaque Ă©tape - 📝 Logs de console - ⏱ Timeline d'exĂ©cution - 🔍 Traces interactives ```bash npm run test:e2e:report # Ouvre dans le navigateur ``` ## 🎹 Écrire de Nouveaux Tests ### Template de Base ```typescript import { test, expect } from '@playwright/test'; test('Mon nouveau test', async ({ page }) => { // Se connecter (si besoin) await page.goto('/login'); await page.fill('input[type="email"]', 'test@test.com'); await page.fill('input[type="password"]', 'test123'); await page.click('button[type="submit"]'); // Tester ma fonctionnalitĂ© await page.click('text=Ma FonctionnalitĂ©'); await expect(page.locator('text=SuccĂšs')).toBeVisible(); }); ``` ### Test avec CrĂ©ation d'Utilisateur ```typescript test('Mon test avec nouvel utilisateur', async ({ page }) => { // CrĂ©er un utilisateur via l'API const response = await page.request.post('http://127.0.0.1:8080/api/v1/auth/register', { data: { email: `user-${Date.now()}@test.com`, password: 'test123', first_name: 'Test', last_name: 'User', role: 'syndic' } }); const { user } = await response.json(); // Login avec ce compte await page.goto('/login'); await page.fill('input[type="email"]', user.email); await page.fill('input[type="password"]', 'test123'); await page.click('button[type="submit"]'); // Faire quelque chose... }); ``` La **vidĂ©o sera automatiquement gĂ©nĂ©rĂ©e** ! đŸŽ„ ## 🐛 ProblĂšmes Courants ### Backend pas dĂ©marrĂ© **Erreur :** ``` Error: connect ECONNREFUSED 127.0.0.1:8080 ``` **Solution :** ```bash cd backend cargo run ``` ### Base de donnĂ©es pas migrĂ©e **Erreur :** ``` relation "users" does not exist ``` **Solution :** ```bash cd backend sqlx migrate run ``` ### Timeout des tests **Erreur :** ``` Timeout 30000ms exceeded ``` **Solution :** Augmenter le timeout dans `playwright.config.ts` : ```typescript use: { navigationTimeout: 60000, // 60 secondes } ``` ### Service Worker pas enregistrĂ© **Solution :** VĂ©rifier que le serveur de dev est dĂ©marrĂ© et que la PWA est bien configurĂ©e. ## 📚 Ressources - [Documentation Playwright](https://playwright.dev) - [Playwright Best Practices](https://playwright.dev/docs/best-practices) - [Test Generator](https://playwright.dev/docs/codegen) ### GĂ©nĂ©rer des Tests Automatiquement ```bash npx playwright codegen http://localhost:3000 ``` Cela ouvre un navigateur et enregistre vos actions en code Playwright ! ## ✹ Workflow RecommandĂ© ### DĂ©veloppement d'une Nouvelle FonctionnalitĂ© 1. **DĂ©velopper** la fonctionnalitĂ© (frontend + backend) 2. **Écrire un test E2E** qui la valide : ```bash # CrĂ©er le fichier de test touch tests/e2e/ma-feature.spec.ts ``` 3. **ExĂ©cuter le test en mode UI** pour le dĂ©velopper : ```bash npm run test:e2e:ui ``` 4. **GĂ©nĂ©rer la vidĂ©o finale** : ```bash npm run test:e2e ``` 5. **Partager la vidĂ©o** avec l'Ă©quipe/client : ```bash npm run test:e2e:report ``` ### Pull Request 1. Les tests s'exĂ©cutent automatiquement via GitHub Actions 2. Les vidĂ©os sont uploadĂ©es comme artifacts 3. Le bot commente la PR avec le lien vers les vidĂ©os 4. Reviewer peut voir exactement comment ça fonctionne ! 🎬 ## 🎉 C'est Tout ! ```bash # Quick Start cd frontend npm run test:install # Installation (une fois) cd ../backend && cargo run & # DĂ©marrer le backend cd ../frontend npm run test:e2e # Lancer les tests npm run test:e2e:report # Voir les vidĂ©os ! ``` **Les vidĂ©os sont votre documentation vivante !** đŸŽ„âœš Elles montrent exactement comment l'application fonctionne, remplaçant des heures de documentation Ă©crite par des vidĂ©os claires et actualisĂ©es automatiquement.