Testing Seed web app (collection/query UI)
When to use
Use this skill when verifying the Seed web app's collection pages, query blocks, or shared QueryBlockContent component
end-to-end.
Devin Secrets Needed
None for the fixture-account read-only path. Authenticated editing requires an account whose signing keys are available
in the test environment; this machine's Chrome does not support Web Crypto Ed25519, so publish/draft-flow UI cannot be
exercised in the browser.
One-time per session
- Build the daemon if
plz-out/bin/backend/seed-daemon-* is missing:
./pleasew build //backend/cmd/seed-daemon (or equivalent for your platform).
- Build the web app if
frontend/apps/web/build is missing or stale:
cd frontend/apps/web && pnpm --filter @shm/web build
- The build embeds
VITE_COMMIT_HASH; confirm it matches the commit under test.
- Start the integration test environment:
bun tests/integration/seed-collection-ui.ts seeds a fixture account with /collection, /collection/alpha,
/collection/beta, and /query-demo.
- It spawns
seed-daemon, builds the web app, and serves it on http://localhost:3399.
- Data dirs are created under
/tmp/seed-integration-*.
Fixture manipulation
- The fixture account DID is
z6MkhMSRCyK9KkAzTmzTKSfuNMaEuYZUJacWmbqiHYkCQgSW.
- Use
bun tests/integration/update-style.ts (or a temporary copy) with createDocumentUpdate from
frontend/apps/cli/src/test/account-helpers.ts to mutate a document's query block style (Table/List/Card)
without needing browser auth.
- For a collection document,
query.includes should be [{space:"", path:"", mode:"Children"}] to match
createDefaultCollectionQueryBlock semantics.
Useful UI selectors
- Collection header:
[aria-label="Search documents"], buttons Filter, Sort, Attributes.
- View toggle:
button text Table, List, Cards (note: no Graph).
- Query settings:
button[aria-label="Query settings"].
- Filter popover:
button text Add filter, input[aria-label="Filter value"].
- Sort popover:
button Asc/Desc.
- Attributes popover: switches with column labels.
Known limitations and workarounds
- Browser auth / publish flow: The bundled Chrome on this machine lacks Web Crypto
Ed25519. Don't try to log in or
publish from the web app. Test draft/publish flows in the desktop app or another environment.
- Radix
Select in popovers: Programmatic .click() on [aria-selected] options is unreliable. Prefer
SelectField value/onValue changes or keyboard navigation.
- Controlled
Input in FilterPopover: Setting input.value and dispatching input/change events works for the
search input but may not trigger onChangeText inside the filter popover. If filter UI manipulation is critical, use
native keyboard typing or set query props server-side and reload.
- Coordinate scaling: The desktop is 1600×1069 but the
computer tool uses a 1024×768 coordinate space. Coordinates
are mapped automatically; prefer querying elements from the DOM and dispatching trusted events over fragile pixel
clicks.
Verification checklist for collection/query PRs
- Collection header: Table/List/Cards toggle (no Graph), Filter/Sort/Attributes, search, settings menu.
- Table/List/Card views render the expected documents.
- Search and sort update results.
- Filter model (
filterQueryTableItems) handles date/number comparisons.
- Query block inside a document renders the same views without the collection header.
- Query-block Card view whole-card link navigates; collection Card view must pass
navigateCards to
QueryBlockContent to be clickable.
1---2name: testing-seed-web-app-collection-query-ui3description: How to run end-to-end UI tests against the Seed web app for collection and query block features.4---5
6# Testing Seed web app (collection/query UI)
7
8## When to use
9
10Use this skill when verifying the Seed web app's collection pages, query blocks, or shared `QueryBlockContent` component
11end-to-end.
12
13## Devin Secrets Needed
14
15None for the fixture-account read-only path. Authenticated editing requires an account whose signing keys are available
16in the test environment; this machine's Chrome does not support Web Crypto `Ed25519`, so publish/draft-flow UI cannot be
17exercised in the browser.
18
19## One-time per session
20
211. Build the daemon if `plz-out/bin/backend/seed-daemon-*` is missing:
22 - `./pleasew build //backend/cmd/seed-daemon` (or equivalent for your platform).
232. Build the web app if `frontend/apps/web/build` is missing or stale:
24 - `cd frontend/apps/web && pnpm --filter @shm/web build`
25 - The build embeds `VITE_COMMIT_HASH`; confirm it matches the commit under test.
263. Start the integration test environment:
27 - `bun tests/integration/seed-collection-ui.ts` seeds a fixture account with `/collection`, `/collection/alpha`,
28 `/collection/beta`, and `/query-demo`.
29 - It spawns `seed-daemon`, builds the web app, and serves it on `http://localhost:3399`.
30 - Data dirs are created under `/tmp/seed-integration-*`.
31
32## Fixture manipulation
33
34- The fixture account DID is `z6MkhMSRCyK9KkAzTmzTKSfuNMaEuYZUJacWmbqiHYkCQgSW`.
35- Use `bun tests/integration/update-style.ts` (or a temporary copy) with `createDocumentUpdate` from
36 `frontend/apps/cli/src/test/account-helpers.ts` to mutate a document's query block `style` (`Table`/`List`/`Card`)
37 without needing browser auth.
38- For a collection document, `query.includes` should be `[{space:"", path:"", mode:"Children"}]` to match
39 `createDefaultCollectionQueryBlock` semantics.
40
41## Useful UI selectors
42
43- Collection header: `[aria-label="Search documents"]`, buttons `Filter`, `Sort`, `Attributes`.
44- View toggle: `button` text `Table`, `List`, `Cards` (note: no `Graph`).
45- Query settings: `button[aria-label="Query settings"]`.
46- Filter popover: `button` text `Add filter`, `input[aria-label="Filter value"]`.
47- Sort popover: `button` `Asc`/`Desc`.
48- Attributes popover: switches with column labels.
49
50## Known limitations and workarounds
51
52- **Browser auth / publish flow**: The bundled Chrome on this machine lacks Web Crypto `Ed25519`. Don't try to log in or
53 publish from the web app. Test draft/publish flows in the desktop app or another environment.
54- **Radix `Select` in popovers**: Programmatic `.click()` on `[aria-selected]` options is unreliable. Prefer
55 `SelectField` `value`/`onValue` changes or keyboard navigation.
56- **Controlled `Input` in `FilterPopover`**: Setting `input.value` and dispatching `input`/`change` events works for the
57 search input but may not trigger `onChangeText` inside the filter popover. If filter UI manipulation is critical, use
58 native keyboard typing or set query props server-side and reload.
59- **Coordinate scaling**: The desktop is 1600×1069 but the `computer` tool uses a 1024×768 coordinate space. Coordinates
60 are mapped automatically; prefer querying elements from the DOM and dispatching trusted events over fragile pixel
61 clicks.
62
63## Verification checklist for collection/query PRs
64
651. Collection header: Table/List/Cards toggle (no Graph), Filter/Sort/Attributes, search, settings menu.
662. Table/List/Card views render the expected documents.
673. Search and sort update results.
684. Filter model (`filterQueryTableItems`) handles date/number comparisons.
695. Query block inside a document renders the same views without the collection header.
706. Query-block Card view whole-card link navigates; collection Card view must pass `navigateCards` to
71 `QueryBlockContent` to be clickable.