86 lines
2.7 KiB
TypeScript
86 lines
2.7 KiB
TypeScript
import { chunkUpload } from '@/lib/chunk-upload'
|
|
import {
|
|
buildFormData,
|
|
uploadSingleFile,
|
|
type CompletedChunkUploadReference,
|
|
} from '@/components/upload/file-upload-handlers'
|
|
import { CHUNK_THRESHOLD } from '@/components/upload/upload-constants'
|
|
|
|
jest.mock('@/lib/chunk-upload', () => ({
|
|
chunkUpload: jest.fn(),
|
|
}))
|
|
|
|
const buildFormDataDefaults = {
|
|
previewImages: [],
|
|
displayImage: null,
|
|
modelImages: [],
|
|
zipFile: null,
|
|
productModel: 'GBGJ-DNZ0385',
|
|
materialType: '抖音-千川素材',
|
|
categoryName: '顾家',
|
|
sceneName: '书房',
|
|
platformName: '',
|
|
productCategoryName: '电脑桌',
|
|
renderer: '',
|
|
}
|
|
|
|
describe('file-upload-handlers 分片建档参数', () => {
|
|
beforeEach(() => {
|
|
jest.clearAllMocks()
|
|
})
|
|
|
|
test('最终建档请求同时携带合并路径、原文件名和 uploadId', () => {
|
|
const completedChunkUpload: CompletedChunkUploadReference = {
|
|
existingFilePath: 'uploads/temp/upload-video-1/merged-video.mp4',
|
|
originalFileName: '荷风-8.4-文案542.mp4',
|
|
uploadId: 'upload-video-1',
|
|
}
|
|
|
|
const formData = buildFormData({
|
|
...buildFormDataDefaults,
|
|
completedChunkUpload,
|
|
})
|
|
|
|
expect(formData.get('existingFilePath')).toBe(completedChunkUpload.existingFilePath)
|
|
expect(formData.get('originalFileName')).toBe(completedChunkUpload.originalFileName)
|
|
expect(formData.get('uploadId')).toBe(completedChunkUpload.uploadId)
|
|
expect(formData.get('zipFile')).toBeNull()
|
|
})
|
|
|
|
test('小文件直传只携带原文件,不伪造分片会话字段', () => {
|
|
const file = new File(['video'], 'video.mp4', { type: 'video/mp4' })
|
|
const formData = buildFormData({
|
|
...buildFormDataDefaults,
|
|
zipFile: file,
|
|
})
|
|
|
|
expect(formData.get('zipFile')).toBe(file)
|
|
expect(formData.get('existingFilePath')).toBeNull()
|
|
expect(formData.get('originalFileName')).toBeNull()
|
|
expect(formData.get('uploadId')).toBeNull()
|
|
})
|
|
|
|
test('分片完成结果缺少 uploadId 时在发起建档前阻止上传', async () => {
|
|
;(chunkUpload as jest.Mock).mockResolvedValue({
|
|
existingFilePath: 'uploads/temp/upload-video-1/merged-video.mp4',
|
|
})
|
|
const file = new File(['video'], 'video.mp4', { type: 'video/mp4' })
|
|
Object.defineProperty(file, 'size', { value: CHUNK_THRESHOLD })
|
|
|
|
await expect(uploadSingleFile({
|
|
zipFile: file,
|
|
previewImages: [],
|
|
displayImage: null,
|
|
modelImages: [],
|
|
productModel: 'GBGJ-DNZ0385',
|
|
materialType: '抖音-千川素材',
|
|
categoryName: '顾家',
|
|
sceneName: '书房',
|
|
platformName: '',
|
|
productCategoryName: '电脑桌',
|
|
renderer: '',
|
|
onProgress: jest.fn(),
|
|
})).rejects.toThrow('分片上传结果不完整,请重新上传')
|
|
})
|
|
})
|