@cloudbase/node-sdk
Version:
tencent cloud base server sdk for node.js
295 lines (249 loc) • 8.75 kB
text/typescript
// jest.resetModules()
import assert from 'assert'
import config from '../config.local'
import fs from 'fs'
import path from 'path'
import tcb from '../../src/index'
import xml2js from 'xml2js'
import { ERROR } from '../../src/const/code'
describe('storage.uploadFile: 上传文件', () => {
beforeEach(async () => {
jest.resetModules()
jest.resetAllMocks()
})
const app = tcb.init(config)
it('mock getUploadMetadata报错', async () => {
// jest.resetModules()
// mock错误
jest.mock('request', () => {
return jest.fn().mockImplementation((params, callback) => {
callback(null, { statusCode: 200, body: { code: 'STORAGE_EXCEED_AUTHORITY' } })
})
})
const tcb1 = require('../../src/index')
const app1 = tcb1.init(config)
try {
let result = await app1.getUploadMetadata({
// cloudPath: "test-admin.jpeg",
cloudPath: '11112.png'
})
} catch (err) {
assert(err.code === 'STORAGE_EXCEED_AUTHORITY')
}
}, 30000)
it('mock uploadFile SignatureDoesNotMatch 报错', async () => {
// mock错误
jest.mock('request', () => {
function mockRequest1(params, callback) {
const body = { data: {} }
callback(null, { statusCode: 200, body }, body)
// yield callback(null, {statusCode: 200}, 'test')
// yield {data: {}}
// yield 'test'
// return
}
function mockRequest2(params, callback) {
const obj = {
Error: {
Code: 'SignatureDoesNotMatch',
Message: ''
}
}
const builder = new xml2js.Builder()
const xml = builder.buildObject(obj)
callback(null, {body: xml}, xml)
}
let mR
let i = 0
return jest.fn().mockImplementation((params, callback) => {
// if(!mR) {
// mR = mockRequest(params, callback)
// }
if (i === 0) {
mockRequest1(params, callback)
} else {
mockRequest2(params, callback)
}
i++
// return mR.next()
})
})
const tcb2 = require('../../src/index')
const app2 = tcb2.init(config)
try {
const result1 = await app2.uploadFile({
cloudPath: '测试.png',
fileContent: 'test'
})
// console.log(result1)
} catch (err) {
assert(err.code === ERROR.SYS_ERR.code)
}
}, 100000)
it('mock getUploadMetadata request err 报错', async () => {
// jest.resetModules()
// mock错误
jest.mock('request', () => {
return jest.fn().mockImplementation((params, callback) => {
callback({ code: 'testError' }, {}, {})
})
})
const tcb3 = require('../../src/index')
const app3 = tcb3.init(config)
try {
let result = await app3.uploadFile({
cloudPath: '测试.png',
fileContent: 'test'
})
} catch (err) {
assert(err.code === 'testError')
}
}, 30000)
it('mock uploadFile request 报错', async () => {
// mock错误
jest.mock('request', () => {
function mockRequest1(params, callback) {
callback(null, { statusCode: 200, body: { data: {} } })
}
function mockRequest2(params, callback) {
callback({ code: 'testErr' }, null, null)
}
let mR
let i = 0
return jest.fn().mockImplementation((params, callback) => {
if (i === 0) {
mockRequest1(params, callback)
} else {
mockRequest2(params, callback)
}
i++
})
})
const tcb4 = require('../../src/index')
const app4 = tcb4.init(config)
try {
const result1 = await app4.uploadFile({
cloudPath: '测试.png',
fileContent: 'test'
})
} catch (err) {
assert(err.code === 'testErr')
}
}, 30000)
it('mock parseXML 报错', async () => {
// mock错误
jest.mock('request', () => {
function mockRequest1(params, callback) {
callback(null, { statusCode: 200, body: { data: {} } })
// yield callback(null, {statusCode: 200}, 'test')
// yield {data: {}}
// yield 'test'
// return
}
function mockRequest2(params, callback) {
// const obj = {Error:{
// Code: 'SignatureDoesNotMatch',
// Message: ''
// }}
// const builder = new xml2js.Builder();
// const xml = builder.buildObject('ERROR');
callback(null, {body: 'ERROR'}, 'ERROR')
}
let mR
let i = 0
return jest.fn().mockImplementation((params, callback) => {
// if(!mR) {
// mR = mockRequest(params, callback)
// }
if (i === 0) {
mockRequest1(params, callback)
} else {
mockRequest2(params, callback)
}
i++
// return mR.next()
})
})
const tcb5 = require('../../src/index')
const app5 = tcb5.init(config)
try {
const result1 = await app5.uploadFile({
cloudPath: '测试.png',
fileContent: 'test'
})
} catch (err) {
assert(err.message)
}
}, 30000)
it('mock uploadFile 非SignatureDoesNotMatch 报错', async () => {
// jest.resetModules()
// mock错误
jest.mock('request', () => {
function mockRequest1(params, callback) {
callback(null, { statusCode: 200, body: { data: {} } }, { data: {} })
// yield callback(null, {statusCode: 200}, 'test')
// yield {data: {}}
// yield 'test'
// return
}
function mockRequest2(params, callback) {
const obj = {
Error: {
Code: 'Not_SignatureDoesNotMatch',
Message: ''
}
}
const builder = new xml2js.Builder()
const xml = builder.buildObject(obj)
callback(null, {body: xml}, xml)
}
let mR
let i = 0
return jest.fn().mockImplementation((params, callback) => {
// if(!mR) {
// mR = mockRequest(params, callback)
// }
if (i === 0) {
mockRequest1(params, callback)
} else {
mockRequest2(params, callback)
}
i++
// return mR.next()
})
})
const tcb6 = require('../../src/index')
const app6 = tcb6.init(config)
try {
const result1 = await app6.uploadFile({
cloudPath: '测试.png',
fileContent: 'test'
})
} catch (err) {
assert(err.code === ERROR.STORAGE_REQUEST_FAIL.code)
}
}, 30000)
it('获取COS直传信息', async () => {
const app = tcb.init(config)
let result = await app.getUploadMetadata({
// cloudPath: "test-admin.jpeg",
cloudPath: 'test.png'
})
assert(result.data.url)
assert(result.data.token)
assert(result.data.authorization)
}, 30000)
it('上传文件', async () => {
const app = tcb.init(config)
const result1 = await app.uploadFile({
cloudPath: '测试.png',
fileContent: fs.createReadStream(path.resolve(__dirname, './my-photo.png'))
})
assert(result1.fileID)
const result2 = await app.getTempFileURL({
fileList: [result1.fileID]
})
assert(result2.fileList)
assert(result2.fileList[0].fileID)
}, 30000)
})