Files
jiapu/tests/upload-pages.test.js
T
2026-07-11 11:03:47 +08:00

146 lines
3.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const assert = require('assert');
const UploadPages = require('../public/js/upload-pages.js');
async function run() {
assert.deepStrictEqual(UploadPages.normalizeUploadResult({
ossId: 2060001,
fileName: 'cover.jpg',
url: 'https://cdn.example.test/cover.jpg'
}), {
ossId: '2060001',
fileName: 'cover.jpg',
url: 'https://cdn.example.test/cover.jpg'
});
assert.deepStrictEqual(UploadPages.normalizeUploadResult({
id: 2060002,
originalName: 'old.png',
fileUrl: '/old.png'
}), {
ossId: '2060002',
fileName: 'old.png',
url: '/old.png'
});
assert.strictEqual(UploadPages.mergeOssIds('', '2060001', false), '2060001');
assert.strictEqual(UploadPages.mergeOssIds('2060001', '2060002', true), '2060001,2060002');
assert.strictEqual(UploadPages.mergeOssIds('2060001', '2060001', true), '2060001');
assert.strictEqual(UploadPages.buildUploadStatus('cover.jpg', '2060001'), 'cover.jpg 上传完成,OSS ID2060001');
assert.strictEqual(UploadPages.getUploadMode(4194304), 'single');
assert.strictEqual(UploadPages.getUploadMode(4194305), 'resumable');
assert.deepStrictEqual(UploadPages.buildResumableInitBody({
name: 'avatar.jpg',
size: 5242880,
type: 'image/jpeg'
}, 'file-md5', 4194304, {
bizType: 'avatar',
usageScene: 'profile_avatar'
}), {
fileName: 'avatar.jpg',
fileSize: 5242880,
fileMd5: 'file-md5',
contentType: 'image/jpeg',
chunkSize: 4194304,
totalChunks: 2,
bizType: 'avatar',
usageScene: 'profile_avatar'
});
const calls = [];
const file = {
name: 'avatar.jpg',
size: 8,
type: 'image/jpeg',
slice(start, end) {
return { start, end, size: end - start };
}
};
const api = {
initResumableUpload(body) {
calls.push({ type: 'init', body });
return Promise.resolve({ uploadId: 'upload-1' });
},
uploadChunk(body) {
calls.push({ type: 'chunk', body });
return Promise.resolve();
},
completeResumableUpload(body) {
calls.push({ type: 'complete', body });
return Promise.resolve({ ossId: 2060001 });
}
};
const result = await UploadPages.uploadResumable(api, file, {
chunkSize: 4,
bizType: 'avatar',
usageScene: 'profile_avatar',
hashBlob(blob) {
return Promise.resolve(blob === file ? 'file-md5' : `chunk-${blob.start}`);
}
});
assert.deepStrictEqual(result, { ossId: 2060001 });
assert.deepStrictEqual(calls, [
{
type: 'init',
body: {
fileName: 'avatar.jpg',
fileSize: 8,
fileMd5: 'file-md5',
contentType: 'image/jpeg',
chunkSize: 4,
totalChunks: 2,
bizType: 'avatar',
usageScene: 'profile_avatar'
}
},
{
type: 'chunk',
body: {
uploadId: 'upload-1',
chunkIndex: 0,
chunkMd5: 'chunk-0',
file: { start: 0, end: 4, size: 4 }
}
},
{
type: 'chunk',
body: {
uploadId: 'upload-1',
chunkIndex: 1,
chunkMd5: 'chunk-4',
file: { start: 4, end: 8, size: 4 }
}
},
{
type: 'complete',
body: {
uploadId: 'upload-1',
fileMd5: 'file-md5',
fileSize: 8
}
}
]);
let singleUploadCalled = false;
const singleResult = await UploadPages.uploadFileForPage({
uploadFile(value) {
singleUploadCalled = value.size === 4;
return Promise.resolve({ ossId: 2060002 });
}
}, { size: 4 }, {
mode: 'auto',
chunkSize: 4
});
assert.strictEqual(singleUploadCalled, true);
assert.deepStrictEqual(singleResult, { ossId: 2060002 });
console.log('upload-pages tests passed');
}
run().catch((error) => {
console.error(error);
process.exitCode = 1;
});