Skip to main content

Laboratory Service — Testing Strategy

Status: populated Owner: TBD Last updated: 2026-04-18 Companion: Service Template · 03 platform-services · 02 DDD


1. Coverage Targets

LayerTarget
Unit≥ 80% statement coverage
IntegrationAll use cases have at least one integration test
ContractAll REST endpoints have Pact tests; all events have schema tests
E2ECritical paths: accession → verify → release; critical value escalation

2. Mandatory Tests

Test fileWhat it covers
test/integration/tenant-isolation.spec.tsRequests from one tenant cannot read/write another tenant's data
test/integration/outbox.spec.tsDomain commands produce events in outbox; relay publishes them
test/integration/inbox.spec.tsclinical.orders.placed event processed idempotently

3. Unit Test Scenarios

ModuleKey scenarios
AccessionStateMachineAll valid and invalid transitions; cancellation rules
LabResultStateMachineDraft → verified → released; correction chain
CriticalValuePolicyEngineValues above/below threshold trigger critical flag; no false positives
AccessionNumberGeneratorUniqueness per tenant per day; format validation
ResultValueValidatorNumeric/text/boolean mutually exclusive constraints
AbnormalFlagCalculatorFlag derivation from reference range vs value

4. Integration Test Scenarios

ScenarioDescription
Order event → accession creationPublish clinical.orders.placed; assert accession created and diag.laboratory.accession.created published
Full LIS lifecycleCreate accession → collect → receive → enter result → verify → release; assert FHIR resources created
Critical value flowEnter result above critical threshold; assert diag.laboratory.critical.triggered published
Correction chainRelease result → correct → assert new version, prior version marked superseded
Duplicate inbox eventReplay clinical.orders.placed with same event ID; assert idempotent (no duplicate accession)
FHIR publish failureSimulate FHIR gateway unavailable; assert release queued in outbox; assert retry on reconnect

5. Contract Tests

ContractTypeConsumer
GET /v1/laboratory/accessionsPact providerAny consuming UI
POST /v1/laboratory/results/{id}/verifyPact providerLab UI
diag.laboratory.result.released schemaJSON schemapatient-chart-service, patient-portal-service
diag.laboratory.critical.triggered schemaJSON schemacommunication-service
GET /fhir/R4/ObservationFHIR conformanceinterop-service, patient-chart-service

6. E2E Test Scenarios (Playwright)

ScenarioPriority
Clinician views released lab results in chartP0
Lab tech creates accession and enters results from orderP0
Pathologist releases results and chart updatesP0
Critical value triggers visible alert in clinician inboxP1
Clinician acknowledges critical result and escalation stopsP1
Lab admin creates test catalog item with LOINC validationP2

7. Performance Tests

TestTarget
Worklist retrieval (1000 accessions)< 2 s p95
Result ingestion burst (50 results/s)No errors; outbox lag < 30 s
Trending query (12 months, 1 analyte)< 2 s p95