Files
LWLT-AIBOT/tools/team-batch.test.mjs
2026-08-25 10:33:29 +08:00

78 lines
3.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
});