Update handoff test
This commit is contained in:
@@ -1,93 +1,67 @@
|
|||||||
import { describe, it, expect } from 'vitest'
|
import { describe, it, expect, vi } from 'vitest'
|
||||||
import {
|
import { mount } from '@vue/test-utils'
|
||||||
buildPatientReport,
|
import HandoffReport from '@/components/ward/HandoffReport.vue'
|
||||||
buildSbar,
|
|
||||||
buildWardSummary,
|
|
||||||
extractLatestVitals,
|
|
||||||
formatAlertsSummary,
|
|
||||||
formatVitalsSummary,
|
|
||||||
} from '@/composables/handoffReport'
|
|
||||||
|
|
||||||
const wardPatient = {
|
const mockReport = {
|
||||||
encounterId: 'enc-1',
|
generatedAt: '2026-06-23T08:00:00Z',
|
||||||
firstName: 'Jane',
|
generatedBy: 'Test Nurse',
|
||||||
lastName: 'Doe',
|
summary: {
|
||||||
mrn: 'MRN001',
|
|
||||||
roomBed: 'ICU-3',
|
|
||||||
department: 'ICU',
|
department: 'ICU',
|
||||||
attendingPhysician: 'Dr Smith',
|
patientCount: 1,
|
||||||
news2Score: 8,
|
|
||||||
sofaScore: 6,
|
|
||||||
sofaDelta: 2,
|
|
||||||
gcsScore: 14,
|
|
||||||
qsofaScore: 2,
|
|
||||||
openAlertCount: 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
const enrichment = {
|
|
||||||
encounter: {
|
|
||||||
admissionReason: 'Sepsis workup',
|
|
||||||
patient: { allergies: 'Penicillin' },
|
|
||||||
},
|
|
||||||
openAlerts: [{ alertType: 'NEWS2_EMERGENCY' }],
|
|
||||||
pendingOrders: [{ description: 'Blood cultures', status: 'Pending' }],
|
|
||||||
vitals: extractLatestVitals([
|
|
||||||
{ observationCode: 'HEART_RATE', value: 110, unit: 'bpm', recordedAt: '2026-06-23T10:00:00Z' },
|
|
||||||
{ observationCode: 'SPO2', value: 94, unit: '%', recordedAt: '2026-06-23T10:00:00Z' },
|
|
||||||
]),
|
|
||||||
bundle: null,
|
|
||||||
}
|
|
||||||
|
|
||||||
describe('handoffReport', () => {
|
|
||||||
it('buildsWardSummary', () => {
|
|
||||||
const summary = buildWardSummary(
|
|
||||||
[
|
|
||||||
wardPatient,
|
|
||||||
{ news2Score: 3, openAlertCount: 0, sepsisActive: true },
|
|
||||||
],
|
|
||||||
'ICU',
|
|
||||||
)
|
|
||||||
expect(summary).toMatchObject({
|
|
||||||
department: 'ICU',
|
|
||||||
patientCount: 2,
|
|
||||||
criticalCount: 1,
|
criticalCount: 1,
|
||||||
alertCount: 1,
|
alertCount: 2,
|
||||||
activeBundles: 1,
|
activeBundles: 1,
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
it('formatsLatestVitals', () => {
|
|
||||||
expect(formatVitalsSummary(enrichment.vitals)).toContain('HR 110 bpm')
|
|
||||||
expect(formatVitalsSummary(enrichment.vitals)).toContain('SpO₂ 94%')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('formatsAlertSummary', () => {
|
|
||||||
expect(formatAlertsSummary(enrichment.openAlerts)).toContain('NEWS2 Emergency')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('buildsPatientReportWithSbar', () => {
|
|
||||||
const report = buildPatientReport(wardPatient, enrichment)
|
|
||||||
expect(report.name).toBe('Jane Doe')
|
|
||||||
expect(report.pendingOrders).toContain('Blood cultures')
|
|
||||||
expect(report.sbar.situation).toBe('Sepsis workup')
|
|
||||||
expect(report.sbar.background).toContain('Penicillin')
|
|
||||||
expect(report.sbar.assessment).toContain('NEWS2 8')
|
|
||||||
expect(report.sbar.recommendation).toContain('Blood cultures')
|
|
||||||
})
|
|
||||||
|
|
||||||
it('includesBundleInRecommendation', () => {
|
|
||||||
const sbar = buildSbar(wardPatient, enrichment.encounter, {
|
|
||||||
...enrichment,
|
|
||||||
pendingOrders: [],
|
|
||||||
bundle: {
|
|
||||||
complianceStatus: 'IN_PROGRESS',
|
|
||||||
elements: [
|
|
||||||
{ elementType: 'BloodCultures', status: 'Pending' },
|
|
||||||
{ elementType: 'SerumLactate', status: 'Completed' },
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
|
patients: [
|
||||||
|
{
|
||||||
|
encounterId: 'enc-1',
|
||||||
|
name: 'Jane Doe',
|
||||||
|
mrn: 'MRN001',
|
||||||
|
room: 'ICU-3',
|
||||||
|
department: 'ICU',
|
||||||
|
attending: 'Dr Smith',
|
||||||
|
news2: 8,
|
||||||
|
sofa: 6,
|
||||||
|
sofaDelta: 2,
|
||||||
|
gcs: 14,
|
||||||
|
qsofa: 2,
|
||||||
|
vitalsSummary: 'HR 110 bpm',
|
||||||
|
alertsSummary: 'NEWS2 Emergency',
|
||||||
|
pendingOrders: 'Blood cultures',
|
||||||
|
sbar: {
|
||||||
|
situation: 'Sepsis workup',
|
||||||
|
background: 'Allergies: Penicillin',
|
||||||
|
assessment: 'NEWS2 8',
|
||||||
|
recommendation: 'Blood cultures',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
vi.mock('@/composables/handoffReport', async importOriginal => {
|
||||||
|
const actual = await importOriginal()
|
||||||
|
return {
|
||||||
|
...actual,
|
||||||
|
buildHandoffReport: vi.fn(() => Promise.resolve(mockReport)),
|
||||||
|
}
|
||||||
})
|
})
|
||||||
expect(sbar.recommendation).toContain('Sepsis bundle')
|
|
||||||
expect(sbar.recommendation).toContain('Blood cultures')
|
describe('HandoffReport', () => {
|
||||||
|
it('rendersWardSummaryAndPatientRows', async () => {
|
||||||
|
const wrapper = mount(HandoffReport, {
|
||||||
|
props: {
|
||||||
|
encounters: [{ encounterId: 'enc-1' }],
|
||||||
|
department: 'ICU',
|
||||||
|
generatedBy: 'Test Nurse',
|
||||||
|
},
|
||||||
|
attachTo: document.body,
|
||||||
|
})
|
||||||
|
|
||||||
|
await vi.waitFor(() => expect(document.body.textContent).toContain('Ward Summary'))
|
||||||
|
expect(document.body.textContent).toContain('Jane Doe')
|
||||||
|
expect(document.body.textContent).toContain('SBAR')
|
||||||
|
expect(document.body.textContent).toContain('Sepsis workup')
|
||||||
|
wrapper.unmount()
|
||||||
|
document.body.innerHTML = ''
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user