waterFacilityQuery.test.mjs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import test from 'node:test'
  2. import assert from 'node:assert/strict'
  3. import fs from 'node:fs'
  4. import path from 'node:path'
  5. import {
  6. buildWaterFacilityQuery,
  7. getRequestErrorMessage,
  8. normalizePipeStatus
  9. } from '../src/utils/waterFacilityQuery.js'
  10. test('buildWaterFacilityQuery maps date range to top-level backend contract', () => {
  11. const source = { pageNum: 2, pageSize: 20, pipeCode: 'P-1' }
  12. const query = buildWaterFacilityQuery(source, ['2026-01-01 00:00:00', '2026-01-31 23:59:59'])
  13. assert.deepEqual(query, {
  14. pageNum: 2,
  15. pageSize: 20,
  16. pipeCode: 'P-1',
  17. startTime: '2026-01-01 00:00:00',
  18. endTime: '2026-01-31 23:59:59'
  19. })
  20. assert.deepEqual(source, { pageNum: 2, pageSize: 20, pipeCode: 'P-1' })
  21. assert.equal(query.params, undefined)
  22. })
  23. test('buildWaterFacilityQuery removes stale dates when range is cleared', () => {
  24. const query = buildWaterFacilityQuery({ pageNum: 1, startTime: 'old', endTime: 'old' }, [])
  25. assert.equal(query.startTime, undefined)
  26. assert.equal(query.endTime, undefined)
  27. assert.equal(query.beginTime, undefined)
  28. assert.equal(query.params, undefined)
  29. })
  30. test('normalizePipeStatus accepts numeric and string status values', () => {
  31. assert.equal(normalizePipeStatus(0), '0')
  32. assert.equal(normalizePipeStatus('1'), '1')
  33. assert.equal(normalizePipeStatus(null), '')
  34. })
  35. test('getRequestErrorMessage exposes a useful server error', () => {
  36. assert.equal(getRequestErrorMessage({ response: { data: { msg: '数据库不可用' } } }, '查询失败'), '数据库不可用')
  37. assert.equal(getRequestErrorMessage(new Error('网络断开'), '查询失败'), '网络断开')
  38. assert.equal(getRequestErrorMessage({}, '查询失败'), '查询失败')
  39. })
  40. test('facility detail requests retain a retryable error state', () => {
  41. const pages = ['pipeInfo', 'waterPlant', 'pumpStation', 'waterSource', 'waterUserInfo']
  42. for (const page of pages) {
  43. const file = path.resolve('src/views/subSystem/basic', page, 'index.vue')
  44. const source = fs.readFileSync(file, 'utf8')
  45. const detailMethod = source.match(/handleDetail\(row\)\s*\{([\s\S]*?)\n\s*\},/)
  46. assert.ok(detailMethod, `${page} detail method should exist`)
  47. assert.match(detailMethod[1], /\.catch\(error => \{[\s\S]*?this\.errorMessage = getRequestErrorMessage\(/, page)
  48. }
  49. })