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