import { QiniuNetworkError, QiniuRequestError } from '../errors' import * as api from '.' export const errorMap = { networkError: new QiniuNetworkError('mock', 'message'), // 网络错误 invalidParams: new QiniuRequestError(400, 'mock', 'message'), // 无效的参数 expiredToken: new QiniuRequestError(401, 'mock', 'message'), // token 过期 gatewayUnavailable: new QiniuRequestError(502, 'mock', 'message'), // 网关不可用 serviceUnavailable: new QiniuRequestError(503, 'mock', 'message'), // 服务不可用 serviceTimeout: new QiniuRequestError(504, 'mock', 'message'), // 服务超时 serviceError: new QiniuRequestError(599, 'mock', 'message'), // 服务错误 invalidUploadId: new QiniuRequestError(612, 'mock', 'message') // 无效的 upload id } export type ApiName = | 'direct' | 'getUpHosts' | 'uploadChunk' | 'uploadComplete' | 'initUploadParts' | 'deleteUploadedChunks' export class MockApi { constructor() { this.direct = this.direct.bind(this) this.getUpHosts = this.getUpHosts.bind(this) this.uploadChunk = this.uploadChunk.bind(this) this.uploadComplete = this.uploadComplete.bind(this) this.initUploadParts = this.initUploadParts.bind(this) this.deleteUploadedChunks = this.deleteUploadedChunks.bind(this) } private interceptorMap = new Map() public clearInterceptor() { this.interceptorMap.clear() } public setInterceptor(name: 'direct', interceptor: typeof api.direct): void public setInterceptor(name: 'getUpHosts', interceptor: typeof api.getUpHosts): void public setInterceptor(name: 'uploadChunk', interceptor: typeof api.uploadChunk): void public setInterceptor(name: 'uploadComplete', interceptor: typeof api.uploadComplete): void public setInterceptor(name: 'initUploadParts', interceptor: typeof api.initUploadParts): void public setInterceptor(name: 'deleteUploadedChunks', interceptor: typeof api.deleteUploadedChunks): void public setInterceptor(name: ApiName, interceptor: any): void public setInterceptor(name: any, interceptor: any): void { this.interceptorMap.set(name, interceptor) } private callInterceptor(name: ApiName, defaultValue: any): any { const interceptor = this.interceptorMap.get(name) if (interceptor != null) { return interceptor() } return defaultValue } public direct(): ReturnType { const defaultData: ReturnType = Promise.resolve({ reqId: 'req-id', data: { fsize: 270316, bucket: 'test2222222222', hash: 'Fs_k3kh7tT5RaFXVx3z1sfCyoa2Y', name: '84575bc9e34412d47cf3367b46b23bc7e394912a', key: '84575bc9e34412d47cf3367b46b23bc7e394912a.html' } }) return this.callInterceptor('direct', defaultData) } public getUpHosts(): ReturnType { const defaultData: ReturnType = Promise.resolve({ reqId: 'req-id', data: { ttl: 86400, io: { src: { main: ['iovip-z2.qbox.me'] } }, up: { acc: { main: ['upload-z2.qiniup.com'], backup: ['upload-dg.qiniup.com', 'upload-fs.qiniup.com'] }, old_acc: { main: ['upload-z2.qbox.me'], info: 'compatible to non-SNI device' }, old_src: { main: ['up-z2.qbox.me'], info: 'compatible to non-SNI device' }, src: { main: ['up-z2.qiniup.com'], backup: ['up-dg.qiniup.com', 'up-fs.qiniup.com'] } }, uc: { acc: { main: ['uc.qbox.me'] } }, rs: { acc: { main: ['rs-z2.qbox.me'] } }, rsf: { acc: { main: ['rsf-z2.qbox.me'] } }, api: { acc: { main: ['api-z2.qiniu.com'] } } } }) return this.callInterceptor('getUpHosts', defaultData) } public uploadChunk(): ReturnType { const defaultData: ReturnType = Promise.resolve({ reqId: 'req-id', data: { etag: 'FuYYVJ1gmVCoGk5C5r5ftrLXxE6m', md5: '491309eddd8e7233e14eaa25216594b4' } }) return this.callInterceptor('uploadChunk', defaultData) } public uploadComplete(): ReturnType { const defaultData: ReturnType = Promise.resolve({ reqId: 'req-id', data: { key: 'test.zip', hash: 'lsril688bAmXn7kiiOe9fL4mpc39', fsize: 11009649, bucket: 'test', name: 'test' } }) return this.callInterceptor('uploadComplete', defaultData) } public initUploadParts(): ReturnType { const defaultData: ReturnType = Promise.resolve({ reqId: 'req-id', data: { uploadId: '60878b9408bc044043f5d74f', expireAt: 1620100628 } }) return this.callInterceptor('initUploadParts', defaultData) } public deleteUploadedChunks(): ReturnType { const defaultData: ReturnType = Promise.resolve({ reqId: 'req-id', data: undefined }) return this.callInterceptor('deleteUploadedChunks', defaultData) } }