Files
clawmates/frontend/tests/e2e/p7-marketing.spec.ts
T
Omar SobhandClaude Opus 4.8 5638006eb6
ci / gates (push) Has been cancelled
ci / rust (push) Has been cancelled
ci / sandbox-k8s (push) Has been cancelled
ci / frontend (push) Has been cancelled
ci / e2e (push) Has been cancelled
feat(marketing): trim landing to hero, crew, hierarchy, security
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]>
2026-06-15 16:06:05 -07:00

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([]);
});