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