Skip to main content

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 → emit catalog.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%.