index.test.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
  3. var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
  4. var _iterator = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/symbol/iterator"));
  5. var _symbol = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/symbol"));
  6. var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
  7. var _index = require("../api/index.mock");
  8. var _utils = require("../utils");
  9. var _2 = _interopRequireDefault(require("."));
  10. var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
  11. function adopt(value) {
  12. return value instanceof P ? value : new P(function (resolve) {
  13. resolve(value);
  14. });
  15. }
  16. return new (P || (P = _promise["default"]))(function (resolve, reject) {
  17. function fulfilled(value) {
  18. try {
  19. step(generator.next(value));
  20. } catch (e) {
  21. reject(e);
  22. }
  23. }
  24. function rejected(value) {
  25. try {
  26. step(generator["throw"](value));
  27. } catch (e) {
  28. reject(e);
  29. }
  30. }
  31. function step(result) {
  32. result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
  33. }
  34. step((generator = generator.apply(thisArg, _arguments || [])).next());
  35. });
  36. };
  37. var __generator = void 0 && (void 0).__generator || function (thisArg, body) {
  38. var _ = {
  39. label: 0,
  40. sent: function sent() {
  41. if (t[0] & 1) throw t[1];
  42. return t[1];
  43. },
  44. trys: [],
  45. ops: []
  46. },
  47. f,
  48. y,
  49. t,
  50. g;
  51. return g = {
  52. next: verb(0),
  53. "throw": verb(1),
  54. "return": verb(2)
  55. }, typeof _symbol["default"] === "function" && (g[_iterator["default"]] = function () {
  56. return this;
  57. }), g;
  58. function verb(n) {
  59. return function (v) {
  60. return step([n, v]);
  61. };
  62. }
  63. function step(op) {
  64. if (f) throw new TypeError("Generator is already executing.");
  65. while (_) {
  66. try {
  67. if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
  68. if (y = 0, t) op = [op[0] & 2, t.value];
  69. switch (op[0]) {
  70. case 0:
  71. case 1:
  72. t = op;
  73. break;
  74. case 4:
  75. _.label++;
  76. return {
  77. value: op[1],
  78. done: false
  79. };
  80. case 5:
  81. _.label++;
  82. y = op[1];
  83. op = [0];
  84. continue;
  85. case 7:
  86. op = _.ops.pop();
  87. _.trys.pop();
  88. continue;
  89. default:
  90. if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
  91. _ = 0;
  92. continue;
  93. }
  94. if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
  95. _.label = op[1];
  96. break;
  97. }
  98. if (op[0] === 6 && _.label < t[1]) {
  99. _.label = t[1];
  100. t = op;
  101. break;
  102. }
  103. if (t && _.label < t[2]) {
  104. _.label = t[2];
  105. _.ops.push(op);
  106. break;
  107. }
  108. if (t[2]) _.ops.pop();
  109. _.trys.pop();
  110. continue;
  111. }
  112. op = body.call(thisArg, _);
  113. } catch (e) {
  114. op = [6, e];
  115. y = 0;
  116. } finally {
  117. f = t = 0;
  118. }
  119. }
  120. if (op[0] & 5) throw op[1];
  121. return {
  122. value: op[0] ? op[1] : void 0,
  123. done: true
  124. };
  125. }
  126. };
  127. var __values = void 0 && (void 0).__values || function (o) {
  128. var s = typeof _symbol["default"] === "function" && _iterator["default"],
  129. m = s && o[s],
  130. i = 0;
  131. if (m) return m.call(o);
  132. if (o && typeof o.length === "number") return {
  133. next: function next() {
  134. if (o && i >= o.length) o = void 0;
  135. return {
  136. value: o && o[i++],
  137. done: !o
  138. };
  139. }
  140. };
  141. throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
  142. };
  143. var mockApi = new _index.MockApi();
  144. jest.mock('../api', function () {
  145. return mockApi;
  146. }); // eslint-disable-next-line import/first
  147. var testToken = 'lVgtk5xr03Oz_uvkzDtQ8LtpiEUWx5tGEDUZVg1y:rAwZ6rnPQbjyG6Pzkx4PORzn6C8=:eyJyZXR1cm5Cb2R5Ijoie1wia2V5XCI6ICQoa2V5KX0iLCJzY29wZSI6InFpbml1LWRhcnQtc2RrIiwiZGVhZGxpbmUiOjE2MTkzNjA0Mzh9';
  148. function mockFile(size, name, type) {
  149. if (size === void 0) {
  150. size = 4;
  151. }
  152. if (name === void 0) {
  153. name = 'mock.jpg';
  154. }
  155. if (type === void 0) {
  156. type = 'image/jpg';
  157. }
  158. if (size >= 1024) throw new Error('the size is set too large.');
  159. var blob = new Blob(['1'.repeat(size * _utils.MB)], {
  160. type: type
  161. });
  162. return new File([blob], name);
  163. }
  164. function observablePromisify(observable) {
  165. return new _promise["default"](function (resolve, reject) {
  166. observable.subscribe({
  167. error: reject,
  168. complete: resolve
  169. });
  170. });
  171. }
  172. var File3M = mockFile(3);
  173. var File4M = mockFile(4);
  174. var File5M = mockFile(5);
  175. describe('test upload', function () {
  176. beforeEach(function () {
  177. localStorage.clear(); // 清理缓存
  178. mockApi.clearInterceptor();
  179. });
  180. test('base Direct.', function () {
  181. return __awaiter(void 0, void 0, void 0, function () {
  182. var result1, _a, _b, result2, _c, _d;
  183. return __generator(this, function (_e) {
  184. switch (_e.label) {
  185. case 0:
  186. return [4
  187. /*yield*/
  188. , observablePromisify((0, _2["default"])(File3M, null, testToken))];
  189. case 1:
  190. result1 = _e.sent();
  191. _b = (_a = expect(result1)).toStrictEqual;
  192. return [4
  193. /*yield*/
  194. , mockApi.direct()];
  195. case 2:
  196. _b.apply(_a, [_e.sent().data]);
  197. return [4
  198. /*yield*/
  199. , observablePromisify((0, _2["default"])(File4M, null, testToken))];
  200. case 3:
  201. result2 = _e.sent();
  202. _d = (_c = expect(result2)).toStrictEqual;
  203. return [4
  204. /*yield*/
  205. , mockApi.direct()];
  206. case 4:
  207. _d.apply(_c, [_e.sent().data]);
  208. return [2
  209. /*return*/
  210. ];
  211. }
  212. });
  213. });
  214. });
  215. test('Direct: all api error state.', function () {
  216. return __awaiter(void 0, void 0, void 0, function () {
  217. var _loop_1, _a, _b, error, e_1_1;
  218. var e_1, _c;
  219. return __generator(this, function (_d) {
  220. switch (_d.label) {
  221. case 0:
  222. _loop_1 = function _loop_1(error) {
  223. return __generator(this, function (_a) {
  224. switch (_a.label) {
  225. case 0:
  226. localStorage.clear();
  227. mockApi.clearInterceptor();
  228. mockApi.setInterceptor('direct', function () {
  229. return _promise["default"].reject(error);
  230. }); // eslint-disable-next-line no-await-in-loop
  231. return [4
  232. /*yield*/
  233. , expect(observablePromisify((0, _2["default"])(File3M, null, testToken))).rejects.toStrictEqual(error)];
  234. case 1:
  235. // eslint-disable-next-line no-await-in-loop
  236. _a.sent();
  237. return [2
  238. /*return*/
  239. ];
  240. }
  241. });
  242. };
  243. _d.label = 1;
  244. case 1:
  245. _d.trys.push([1, 6, 7, 8]);
  246. _a = __values((0, _values["default"])(_index.errorMap)), _b = _a.next();
  247. _d.label = 2;
  248. case 2:
  249. if (!!_b.done) return [3
  250. /*break*/
  251. , 5];
  252. error = _b.value;
  253. return [5
  254. /*yield**/
  255. , _loop_1(error)];
  256. case 3:
  257. _d.sent();
  258. _d.label = 4;
  259. case 4:
  260. _b = _a.next();
  261. return [3
  262. /*break*/
  263. , 2];
  264. case 5:
  265. return [3
  266. /*break*/
  267. , 8];
  268. case 6:
  269. e_1_1 = _d.sent();
  270. e_1 = {
  271. error: e_1_1
  272. };
  273. return [3
  274. /*break*/
  275. , 8];
  276. case 7:
  277. try {
  278. if (_b && !_b.done && (_c = _a["return"])) _c.call(_a);
  279. } finally {
  280. if (e_1) throw e_1.error;
  281. }
  282. return [7
  283. /*endfinally*/
  284. ];
  285. case 8:
  286. return [2
  287. /*return*/
  288. ];
  289. }
  290. });
  291. });
  292. });
  293. test('Resume: base.', function () {
  294. return __awaiter(void 0, void 0, void 0, function () {
  295. var result, _a, _b;
  296. return __generator(this, function (_c) {
  297. switch (_c.label) {
  298. case 0:
  299. return [4
  300. /*yield*/
  301. , observablePromisify((0, _2["default"])(File5M, null, testToken))];
  302. case 1:
  303. result = _c.sent();
  304. _b = (_a = expect(result)).toStrictEqual;
  305. return [4
  306. /*yield*/
  307. , mockApi.uploadComplete()];
  308. case 2:
  309. _b.apply(_a, [_c.sent().data]);
  310. return [2
  311. /*return*/
  312. ];
  313. }
  314. });
  315. });
  316. });
  317. test('Resume: all api error state.', function () {
  318. return __awaiter(void 0, void 0, void 0, function () {
  319. var testApiTable, testApiTable_1, testApiTable_1_1, apiName, _loop_2, _a, _b, error, e_2_1, e_3_1;
  320. var e_3, _c, e_2, _d;
  321. return __generator(this, function (_e) {
  322. switch (_e.label) {
  323. case 0:
  324. testApiTable = ['getUpHosts', 'initUploadParts', 'uploadChunk', 'uploadComplete'];
  325. _e.label = 1;
  326. case 1:
  327. _e.trys.push([1, 12, 13, 14]);
  328. testApiTable_1 = __values(testApiTable), testApiTable_1_1 = testApiTable_1.next();
  329. _e.label = 2;
  330. case 2:
  331. if (!!testApiTable_1_1.done) return [3
  332. /*break*/
  333. , 11];
  334. apiName = testApiTable_1_1.value;
  335. _loop_2 = function _loop_2(error) {
  336. return __generator(this, function (_a) {
  337. switch (_a.label) {
  338. case 0:
  339. localStorage.clear();
  340. mockApi.clearInterceptor();
  341. mockApi.setInterceptor(apiName, function () {
  342. var _ = [];
  343. for (var _i = 0; _i < arguments.length; _i++) {
  344. _[_i] = arguments[_i];
  345. }
  346. return _promise["default"].reject(error);
  347. }); // eslint-disable-next-line no-await-in-loop
  348. return [4
  349. /*yield*/
  350. , expect(observablePromisify((0, _2["default"])(File5M, null, testToken))).rejects.toStrictEqual(error)];
  351. case 1:
  352. // eslint-disable-next-line no-await-in-loop
  353. _a.sent();
  354. return [2
  355. /*return*/
  356. ];
  357. }
  358. });
  359. };
  360. _e.label = 3;
  361. case 3:
  362. _e.trys.push([3, 8, 9, 10]);
  363. _a = (e_2 = void 0, __values((0, _values["default"])(_index.errorMap))), _b = _a.next();
  364. _e.label = 4;
  365. case 4:
  366. if (!!_b.done) return [3
  367. /*break*/
  368. , 7];
  369. error = _b.value;
  370. return [5
  371. /*yield**/
  372. , _loop_2(error)];
  373. case 5:
  374. _e.sent();
  375. _e.label = 6;
  376. case 6:
  377. _b = _a.next();
  378. return [3
  379. /*break*/
  380. , 4];
  381. case 7:
  382. return [3
  383. /*break*/
  384. , 10];
  385. case 8:
  386. e_2_1 = _e.sent();
  387. e_2 = {
  388. error: e_2_1
  389. };
  390. return [3
  391. /*break*/
  392. , 10];
  393. case 9:
  394. try {
  395. if (_b && !_b.done && (_d = _a["return"])) _d.call(_a);
  396. } finally {
  397. if (e_2) throw e_2.error;
  398. }
  399. return [7
  400. /*endfinally*/
  401. ];
  402. case 10:
  403. testApiTable_1_1 = testApiTable_1.next();
  404. return [3
  405. /*break*/
  406. , 2];
  407. case 11:
  408. return [3
  409. /*break*/
  410. , 14];
  411. case 12:
  412. e_3_1 = _e.sent();
  413. e_3 = {
  414. error: e_3_1
  415. };
  416. return [3
  417. /*break*/
  418. , 14];
  419. case 13:
  420. try {
  421. if (testApiTable_1_1 && !testApiTable_1_1.done && (_c = testApiTable_1["return"])) _c.call(testApiTable_1);
  422. } finally {
  423. if (e_3) throw e_3.error;
  424. }
  425. return [7
  426. /*endfinally*/
  427. ];
  428. case 14:
  429. return [2
  430. /*return*/
  431. ];
  432. }
  433. });
  434. });
  435. });
  436. });