getDownloadUrls.test.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import tcb from '../../src/index'
  2. import config from '../config.local'
  3. import fs from 'fs'
  4. import { ERROR } from '../../lib/const/code'
  5. import assert from 'assert'
  6. import { ICustomErrRes } from '../../lib/type'
  7. let fileContent = fs.createReadStream(`${__dirname}/cos.jpeg`)
  8. describe('storage.batchGetDownloadUrl: 获取文件下载链接', () => {
  9. const app = tcb.init(config)
  10. it('校验获取下载链接传参', async () => {
  11. // fileList 必须存在且为数组类型
  12. try {
  13. await app.getTempFileURL({
  14. fileList: null
  15. })
  16. } catch (e) {
  17. assert(e.code === ERROR.INVALID_PARAM.code && e.message === 'fileList必须是非空的数组')
  18. }
  19. try {
  20. await app.getTempFileURL({
  21. fileList: {}
  22. })
  23. } catch (e) {
  24. assert(e.code === ERROR.INVALID_PARAM.code && e.message === 'fileList必须是非空的数组')
  25. }
  26. // fileList中的file必须为Object ({fileid, max_age}) 或者 字符串
  27. try {
  28. await app.getTempFileURL({
  29. fileList: [{ fileID: 'testFileID' }]
  30. })
  31. } catch (e) {
  32. assert(
  33. e.code === ERROR.INVALID_PARAM.code &&
  34. e.message === 'fileList的元素如果是对象,必须是包含fileID和maxAge的对象'
  35. )
  36. }
  37. try {
  38. await app.getTempFileURL({
  39. fileList: [{ maxAge: 10 }]
  40. })
  41. } catch (e) {
  42. assert(
  43. e.code === ERROR.INVALID_PARAM.code &&
  44. e.message === 'fileList的元素如果是对象,必须是包含fileID和maxAge的对象'
  45. )
  46. }
  47. try {
  48. await app.getTempFileURL({
  49. fileList: [123]
  50. })
  51. } catch (e) {
  52. assert(
  53. e.code === ERROR.INVALID_PARAM.code &&
  54. e.message === 'fileList的元素如果不是对象,则必须是字符串'
  55. )
  56. }
  57. }, 30000)
  58. it('获取超出文件数限制50的下载链接', async () => {
  59. let i = 0
  60. let fileList = []
  61. while (i++ <= 50) {
  62. fileList.push('testFileId')
  63. }
  64. try {
  65. const result = await app.getTempFileURL({
  66. fileList
  67. })
  68. } catch (e) {
  69. // console.log(e)
  70. assert((<ICustomErrRes>e).code === ERROR.INVALID_PARAM.code)
  71. }
  72. }, 30000)
  73. it('单环境下上传文件、获取文件链接', async () => {
  74. const result1 = await app.uploadFile({
  75. // cloudPath: "test-admin.jpeg",
  76. cloudPath: 'a|b测试.jpeg',
  77. fileContent
  78. })
  79. expect(result1.fileID).not.toBeNull()
  80. const fileID = result1.fileID
  81. const result2 = await app.getTempFileURL({
  82. fileList: [fileID]
  83. })
  84. expect(result2.fileList[0].code).toBe('SUCCESS')
  85. }, 30000)
  86. // it("获取多环境下文件链接", async () => {
  87. // // 本地测试时配置qbase-service 下checkCamAuth文件 qcAppId: 1257145308,uin: 100006570100
  88. // // tcb-admin-node 下config.js文件 env: "luke-001" (或luke-004, luke-005)
  89. // const fileIDList = [
  90. // "cloud://luke-001.6c75-luke-001-1251178460/a|b.jpeg",
  91. // "cloud://luke-004.6c75-luke-004-1251178460/a|b.jpeg",
  92. // "cloud://luke-005.6c75-luke-005-1251178460/a|b.jpeg",
  93. // "cloud://luke-005.6c75-luke-005-1251178460/a|b.jpeg"
  94. // ];
  95. // result = await tcb.getTempFileURL({
  96. // fileList: fileIDList
  97. // });
  98. // console.log("result:", JSON.stringify(result));
  99. // for (let file of result.fileList) {
  100. // expect(file.code).toBe("SUCCESS");
  101. // }
  102. // }, 30000);
  103. // it("fileID的环境ID和当前环境ID不一致", async () => {
  104. // result = await tcb.getTempFileURL({
  105. // fileList: ["cloud://xxxx0000.tcbenv-mPIgjhnq/1535367916760.jpg"]
  106. // });
  107. // expect(result.fileList[0].code).toBe("INVALIID_ENV");
  108. // });
  109. it('文件不存在', async () => {
  110. const result = await app.getTempFileURL({
  111. fileList: [`cloud://${config.env}.tcbenv-mPIgjhnq/1535367916760.jpg`]
  112. })
  113. expect(result.fileList[0].code).toBe('STORAGE_FILE_NONEXIST')
  114. })
  115. it.only('验证 文件存储接口自定义超时', async () => {
  116. try {
  117. const result = await app.getTempFileURL(
  118. {
  119. fileList: [`cloud://${config.env}.tcbenv-mPIgjhnq/1535367916760.jpg`]
  120. },
  121. {
  122. timeout: 10
  123. }
  124. )
  125. assert(!result)
  126. } catch (err) {
  127. assert(err.code === 'ETIMEDOUT' || err.code === 'ESOCKETTIMEDOUT')
  128. }
  129. })
  130. it('mock getTempFileURL return code', async () => {
  131. jest.resetModules()
  132. jest.mock('request', () => {
  133. return jest.fn().mockImplementation((params, callback) => {
  134. const body = { code: 'mockCode', message: 'mockMessage' }
  135. process.nextTick(() => {
  136. callback(null, { statusCode: 200, body })
  137. })
  138. })
  139. })
  140. const tcb1 = require('../../src/index')
  141. const app1 = tcb1.init(config)
  142. expect(
  143. app1.getTempFileURL({
  144. fileList: ['mockFileID']
  145. })
  146. ).rejects.toThrow(new Error('mockMessage'))
  147. const app2 = tcb1.init({
  148. ...config,
  149. throwOnCode: false
  150. })
  151. const res = await app2.getTempFileURL({
  152. fileList: ['mockFileID']
  153. })
  154. assert(res.code === 'mockCode')
  155. })
  156. })