import assert from 'node:assert/strict' import test from 'node:test' import { loadCalendarPages, manualCalendarDays, manualCopyText, validateManualDraft } from '../src/views/pl/dispatch-calendar/manual-model' const row = (id: string, date = '2026-10-26', vehicleId = 'v1') => ({ id, dispatchDate: date, vehicleId, licensePlate: '皖H12345', productId: 'p1', productName: '液碱', origin: '山峡', destination: '云栋', remark: '', createTime: '', updateTime: '' }) test('同车同日同路线保留独立车次,车辆筛选与汇总一致', () => { const days = manualCalendarDays( [row('1'), row('2'), row('3', '2026-10-26', 'v2'), row('4', '2026-11-01')], '2026-10', 'v1' ) const day = days.find((d) => d.date === '2026-10-26')! assert.equal(day.rows.length, 2) assert.equal(day.vehicles.length, 1) assert.equal(day.products[0].count, 2) assert.ok(days.some((d) => d.date === '2026-10-01' && d.rows.length === 0)) }) test('完整分页加载,不悄悄展示截断数据', async () => { const calls: number[] = [] const rows = await loadCalendarPages(async ({ page }) => { calls.push(page) return { list: [row(String(page))], total: 3 } }) assert.deepEqual(calls, [1, 2, 3]) assert.equal(rows?.length, 3) await assert.rejects( loadCalendarPages(async () => ({ list: [], total: 1 })), /不完整/ ) }) test('过期请求不继续加载,不返回旧月份数据', async () => { let current = true assert.equal( await loadCalendarPages( async () => { current = false return { list: [row('1')], total: 3 } }, () => current ), null ) }) test('复制保留重复车次,文本不混入实际运输计划', () => { const text = manualCopyText('2026-10-26', [row('1'), row('2')]) assert.match(text, /2026-10-26 派车计划/) assert.equal(text.split('山峡 → 云栋').length - 1, 2) }) test('表单拒绝空白、无效日期,保留手写起止地', () => { assert.equal(validateManualDraft({ ...row('1'), origin: ' ' }), '请填写始发地') assert.equal( validateManualDraft({ ...row('1'), dispatchDate: '2026-02-30' }), '请选择有效的派车日期' ) assert.equal(validateManualDraft(row('1')), '') })