import test from 'node:test' import assert from 'node:assert/strict' import { readSource } from './helpers.ts' import { normalizeImportMode, parseDuplicateImportResult, toDuplicateExportQuery, toDuplicateImportQuery, } from '../src/pages/tasks/duplicate-import-export.ts' test('test_task_119_duplicate_import_export_normal_primary_path', () => { // 正常主路径:导入结果摘要解析。 const summary = parseDuplicateImportResult({ success: true, data: { total_rows: 120, asin_count: 45, mode: 'add' }, }) assert.equal(summary.totalRows, 120) assert.equal(summary.asinCount, 45) assert.equal(summary.mode, 'add') }) test('test_task_119_duplicate_import_export_normal_variant_input', () => { // 正常变体:导入参数归一(delete)。 assert.equal(normalizeImportMode('DEL'), 'delete') assert.equal(normalizeImportMode('add'), 'add') assert.deepEqual(toDuplicateImportQuery({ mode: 'add', shopName: '店', countryCodes: ['DE', 'UK'] }), { mode: 'add', shop_name: '店', country_codes: 'DE,UK', }) }) test('test_task_119_duplicate_import_export_repeated_is_idempotent', () => { // 正常重复:导出查询构建稳定、不改输入。 const filter = { view: 'monitor', asin: 'A', shopName: '', country: 'DE', site: '', dateFrom: '', dateTo: '' } assert.deepEqual(toDuplicateExportQuery(filter), toDuplicateExportQuery(filter)) }) test('test_task_119_duplicate_import_export_boundary_empty_input', () => { // 边界空值:无模式按 add;空 country 不下发。 assert.equal(normalizeImportMode(''), 'add') const q = toDuplicateImportQuery({ mode: 'x', shopName: '', countryCodes: [] }) assert.equal(q.mode, 'add') assert.equal('country_codes' in q, false) }) test('test_task_119_duplicate_import_export_boundary_single_item', () => { // 边界单元素:单国家导出。 const query = toDuplicateExportQuery({ view: '', asin: '', shopName: '', country: 'DE', site: '', dateFrom: '', dateTo: '' }) assert.equal(query.country, 'DE') }) test('test_task_119_duplicate_import_export_boundary_limit_or_missing_field', () => { // 边界上限/缺字段:导入结果缺省字段回 0。 const summary = parseDuplicateImportResult({ data: {} }) assert.equal(summary.totalRows, 0) assert.equal(summary.asinCount, 0) }) test('test_task_119_duplicate_import_export_invalid_input_rejected', () => { // 异常输入:success=false 抛后端 message。 assert.throws(() => parseDuplicateImportResult({ success: false, message: '请上传 Excel 文件' }), /请上传 Excel 文件/) }) test('test_task_119_duplicate_import_export_dependency_failure_returns_actionable_message', () => { // 依赖失败/可操作:导入导出纯逻辑;导出走 GET /duplicate-check-export。 const mod = readSource('src/pages/tasks/duplicate-import-export.ts') assert.equal(/axios|http\.|vue/.test(mod), false, '导入导出保持纯逻辑') assert.match(mod, /duplicate-check-export/) })