new-e2e-testlisted
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();
});
});
`