getCosUploadMetadata.test.ts 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. // jest.resetModules()
  2. import assert from 'assert'
  3. import config from '../config.local'
  4. import fs from 'fs'
  5. import path from 'path'
  6. import tcb from '../../src/index'
  7. import xml2js from 'xml2js'
  8. import { ERROR } from '../../lib/const/code'
  9. describe('storage.uploadFile: 上传文件', () => {
  10. beforeEach(async () => {
  11. jest.resetModules()
  12. jest.resetAllMocks()
  13. })
  14. const app = tcb.init(config)
  15. it('mock getUploadMetadata报错', async () => {
  16. // jest.resetModules()
  17. // mock错误
  18. jest.mock('request', () => {
  19. return jest.fn().mockImplementation((params, callback) => {
  20. const body = { code: 'STORAGE_EXCEED_AUTHORITY' }
  21. process.nextTick(() => {
  22. callback(null, { statusCode: 200, body })
  23. })
  24. })
  25. })
  26. const tcb1 = require('../../src/index')
  27. const app1 = tcb1.init(config)
  28. try {
  29. let result = await app1.getUploadMetadata({
  30. // cloudPath: "test-admin.jpeg",
  31. cloudPath: '11112.png'
  32. })
  33. } catch (err) {
  34. assert(err.code === 'STORAGE_EXCEED_AUTHORITY')
  35. }
  36. }, 30000)
  37. it('mock uploadFile SignatureDoesNotMatch 报错', async () => {
  38. // mock错误
  39. jest.mock('request', () => {
  40. function mockRequest1(params, callback) {
  41. const body = { data: {} }
  42. process.nextTick(() => {
  43. callback(null, { statusCode: 200, body })
  44. })
  45. }
  46. function mockRequest2(params, callback) {
  47. const obj = {
  48. Error: {
  49. Code: 'SignatureDoesNotMatch',
  50. Message: ''
  51. }
  52. }
  53. const builder = new xml2js.Builder()
  54. const xml = builder.buildObject(obj)
  55. callback(null, { body: xml }, xml)
  56. }
  57. let mR
  58. let i = 0
  59. return jest.fn().mockImplementation((params, callback) => {
  60. // if(!mR) {
  61. // mR = mockRequest(params, callback)
  62. // }
  63. if (i === 0) {
  64. mockRequest1(params, callback)
  65. } else {
  66. mockRequest2(params, callback)
  67. }
  68. i++
  69. // return mR.next()
  70. })
  71. })
  72. const tcb2 = require('../../src/index')
  73. const app2 = tcb2.init(config)
  74. try {
  75. const result1 = await app2.uploadFile({
  76. cloudPath: '测试.png',
  77. fileContent: 'test'
  78. })
  79. // console.log(result1)
  80. } catch (err) {
  81. assert(err.code === ERROR.SYS_ERR.code)
  82. }
  83. }, 100000)
  84. it('mock getUploadMetadata request err 报错', async () => {
  85. // jest.resetModules()
  86. // mock错误
  87. jest.mock('request', () => {
  88. return jest.fn().mockImplementation((params, callback) => {
  89. process.nextTick(() => {
  90. callback({ code: 'testError' }, { statusCode: 200, body: {} })
  91. })
  92. })
  93. })
  94. const tcb3 = require('../../src/index')
  95. const app3 = tcb3.init(config)
  96. try {
  97. let result = await app3.uploadFile({
  98. cloudPath: '测试.png',
  99. fileContent: 'test'
  100. })
  101. } catch (err) {
  102. assert(err.code === 'testError')
  103. }
  104. }, 30000)
  105. it('mock uploadFile request 报错', async () => {
  106. // mock错误
  107. jest.mock('request', () => {
  108. function mockRequest1(params, callback) {
  109. process.nextTick(() => {
  110. callback(null, { statusCode: 200, body: { data: {} } })
  111. })
  112. }
  113. function mockRequest2(params, callback) {
  114. callback({ code: 'testErr' }, null, null)
  115. }
  116. let mR
  117. let i = 0
  118. return jest.fn().mockImplementation((params, callback) => {
  119. if (i === 0) {
  120. mockRequest1(params, callback)
  121. } else {
  122. mockRequest2(params, callback)
  123. }
  124. i++
  125. })
  126. })
  127. const tcb4 = require('../../src/index')
  128. const app4 = tcb4.init(config)
  129. try {
  130. const result1 = await app4.uploadFile({
  131. cloudPath: '测试.png',
  132. fileContent: 'test'
  133. })
  134. } catch (err) {
  135. assert(err.code === 'testErr')
  136. }
  137. }, 30000)
  138. it('mock parseXML 报错', async () => {
  139. // mock错误
  140. jest.mock('request', () => {
  141. function mockRequest1(params, callback) {
  142. process.nextTick(() => {
  143. callback(null, { statusCode: 200, body: { data: {} } })
  144. })
  145. }
  146. function mockRequest2(params, callback) {
  147. // const obj = {Error:{
  148. // Code: 'SignatureDoesNotMatch',
  149. // Message: ''
  150. // }}
  151. // const builder = new xml2js.Builder();
  152. // const xml = builder.buildObject('ERROR');
  153. process.nextTick(() => {
  154. callback(null, { body: 'ERROR' }, 'ERROR')
  155. })
  156. }
  157. let mR
  158. let i = 0
  159. return jest.fn().mockImplementation((params, callback) => {
  160. // if(!mR) {
  161. // mR = mockRequest(params, callback)
  162. // }
  163. if (i === 0) {
  164. mockRequest1(params, callback)
  165. } else {
  166. mockRequest2(params, callback)
  167. }
  168. i++
  169. // return mR.next()
  170. })
  171. })
  172. const tcb5 = require('../../src/index')
  173. const app5 = tcb5.init(config)
  174. try {
  175. const result1 = await app5.uploadFile({
  176. cloudPath: '测试.png',
  177. fileContent: 'test'
  178. })
  179. } catch (err) {
  180. assert(err.message)
  181. }
  182. }, 30000)
  183. it('mock uploadFile 非SignatureDoesNotMatch 报错', async () => {
  184. // jest.resetModules()
  185. // mock错误
  186. jest.mock('request', () => {
  187. function mockRequest1(params, callback) {
  188. process.nextTick(() => {
  189. callback(null, { statusCode: 200, body: { data: {} } }, { data: {} })
  190. })
  191. }
  192. function mockRequest2(params, callback) {
  193. const obj = {
  194. Error: {
  195. Code: 'Not_SignatureDoesNotMatch',
  196. Message: ''
  197. }
  198. }
  199. const builder = new xml2js.Builder()
  200. const xml = builder.buildObject(obj)
  201. callback(null, { body: xml }, xml)
  202. }
  203. let mR
  204. let i = 0
  205. return jest.fn().mockImplementation((params, callback) => {
  206. // if(!mR) {
  207. // mR = mockRequest(params, callback)
  208. // }
  209. if (i === 0) {
  210. mockRequest1(params, callback)
  211. } else {
  212. mockRequest2(params, callback)
  213. }
  214. i++
  215. // return mR.next()
  216. })
  217. })
  218. const tcb6 = require('../../src/index')
  219. const app6 = tcb6.init(config)
  220. try {
  221. const result1 = await app6.uploadFile({
  222. cloudPath: '测试.png',
  223. fileContent: 'test'
  224. })
  225. } catch (err) {
  226. assert(err.code === ERROR.STORAGE_REQUEST_FAIL.code)
  227. }
  228. }, 30000)
  229. it('获取COS直传信息', async () => {
  230. const app = tcb.init(config)
  231. let result = await app.getUploadMetadata({
  232. // cloudPath: "test-admin.jpeg",
  233. cloudPath: 'test.png'
  234. })
  235. assert(result.data.url)
  236. assert(result.data.token)
  237. assert(result.data.authorization)
  238. }, 30000)
  239. it('上传文件', async () => {
  240. const app = tcb.init(config)
  241. const result1 = await app.uploadFile({
  242. cloudPath: '测试.png',
  243. fileContent: fs.createReadStream(path.resolve(__dirname, './my-photo.png'))
  244. })
  245. assert(result1.fileID)
  246. const result2 = await app.getTempFileURL({
  247. fileList: [result1.fileID]
  248. })
  249. assert(result2.fileList)
  250. assert(result2.fileList[0].fileID)
  251. }, 30000)
  252. })