Files
crawler-plugin/admin-frontend-vue/tests/task-113.test.ts
T
huangzd1997 69f6965c93 task-113(任务与重复分析中心): 实现店铺数据任务批量下载
新增 shop-data-download.ts(打包请求体 result_ids + 下载 job 状态),
shop-data-api.ts 增加 requestShopDataZipDownload(POST /download-zip, blob)。

TDD: task-113.test.ts 8 用例先 RED 后 GREEN。
2026-09-05 17:20:39 +08:00

60 lines
2.5 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 {
createShopDataDownloadJob,
failShopDataDownload,
succeedShopDataDownload,
toShopDataZipRequest,
} from '../src/pages/tasks/shop-data-download.ts'
test('test_task_113_shop_data_download_normal_primary_path', () => {
// 正常主路径:选中 result_id 组装打包请求体。
assert.deepEqual(toShopDataZipRequest([501, 502]), { result_ids: [501, 502] })
})
test('test_task_113_shop_data_download_normal_variant_input', () => {
// 正常变体:字符串 id 解析与非法 id 过滤。
assert.deepEqual(toShopDataZipRequest(['3', 'x', 0, '-1']), { result_ids: [3] })
})
test('test_task_113_shop_data_download_repeated_is_idempotent', () => {
// 正常重复:请求体构建稳定。
assert.deepEqual(toShopDataZipRequest(['1', '2', '1']), { result_ids: [1, 2] })
})
test('test_task_113_shop_data_download_boundary_empty_input', () => {
// 边界空值:无选择回空请求体。
assert.deepEqual(toShopDataZipRequest([]), { result_ids: [] })
})
test('test_task_113_shop_data_download_boundary_single_item', () => {
// 边界单元素:单结果下载 job 成功状态。
assert.deepEqual(toShopDataZipRequest([9]), { result_ids: [9] })
const job = succeedShopDataDownload(createShopDataDownloadJob(), 1, 0)
assert.equal(job.status, 'done')
assert.equal(job.fileCount, 1)
})
test('test_task_113_shop_data_download_boundary_limit_or_missing_field', () => {
// 边界上限/缺字段:非数字输入被忽略。
assert.deepEqual(toShopDataZipRequest([' ']), { result_ids: [] })
})
test('test_task_113_shop_data_download_invalid_input_rejected', () => {
// 异常输入:失败 job 携带可操作消息。
const job = failShopDataDownload(createShopDataDownloadJob(), '请至少选择一个结果文件')
assert.equal(job.status, 'failed')
assert.equal(job.message, '请至少选择一个结果文件')
})
test('test_task_113_shop_data_download_dependency_failure_returns_actionable_message', () => {
// 依赖失败/下载走 adapterPOST /api/admin/shop-data-crawl-tasks/download-zip + blob。
const model = readSource('src/pages/tasks/shop-data-download.ts')
assert.equal(/axios|http\.|vue/.test(model), false, '下载模型保持纯逻辑')
const api = readSource('src/pages/tasks/shop-data-api.ts')
assert.match(api, /\/download-zip/)
assert.match(api, /requestShopDataZipDownload/)
assert.match(api, /responseType:\s*['\"]blob['\"]/)
})