146 lines
3.7 KiB
JavaScript
146 lines
3.7 KiB
JavaScript
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 ID:2060001');
|
||
|
||
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;
|
||
});
|