mirror of
https://github.com/mgeeky/decode-spam-headers.git
synced 2026-02-22 05:23:31 +01:00
MAESTRO: add accessibility e2e audit
This commit is contained in:
78
frontend/e2e/accessibility.spec.ts
Normal file
78
frontend/e2e/accessibility.spec.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import { test, expect } from "@playwright/test";
|
||||
import type { Page } from "@playwright/test";
|
||||
import { AxeBuilder } from "@axe-core/playwright";
|
||||
import fs from "fs/promises";
|
||||
import path from "path";
|
||||
|
||||
import { AnalyzerPage } from "./pages/analyzer-page";
|
||||
|
||||
const headersPath = path.resolve(__dirname, "fixtures/sample-headers.txt");
|
||||
const axeTags = ["wcag2a", "wcag2aa", "wcag21aa"];
|
||||
|
||||
const runAxeAudit = async (page: Page) => {
|
||||
const results = await new AxeBuilder({ page }).withTags(axeTags).analyze();
|
||||
expect(results.violations).toEqual([]);
|
||||
};
|
||||
|
||||
test("accessibility audit covers landing page states", async ({ page }) => {
|
||||
const headers = await fs.readFile(headersPath, "utf8");
|
||||
const analyzer = new AnalyzerPage(page);
|
||||
|
||||
await analyzer.goto();
|
||||
await expect(page.getByRole("textbox", { name: "Header Input" })).toBeVisible();
|
||||
await runAxeAudit(page);
|
||||
|
||||
await analyzer.pasteHeaders(headers);
|
||||
await runAxeAudit(page);
|
||||
});
|
||||
|
||||
test("accessibility audit covers report view", async ({ page }) => {
|
||||
const headers = await fs.readFile(headersPath, "utf8");
|
||||
const analyzer = new AnalyzerPage(page);
|
||||
|
||||
await analyzer.goto();
|
||||
await analyzer.pasteHeaders(headers);
|
||||
await analyzer.clickAnalyse();
|
||||
await analyzer.waitForResults();
|
||||
|
||||
await runAxeAudit(page);
|
||||
});
|
||||
|
||||
test("accessibility audit covers captcha modal", async ({ page }) => {
|
||||
const headers = await fs.readFile(headersPath, "utf8");
|
||||
const analyzer = new AnalyzerPage(page);
|
||||
|
||||
const captchaChallenge = {
|
||||
challengeToken: "playwright-challenge-token",
|
||||
imageBase64:
|
||||
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4nGP4z8DwHwAFgwJ/l0pNqQAAAABJRU5ErkJggg==",
|
||||
};
|
||||
|
||||
const corsHeaders = {
|
||||
"access-control-allow-origin": "http://localhost:3100",
|
||||
"access-control-allow-credentials": "true",
|
||||
};
|
||||
|
||||
await page.route("**/api/analyse", async (route) => {
|
||||
await route.fulfill({
|
||||
status: 429,
|
||||
contentType: "application/json",
|
||||
headers: {
|
||||
...corsHeaders,
|
||||
"retry-after": "60",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
error: "Too many requests",
|
||||
retryAfter: 60,
|
||||
captchaChallenge,
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
await analyzer.goto();
|
||||
await analyzer.pasteHeaders(headers);
|
||||
await analyzer.clickAnalyse();
|
||||
|
||||
await expect(analyzer.getCaptchaModal()).toBeVisible();
|
||||
await runAxeAudit(page);
|
||||
});
|
||||
Reference in New Issue
Block a user