feat(home): 首页告警按状态分流的纯函数与单测

This commit is contained in:
ozh 2026-09-08 17:45:19 +08:00
parent e3af7c26fb
commit ed1b3244b8
2 changed files with 64 additions and 0 deletions

View File

@ -0,0 +1,15 @@
import type { EventItem } from '@/api/event'
// 首页告警分流:status=1 未处理(首页只展示最新一条),其余全部进消息列表
export function splitAlerts(list: EventItem[]): {
unhandled: EventItem[]
messages: EventItem[]
} {
const unhandled: EventItem[] = []
const messages: EventItem[] = []
for (const item of list) {
if (item.status === 1) unhandled.push(item)
else messages.push(item)
}
return { unhandled, messages }
}

View File

@ -0,0 +1,49 @@
import { describe, it, expect } from 'vitest'
import { splitAlerts } from '@/pages/index/splitAlerts'
import type { EventItem } from '@/api/event'
const item = (over: Partial<EventItem>): EventItem => ({
id: 1,
sceneName: '客厅',
deviceName: '体征监测仪',
status: 2,
time: '2026-09-07 21:22:12',
...over
})
describe('splitAlerts', () => {
it('status=1 进入未处理组,其余进入消息组', () => {
const list = [
item({ id: 1, status: 1 }),
item({ id: 2, status: 2 }),
item({ id: 3, status: 3 })
]
const { unhandled, messages } = splitAlerts(list)
expect(unhandled.map((i) => i.id)).toEqual([1])
expect(messages.map((i) => i.id)).toEqual([2, 3])
})
it('status 异常值(如 0、99)落入消息组不丢弃', () => {
const list = [item({ id: 1, status: 0 }), item({ id: 2, status: 99 })]
const { unhandled, messages } = splitAlerts(list)
expect(unhandled).toEqual([])
expect(messages.map((i) => i.id)).toEqual([1, 2])
})
it('空列表两组均为空', () => {
const { unhandled, messages } = splitAlerts([])
expect(unhandled).toEqual([])
expect(messages).toEqual([])
})
it('两组均保持原有相对顺序', () => {
const list = [
item({ id: 3, status: 2 }),
item({ id: 1, status: 1 }),
item({ id: 2, status: 2 })
]
const { unhandled, messages } = splitAlerts(list)
expect(unhandled.map((i) => i.id)).toEqual([1])
expect(messages.map((i) => i.id)).toEqual([3, 2])
})
})