// import {ApiName, errorMap, MockApi} from '../api/index.mock' // // const mockApi = new MockApi() // jest.mock('../api', () => mockApi) // // // eslint-disable-next-line import/first // import {MB, Observable} from '../utils' // // eslint-disable-next-line import/first // import upload from '.' // // const testToken = 'lVgtk5xr03Oz_uvkzDtQ8LtpiEUWx5tGEDUZVg1y:rAwZ6rnPQbjyG6Pzkx4PORzn6C8=:eyJyZXR1cm5Cb2R5Ijoie1wia2V5XCI6ICQoa2V5KX0iLCJzY29wZSI6InFpbml1LWRhcnQtc2RrIiwiZGVhZGxpbmUiOjE2MTkzNjA0Mzh9' // // function mockFile(size = 4, name = 'mock.jpg', type = 'image/jpg'): File { // if (size >= 1024) throw new Error('the size is set too large.') // // const blob = new Blob(['1'.repeat(size * MB)], {type}) // return new File([blob], name) // } // // function observablePromisify(observable: Observable) { // return new Promise((resolve, reject) => { // observable.subscribe({ // error: reject, // complete: resolve // }) // }) // } // // const File3M = mockFile(3) // const File4M = mockFile(4) // const File5M = mockFile(5) // // describe('test upload', () => { // beforeEach(() => { // localStorage.clear() // 清理缓存 // mockApi.clearInterceptor() // }) // // test('base Direct.', async () => { // // 文件小于 4M 使用直传 // const result1 = await observablePromisify(upload(File3M, null, testToken)) // expect(result1).toStrictEqual((await mockApi.direct()).data) // // // 文件等于 4M 使用直传 // const result2 = await observablePromisify(upload(File4M, null, testToken)) // expect(result2).toStrictEqual((await mockApi.direct()).data) // }) // // test('Direct: all api error state.', async () => { // for (const error of Object.values(errorMap)) { // localStorage.clear() // mockApi.clearInterceptor() // mockApi.setInterceptor('direct', () => Promise.reject(error)) // // eslint-disable-next-line no-await-in-loop // await expect(observablePromisify(upload(File3M, null, testToken))) // .rejects.toStrictEqual(error) // } // }) // // test('Resume: base.', async () => { // // 文件大于 4M 使用分片 // const result = await observablePromisify(upload(File5M, null, testToken)) // expect(result).toStrictEqual((await mockApi.uploadComplete()).data) // }) // // test('Resume: all api error state.', async () => { // const testApiTable: ApiName[] = [ // 'getUpHosts', 'initUploadParts', // 'uploadChunk', 'uploadComplete' // ] // // for (const apiName of testApiTable) { // for (const error of Object.values(errorMap)) { // localStorage.clear() // mockApi.clearInterceptor() // mockApi.setInterceptor(apiName, (..._: any[]) => Promise.reject(error)) // // eslint-disable-next-line no-await-in-loop // await expect(observablePromisify(upload(File5M, null, testToken))) // .rejects.toStrictEqual(error) // } // } // }) // })