7450006ed3
Vitest + @testing-library/jest-dom matchers wired through tests/setup.ts. Playwright with four projects: chromium-desktop, webkit-desktop, chromium-mobile-iphone-13, chromium-mobile-pixel-5; traces and screenshots retained on failure. .gitea/workflows/ui-test.yaml runs Tier 1 on every push and pull request: monorepo Go service tests (backend with -p 1 to dodge testcontainer contention; gateway, game, every pkg/<name> module), pnpm install --frozen-lockfile, playwright install --with-deps, pnpm test, pnpm exec playwright test. Uploads playwright-report and test-results on failure. Integration suite stays gated behind make -C integration integration; deprecated client/ excluded. .gitea/workflows/ui-release.yaml mirrors Tier 1 on v* tag push and keeps commented placeholders for visual regression (Phase 33) and macOS iOS smoke (Phase 32). ui/docs/testing.md documents both tiers and the local invocations that mirror what CI runs. ui/PLAN.md Phase 2 marked done; Phase 3 gains a bullet to extend the go test command with ./ui/core/...; Phase 36 has the renamed release workflow path. tools/local-ci/ ships a self-contained docker-compose for verifying workflows against a local Gitea + arm64 act_runner before pushing to a real instance. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
93 lines
3.4 KiB
Markdown
93 lines
3.4 KiB
Markdown
# UI Testing Tiers
|
|
|
|
UI client test toolchain. Project-wide testing layers (service /
|
|
inter-service / system) live in [`../../docs/TESTING.md`](../../docs/TESTING.md);
|
|
this doc only covers the UI-specific tiers added in Phase 2 of
|
|
[`../PLAN.md`](../PLAN.md).
|
|
|
|
## Tier 1 — per-PR
|
|
|
|
Triggered by `.gitea/workflows/ui-test.yaml` on every push and pull
|
|
request that touches `ui/**`, `backend/**`, `gateway/**`, `game/**`,
|
|
`pkg/**`, `client/**`, `go.work`, or `go.work.sum`. Linux runner only.
|
|
|
|
Runs:
|
|
|
|
- `go test` over the monorepo Go modules, excluding two areas:
|
|
- `integration/` — needs Docker + testcontainers and is the
|
|
project's `make -C integration integration` gate.
|
|
- `client/` — the deprecated Fyne client (see `../PLAN.md` §74) is
|
|
frozen; its tests are not run in CI.
|
|
|
|
The `pkg/<name>/` modules are listed one by one in the workflow
|
|
because they are independent go.work modules and `./pkg/...` does
|
|
not recurse into separate modules. The exact command lives in
|
|
`.gitea/workflows/ui-test.yaml`.
|
|
- `pnpm test` (Vitest + `@testing-library/svelte` +
|
|
`@testing-library/jest-dom`) — component / unit tests under
|
|
`ui/frontend/tests/**/*.test.ts`.
|
|
- `pnpm exec playwright test` — end-to-end smoke against `pnpm run
|
|
dev` on port 5173. Four projects:
|
|
- `chromium-desktop` (Desktop Chrome)
|
|
- `webkit-desktop` (Desktop Safari)
|
|
- `chromium-mobile-iphone-13` (iPhone 13 viewport, Chromium engine)
|
|
- `chromium-mobile-pixel-5` (Pixel 5 viewport, Chromium engine)
|
|
|
|
Playwright traces and screenshots are retained on failure and uploaded
|
|
as Gitea Actions artefacts (`playwright-report` and `playwright-traces`,
|
|
14-day retention).
|
|
|
|
## Tier 2 — release
|
|
|
|
Triggered by `.gitea/workflows/ui-release.yaml` on tag push (`v*`).
|
|
Currently mirrors the Tier 1 step set; the dedicated release-only
|
|
checks land in later phases:
|
|
|
|
- **Visual regression baseline check** — Phase 33. Snapshots live in
|
|
`ui/frontend/tests/__snapshots__/` until the project shifts to
|
|
Argos or another visual-diff service.
|
|
- **iOS smoke (Capacitor + Appium)** — Phase 32. Runs on a `macos-13`
|
|
runner once the Capacitor mobile wrapper exists.
|
|
|
|
Both blocks are present as commented sections in
|
|
`.gitea/workflows/ui-release.yaml` with the phase number that
|
|
re-enables them.
|
|
|
|
## Local execution
|
|
|
|
From `ui/frontend/`:
|
|
|
|
```sh
|
|
pnpm test # Vitest
|
|
pnpm exec playwright install # one-time
|
|
pnpm exec playwright test # all projects
|
|
pnpm exec playwright test --project=chromium-desktop
|
|
pnpm exec playwright show-report # open last HTML report
|
|
```
|
|
|
|
From the repository root, the same scope CI uses (backend serially
|
|
because most packages spawn their own Postgres testcontainer and
|
|
parallel bootstraps starve each other on constrained runners):
|
|
|
|
```sh
|
|
go test -count=1 -p 1 ./backend/...
|
|
go test -count=1 \
|
|
./gateway/... ./game/... \
|
|
./pkg/calc/... ./pkg/connector/... ./pkg/cronutil/... \
|
|
./pkg/error/... ./pkg/geoip/... ./pkg/model/... \
|
|
./pkg/postgres/... ./pkg/redisconn/... ./pkg/schema/... \
|
|
./pkg/storage/... ./pkg/transcoder/... ./pkg/util/...
|
|
```
|
|
|
|
## CI dry-run with `act`
|
|
|
|
Until the Gitea Actions runner is wired up, the workflow is exercised
|
|
locally with [`act`](https://github.com/nektos/act):
|
|
|
|
```sh
|
|
act -W .gitea/workflows/ui-test.yaml --container-architecture linux/amd64
|
|
```
|
|
|
|
`act` reads the workflow as GitHub Actions; the format is
|
|
intentionally compatible.
|