78 lines
3.4 KiB
JavaScript
78 lines
3.4 KiB
JavaScript
import test from 'node:test';
|
||
import assert from 'node:assert/strict';
|
||
import { createRequire } from 'node:module';
|
||
|
||
const require = createRequire(import.meta.url);
|
||
const helpers = require('../chrome-extension/ltjt-order-assistant/team-batch.js');
|
||
|
||
test('resolves a Chinese shorthand customer across multiple SelectBox columns', () => {
|
||
const result = helpers.resolveUniqueSelectBoxRow(
|
||
'CNY◆661◆LW衡阳国旅云南分社(广东市场)◆◆衡阳罗舟◆◇CNY◆230◆LW浙江星辰◆◆琳琳◆',
|
||
'衡阳广东',
|
||
{ label: '预订客户', searchableColumns: [1, 2, 3, 4, 5] }
|
||
);
|
||
assert.equal(result.ok, true);
|
||
assert.equal(result.rule, 'unique_tokenized_contains');
|
||
assert.equal(result.row.columns[1], '661');
|
||
assert.equal(result.row.columns[2], 'LW衡阳国旅云南分社(广东市场)');
|
||
});
|
||
|
||
test('blocks ambiguous fuzzy customer matches instead of choosing the first row', () => {
|
||
const result = helpers.resolveUniqueSelectBoxRow(
|
||
'CNY◆1◆广东衡阳国旅◆◆甲◆◇CNY◆2◆衡阳国旅广东市场◆◆乙◆',
|
||
'衡阳广东',
|
||
{ label: '预订客户', searchableColumns: [1, 2, 3, 4, 5] }
|
||
);
|
||
assert.equal(result.ok, false);
|
||
assert.equal(result.rule, 'ambiguous_tokenized_contains');
|
||
assert.equal(result.token_match_count, 2);
|
||
});
|
||
|
||
test('maps native weekday and odd/even shortcuts without changing business dates', () => {
|
||
assert.deepEqual(helpers.cycleShortcutValues('weekly', [1, 7]), ['1', '0']);
|
||
assert.deepEqual(helpers.cycleShortcutValues('odd_days'), ['d1d', 'd3d', 'd5d', 'd7d', 'd9d']);
|
||
assert.deepEqual(helpers.cycleShortcutValues('even_days'), ['d2d', 'd4d', 'd6d', 'd8d', 'd0d']);
|
||
});
|
||
|
||
test('uses the same cycle selection plan for explicit dates and ERP shortcuts', () => {
|
||
assert.deepEqual(helpers.cycleSelectionPlan({
|
||
departure_dates: ['2026-09-07', '2026.09.15', '2026/09/26'],
|
||
recurrence: { start_date: '2026-09-01', end_date: '2026-09-30', pattern: 'specified_dates' }
|
||
}), {
|
||
ok: true,
|
||
mode: 'explicit_dates',
|
||
explicit_dates: ['2026-09-07', '2026-09-15', '2026-09-26'],
|
||
expanded_dates: ['2026-09-07', '2026-09-15', '2026-09-26'],
|
||
shortcut_values: []
|
||
});
|
||
const weekly = helpers.cycleSelectionPlan({
|
||
recurrence: { start_date: '2026-09-01', end_date: '2026-09-30', pattern: 'weekly', weekday: [2] }
|
||
});
|
||
assert.equal(weekly.ok, true);
|
||
assert.equal(weekly.mode, 'shortcut');
|
||
assert.deepEqual(weekly.shortcut_values, ['2']);
|
||
assert.deepEqual(weekly.expanded_dates, [
|
||
'2026-09-01',
|
||
'2026-09-08',
|
||
'2026-09-15',
|
||
'2026-09-22',
|
||
'2026-09-29'
|
||
]);
|
||
});
|
||
|
||
test('expands odd and even cycles by calendar day instead of weekday number', () => {
|
||
assert.deepEqual(helpers.expandCycleDates({
|
||
recurrence: { start_date: '2026-09-01', end_date: '2026-09-06', pattern: 'odd_days' }
|
||
}), ['2026-09-01', '2026-09-03', '2026-09-05']);
|
||
assert.deepEqual(helpers.expandCycleDates({
|
||
recurrence: { start_date: '2026-09-01', end_date: '2026-09-06', pattern: 'even_days' }
|
||
}), ['2026-09-02', '2026-09-04', '2026-09-06']);
|
||
});
|
||
|
||
test('normalizes dates for the ERP range and keeps range containment deterministic', () => {
|
||
assert.equal(helpers.canonicalDate('2026.09.03'), '2026-09-03');
|
||
assert.equal(helpers.erpDate('2026-09-03'), '2026-9-3');
|
||
assert.equal(helpers.dateInRange('2026-09-30', '2026-09-01', '2026-09-30'), true);
|
||
assert.equal(helpers.dateInRange('2026-10-01', '2026-09-01', '2026-09-30'), false);
|
||
});
|