feat(home): 首页告警按状态分流的纯函数与单测
This commit is contained in:
parent
e3af7c26fb
commit
ed1b3244b8
|
|
@ -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 }
|
||||
}
|
||||
|
|
@ -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])
|
||||
})
|
||||
})
|
||||
Loading…
Reference in New Issue