Files
shanxia2.0/web-admin/scripts/mobile-dispatch-calendar.test.ts

112 lines
3.4 KiB
TypeScript

import assert from 'node:assert/strict'
import test from 'node:test'
import {
buildAgendaDays,
validCalendarDate,
validCalendarMonth
} from '../src/views/m/pl/dispatch-calendar/model'
import { toCalendarTrips } from '../src/views/pl/dispatch-calendar/model'
import type { Plan } from '../src/api/pl'
const plans = [
{
id: 'a',
calendarVehicleType: 'self',
planDate: '2026-10-25',
planNo: '1',
followStatus: 'pending',
vehicleId: 'v1',
licensePlate: '皖H21522',
load: { customerName: '安庆山峡' },
deliveries: [
{
id: 's1',
customerId: 'c1',
customerName: '甲',
products: [{ productId: 'p1', productName: '98酸' }]
},
{
id: 's2',
customerId: 'c1',
customerName: '甲',
products: [{ productId: 'p1', productName: '98酸' }]
},
{
id: 's3',
customerId: 'c2',
customerName: '安徽云栋',
products: [{ productId: 'p2', productName: '液碱' }]
}
]
},
{
id: 'b',
calendarVehicleType: 'self',
planDate: '2026-10-24',
planNo: '2',
followStatus: 'pending',
vehicleId: 'v2',
licensePlate: '皖HA4855',
products: [{ productName: '98酸' }]
}
] as Plan[]
const trips = toCalendarTrips(plans, '2026-10')
test('每天独立切换,承运商日期在自有模式下保留入口,汇总跟随筛选', () => {
const mixed = toCalendarTrips(
[
...plans,
{ ...plans[0], id: 'carrier', vehicleId: 'carrier', calendarVehicleType: 'carrier' },
{ ...plans[1], id: 'carrier-only', planDate: '2026-10-26', calendarVehicleType: 'carrier' }
] as Plan[],
'2026-10'
)
const defaults = buildAgendaDays(mixed, '2026-10', '', '')
assert.deepEqual(
defaults.map((day) => day.total),
[1, 1, 0]
)
assert.equal(defaults[2].hasPlans, true)
const switched = buildAgendaDays(mixed, '2026-10', '', '', { '2026-10-25': 'all' })
assert.deepEqual(
switched.map((day) => day.total),
[1, 2, 0]
)
assert.deepEqual(
switched[1].summary.map((product) => product.count),
[2, 2]
)
})
test('纵向日期升序,只加入定位的空日期', () => {
const days = buildAgendaDays(trips, '2026-10', '', '2026-10-26')
assert.deepEqual(
days.map((d) => d.date),
['2026-10-24', '2026-10-25', '2026-10-26']
)
assert.equal(days[2].total, 0)
assert.equal(buildAgendaDays([], '2026-11', '', '').length, 0)
})
test('车辆筛选后汇总和明细一致,多段仍合计一个计划', () => {
const days = buildAgendaDays(trips, '2026-10', 'v1', '')
assert.equal(days.length, 1)
assert.equal(days[0].total, 1)
assert.equal(days[0].vehicles[0].tasks.length, 2)
assert.equal(days[0].vehicles[0].tasks[0].segmentCount, 2)
assert.equal(days[0].vehicles[0].tasks[0].count, 1)
assert.equal(days[0].vehicles[0].tasks[1].route, '山峡 → 云栋')
assert.deepEqual(
days[0].summary.map((p) => p.count),
[1, 1]
)
})
test('月份边界与日期有效性,拒绝溢出日期', () => {
assert.equal(validCalendarMonth('2100-12'), true)
for (const value of ['1899-12', '2101-01', '2026-13', '2026-1', ''])
assert.equal(validCalendarMonth(value), false)
assert.equal(validCalendarDate('2024-02-29'), true)
for (const value of ['2026-02-29', '2026-04-31', '2026-00-01', '', '2026-10-32'])
assert.equal(validCalendarDate(value), false)
assert.deepEqual(buildAgendaDays(trips, '2026-11', '', '2026-10-25'), [])
})