Skip to main content

Communication Service — Testing Strategy

Status: populated Owner: TBD Last updated: 2026-04-17 Companion: Service Template · Testing standards

1. Coverage targets

LayerStatementsBranches
Domain≥ 95%≥ 90%
Application (use cases)≥ 90%≥ 85%
Infrastructure≥ 75%≥ 70%
Presentation≥ 80%≥ 75%
Service overall≥ 85%≥ 80%

Aligned to NFR-DCOM-007.

2. Unit tests

  • Domain: state machines (MessageThread, VirtualSession), invariants (non-empty body, terminal-state rejection, participant-only writes), value objects (Urgency, Channel).
  • Use cases: mocked ports; validate orchestration including outbox writes and error mapping.
  • Template renderer: golden tests per locale including RTL.
  • No I/O in unit tests.

3. Integration tests (mandatory set)

TestFileRequirement
Tenant isolationtest/integration/tenant-isolation.spec.tsTwo tenants cannot read each other's threads / intents / sessions
Outbox patterntest/integration/outbox.spec.tsMessage insert commits outbox row in same tx; relay publishes exactly-once
Inbox dedupetest/integration/inbox.spec.tsRe-delivered scheduling.appointment.created creates at most one virtual session
Idempotencytest/integration/idempotency.spec.tsSame Idempotency-Key returns prior response
Thread RLStest/integration/thread-rls.spec.tsRLS prevents direct SQL cross-tenant leak
Virtual session lifecycletest/integration/vs-lifecycle.spec.tsEnd-to-end state machine including fallback

4. Contract tests

ContractCounterpartyFramework
/v1/communication/* OpenAPIehr-web, patient-mobile, clinician-mobileOpenAPI diff + Pact
ghasi.digital_communication.* event schemasall consumersJSON Schema conformance
SmsProvider adapterGhasi-SMS-GatewayPact (consumer)
PushNotificationProvider adapterFCM / APNsAdapter harness with sandbox
EmailProvider adapterSES / SendGridAdapter harness
VirtualMeetingProviderJitsiContract test against Jitsi sandbox
FHIR Communication writeinterop-servicePact

5. E2E scenarios (Playwright / Detox)

ScenarioPersona
Clinician sends provider-provider messagePhysician
Clinician sends patient message + patient reads via portalPhysician + Patient
Scheduled virtual visit: patient joins waiting room, provider admits, session endsBoth
Virtual session fails mid-call → fallback thread auto-createdProvider
Appointment reminder via Ghasi-SMS-GatewayPatient
Critical-result escalation fans out to push + SMS + in-appPhysician

6. Load & chaos

  • Load: 500 msg/s sustained, 2000 msg/s burst per tenant (test with K6).
  • Chaos: SMS adapter latency injection; NATS reconnect storm; DLR flood; check SLOs hold.

7. Security / compliance tests

  • PHI-never-in-push: dispatch unit tests assert no message body field in push payload.
  • Cross-tenant participant rejection.
  • Join-token reuse denied.
  • Attachment virus simulation (EICAR) → quarantine + event.

8. Test data

  • Fake providers registered via DI in NODE_ENV=test.
  • Seed data: two tenants, 5 clinicians each, 20 patients each, 50 threads.