3.8 KiB
QA procedure: Integration page, every API-key route documented
No Go test: SPA only, no /v1 call, no API change. Samples and counts follow the real API; where the board differs (purge response, built-in type samples) the API wins.
Automated SPA (Vitest + Vue Test Utils, task test:web)
Files: extend web/src/views/__tests__/IntegrationView.spec.ts, web/src/views/__tests__/IntegrationSearch.spec.ts and the pure matcher spec if present. Same setup as the existing specs (router at /integration, stubbed scroll helpers, fake timers for the flash). No test freezes the system date. Also correct the superseded figures in the existing specs.
Cases (it.each for outlines):
- Index order, 14 items, desktop index and mobile select.
- Group table: titles, counts (Articles 8, Media 11, Sites and authors 2, "1 route" singular for Settings), method, path and access chip per route, "API key OK" chip.
ct-fieldsanchor above the first Content types route, not an index item; Field types table rows; sample field object.- PUT badge colours equal the PATCH colours.
- Expanded card outline: request or query fields and error rows for the eight routes of the outline, with code-style captions.
- Response samples: entries list shape, entry sample keys,
mediakeyed by field key, built-in type has noicon, purge response has exactly the seven keys, purge-settings keys, POST cards without a status line. - GET /v1/media/: Query parameters (page, size), object response, 400 "The media query is invalid.". Real API: no X-Total-Count header and no "Invalid page or size." on media.
- GET /v1/author/ page and size; GET /v1/site/.
- Session only: derived "37 routes", six sub-groups in order, every
/v1/systemroute in System (PATCH /v1/settings joins it), DELETE /v1/auth/register under Sign in and account, row styling, unchanged banner. - Errors table: eight rows (400, 401, 403, 404, 409, 422, 429, 500), both 403 texts plus the note, new 404 codes, 409 and 422 content, literal-body note, old "no 409 or 422 row" sentence absent.
- Authentication copy.
- Search: index size 85 (42 documented, 37 session-only, 6 public auth); each query of the outline with its announced count and second line; "entry" matches "entries"; cap line singular and plural.
- Select PUT /v1/content-type/{key}: card expanded and focused, flash class then removed after 1500 ms, hash
#ep-ct-update, index reads "Content types". - Scroll-spy marks Content types (state 9j).
- Regression: the existing cases still pass.
Visual (task visual:check -- integration, desktop and mobile, light and dark)
References: docs/design/screens/integration.md, docs/design/source/IntegrationPage.dc.html, IntegrationSearch.dc.html, states of RenewCMS Screens Back-office.dc.html. Add setups to web/visual/states.ts with no /v1 call unmocked, using the board's sample data (events type, entry sample, fingerprint c41f9a7e).
| state | setup |
|---|---|
| 8c, 8d, 8f | updated counts |
| 9a | scroll to ct-fields, open ct-create on curl |
| 9b | open en-list on Response |
| 9c | open en-update on fetch |
| 9d | scroll to errors |
| 9e | scroll to session |
| 9f to 9i | search "entry", "capacity", "schema_incompatible", "content type" |
| 9j | scroll-spy on Content types; mobile Jump to open |
No clock-sensitive state exists. A diff exception needs the user's explicit approval.
Manual checks (screenshots cannot cover)
- The search palette and the Session only list on mobile (design tool did not confirm them), and dark mode.
- Keyboard and focus order across the new groups, hover, the 1.5 s flash and its reduced-motion ring.
- Scroll offset under the sticky bar for
ct-fieldsand the last Session only sub-group. - Long paths such as
/v1/content-type/{key}/entry/{id}ellipsise in collapsed rows and in the palette on mobile.