t65-alarm-code-and-locate.mjs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import assert from 'node:assert/strict'
  2. import { entityDetailView, normalizeEntityDetail } from '../src/modules/cockpit/domain/entityDetail.js'
  3. import { eventRowView, toEventItem } from '../src/modules/cockpit/domain/eventList.js'
  4. // —— 4) 报警详情/卡片:上屏用业务编号 alarmNo,不是主键 UUID ——
  5. const raw = { eventNo: '9a0738db9773af8bfb0ccd1ef8680b82', eventCode: 'BJ202610281616136810', eventName: '报警', eventType: 'WARN-LEAK', level: 1, status: 'UNHANDLED' }
  6. const item = toEventItem(raw)
  7. assert.equal(item.code, '9a0738db9773af8bfb0ccd1ef8680b82', '内部键仍是 eventNo')
  8. assert.equal(item.codeText, 'BJ202610281616136810', '展示编号必须是 eventCode')
  9. const row = eventRowView(item)
  10. assert.equal(row.code, '9a0738db9773af8bfb0ccd1ef8680b82')
  11. assert.equal(row.codeText, 'BJ202610281616136810')
  12. // 详情(远端已返回 AlarmVO 形状)
  13. const detail = normalizeEntityDetail({ kind: 'event', id: raw.eventNo, family: 'ALARM' }, {
  14. id: '9a0738db9773af8bfb0ccd1ef8680b82',
  15. alarmNo: 'BJ202610281616136810',
  16. alarmLevel: 1,
  17. alarmStatus: 'UNHANDLED',
  18. deviceCode: '8652052334',
  19. deviceName: '测试设备',
  20. })
  21. assert.equal(detail.displayCode, 'BJ202610281616136810', '详情事件编码必须是 alarmNo')
  22. const codeField = detail.sections.find((s) => s.title === '事件摘要').fields.find((f) => f.label === '事件编码')
  23. assert.equal(codeField.value, 'BJ202610281616136810')
  24. assert.ok(!codeField.value.includes('9a0738db'), '不得显示主键 UUID')
  25. assert.ok(entityDetailView(detail).subtitle.includes('BJ202610281616136810'))
  26. // 详情 prefill(列表行)也必须是业务编号
  27. const fromPrefill = normalizeEntityDetail({ kind: 'event', id: raw.eventNo, family: 'ALARM' }, row)
  28. assert.equal(fromPrefill.displayCode, 'BJ202610281616136810', 'prefill 阶段也不得回落到主键')
  29. // —— 5) 关联设备:详情必须带设备编码,定位按钮据此渲染 ——
  30. assert.equal(detail.devices.length, 1)
  31. assert.equal(detail.devices[0].code, '8652052334')
  32. assert.ok(detail.devices[0].name)
  33. console.log('t65-alarm-code-and-locate: 17/17')