Remove the Pitch, One-click, Works, Always-on and Skills sections and the "Build your AI crew" footer CTA banner. Page is now Hero → CrewStrip → Hierarchy → Security → FAQ → footer (dark tier kept). Prune the now-dead section functions, consts, and imports (Image, skills icons). Repoint the "marketing rendered" heading assertion (p0/p7/visual) from the removed Pitch heading to the hero h1 (/agentic systems/); refresh the @visual baseline. Co-Authored-By: Claude Opus 4.8 <[email protected]>
43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import AxeBuilder from "@axe-core/playwright";
|
|
import { expect, test } from "@playwright/test";
|
|
|
|
// R5: the public marketing landing serves at "/" for logged-out visitors
|
|
// (middleware rewrite → /marketing), with our brand and honest claims.
|
|
|
|
test("the marketing landing renders for logged-out visitors @marketing", async ({
|
|
page,
|
|
context,
|
|
}) => {
|
|
await context.clearCookies();
|
|
await page.goto("/");
|
|
// Hero + nav + our wordmark.
|
|
await expect(
|
|
page.getByRole("heading", { name: /agentic systems/i }),
|
|
).toBeVisible();
|
|
await expect(
|
|
page.getByRole("link", { name: "Book a demo" }).first(),
|
|
).toBeVisible();
|
|
// FAQ accordion: the first item is open by default; expand another.
|
|
await expect(page.getByText(/A claw is an AI coworker/)).toBeVisible();
|
|
await page.getByRole("button", { name: /run it on my own/i }).click();
|
|
await expect(page.getByText(/air-gapped/i).first()).toBeVisible();
|
|
// No SOC 2 / compliance claims (we don't make them).
|
|
await expect(page.getByText(/SOC 2/i)).toHaveCount(0);
|
|
});
|
|
|
|
test("the marketing landing is accessible @marketing", async ({
|
|
page,
|
|
context,
|
|
}) => {
|
|
await context.clearCookies();
|
|
await page.goto("/");
|
|
await page.evaluate(() =>
|
|
Promise.allSettled(document.getAnimations().map((a) => a.finished)),
|
|
);
|
|
const results = await new AxeBuilder({ page }).analyze();
|
|
const blocking = results.violations.filter(
|
|
(v) => v.impact === "serious" || v.impact === "critical",
|
|
);
|
|
expect(blocking.map((v) => v.id)).toEqual([]);
|
|
});
|