3.1.7 Story E2E — board projection + move-as-transition over the real stack (API-level)
Estimate: 18m · Depends on: 3.1.4, 3.1.5, 3.1.6
The closing integration suite for the board backend, driven through the real stack via the 3.1.6 API (there is NO board UI yet — that arrives in Story 3.2, and the full drag-drop Playwright journey + WIP cases live in the Epic-3 test story 3.5). This story’s E2E proves the projection + move contract end-to-end so 3.2 can build the UI against a trusted backend.
A Playwright (API-request) spec tests/e2e/board-projection.spec.ts (or the project’s API-test harness) that, against a freshly seeded project:
GET …/board→ the six default columns in workflow order, cards grouped into the right columns, per-column counts, emptyunmappedStatuses.- Add a custom status (via the 2.2.5 workflow API) →
GET …/boardshows it inunmappedStatuses, in no column. - Seed many cards in one column → the projection returns a bounded first page + count + cursor;
GET …/columns/[id]/cards?cursor=returns the next page (finding #57 — no load-all). POST …/movea card across columns under a legal transition → 200, new status reflected on the issue + in a re-fetched projection.POST …/movean illegal cross-column transition underrestrictedpolicy → 409, the issue status unchanged on re-fetch (the snapback contract 3.2 depends on).POST …/movewithin a column → 200, rank changes, status + column membership unchanged.
This subtask adds the cross-cutting E2E only; the per-method Vitest coverage lives in 3.1.1–3.1.6 (real Postgres). It does NOT duplicate the Epic-3 test story (3.5), which adds the drag-drop UI journey + WIP + swimlane cases once 3.2/3.3 land.
Acceptance criteria
pnpm test:e2e --grep board-projectionruns green against the real stack.- The spec asserts: default-column projection + grouping + counts; unmapped-status surfacing; per-column pagination via cursor; legal move updates status; illegal move → 409 with status unchanged; in-column reorder changes rank only.
- No board UI is asserted (none exists yet); the suite drives the 3.1.6 API directly.
Context refs
tests/e2e/workflow-flow.spec.ts(Story 2.2.7) — the closing-E2E pattern this mirrorstests/e2e/harness +tests/helpers/db.ts— real-Postgres truncation between tests- The 3.1.6 board routes under test; Story 3.5 — the Epic-3 test story this defers the UI journey to