← ClaudeAtlas

new-e2e-testlisted

Scaffold a Playwright E2E test in one of the apps that has a Playwright config, matching the existing test fixtures and auth patterns
mattbutlerengineering/mattbutlerengineering · ★ 0 · Testing & QA · score 69
Install: claude install-skill mattbutlerengineering/mattbutlerengineering
# /new-e2e-test — add a Playwright E2E spec Scaffolds a new `*.spec.ts` under `apps/<app>/e2e/` matching the house pattern. ## Apps with Playwright configured - `apps/hospitality` (auth-gated via `authPage` fixture) - `apps/gen` - `apps/marketing` - `apps/rialto-web` ## Gather context Ask (or infer from user's task): 1. **Which app?** One of the four above. 2. **What flow?** One sentence — becomes the test description and file name suffix. 3. **Auth required?** Default yes for hospitality; no for marketing/rialto-web/gen public pages. Auth uses the Resource Owner Password Grant pattern (programmatic Auth0 login via env vars) — never manual browser login. 4. **Route to exercise.** Full path relative to the app's base URL. ## Template — authenticated hospitality test ```typescript import { test, expect } from "./fixtures.js"; test.describe("<flow name>", () => { test("<specific assertion>", async ({ authPage }) => { await authPage.goto("/<route>"); // Assertion 1 — page shell loads await expect(authPage.getByTestId("dashboard-layout")).toBeVisible(); // Assertion 2 — feature-specific // Use getByRole, getByLabel, getByTestId — never CSS selectors await expect(authPage.getByRole("heading", { name: "<expected>" })).toBeVisible(); // Interaction (if any) await authPage.getByRole("button", { name: "<action>" }).click(); // Post-interaction assertion await expect(authPage.getByText("<expected state>")).toBeVisible(); }); }); `