Files
crawler-plugin/admin-frontend-vue/tests/task-67.test.ts
T
huangzd1997 27afc4470a task-67(ASIN 数据中心): 实现去重汇总删除导入流程
dedupe-import-model.ts 增 importOutcomeText 各状态可读文案(pending/running/success/failed);
dedupe-import-api.ts 增 startDedupeDeleteImport POST /delete-import 与
fetchDedupeDeleteImportProgress GET /delete-import/{id},复用导入进度解析。
8 用例全过,491 单测 + build 绿。
2026-09-05 15:40:25 +08:00

63 lines
2.9 KiB
TypeScript
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 { readSource } from './helpers.ts'
import { importOutcomeText, parseDedupeImportProgress } from '../src/pages/asin/dedupe-import-model.ts'
test('test_task_067_dedupe_delete_import_normal_primary_path', () => {
// 正常主路径:删除导入 running 可继续轮询、有结果文案。
const progress = parseDedupeImportProgress({ success: true, data: { status: 'running', processedRows: 5, totalRows: 10 } })
assert.ok(importOutcomeText(progress))
assert.match(importOutcomeText(progress), /5/)
})
test('test_task_067_dedupe_delete_import_normal_variant_input', () => {
// 正常变体:success 终态给出完成文案。
const progress = parseDedupeImportProgress({ success: true, data: { status: 'success', insertedCount: 3, skippedCount: 1 } })
const text = importOutcomeText(progress)
assert.match(text, /完成/)
assert.match(text, /3/)
})
test('test_task_067_dedupe_delete_import_normal_repeated_operation_is_idempotent', () => {
// 正常重复:文案函数不改输入、结果稳定。
const progress = parseDedupeImportProgress({ success: true, data: { status: 'pending' } })
assert.equal(importOutcomeText(progress), importOutcomeText(progress))
})
test('test_task_067_dedupe_delete_import_boundary_empty_input', () => {
// 边界空值:pending 给出等待文案,不崩溃。
const progress = parseDedupeImportProgress({})
assert.equal(progress.status, 'pending')
assert.ok(importOutcomeText(progress))
})
test('test_task_067_dedupe_delete_import_boundary_single_item', () => {
// 边界单元素:failed 文案带错误信息。
const progress = parseDedupeImportProgress({ success: true, data: { status: 'failed', errorMessage: '读列失败' } })
assert.match(importOutcomeText(progress), /失败|读列失败/)
})
test('test_task_067_dedupe_delete_import_boundary_limit_or_missing_field', () => {
// 边界上限/缺字段:processedRows 缺省 0 出现在 running 文案。
const progress = parseDedupeImportProgress({ success: true, data: { status: 'running' } })
assert.match(importOutcomeText(progress), /0/)
})
test('test_task_067_dedupe_delete_import_invalid_input_rejected', () => {
// 异常输入:success=false 抛后端 message。
assert.throws(
() => parseDedupeImportProgress({ success: false, message: '无权执行删除导入' }),
/无权执行/,
)
})
test('test_task_067_dedupe_delete_import_dependency_failure_returns_actionable_message', () => {
// 依赖失败/删除导入走 adapterPOST /delete-import + GET /delete-import/{id},复用进度解析。
const api = readSource('src/pages/asin/dedupe-import-api.ts')
assert.match(api, /startDedupeDeleteImport|deleteImport/)
assert.match(api, /delete-import/)
assert.match(api, /parseDedupeImportProgress/)
const mod = readSource('src/pages/asin/dedupe-import-model.ts')
assert.equal(/axios|http\./.test(mod), false, '导入进度模型保持纯逻辑')
})