manual-dispatch-calendar.test.ts 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import assert from 'node:assert/strict'
  2. import test from 'node:test'
  3. import {
  4. loadCalendarPages,
  5. manualCalendarDays,
  6. manualCopyText,
  7. validateManualDraft
  8. } from '../src/views/pl/dispatch-calendar/manual-model'
  9. const row = (id: string, date = '2026-10-26', vehicleId = 'v1') => ({
  10. id,
  11. dispatchDate: date,
  12. vehicleId,
  13. licensePlate: '皖H12345',
  14. productId: 'p1',
  15. productName: '液碱',
  16. origin: '山峡',
  17. destination: '云栋',
  18. remark: '',
  19. createTime: '',
  20. updateTime: ''
  21. })
  22. test('同车同日同路线保留独立车次,车辆筛选与汇总一致', () => {
  23. const days = manualCalendarDays(
  24. [row('1'), row('2'), row('3', '2026-10-26', 'v2'), row('4', '2026-11-01')],
  25. '2026-10',
  26. 'v1'
  27. )
  28. const day = days.find((d) => d.date === '2026-10-26')!
  29. assert.equal(day.rows.length, 2)
  30. assert.equal(day.vehicles.length, 1)
  31. assert.equal(day.products[0].count, 2)
  32. assert.ok(days.some((d) => d.date === '2026-10-01' && d.rows.length === 0))
  33. })
  34. test('完整分页加载,不悄悄展示截断数据', async () => {
  35. const calls: number[] = []
  36. const rows = await loadCalendarPages(async ({ page }) => {
  37. calls.push(page)
  38. return { list: [row(String(page))], total: 3 }
  39. })
  40. assert.deepEqual(calls, [1, 2, 3])
  41. assert.equal(rows?.length, 3)
  42. await assert.rejects(
  43. loadCalendarPages(async () => ({ list: [], total: 1 })),
  44. /不完整/
  45. )
  46. })
  47. test('过期请求不继续加载,不返回旧月份数据', async () => {
  48. let current = true
  49. assert.equal(
  50. await loadCalendarPages(
  51. async () => {
  52. current = false
  53. return { list: [row('1')], total: 3 }
  54. },
  55. () => current
  56. ),
  57. null
  58. )
  59. })
  60. test('复制保留重复车次,文本不混入实际运输计划', () => {
  61. const text = manualCopyText('2026-10-26', [row('1'), row('2')])
  62. assert.match(text, /2026-10-26 派车计划/)
  63. assert.equal(text.split('山峡 → 云栋').length - 1, 2)
  64. })
  65. test('表单拒绝空白、无效日期,保留手写起止地', () => {
  66. assert.equal(validateManualDraft({ ...row('1'), origin: ' ' }), '请填写始发地')
  67. assert.equal(
  68. validateManualDraft({ ...row('1'), dispatchDate: '2026-02-30' }),
  69. '请选择有效的派车日期'
  70. )
  71. assert.equal(validateManualDraft(row('1')), '')
  72. })