Files
huangzd1997 1acb93ff1c task-119(任务与重复分析中心): 实现重复检查导入/导出状态
新增 duplicate-import-export.ts:导入结果摘要/导入参数归一与导出查询构建。

TDD: task-119.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 17:27:50 +08:00

71 lines
2.9 KiB
TypeScript

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