111 lines
3.2 KiB
TypeScript
111 lines
3.2 KiB
TypeScript
/*
|
|
* Copyright 2025 coze-dev Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
import { type Mock } from 'vitest';
|
|
import { userStoreService } from '@coze-studio/user-store';
|
|
|
|
import { upLoadFile } from '../src/upload-file';
|
|
|
|
vi.mock('@coze-arch/bot-api', () => ({
|
|
DeveloperApi: {
|
|
GetUploadAuthToken: vi.fn(() =>
|
|
Promise.resolve({ data: { service_id: '', upload_host: '' } }),
|
|
),
|
|
},
|
|
}));
|
|
vi.mock('@coze-studio/user-store', () => ({
|
|
userStoreService: {
|
|
getUserInfo: vi.fn(() => ({
|
|
user_id_str: '',
|
|
})),
|
|
},
|
|
}));
|
|
vi.mock('@coze-studio/uploader-adapter', () => {
|
|
class MockUploader {
|
|
userId: string;
|
|
constructor({ userId }) {
|
|
this.userId = userId;
|
|
}
|
|
on(event: string, cb: (data: any) => void) {
|
|
if (event === 'complete' && this.userId) {
|
|
cb({ uploadResult: { Uri: 'test_url' } });
|
|
} else if (event === 'error' && !this.userId) {
|
|
cb({ extra: 'error' });
|
|
} else if (event === 'progress') {
|
|
cb(50);
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
getUploader: vi.fn(
|
|
(props: any, isOverSea?: boolean) => new MockUploader(props),
|
|
),
|
|
};
|
|
});
|
|
|
|
describe('upload-file', () => {
|
|
afterEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
test('upLoadFile should resolve Url of result if upload success', async () => {
|
|
// mock `userId` non-empty to invoke upload success
|
|
(userStoreService.getUserInfo as Mock).mockReturnValue({
|
|
user_id_str: 'test',
|
|
});
|
|
const res = await upLoadFile({
|
|
file: new File([], 'test_file'),
|
|
fileType: 'image',
|
|
});
|
|
expect(res).equal('test_url');
|
|
global.IS_OVERSEA = false;
|
|
(userStoreService.getUserInfo as Mock).mockReturnValue({
|
|
user_id_str: 'test',
|
|
});
|
|
const res2 = await upLoadFile({
|
|
file: new File([], 'test_file'),
|
|
fileType: 'image',
|
|
});
|
|
expect(res2).equal('test_url');
|
|
});
|
|
|
|
test('upLoadFile should reject extra info of result if upload failed', () => {
|
|
// mock `userId` empty to invoke upload failed
|
|
(userStoreService.getUserInfo as Mock).mockReturnValue({ user_id_str: '' });
|
|
expect(
|
|
upLoadFile({
|
|
file: new File([], 'test_file'),
|
|
fileType: 'image',
|
|
}),
|
|
).rejects.toThrow('error');
|
|
});
|
|
|
|
test('upLoadFile should use getUploadAuthToken if biz is not bot or workflow ', () => {
|
|
// mock `userId` empty to invoke upload failed
|
|
(userStoreService.getUserInfo as Mock).mockReturnValue({ user_id_str: '' });
|
|
expect(
|
|
upLoadFile({
|
|
biz: 'community',
|
|
file: new File([], 'test_file'),
|
|
fileType: 'image',
|
|
getUploadAuthToken: vi.fn(() =>
|
|
Promise.resolve({ data: { service_id: '', upload_host: '' } }),
|
|
),
|
|
}),
|
|
).rejects.toThrow('error');
|
|
});
|
|
});
|