import { test, expect } from "@playwright/test"; import AxeBuilder from "@axe-core/playwright"; const readConsent = async (page: import("@playwright/test").Page) => { const c = (await page.context().cookies()).find((k) => k.name === "phi_consent"); return c ? (JSON.parse(decodeURIComponent(c.value)) as { analytics: boolean; marketing: boolean }) : null; }; test.describe("gestion des témoins", () => { test("bannière visible sans choix, accessible, puis « Tout refuser »", async ({ page }) => { await page.goto("/"); const dialog = page.getByRole("dialog", { name: /Témoins/ }); await expect(dialog).toBeVisible(); const axe = await new AxeBuilder({ page }).include("[role=dialog]").analyze(); expect(axe.violations.map((v) => v.id)).toEqual([]); await dialog.getByRole("button", { name: "Tout refuser" }).click(); await expect(dialog).toBeHidden(); expect(await readConsent(page)).toMatchObject({ analytics: false, marketing: false }); await page.reload(); await expect(page.getByRole("dialog", { name: /Témoins/ })).toHaveCount(0); }); test("« Tout accepter » enregistre les deux catégories", async ({ page }) => { await page.goto("/"); await page.getByRole("button", { name: "Tout accepter" }).click(); expect(await readConsent(page)).toMatchObject({ analytics: true, marketing: true }); }); test("« Personnaliser » : choix granulaire, nécessaires verrouillés", async ({ page }) => { await page.goto("/"); await page.getByRole("button", { name: "Personnaliser" }).click(); const necessary = page.getByLabel(/Strictement nécessaires/); await expect(necessary).toBeChecked(); await expect(necessary).toBeDisabled(); await page.getByLabel(/Mesure d’audience/).check(); await page.getByRole("button", { name: "Enregistrer mes choix" }).click(); expect(await readConsent(page)).toMatchObject({ analytics: true, marketing: false }); }); test("réouverture depuis le pied de page et modification du choix", async ({ page }) => { await page.goto("/"); await page.getByRole("button", { name: "Tout accepter" }).click(); await page.getByRole("button", { name: "Gérer les témoins" }).click(); const dialog = page.getByRole("dialog", { name: /Témoins/ }); await expect(dialog).toBeVisible(); const analytics = page.getByLabel(/Mesure d’audience/); await expect(analytics).toBeChecked(); await analytics.uncheck(); await page.getByRole("button", { name: "Enregistrer mes choix" }).click(); await expect(dialog).toBeHidden(); expect(await readConsent(page)).toMatchObject({ analytics: false, marketing: true }); }); });