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', () => { // 依赖失败/下载走 adapter:POST /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['\"]/) })