| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import assert from 'node:assert/strict'
- import { eventStatusText, isTerminalEventStatus, eventRowView, currentEventsView, toCurrentEvents } from '../src/modules/cockpit/domain/eventList.js'
- import { entityDetailView, normalizeEntityDetail } from '../src/modules/cockpit/domain/entityDetail.js'
- // —— 1) 卡片状态必须中文(实测取值为 PENDING / PROCESSING / UNHANDLED / HANDLED) ——
- assert.equal(eventStatusText('PENDING'), '待处理')
- assert.equal(eventStatusText('PROCESSING'), '处理中')
- assert.equal(eventStatusText('UNHANDLED'), '未处理')
- assert.equal(eventStatusText('HANDLED'), '已处理')
- assert.equal(eventStatusText('CLEARED'), '已解除')
- assert.equal(eventStatusText('CLOSED'), '已关闭')
- assert.equal(eventStatusText('CANCELLED'), '已取消')
- assert.equal(eventStatusText('MISREPORT'), '误报')
- // 认不出的仍回原码(不编造中文)
- assert.equal(eventStatusText('SOMETHING_NEW'), 'SOMETHING_NEW')
- // —— 2) 当前列表不展示终态事件 ——
- for (const terminal of ['HANDLED', 'CLEARED', 'CLOSED', 'CANCELLED', 'MISREPORT', 'RESOLVED']) {
- assert.equal(isTerminalEventStatus(terminal), true, terminal + ' 应判终态')
- }
- for (const live of ['PENDING', 'PROCESSING', 'UNHANDLED', 'ACTIVE', 'SOMETHING_NEW', '']) {
- assert.equal(isTerminalEventStatus(live), false, live + ' 不应判终态')
- }
- const domain = toCurrentEvents({
- mode: 'ALARM',
- pagination: { page: 1, pageSize: 10, total: 3, totalPages: 1 },
- sections: { events: { state: 'READY', data: [
- { eventNo: 'A-LIVE', eventName: '未处理报警', level: 1, status: 'UNHANDLED' },
- { eventNo: 'A-DONE', eventName: '已处理报警', level: 2, status: 'HANDLED' },
- { eventNo: 'A-CANCEL', eventName: '已取消报警', level: 3, status: 'CANCELLED' },
- ] } },
- })
- const view = currentEventsView(domain, domain.sections.events)
- assert.equal(view.rows.length, 1, '终态卡应被过滤')
- assert.equal(view.rows[0].code, 'A-LIVE')
- assert.equal(view.hiddenTerminalCount, 2, '过滤条数应如实回显')
- // 状态是中文
- assert.equal(view.rows[0].statusText, '未处理')
- // —— 3) 等级只在摘要出现一次,且带颜色;事件摘要区不再重复等级 ——
- const detail = normalizeEntityDetail({ kind: 'event', id: 'A1', family: 'ALARM' }, { alarmNo: 'A1', alarmLevel: 1, status: 'UNHANDLED' })
- const levelCards = detail.summary.filter((s) => s.label === '等级')
- assert.equal(levelCards.length, 1, '摘要里等级只能有一处')
- assert.equal(levelCards[0].value, '1级')
- assert.equal(levelCards[0].tone, 'lv1', '等级必须带语义色')
- const summarySection = detail.sections.find((s) => s.title === '事件摘要')
- assert.ok(!summarySection.fields.some((f) => f.label === '等级'), '事件摘要里不得再出现等级')
- // —— 4) 事件编码用业务编号,不是主键 ——
- assert.equal(detail.displayCode, 'A1')
- const codeField = summarySection.fields.find((f) => f.label === '事件编码')
- assert.equal(codeField.value, 'A1')
- assert.ok(entityDetailView(detail).subtitle.includes('A1'), '副标题应显示业务编号')
- console.log('t65-event-card-fixes: 36/36')
|