e2e-web (Playwright) #
Headless-web e2e flows for the Streamplace app — the web counterpart to the
mobile .maestro/ suite. Same harness (streamplace e2e), same testIDs, same
flows; a different driver (Playwright headless Chromium) because Maestro is
mobile-only.
How it fits together #
- Harness:
streamplace e2e(seepkg/cmd/e2e.go) boots a node + local PDS/PLC + a looping WHIP test stream and printsSERVER_URL/ACCOUNT_HANDLE/ACCOUNT_DID. The node also serves the web app (embedded via//go:embed all:dist/**), so Playwright just points a browser atSERVER_URL. - Shared testIDs: react-native-web maps
testID->data-testid, so the very same IDs the Maestro flows use (home-stream-card,settings-use-custom-node,settings-custom-node-url,settings-save-node) are Playwright selectors here — no separate web instrumentation. - Server setup: the app ships pointed at production, so
global-setup.tsopens/settings/advanced, enters the test node's URL, and saves the resulting browser state (storageState). Every flow reuses it and starts already pointed at the harness — the web analogue of.maestro/00-server-setup.yaml.
Flow ↔ Maestro parity #
Playwright (flows/) |
Maestro (.maestro/) |
|---|---|
global-setup.ts |
00-server-setup.yaml |
01-smoke.spec.ts |
01-smoke.yaml |
02-tabs.spec.ts |
02-tabs.yaml |
03-go-live.spec.ts |
03-go-live.yaml |
04-stream.spec.ts |
04-stream.yaml |
The web app renders the desktop layout (a sidebar of nav links), not the
mobile tab bar, so a couple of flows adapt to that surface while keeping the
same intent: 02-tabs drives the sidebar (Home ↔ Settings) instead of the tab
bar, and 03-go-live reaches the streaming entry point via the Live Dashboard
(/live), which — logged out — surfaces the same Log In prompt as the mobile
"Go Live → Start streaming" path.
Run it locally #
# once: install the browser
pnpm --filter @streamplace/e2e-web install-browser
# build a streamplace binary that embeds the web app, then run the suite
make dev
hack/e2e-web-local.sh
hack/e2e-web-local.sh starts the harness, waits for SERVER_URL, runs the
flows, and tears the harness down. On a host without the cgo runtime, run it
inside the build container.
Artifacts on failure (traces, screenshots, video) land in test-results/ and a
report in playwright-report/ (pnpm --filter @streamplace/e2e-web report).