74 lines
2.2 KiB
JavaScript
74 lines
2.2 KiB
JavaScript
import { describe, it, expect, beforeEach } from 'vitest'
|
|
import { mount } from '@vue/test-utils'
|
|
import { createPinia, setActivePinia } from 'pinia'
|
|
import AlertCard from '@/components/alerts/AlertCard.vue'
|
|
|
|
const openAlert = {
|
|
id: 'alert-1',
|
|
alertType: 'SEPSIS_WARNING',
|
|
severity: 'CRITICAL',
|
|
status: 'OPEN',
|
|
details: 'SIRS criteria met',
|
|
triggeredAt: '2026-06-19T12:00:00Z',
|
|
}
|
|
|
|
const resolvedAlert = {
|
|
...openAlert,
|
|
id: 'alert-2',
|
|
status: 'RESOLVED',
|
|
}
|
|
|
|
describe('AlertCard', () => {
|
|
beforeEach(() => {
|
|
setActivePinia(createPinia())
|
|
})
|
|
|
|
it('showsAlertTypeAndSeverity', () => {
|
|
const wrapper = mount(AlertCard, { props: { alert: openAlert } })
|
|
expect(wrapper.text()).toContain('CRITICAL')
|
|
expect(wrapper.text()).toContain('Sepsis Warning (SIRS — Legacy)')
|
|
})
|
|
|
|
it('showsNarrativeSummaryWhenExplanationPresent', () => {
|
|
const wrapper = mount(AlertCard, {
|
|
props: {
|
|
alert: {
|
|
...openAlert,
|
|
explanation: {
|
|
narrativeSummary: 'NEWS2 8 — respiratory rate (+3), SpO2 (+2).',
|
|
},
|
|
},
|
|
},
|
|
})
|
|
expect(wrapper.text()).toContain('NEWS2 8 — respiratory rate (+3), SpO2 (+2).')
|
|
})
|
|
|
|
it('acknowledgeButtonEmitsEvent', async () => {
|
|
const wrapper = mount(AlertCard, { props: { alert: openAlert } })
|
|
const ackButton = wrapper.findAll('button').find(b => b.text() === 'Acknowledge')
|
|
await ackButton.trigger('click')
|
|
expect(wrapper.emitted('acknowledge')).toHaveLength(1)
|
|
})
|
|
|
|
it('showsAcknowledgedByWhenPresent', () => {
|
|
const wrapper = mount(AlertCard, {
|
|
props: {
|
|
alert: {
|
|
...openAlert,
|
|
status: 'ACKNOWLEDGED',
|
|
acknowledgedBy: 'Demo Nurse (NURSE)',
|
|
acknowledgedAt: '2026-06-19T12:30:00Z',
|
|
},
|
|
},
|
|
})
|
|
expect(wrapper.text()).toContain('Acknowledged by Demo Nurse (Nurse)')
|
|
})
|
|
|
|
it('resolvedAlertHidesActions', () => {
|
|
const wrapper = mount(AlertCard, { props: { alert: resolvedAlert } })
|
|
const actionButtons = wrapper.findAll('button').filter(b => ['Acknowledge', 'Resolve'].includes(b.text()))
|
|
expect(actionButtons).toHaveLength(0)
|
|
expect(wrapper.text()).toContain('Useful')
|
|
})
|
|
})
|