Mortar contribution checks / Mortar baseline and browser checks (push) Successful in 3m15s
34 lines
1.2 KiB
JavaScript
34 lines
1.2 KiB
JavaScript
import { test, expect } from "@playwright/test";
|
|
import AxeBuilder from "@axe-core/playwright";
|
|
import { readFile } from "node:fs/promises";
|
|
const { components } = JSON.parse(
|
|
await readFile(new URL("../../catalog.json", import.meta.url), "utf8"),
|
|
);
|
|
for (const component of components)
|
|
for (const theme of ["light", "dark"])
|
|
test(`${component.export} ${theme}`, async ({ page }) => {
|
|
const errors = [];
|
|
page.on("pageerror", (e) => errors.push(e.message));
|
|
await page.goto(`/?component=${component.export}&theme=${theme}`);
|
|
await expect(
|
|
page.getByRole("heading", { name: "Mortar playground" }),
|
|
).toBeVisible();
|
|
await expect(
|
|
page.getByRole("status", { name: "Loading preview…" }),
|
|
).toHaveCount(0);
|
|
await expect(page.locator("[data-mortar-appearance]")).toHaveAttribute(
|
|
"data-mortar-appearance",
|
|
theme,
|
|
);
|
|
const results = await new AxeBuilder({ page })
|
|
.withTags(["wcag2a", "wcag2aa", "wcag21aa"])
|
|
.analyze();
|
|
expect(
|
|
results.violations.map((v) => ({
|
|
id: v.id,
|
|
nodes: v.nodes.map((n) => n.target),
|
|
})),
|
|
).toEqual([]);
|
|
expect(errors).toEqual([]);
|
|
});
|