Testing & QA
QA checklists and automated-test coverage notes for every module we ship to QA.
:::tip Internal-facing
This section is for engineers preparing a module for QA and for QAs running a pre-release pass. It is not user documentation — for user-facing flows, see Modules.
:::
What lives here
- One checklist per module area (e.g. Monetization → Offers, Monetization → Plans, Customer Support → Refunds).
- Each checklist groups test cases by severity and, for Critical + High items, maps them to the unit tests that actually cover them today.
- Each checklist also lists the unit tests worth adding next so the suite can catch the risk going forward.
Why we do it this way
A single document that QA, product and engineering can all read turns "what's been tested?" from a guessing game into a signed-off artifact. It also forces the team to be honest: a Critical item without automation is either a manual-only contract or a gap in the suite.
Available checklists
| Module | Checklist | Status |
|---|---|---|
| Content → Core | Content Core QA Checklists | Active |
| Content → Secondary Video Asset | Secondary Video Asset Functional Parity | Active |
| Monetization → Offers | Offers QA Checklist | Active |
| AppCMS → Common | AppCMS Common QA Checklist | Active |
| AppCMS → Brand | Brand Theme QA Checklist | Active |
| AppCMS → Logo & Images | Logo & Images QA Checklist | Active |
| AppCMS → Settings | Settings QA Checklist | Active |
| AppCMS → Service | Service QA Checklist | Active |
| Customer Support → Chromecast Logs | Chromecast Logs Parity Checklist | Active |
AppCMS network parity is tracked against viewlift-one-prod. Core brand + settings network get/save/publish are at parity; remaining gaps called out in the area checklists (brand version history, settings field gating, admin-network activation controls). Devices/builds are deprecated in cms-v5 (intentional).
When you add a new checklist, add a row here so it's discoverable from one place.
Checklist series in this section
We currently maintain two checklist styles:
- Core smoke checklists (
P0-P3): concise pass/fail release gating for broad feature-path coverage. Entry point: Content Core QA Checklists. - Detailed module plans (
Critical-Low): deeper scenario-level plans with coverage badges and unit-test mapping.
Severity scale
| Severity | Definition |
|---|---|
| Critical | Release blocker. Money, data integrity, access control, irreversible actions. A failure here causes direct harm (charges wrong amounts, leaks data, breaks contracts with customers). |
| High | Core happy paths and guard rails. A failure here breaks the feature's primary job for a meaningful chunk of users. |
| Medium | Edge cases and UX quality. A failure here is annoying but has a workaround. |
| Low | Polish, copy, console noise, minor inconsistencies. |
Rule of thumb: if in doubt between two levels, pick the higher one the first time and downgrade only with evidence.
Unit-test coverage badges
Critical and High items must carry a coverage badge in their title so QA knows where to lean in on manual testing. We use the built-in VitePress <Badge> component with three statuses:
| Badge | Meaning |
|---|---|
<Badge type="tip" text="covered" /> |
A unit/integration test asserts the exact behaviour. QA can treat it as a smoke test and focus elsewhere. |
<Badge type="warning" text="partial" /> |
Related assertions exist but do not close the risk end-to-end, or the existing test codifies the current broken state. |
<Badge type="danger" text="not implemented" /> |
No automation yet. QA must test manually. Usually because the underlying code has no contract to assert against. |
When marking partial, add a one-line gap note inside the item; when marking not implemented, note whether the fix also needs a new assertion in the Unit tests worth adding next table.
How to add a new checklist
- Copy
template.mdinto the appropriate module folder (create subfolders likemonetization/,customer-support/as needed). - Name the file after the module area — e.g.
offers.md,refunds.md. Do not prefix with the module name; the folder does that. - Fill in the checklist. For every Critical and High item, map existing tests by their file path and
describe/itname (grepsrc/__tests__/to find them). - Add a row to the Available checklists table above.
- Register the file in
docs/.vitepress/sidebar.tsunder theTesting & QAblock. - Open a PR and tag the module owner + QA lead.
How to update an existing checklist
- Items are append-only. Adding new items is fine at any time; never renumber existing IDs (QA tickets, spreadsheets, and comments reference them).
- Flip a coverage tag in the same PR that changes the underlying behaviour or test. A
MissingbecomingCoveredis a satisfying diff. - Cross-out an obsolete item by moving it to a small "Retired" section at the bottom of the checklist rather than deleting it, so ticket history remains traceable.
What does not live here
- User-facing step-by-step guides — those belong in Modules.
- Architectural reasoning — ADRs and RFCs.
- Library-level testing docs (e.g. Upload Engine's test surface) — those stay next to the library, like Upload Engine → Testing.
- Backend or E2E test plans — reference them from the checklist but keep them in their own repo.