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/buildis 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.tsseeds a fixture account with/collection,/collection/alpha,/collection/beta, and/query-demo.- It spawns
seed-daemon, builds the web app, and serves it onhttp://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) withcreateDocumentUpdatefromfrontend/apps/cli/src/test/account-helpers.tsto mutate a document's query blockstyle(Table/List/Card) without needing browser auth. - For a collection document,
query.includesshould be[{space:"", path:"", mode:"Children"}]to matchcreateDefaultCollectionQueryBlocksemantics.
Useful UI selectors
- Collection header:
[aria-label="Search documents"], buttonsFilter,Sort,Attributes. - View toggle:
buttontextTable,List,Cards(note: noGraph). - Query settings:
button[aria-label="Query settings"]. - Filter popover:
buttontextAdd filter,input[aria-label="Filter value"]. - Sort popover:
buttonAsc/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
Selectin popovers: Programmatic.click()on[aria-selected]options is unreliable. PreferSelectFieldvalue/onValuechanges or keyboard navigation. - Controlled
InputinFilterPopover: Settinginput.valueand dispatchinginput/changeevents works for the search input but may not triggeronChangeTextinside 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
computertool 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
navigateCardstoQueryBlockContentto be clickable.