Status. Proposed design only. Nothing in this vault is DG client approval. No application, service or test has been executed; every scenario is Not executed. Fees and dates are open.
Test strategy
Purpose
How scenarios become automated evidence, once code exists. Nothing here has been run.
Source notes
Implementation-Order-Overview, Dependency-and-Regression-Table, Scenario-Evidence-Rules, Acceptance-Gates-A01-A11.
Method
Tests first. For each step, write the failing tests of its tests-first subset, implement the minimum, refactor without changing the observable contract. Scenario IDs stay stable and appear in test names.
Layers (Proposed)
| Layer | Tool | Used for |
|---|---|---|
| API and integration | pytest against a real PostgreSQL | Pipeline, isolation, versions, idempotency, outbox, worker |
| Component | Vitest with Testing Library | UI behaviour and accessible names |
| End to end | Playwright | Journeys, responsive layout, accessibility checks |
| Manual | Staff rehearsal records | DG manual services (DG-Manual-Services) |
Required test shapes
- Cross-company denial wherever access is involved, using the three-company canary fixture (Company-Isolation).
- Race and idempotency: duplicate submit, double accept, approval versus revocation (T16, T18).
- Outbox: state and event commit together; duplicate and ambiguous sends reconcile (T33, T35).
- Clock control: overdue and expiry use the
Clockport (Integration-Ports, T31). - Accessibility: checked in end-to-end runs for responsive layouts (T39).
Evidence and status
A scenario is not Passed by unit tests; see Scenario-Evidence-Rules. Inventory: Scenario-Inventory. Coverage: Coverage-Matrix. Regression: Cross-Module-Impact-Matrix.
Open decisions
Load, recovery and accessibility targets are Blocked by Q09; a target nobody agreed is not measured as a pass. A coverage floor is not proposed yet; record it as an ADR when apps/ exists.
What CI runs
See Build-Test-and-Deployment and ADR-0005-CI-on-Every-Pull-Request.
Change history
| Date | Change |
|---|---|
| 2026-10-20 | Created (bootstrap Phase 2) |