Skip to main content

Virtual Care Service — Testing Strategy

Status: populated Owner: TBD Last updated: 2026-04-18 Companion: Service Template · Testing Standards

1. Coverage Targets

LayerTarget
Domain logic (FSM, invariants, token)≥ 90%
Application use cases≥ 85%
Infrastructure adapters≥ 80%
Overall service≥ 80%

2. Test Layers

2.1 Unit Tests

ScenarioFile
Session FSM: valid transitionsvirtual-session.spec.ts
Session FSM: invalid transitions throw domain errorvirtual-session.spec.ts
Session cannot be created without patientvirtual-session.spec.ts
No session row if video backend returns 503create-virtual-session.use-case.spec.ts
Recording requires consent flagvirtual-session.spec.ts
Join token: expiry validationjoin-token.spec.ts
Join token: invalid signature rejectedjoin-token.spec.ts
Participant FSM: valid transitionssession-participant.spec.ts
Async visit: clientMutationId idempotencyasync-visit.spec.ts
Config: credentials never returned in DTOtenant-config.mapper.spec.ts

2.2 Integration Tests (mandatory)

TestFile
Tenant isolation — session query returns only own tenanttenant-isolation.integration.spec.ts
Outbox — session lifecycle events published after commitoutbox.integration.spec.ts
Inbox — scheduling appointment events deduplicatedinbox.integration.spec.ts
RLS blocks cross-tenant session accessrls-enforcement.integration.spec.ts
Consent gate blocks session creation when consent missingconsent-gate.integration.spec.ts
Session creation blocked when backend returns 503video-backend-health.integration.spec.ts
Appointment auto-creates session (event-driven)appointment-handler.integration.spec.ts
Session end triggers FHIR Encounter creationencounter-creation.integration.spec.ts
Async visit clientMutationId deduplicationasync-visit-dedup.integration.spec.ts

2.3 Contract Tests

TestFile
OpenAPI contract — sessions CRUDsessions.pact.spec.ts
OpenAPI contract — join tokenjoin-token.pact.spec.ts
Event schema — session.created.v1session-created.schema.spec.ts
Event schema — session.ended.v1session-ended.schema.spec.ts
Jitsi adapter — mock Jitsi API contractjitsi-meet.pact.spec.ts
FHIR gateway — Encounter creation contractfhir-encounter.pact.spec.ts

2.4 E2E Tests

ScenarioFile
Full session lifecycle: create → join → admit → endsession-lifecycle.e2e.spec.ts
Bandwidth fallback: session fails → fallback messaging createdbandwidth-fallback.e2e.spec.ts
Join token: expired token rejectedjoin-token-expired.e2e.spec.ts
Async visit: submit offline content; verify deduplicationasync-visit.e2e.spec.ts
Tenant isolation: cross-tenant request blockedcross-tenant.e2e.spec.ts

3. Simulation Requirements

  • Jitsi mock server: WireMock stubs for room create (success), room create (503), and health check endpoints.
  • Bandwidth simulation: Tests for fallback must simulate 503 from backend mid-session.
  • Appointment event simulator: NATS message injection for scheduling.appointment.scheduled.v1 with serviceType=VR.

4. Test Data / Seed Requirements

  • 2 tenants: tenant-a (licensed), tenant-b (licensed), tenant-nolicense (unlicensed)
  • 5 providers, 10 patients with telehealth consent on file, 2 patients without consent
  • Pre-created sessions in each lifecycle state for FSM transition tests
  • KMS stub for join token signing in test environment