SPB Git

spb/phi-conseil

Public
2.6 KB · 56 lines typescript
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
Files · main
Menu

Theme