8cd8390d95
Java: - similarasin Excel 解析改 EasyExcel 流式(原 WorkbookFactory 全量 DOM,大表 OOM)+ 魔数校验 - collectdata 结果组装改游标分批 + 导入改流式(原全量驻留内存) - GlobalExceptionHandler 转发响应过滤逐跳头与实例标识头(双 Transfer-Encoding 导致 nginx 502 的根因) admin-vue: - 403(无后台权限,如工具号 token)与 401 同样跳登录页,修复后台白屏 - task-266 测试断言对齐 daily-files 端点演进
62 lines
3.2 KiB
TypeScript
62 lines
3.2 KiB
TypeScript
import test from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import { readSource } from './helpers.ts'
|
|
import { shopDataFilenameFromDisposition } from '../src/pages/tasks/shop-data-download.ts'
|
|
import { isTerminalStatus } from '../src/pages/tasks/image-video-view.ts'
|
|
|
|
// module 13 task 266:店铺数据任务视图改“每店铺卡片”,单文件下载/删除真实端点。
|
|
|
|
test('test_task_266_view_normal_primary_path', () => {
|
|
// 视图已改为「每条任务一张卡」(对齐 admin.js renderShopDataRecordTable)。
|
|
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
|
|
assert.match(page, /shop-card-grid/, '需任务卡片网格')
|
|
assert.match(page, /v-for="row in pagedResultRows"/, '逐任务渲染卡片')
|
|
assert.match(page, /shop-card-task-no/, '卡片含任务号')
|
|
assert.match(page, /暂无符合条件的店铺数据记录/, '空态文案')
|
|
})
|
|
|
|
test('test_task_266_view_normal_variant_input', () => {
|
|
const api = readSource('src/pages/tasks/shop-data-api.ts')
|
|
assert.match(api, /fetchShopDataResultDownload/, '单文件下载适配')
|
|
// 端点演进:单文件下载/删除改走每日累计档 daily-files(与 AdminShopDataCrawlTasksController 对齐)。
|
|
assert.match(api, /daily-files\/\$\{resultId\}\/download/, '单文件下载走管理端真实端点')
|
|
assert.match(api, /deleteShopDataResultHistory/, '删除适配')
|
|
assert.match(api, /daily-files\/\$\{resultId\}/, '删除走管理端真实端点')
|
|
})
|
|
|
|
test('test_task_266_view_normal_repeated_operation_is_idempotent', () => {
|
|
assert.equal(shopDataFilenameFromDisposition('attachment; filename="a.xlsx"', 'fallback.xlsx'), 'a.xlsx')
|
|
assert.equal(shopDataFilenameFromDisposition(undefined, 'fallback.xlsx'), 'fallback.xlsx')
|
|
})
|
|
|
|
test('test_task_266_view_boundary_empty_input', () => {
|
|
assert.equal(shopDataFilenameFromDisposition('', 'shop-data-task-9.xlsx'), 'shop-data-task-9.xlsx', '缺 header 回默认文件名')
|
|
assert.equal(shopDataFilenameFromDisposition('inline; filename="店铺.xlsx"', 'd.xlsx'), '店铺.xlsx')
|
|
})
|
|
|
|
test('test_task_266_view_boundary_single_item', () => {
|
|
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
|
|
assert.match(page, /fileReady/, '未就绪禁下载')
|
|
assert.match(page, /isTerminalStatus/, '终态门控删除')
|
|
assert.equal(isTerminalStatus('SUCCESS'), true)
|
|
assert.equal(isTerminalStatus('RUNNING'), false)
|
|
})
|
|
|
|
test('test_task_266_delete_normal_primary_path', () => {
|
|
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
|
|
assert.match(page, /确认删除店铺/, '删除确认含店铺')
|
|
assert.match(page, /及其数据文件/, '删除确认含数据文件')
|
|
assert.match(page, /删除成功/, '删除成功提示')
|
|
})
|
|
|
|
test('test_task_266_delete_boundary_limit_or_missing_field', () => {
|
|
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
|
|
assert.match(page, /deletingKey/, '删除中状态防重复点击')
|
|
})
|
|
|
|
test('test_task_266_dependency_failure_returns_actionable_message', () => {
|
|
const page = readSource('src/pages/tasks/ShopDataTasksPage.vue')
|
|
assert.equal(/<el-table[^>]*:data="(rows|allResultRows)"/.test(page), false, '结果文件不再用整表渲染')
|
|
assert.match(page, /暂无符合条件的店铺数据记录/, '空态文案')
|
|
})
|