Files
huangzd1997 abc8ed72d4 task-65(ASIN 数据中心): 实现去重汇总导入任务创建
dedupe-import-model.ts 纯解析 importId + isAllowedImportFile(xlsx/xls);dedupe-import-api.ts
startDedupeImport 以 FormData(file+groupId) multipart POST /api/admin/dedupe-total-data/import。
8 用例全过,475 单测 + build 绿。
2026-09-05 15:38:31 +08:00

56 lines
2.5 KiB
TypeScript
Raw Permalink 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 { readSource } from './helpers.ts'
import { isAllowedImportFile, parseDedupeImportStart } from '../src/pages/asin/dedupe-import-model.ts'
test('test_task_065_dedupe_import_start_normal_primary_path', () => {
// 正常主路径:启动结果 {importId} 解析出任务 id。
assert.equal(parseDedupeImportStart({ success: true, data: { importId: 'job_123' } }), 'job_123')
})
test('test_task_065_dedupe_import_start_normal_variant_input', () => {
// 正常变体:已解包对象直传同样解析。
assert.equal(parseDedupeImportStart({ importId: 'job_456' }), 'job_456')
})
test('test_task_065_dedupe_import_start_normal_repeated_operation_is_idempotent', () => {
// 正常重复:解析纯函数稳定。
const payload = { success: true, data: { importId: 'job_abc' } }
assert.equal(parseDedupeImportStart(payload), parseDedupeImportStart(payload))
})
test('test_task_065_dedupe_import_start_boundary_empty_input', () => {
// 边界空值:缺 importId → 可读错误。
assert.throws(() => parseDedupeImportStart({ success: true, data: {} }), /导入任务/)
assert.throws(() => parseDedupeImportStart({}), /导入任务/)
})
test('test_task_065_dedupe_import_start_boundary_single_item', () => {
// 边界单元素:.xlsx 文件名合法。
assert.equal(isAllowedImportFile('import.xlsx'), true)
})
test('test_task_065_dedupe_import_start_boundary_limit_or_missing_field', () => {
// 边界上限:非 xlsx(xls 允许)被拒;空文件名被拒。
assert.equal(isAllowedImportFile('data.csv'), false)
assert.equal(isAllowedImportFile('data.xls'), true)
assert.equal(isAllowedImportFile(''), false)
assert.equal(isAllowedImportFile(undefined as never), false)
})
test('test_task_065_dedupe_import_start_invalid_input_rejected', () => {
// 异常输入:success=false 抛后端 message。
assert.throws(() => parseDedupeImportStart({ success: false, message: '文件不合法或缺少 ASIN 列' }), /文件不合法/)
})
test('test_task_065_dedupe_import_start_dependency_failure_returns_actionable_message', () => {
// 依赖失败/导入走 adaptermultipart POST /import(file+groupId),页面不内联。
const api = readSource('src/pages/asin/dedupe-import-api.ts')
assert.match(api, /startDedupeImport/)
assert.match(api, /http\.post/)
assert.match(api, /\/import/)
assert.match(api, /FormData/)
const mod = readSource('src/pages/asin/dedupe-import-model.ts')
assert.equal(/axios|http\./.test(mod), false, '导入模型保持纯逻辑')
})