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 }), []) })