Testing
:::info Source
Sourced from services/progress-service/TESTING_STRATEGY.md in the documentation repo.
:::
1. Coverage Targets
| Layer | Line | Branch | Mutation |
|---|---|---|---|
| Domain | 95% | 98% | 80% |
| Application | 90% | 90% | 70% |
| Integration | 80% | — | — |
2. Unit Tests
Attemptstate machine.- Completion detection logic (idempotent on duplicate passing statements).
GradingRuleevaluation (pass/fail threshold).- xAPI statement validation (schema, required fields, verb registry).
- Actor disambiguation (mbox vs account).
- Duration computation (cross-timezone, DST).
3. Integration Tests (Testcontainers)
- Postgres + NATS.
- Ingest 10k statements; verify dedup; verify attempt closure; verify completion event.
- Replay statements from event log; verify projections match.
- Partition detach + archive test.
4. Contract Tests
Pact:
- delivery → progress:
.play_session.completed.v1shape. - assessment → progress:
.attempt_result.scored.v1shape. - progress → certification:
progress.completion.recorded.v1. - progress → assignment: same.
- progress → analytics: same.
OpenAPI diff for /api/v1/*.
5. xAPI Conformance
- ADL xAPI 1.0.3 test suite green on every release.
- cmi5 test suite green.
- xAPI LRS Conformance Badge maintained.
6. E2E Tests
- J-05: complete a course → completion event → certificate issued → transcript shows certificate ref.
- J-11: retake a failed attempt → new attempt → pass → new completion idempotent.
- J-12: airplane-mode — queue 50 statements offline → reconnect → all ingested.
7. Load Tests
- 10k statements/sec sustained ingestion (k6).
- 1M statement query (xAPI
sincewindow) p95 < 2s. - Transcript render for learner with 10k statements p95 < 5s.
8. Chaos Tests
- Kill Postgres primary mid-ingest → verify no statement loss (outbox retained on client).
- Partition Postgres → NATS for 2 min → verify outbox drains on reconnect.
- Corrupt a statement row (manually) → verify Merkle-anchored audit detects.
- Replay 1M statements on fresh DB → verify projections reproduce byte-exact.
9. Offline Tests
- Client queues 1000 statements; reconnects; all ingest.
- Duplicate statements on re-push → deduped on
statementId. - Partial batch failure → successful statements persisted, failed retried.
10. AI Safety Tests
- No AI owned here, but data-contract tests ensure PII redaction for AI consumer layer.
11. Replay Tests
- Event log → rebuild
attempts+completion_recordstables. - Compare row-by-row with previous state; bit-exact for completion records.
- Statements are raw events; log is the statements.
12. Security Tests
- Cross-tenant statement ingestion attempt → rejected.
- Spoofed actor (different userId than JWT
sub) → rejected. - Signed statement with invalid signature → rejected.
- GDPR erasure replay: user deleted, later query returns empty.
13. CI Gates
- Unit + integration pass.
- OpenAPI + xAPI conformance green.
- Pact contracts verified.
- Two-tenant isolation test green.
- Mutation score ≥ 80%.
- Migration fwd+back test green.