spb/phi-conseil
Public
1import { test, expect } from "@playwright/test";2import AxeBuilder from "@axe-core/playwright";34const readConsent = async (page: import("@playwright/test").Page) => {5 const c = (await page.context().cookies()).find((k) => k.name === "phi_consent");6 return c7 ? (JSON.parse(decodeURIComponent(c.value)) as { analytics: boolean; marketing: boolean })8 : null;9};1011test.describe("gestion des témoins", () => {12 test("bannière visible sans choix, accessible, puis « Tout refuser »", async ({ page }) => {13 await page.goto("/");14 const dialog = page.getByRole("dialog", { name: /Témoins/ });15 await expect(dialog).toBeVisible();16 const axe = await new AxeBuilder({ page }).include("[role=dialog]").analyze();17 expect(axe.violations.map((v) => v.id)).toEqual([]);18 await dialog.getByRole("button", { name: "Tout refuser" }).click();19 await expect(dialog).toBeHidden();20 expect(await readConsent(page)).toMatchObject({ analytics: false, marketing: false });21 await page.reload();22 await expect(page.getByRole("dialog", { name: /Témoins/ })).toHaveCount(0);23 });2425 test("« Tout accepter » enregistre les deux catégories", async ({ page }) => {26 await page.goto("/");27 await page.getByRole("button", { name: "Tout accepter" }).click();28 expect(await readConsent(page)).toMatchObject({ analytics: true, marketing: true });29 });3031 test("« Personnaliser » : choix granulaire, nécessaires verrouillés", async ({ page }) => {32 await page.goto("/");33 await page.getByRole("button", { name: "Personnaliser" }).click();34 const necessary = page.getByLabel(/Strictement nécessaires/);35 await expect(necessary).toBeChecked();36 await expect(necessary).toBeDisabled();37 await page.getByLabel(/Mesure d’audience/).check();38 await page.getByRole("button", { name: "Enregistrer mes choix" }).click();39 expect(await readConsent(page)).toMatchObject({ analytics: true, marketing: false });40 });4142 test("réouverture depuis le pied de page et modification du choix", async ({ page }) => {43 await page.goto("/");44 await page.getByRole("button", { name: "Tout accepter" }).click();45 await page.getByRole("button", { name: "Gérer les témoins" }).click();46 const dialog = page.getByRole("dialog", { name: /Témoins/ });47 await expect(dialog).toBeVisible();48 const analytics = page.getByLabel(/Mesure d’audience/);49 await expect(analytics).toBeChecked();50 await analytics.uncheck();51 await page.getByRole("button", { name: "Enregistrer mes choix" }).click();52 await expect(dialog).toBeHidden();53 expect(await readConsent(page)).toMatchObject({ analytics: false, marketing: true });54 });55});56