activity-sport-type: e2e test + register spec in playwright config
- e2e/activity-sport-type.test.ts: register → create activity with a sport → assert the sport badge renders on the detail page. Passes locally against an E2E=true server. - playwright.config.ts: add the `activity-sport-type` project so the spec actually runs (specs only execute if a project testMatch matches them). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
2cb32cd2d3
commit
953c79befe
3 changed files with 40 additions and 3 deletions
29
e2e/activity-sport-type.test.ts
Normal file
29
e2e/activity-sport-type.test.ts
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
import { test, expect, gotoHydrated } from "./fixtures/test";
|
||||
import { setupVirtualAuthenticator, registerUser } from "./helpers/auth";
|
||||
|
||||
test.describe("Activity sport type", () => {
|
||||
test("create an activity with a sport renders the sport badge", async ({ page }) => {
|
||||
const cdp = await page.context().newCDPSession(page);
|
||||
await setupVirtualAuthenticator(cdp);
|
||||
|
||||
const stamp = Date.now();
|
||||
await registerUser(page, `sport-${stamp}@example.com`, `sport${stamp}`);
|
||||
|
||||
await gotoHydrated(page, "/activities/new");
|
||||
|
||||
// Name deliberately avoids the sport word so the badge assertion can't
|
||||
// accidentally match the title.
|
||||
await page.getByLabel("Name").fill("Saturday loop");
|
||||
// exact: the nav avatar button's aria-label is the username ("sport…"),
|
||||
// which a loose "Sport" match would also catch.
|
||||
await page.getByLabel("Sport", { exact: true }).selectOption("gravel");
|
||||
await page.getByRole("button", { name: "Create Activity" }).click();
|
||||
|
||||
// Redirects to the new activity's detail page.
|
||||
await expect(page).toHaveURL(/\/activities\/[0-9a-f-]+$/, { timeout: 10000 });
|
||||
|
||||
// Title plus the localized sport badge ("Gravel").
|
||||
await expect(page.getByRole("heading", { name: "Saturday loop" })).toBeVisible();
|
||||
await expect(page.getByText("Gravel")).toBeVisible();
|
||||
});
|
||||
});
|
||||
|
|
@ -25,6 +25,6 @@
|
|||
## 5. Tests & checks
|
||||
|
||||
- [x] 5.1 Unit: `mapSportType` table (known sports, unknown → `other`, empty → undefined).
|
||||
- [ ] 5.2 Round-trip (create→detail persists `sportType`) — folded into the E2E below.
|
||||
- [ ] 5.3 E2E: create an activity with a sport, assert the badge renders on the detail page.
|
||||
- [ ] 5.4 `pnpm typecheck && pnpm lint && pnpm test && pnpm test:e2e` green. (typecheck/lint/unit green; e2e pending.)
|
||||
- [x] 5.2 Round-trip (create→detail persists `sportType`) — covered by the E2E below.
|
||||
- [x] 5.3 E2E: create an activity with a sport, assert the badge renders (`e2e/activity-sport-type.test.ts`, registered in `playwright.config.ts`). Passes locally against an `E2E=true` server.
|
||||
- [x] 5.4 typecheck + lint + unit all green; the new e2e spec passes locally. Full `pnpm test:e2e` runs in CI.
|
||||
|
|
|
|||
|
|
@ -114,6 +114,14 @@ export default defineConfig({
|
|||
baseURL: "http://localhost:3000",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "activity-sport-type",
|
||||
testMatch: "activity-sport-type.test.ts",
|
||||
use: {
|
||||
...devices["Desktop Chrome"],
|
||||
baseURL: "http://localhost:3000",
|
||||
},
|
||||
},
|
||||
],
|
||||
webServer: process.env.CI
|
||||
? [
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue