waterSupplyUiModel.test.mjs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import test from 'node:test'
  2. import assert from 'node:assert/strict'
  3. import {
  4. normalizeDeviceRow,
  5. buildMaintainOrderPayload,
  6. getDeviceOrderEndpoint,
  7. normalizeWorkOrderStatus,
  8. canDispatchDevice,
  9. preserveDevicePageOnError,
  10. normalizeDeviceGisPoints
  11. } from '../src/utils/waterSupplyUiModel.js'
  12. test('normalizes alarm and related work-order fields for device pages', () => {
  13. const row = normalizeDeviceRow({
  14. equipmentId: 'EQ-1',
  15. equipmentCode: 'P-001',
  16. equipmentName: '一号压力计',
  17. alarmStatus: 1,
  18. alertLevel: 2,
  19. latestOrderNo: 'WO202606101703482640',
  20. latestMaintainStatus: '处理中'
  21. })
  22. assert.equal(row.alarmStatusText, '报警')
  23. assert.equal(row.alarmLevelText, '二级报警')
  24. assert.equal(row.relatedOrderNo, 'WO202606101703482640')
  25. assert.equal(row.workOrderStatusText, '处理中')
  26. })
  27. test('keeps device operation, online, alarm, and work-order states distinct', () => {
  28. const row = normalizeDeviceRow({
  29. equipmentId: 'EQ-T6',
  30. equipmentCode: 'CN-GS-202609020001',
  31. equipmentName: 'T6压力监测点',
  32. currentStatus: 3,
  33. onlineStatus: 0,
  34. alarmStatus: 1,
  35. alertLevel: 1,
  36. abnormalReason: '供水压力超限',
  37. relatedWorkOrderNo: 'WO202609020001',
  38. relatedWorkOrderStatus: 4,
  39. relatedWorkOrderPerson: '张三'
  40. })
  41. assert.equal(row.currentStatusText, '维修')
  42. assert.equal(row.onlineStatusText, '离线')
  43. assert.equal(row.alarmStatusText, '报警')
  44. assert.equal(row.abnormalReasonText, '供水压力超限')
  45. assert.equal(row.relatedOrderNo, 'WO202609020001')
  46. assert.equal(row.workOrderStatusText, '处理中')
  47. assert.equal(row.relatedWorkOrderPerson, '张三')
  48. })
  49. test('builds a repair dispatch payload with the selected responsible user', () => {
  50. const payload = buildMaintainOrderPayload(
  51. { equipmentId: 'EQ-1', equipmentCode: 'P-001', equipmentName: '一号压力计' },
  52. { description: '压力低于阈值', receiveUserId: 18 }
  53. )
  54. assert.deepEqual(payload, {
  55. equipmentId: 'EQ-1',
  56. equipmentCode: 'P-001',
  57. equipmentName: '一号压力计',
  58. maintainType: '故障维修',
  59. maintainContent: '压力低于阈值',
  60. receiveUserId: 18
  61. })
  62. })
  63. test('uses the abnormal-device order endpoint for device repair dispatch', () => {
  64. assert.equal(getDeviceOrderEndpoint('dispatch'), '/waterSupply/device/abnormal/order')
  65. assert.equal(getDeviceOrderEndpoint('abnormal'), '/waterSupply/device/abnormal/order')
  66. })
  67. test('maps numeric and numeric-string work-order statuses and marks terminal states', () => {
  68. assert.deepEqual(normalizeWorkOrderStatus(4), { code: 4, text: '处理中', terminal: false })
  69. assert.deepEqual(normalizeWorkOrderStatus('6'), { code: 6, text: '已结案', terminal: true })
  70. assert.deepEqual(normalizeWorkOrderStatus('7'), { code: 7, text: '已驳回', terminal: true })
  71. assert.deepEqual(normalizeWorkOrderStatus('暂无工单'), { code: null, text: '暂无工单', terminal: false })
  72. })
  73. test('allows dispatch when the latest order is terminal, including numeric-string status', () => {
  74. assert.equal(canDispatchDevice({ relatedOrderNo: 'WO-6', relatedWorkOrderStatus: '6' }), true)
  75. assert.equal(canDispatchDevice({ relatedOrderNo: 'WO-7', relatedWorkOrderStatus: 7 }), true)
  76. assert.equal(canDispatchDevice({ relatedOrderNo: 'WO-4', relatedWorkOrderStatus: '4' }), false)
  77. assert.equal(canDispatchDevice({ relatedOrderNo: '-' }), true)
  78. })
  79. test('retains existing page rows and total when a reload fails', () => {
  80. const previous = { records: [{ equipmentId: 'EQ-1' }], total: 1 }
  81. assert.deepEqual(preserveDevicePageOnError(previous), {
  82. page: previous,
  83. error: '设备数据加载失败,请点击重试'
  84. })
  85. })
  86. test('normalizes GIS responses to point records without inventing coordinates', () => {
  87. assert.deepEqual(normalizeDeviceGisPoints({ data: [{ equipmentId: 'EQ-1', longitude: '110.1', latitude: '28.2' }] }), [
  88. { equipmentId: 'EQ-1', longitude: '110.1', latitude: '28.2', _longitude: 110.1, _latitude: 28.2 }
  89. ])
  90. assert.deepEqual(normalizeDeviceGisPoints({ data: [{ equipmentId: 'EQ-2' }] }), [])
  91. })