mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 20:42:43 +00:00
Upload a synthetic export.zip on the import card, wait out the queued job through the card's own status poll, and read the imported readings back off the measurements list with the units the parser resolved. Weight, the blood-pressure pair and the step count are asserted; the walking-distance case is written and skipped, naming issue #944 — a record written in km lands as metres today, and the assertion is kept at full strength so the fix has something to turn green. The refusing control uploads a valid ZIP with no export.xml: the card surfaces the extractor's own refusal and the account's Apple Health row count does not move. Measurement rows now carry data-measurement-type / -value / -unit beside the rendered cell, on both the desktop table and the mobile list, so an assertion binds to the reading rather than to whatever the locale formatter made of it. The import card's error line gets a test id for the same reason.
25 lines
2.2 KiB
Markdown
25 lines
2.2 KiB
Markdown
# `e2e/`
|
|
|
|
End-to-end browser tests. Playwright 1.60 drives a production build of the app against a real PostgreSQL, with `@axe-core/playwright` for accessibility assertions. This is the heaviest test tier; CI runs it on every PR, and locally it is worth running when a change touches a UI flow.
|
|
|
|
## Running
|
|
|
|
```bash
|
|
pnpm e2e
|
|
```
|
|
|
|
The Playwright config (`../playwright.config.ts`) builds the app (`next build`) and brings up Postgres before the specs run; `setup/global-setup.ts` seeds the auth + fixture state. The suite is not part of the fast local gate (`typecheck` / `lint` / `test`) — it surfaces at PR CI, so expect responsive/wizard/nav reworks to flag here first.
|
|
|
|
## Layout
|
|
|
|
- **`setup/`** — `test.ts` (the suite's `test` + `expect` entry point), `global-setup.ts` (auth + DB seeding), `test-helpers.ts` (shared login + navigation helpers).
|
|
- **`utils/`** — fixtures such as `mock-dashboard-snapshot.ts`.
|
|
- **`fixtures/`** — synthetic payloads a journey uploads, built in code rather than committed as blobs so the content stays reviewable (`apple-health-export.ts`).
|
|
- **`*.spec.ts`** — one spec per flow: auth/login/redirect, dashboard, charts, the medication-wizard cadences (`medications-wizard-*`), insights generation + scroll restoration, doctor report, settings, mobile-viewport consistency, locale switch, accessibility (`a11y.spec.ts`), and the `v1427-*` regression set.
|
|
|
|
## Conventions
|
|
|
|
Import `test` and `expect` from `./setup/test`, never from `@playwright/test` — types (`Page`, `Route`, …) still come from the package. The entry point extends Playwright's `test` with an automatic fixture that drops route handlers and page listeners after every test, so a handler left in flight cannot fail the test it belonged to once the context closes. `src/__tests__/e2e-route-cleanup-guard.test.ts` enforces the import boundary.
|
|
|
|
Assert against stable `data-*` attributes (`data-slot`, `data-display-step`, root display attrs), not viewport-dependent visible text. Responsive `sm:hidden` UI changes break `getByText` on desktop while the underlying element is still present — anchoring on data attributes keeps the specs stable across breakpoints. See [`../CLAUDE.md`](../CLAUDE.md).
|