Files
crawler-plugin/frontend-vue/tests/upload-to-java.test.ts
T
huangzd1997 882ccdac12 refactor(品牌工具页): 抽取 formatDateTime 与 uploadPathsToJava 公共工具
- 新增 shared/utils/datetime.ts:13 个品牌页逐字重复的 formatDateTime 收敛为一处;
  语义不同的 3 个变体(toLocaleString / 字符串切片 / 支持时间戳)保留不动
- 新增 shared/utils/upload-to-java.ts:10 个品牌页的上传循环收敛,api 依赖注入便于单测;
  保留 uploadOss(品牌Tab)与 returnEmptyWhenUnavailable(跟价)两处行为差异
- 补 datetime / upload-to-java 单测 10 例

净减约 327 行;vue-tsc 构建与 690 个前端单测全通过
2026-09-13 23:16:59 +08:00

71 lines
2.5 KiB
TypeScript

import { test } from 'node:test'
import assert from 'node:assert/strict'
import { uploadPathsToJava } from '../src/shared/utils/upload-to-java.ts'
import type { PywebviewApi } from '../src/shared/bridges/pywebview.ts'
function fakeApi(
upload: (
filePath: string,
relativePath?: string,
uploadOss?: boolean,
) => Promise<{ success: boolean; data?: never; error?: string; message?: string }>,
) {
return { upload_file_to_java: upload } as unknown as PywebviewApi
}
function okData(filePath: string) {
return { fileKey: `k:${filePath}`, originalFilename: filePath, localPath: '', size: 1 }
}
test('uploadPathsToJava 逐个上传并返回结果列表', async () => {
const calls: Array<[string, string | undefined, boolean | undefined]> = []
const api = fakeApi(async (filePath, relativePath, uploadOss) => {
calls.push([filePath, relativePath, uploadOss])
return { success: true, data: okData(filePath) as never }
})
const result = await uploadPathsToJava(api, ['/a.xlsx', { absolutePath: '/b.xlsx', relativePath: 'sub/b.xlsx' }])
assert.equal(result.length, 2)
assert.deepEqual(calls, [
['/a.xlsx', undefined, undefined],
['/b.xlsx', 'sub/b.xlsx', undefined],
])
})
test('uploadPathsToJava 透传 uploadOss 参数', async () => {
let seen: boolean | undefined
const api = fakeApi(async (filePath, _relativePath, uploadOss) => {
seen = uploadOss
return { success: true, data: okData(filePath) as never }
})
await uploadPathsToJava(api, ['/a.xlsx'], { uploadOss: true })
assert.equal(seen, true)
})
test('uploadPathsToJava 任一失败即整体抛错并带上桥返回的文案', async () => {
const api = fakeApi(async (filePath) =>
filePath === '/bad.xlsx'
? { success: false, error: '磁盘读取失败' }
: { success: true, data: okData(filePath) as never },
)
await assert.rejects(() => uploadPathsToJava(api, ['/ok.xlsx', '/bad.xlsx']), /磁盘读取失败/)
})
test('uploadPathsToJava 失败无文案时回落到「上传失败:路径」', async () => {
const api = fakeApi(async () => ({ success: false }))
await assert.rejects(() => uploadPathsToJava(api, ['/x.xlsx']), /上传失败:\/x\.xlsx/)
})
test('uploadPathsToJava 缺上传桥默认抛错', async () => {
await assert.rejects(() => uploadPathsToJava(undefined, ['/a.xlsx']), /未提供文件上传能力/)
})
test('uploadPathsToJava 缺上传桥时 returnEmptyWhenUnavailable 返回空数组', async () => {
assert.deepEqual(await uploadPathsToJava(undefined, ['/a.xlsx'], { returnEmptyWhenUnavailable: true }), [])
})