Testing
:::info Source
Sourced from services/catalog-service/TESTING_STRATEGY.md in the documentation repo.
:::
1. Coverage Targets
Domain 95% / 98% / 80% mutation. Integration 80%.
2. Unit Tests
- Course + CourseVersion invariants (TenantId, visibility transitions).
- SemVer version comparison.
- Taxonomy tree validation (no cycles; depth ≤ 10).
- Slug uniqueness per tenant.
- Visibility state transitions.
3. Integration Tests
- Postgres + NATS.
- Flow: consume
content.play_package.built.v1→ register CourseVersion → emitcatalog.course_version.published.v1. - Taxonomy reassignment batch.
- Withdrawal cascade (informs search, marketplace).
4. Contract Tests
- catalog ← content:
play_package.built.v1. - catalog → authoring (consumer of publish saga).
- catalog → search:
course_version.published.v1. - catalog → marketplace: same.
- OpenAPI diff in CI.
5. E2E
- J-05: draft publish → catalog version registered → searchable.
- J-14: course withdrawal → marketplace listings suspended.
6. Load Tests
- 10k concurrent catalog browses → p95 < 300ms.
- 100 concurrent publishes → saga end-to-end < 60s.
7. Chaos
- Duplicate publish event → idempotent (one CourseVersion registered).
- Event order reversed (bundle.published before play_package.built) → version still correct (idempotent processing).
8. Security Tests
- Cross-tenant catalog read → respects visibility.
- Marketplace visibility cannot be set by author without publisher role.
9. CI Gates
Unit + integration + Pact + OpenAPI + two-tenant iso + mutation ≥ 80%.