mirror of
https://github.com/mgeeky/decode-spam-headers.git
synced 2026-02-22 05:23:31 +01:00
79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
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);
|
|
});
|