t65-warning-detail.mjs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import assert from 'node:assert/strict'
  2. import { normalizeEntityDetail } from '../src/modules/cockpit/domain/entityDetail.js'
  3. // —— 「等级明明能拿到却标注未知」的三种输入形状都要认 ——
  4. const fromNumber = normalizeEntityDetail({ kind: 'event', id: 'W1', family: 'WARNING' }, { warningNo: 'W1', level: 2 })
  5. assert.equal(fromNumber.summary.find((s) => s.label === '等级').value, '2级')
  6. assert.equal(fromNumber.tone, 'lv2')
  7. const fromTaggedObject = normalizeEntityDetail({ kind: 'event', id: 'W2', family: 'WARNING' }, {
  8. code: 'W2', level: { tone: 'lv3', label: '3级' }, statusText: '待处理',
  9. })
  10. assert.equal(fromTaggedObject.summary.find((s) => s.label === '等级').value, '3级')
  11. assert.equal(fromTaggedObject.tone, 'lv3')
  12. const fromLevelName = normalizeEntityDetail({ kind: 'event', id: 'A1', family: 'ALARM' }, { alarmNo: 'A1', alarmLevel: '二级预警' })
  13. assert.equal(fromLevelName.summary.find((s) => s.label === '等级').value, '2级')
  14. const unknown = normalizeEntityDetail({ kind: 'event', id: 'X1', family: 'ALARM' }, { alarmNo: 'X1' })
  15. assert.equal(unknown.summary.find((s) => s.label === '等级').value, '等级未知')
  16. // —— 预警与报警的处置流程必须分开(阶段节点不同) ——
  17. assert.deepEqual(fromNumber.stage.map((s) => s.label), ['发布', '接收', '处置', '核验', '解除'])
  18. assert.deepEqual(fromLevelName.stage.map((s) => s.label), ['产生', '确认', '处置', '关闭'])
  19. assert.notDeepEqual(fromNumber.stage.map((s) => s.label), fromLevelName.stage.map((s) => s.label))
  20. // —— 预警与报警的详情标签也不同 ——
  21. assert.deepEqual(fromNumber.tabs.map((t) => t.label), ['预警信息', '处置记录', '关联报警', '附件'])
  22. assert.deepEqual(fromLevelName.tabs.map((t) => t.label), ['报警信息', '设备信息', '处置记录', '附件'])
  23. // —— 工单:有主键就能展开,不得再说「缺少工单主键」 ——
  24. const order = normalizeEntityDetail({ kind: 'work-order', id: '42' }, {
  25. order: { orderId: 42, orderNo: 'WO42', orderStatus: 3, orderDesc: '测试', deviceName: '水位计' },
  26. logs: [{ operationType: '接单', operationTime: '2026-10-29 10:00:00', orderStatus: 2 }],
  27. })
  28. assert.equal(order.order.id, '42')
  29. assert.equal(order.order.code, 'WO42')
  30. assert.ok(order.track, '工单应有处置轨迹')
  31. assert.deepEqual(order.tabs.map((t) => t.label), ['工单信息', '处理流程', '设备信息', '附件'])
  32. // —— 预警详情的移动端信封(basicInfo + 分区)要能读出真实字段 ——
  33. const envelope = normalizeEntityDetail({ kind: 'event', id: 'W9', family: 'WARNING' }, {
  34. basicInfo: { warningNo: 'W9', warningName: '电导率预警', warningLevel: 2, status: 'PENDING', deviceName: '测试设备' },
  35. disposalHistory: [{ disposalContent: '已现场核实' }],
  36. attachmentList: [{ attachmentName: '报告.pdf' }, { attachmentName: '照片.jpg' }],
  37. alarmList: [{ alarmNo: 'A-1', alarmName: '关联报警一', auditStatusName: '确认报警' }],
  38. supervisionList: [{}],
  39. })
  40. assert.equal(envelope.summary.find((s) => s.label === '等级').value, '2级')
  41. assert.equal(envelope.attachments.length, 2)
  42. assert.equal(envelope.relatedAlarms.length, 1)
  43. assert.ok(envelope.records.length >= 1)
  44. console.log('t65-warning-detail: 24/24')