# Tests de Régression E2E Ce document explique comment créer et maintenir les tests de régression end-to-end (E2E) en utilisant Django Lookbook et Playwright. ## Vue d'ensemble Le projet utilise deux outils complémentaires pour les tests de régression : - **Django Lookbook** : Un outil de prévisualisation de composants Django qui permet de créer des pages de test isolées - **Playwright** : Un framework de test E2E qui automatise l'interaction avec le navigateur ## Architecture des tests Les tests E2E sont organisés en trois parties : 1. **Templates de test** (`webapp/templates/ui/tests/`) : Pages HTML dédiées aux tests 2. **Previews Lookbook** (`webapp/previews/template_preview.py`) : Méthodes Python qui rendent les templates 3. **Tests Playwright** (`webapp/e2e_tests/`) : Scripts de test qui interagissent avec les previews ## Ajouter un nouveau test E2E ### Étape 1 : Créer un template de test Créez un fichier HTML dans `webapp/templates/ui/tests/` qui contient le scénario de test. **Exemple** : `webapp/templates/ui/tests/mon_nouveau_test.html` ```html {% load dsfr_tags %} {% dsfr_callout title="Test de mon fonctionnalité" text="Cette page teste [décrire ce qui est testé]." icon_class="fr-icon-alert-line" %} ``` ### Étape 2 : Ajouter une méthode preview Dans `previews/template_preview.py`, ajoutez une méthode dans la classe `TestsPreview`. **Convention de nommage** : - Préfixer avec `t_{number}_` où `{number}` est incrémental (t_1, t_2, t_3, etc.) - Le numéro représente l'ordre chronologique de création - Les tests plus anciens ont des numéros plus bas et apparaissent en premier - Ajouter les nouveaux tests à la fin de la classe **Exemple** : ```python class TestsPreview(LookbookPreview): # ... autres tests ... def t_4_mon_nouveau_test(self, **kwargs): """Description du test""" return render_to_string( "ui/tests/mon_nouveau_test.html", {"base_url": base_url}, # Optionnel : passer des variables de contexte ) ``` ### Étape 3 : Créer le test Playwright Ajoutez un test dans `webapp/e2e_tests/` (généralement `carte.spec.ts` ou un fichier dédié). **Exemple** : ```typescript test.describe("🎯 Ma Fonctionnalité", () => { test("Le test vérifie que [comportement attendu]", async ({ page }) => { // Naviguer vers la preview Lookbook await page.goto("/lookbook/preview/tests/t_4_mon_nouveau_test", { waitUntil: "domcontentloaded", }); // Si le test utilise une iframe const iframe = page.frameLocator("iframe").first(); await expect(iframe.locator("body")).toBeAttached({ timeout: 10000 }); // Interagir avec les éléments (utiliser data-testid autant que possible) await iframe.locator('[data-testid="mon-element"]').click(); // Vérifier le comportement attendu await expect(iframe.locator('[data-testid="resultat"]')).toBeVisible(); await expect(iframe.locator('[data-testid="resultat"]')).toContainText( "Texte attendu", ); }); }); ``` ### Étape 4 : Utiliser les data-testid Pour des tests robustes, utilisez des attributs `data-testid` dans vos templates : ```html