@webex/calling 3.0.0-next.2 → 3.0.0-next.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/CHANGELOG.md +1403 -0
  2. package/README.md +74 -74
  3. package/dist/module/CallHistory/CallHistory.js +81 -81
  4. package/dist/module/CallHistory/callHistoryFixtures.js +307 -307
  5. package/dist/module/CallHistory/constants.js +9 -9
  6. package/dist/module/CallHistory/types.js +1 -1
  7. package/dist/module/CallSettings/CallSettings.js +65 -65
  8. package/dist/module/CallSettings/UcmBackendConnector.js +100 -100
  9. package/dist/module/CallSettings/WxCallBackendConnector.js +287 -287
  10. package/dist/module/CallSettings/constants.js +11 -11
  11. package/dist/module/CallSettings/testFixtures.js +62 -62
  12. package/dist/module/CallSettings/types.js +1 -1
  13. package/dist/module/CallingClient/CallingClient.js +248 -248
  14. package/dist/module/CallingClient/callRecordFixtures.js +93 -93
  15. package/dist/module/CallingClient/calling/CallerId/index.js +169 -169
  16. package/dist/module/CallingClient/calling/CallerId/types.js +1 -1
  17. package/dist/module/CallingClient/calling/call.js +1658 -1658
  18. package/dist/module/CallingClient/calling/callManager.js +284 -284
  19. package/dist/module/CallingClient/calling/index.js +2 -2
  20. package/dist/module/CallingClient/calling/types.js +53 -53
  21. package/dist/module/CallingClient/callingClientFixtures.js +38 -38
  22. package/dist/module/CallingClient/constants.js +122 -122
  23. package/dist/module/CallingClient/line/index.js +158 -158
  24. package/dist/module/CallingClient/line/types.js +15 -15
  25. package/dist/module/CallingClient/registration/index.js +1 -1
  26. package/dist/module/CallingClient/registration/register.js +507 -507
  27. package/dist/module/CallingClient/registration/registerFixtures.js +28 -28
  28. package/dist/module/CallingClient/registration/types.js +1 -1
  29. package/dist/module/CallingClient/types.js +1 -1
  30. package/dist/module/Contacts/ContactsClient.js +484 -484
  31. package/dist/module/Contacts/constants.js +20 -20
  32. package/dist/module/Contacts/contactFixtures.js +284 -284
  33. package/dist/module/Contacts/types.js +10 -10
  34. package/dist/module/Errors/catalog/CallError.js +26 -26
  35. package/dist/module/Errors/catalog/CallingDeviceError.js +18 -18
  36. package/dist/module/Errors/catalog/ExtendedError.js +10 -10
  37. package/dist/module/Errors/catalog/LineError.js +24 -24
  38. package/dist/module/Errors/index.js +2 -2
  39. package/dist/module/Errors/types.js +48 -48
  40. package/dist/module/Events/impl/index.js +19 -19
  41. package/dist/module/Events/types.js +83 -83
  42. package/dist/module/Logger/index.js +114 -114
  43. package/dist/module/Logger/types.js +25 -25
  44. package/dist/module/Metrics/index.js +232 -232
  45. package/dist/module/Metrics/types.js +37 -37
  46. package/dist/module/SDKConnector/index.js +39 -39
  47. package/dist/module/SDKConnector/types.js +1 -1
  48. package/dist/module/SDKConnector/utils.js +12 -12
  49. package/dist/module/Voicemail/BroadworksBackendConnector.js +291 -291
  50. package/dist/module/Voicemail/UcmBackendConnector.js +279 -279
  51. package/dist/module/Voicemail/Voicemail.js +110 -110
  52. package/dist/module/Voicemail/WxCallBackendConnector.js +279 -279
  53. package/dist/module/Voicemail/constants.js +29 -29
  54. package/dist/module/Voicemail/types.js +1 -1
  55. package/dist/module/Voicemail/voicemailFixture.js +510 -510
  56. package/dist/module/api.js +6 -6
  57. package/dist/module/common/Utils.js +802 -802
  58. package/dist/module/common/constants.js +41 -41
  59. package/dist/module/common/index.js +1 -1
  60. package/dist/module/common/testUtil.js +938 -938
  61. package/dist/module/common/types.js +57 -57
  62. package/dist/module/index.js +8 -8
  63. package/dist/types/CallHistory/CallHistory.d.ts +17 -17
  64. package/dist/types/CallHistory/callHistoryFixtures.d.ts +94 -94
  65. package/dist/types/CallHistory/constants.d.ts +9 -9
  66. package/dist/types/CallHistory/types.d.ts +18 -18
  67. package/dist/types/CallSettings/CallSettings.d.ts +19 -19
  68. package/dist/types/CallSettings/UcmBackendConnector.d.ts +19 -19
  69. package/dist/types/CallSettings/WxCallBackendConnector.d.ts +21 -21
  70. package/dist/types/CallSettings/constants.d.ts +11 -11
  71. package/dist/types/CallSettings/testFixtures.d.ts +15 -15
  72. package/dist/types/CallSettings/types.d.ts +107 -107
  73. package/dist/types/CallingClient/CallingClient.d.ts +35 -35
  74. package/dist/types/CallingClient/callRecordFixtures.d.ts +3 -3
  75. package/dist/types/CallingClient/calling/CallerId/index.d.ts +17 -17
  76. package/dist/types/CallingClient/calling/CallerId/types.d.ts +41 -41
  77. package/dist/types/CallingClient/calling/call.d.ts +96 -96
  78. package/dist/types/CallingClient/calling/callManager.d.ts +25 -25
  79. package/dist/types/CallingClient/calling/index.d.ts +2 -2
  80. package/dist/types/CallingClient/calling/types.d.ts +206 -206
  81. package/dist/types/CallingClient/callingClientFixtures.d.ts +18 -18
  82. package/dist/types/CallingClient/constants.d.ts +122 -122
  83. package/dist/types/CallingClient/line/index.d.ts +43 -43
  84. package/dist/types/CallingClient/line/types.d.ts +55 -55
  85. package/dist/types/CallingClient/registration/index.d.ts +1 -1
  86. package/dist/types/CallingClient/registration/register.d.ts +64 -64
  87. package/dist/types/CallingClient/registration/registerFixtures.d.ts +28 -28
  88. package/dist/types/CallingClient/registration/types.d.ts +20 -20
  89. package/dist/types/CallingClient/types.d.ts +29 -29
  90. package/dist/types/Contacts/ContactsClient.d.ts +26 -26
  91. package/dist/types/Contacts/constants.d.ts +19 -19
  92. package/dist/types/Contacts/contactFixtures.d.ts +280 -280
  93. package/dist/types/Contacts/types.d.ts +72 -72
  94. package/dist/types/Errors/catalog/CallError.d.ts +11 -11
  95. package/dist/types/Errors/catalog/CallingDeviceError.d.ts +10 -10
  96. package/dist/types/Errors/catalog/ExtendedError.d.ts +6 -6
  97. package/dist/types/Errors/catalog/LineError.d.ts +10 -10
  98. package/dist/types/Errors/index.d.ts +2 -2
  99. package/dist/types/Errors/types.d.ts +60 -60
  100. package/dist/types/Events/impl/index.d.ts +8 -8
  101. package/dist/types/Events/types.d.ts +288 -288
  102. package/dist/types/Logger/index.d.ts +12 -12
  103. package/dist/types/Logger/types.d.ts +25 -25
  104. package/dist/types/Metrics/index.d.ts +5 -5
  105. package/dist/types/Metrics/types.d.ts +42 -42
  106. package/dist/types/SDKConnector/index.d.ts +12 -12
  107. package/dist/types/SDKConnector/types.d.ts +128 -128
  108. package/dist/types/SDKConnector/utils.d.ts +5 -5
  109. package/dist/types/Voicemail/BroadworksBackendConnector.d.ts +27 -27
  110. package/dist/types/Voicemail/UcmBackendConnector.d.ts +34 -34
  111. package/dist/types/Voicemail/Voicemail.d.ts +27 -27
  112. package/dist/types/Voicemail/WxCallBackendConnector.d.ts +23 -23
  113. package/dist/types/Voicemail/constants.d.ts +29 -29
  114. package/dist/types/Voicemail/types.d.ts +133 -133
  115. package/dist/types/Voicemail/voicemailFixture.d.ts +417 -417
  116. package/dist/types/api.d.ts +16 -16
  117. package/dist/types/common/Utils.d.ts +34 -34
  118. package/dist/types/common/constants.d.ts +41 -41
  119. package/dist/types/common/index.d.ts +1 -1
  120. package/dist/types/common/testUtil.d.ts +3611 -3611
  121. package/dist/types/common/types.d.ts +191 -191
  122. package/dist/types/index.d.ts +8 -8
  123. package/package.json +4 -4
  124. package/dist/CallHistory/CallHistory.js +0 -203
  125. package/dist/CallHistory/CallHistory.js.map +0 -1
  126. package/dist/CallHistory/CallHistory.test.js +0 -133
  127. package/dist/CallHistory/CallHistory.test.js.map +0 -1
  128. package/dist/CallHistory/callHistoryFixtures.js +0 -310
  129. package/dist/CallHistory/callHistoryFixtures.js.map +0 -1
  130. package/dist/CallHistory/constants.js +0 -26
  131. package/dist/CallHistory/constants.js.map +0 -1
  132. package/dist/CallHistory/types.js +0 -7
  133. package/dist/CallHistory/types.js.map +0 -1
  134. package/dist/CallSettings/CallSettings.js +0 -276
  135. package/dist/CallSettings/CallSettings.js.map +0 -1
  136. package/dist/CallSettings/CallSettings.test.js +0 -122
  137. package/dist/CallSettings/CallSettings.test.js.map +0 -1
  138. package/dist/CallSettings/UcmBackendConnector.js +0 -217
  139. package/dist/CallSettings/UcmBackendConnector.js.map +0 -1
  140. package/dist/CallSettings/UcmBackendConnector.test.js +0 -227
  141. package/dist/CallSettings/UcmBackendConnector.test.js.map +0 -1
  142. package/dist/CallSettings/WxCallBackendConnector.js +0 -541
  143. package/dist/CallSettings/WxCallBackendConnector.js.map +0 -1
  144. package/dist/CallSettings/WxCallBackendConnector.test.js +0 -802
  145. package/dist/CallSettings/WxCallBackendConnector.test.js.map +0 -1
  146. package/dist/CallSettings/constants.js +0 -30
  147. package/dist/CallSettings/constants.js.map +0 -1
  148. package/dist/CallSettings/testFixtures.js +0 -72
  149. package/dist/CallSettings/testFixtures.js.map +0 -1
  150. package/dist/CallSettings/types.js +0 -7
  151. package/dist/CallSettings/types.js.map +0 -1
  152. package/dist/CallingClient/CallingClient.js +0 -572
  153. package/dist/CallingClient/CallingClient.js.map +0 -1
  154. package/dist/CallingClient/CallingClient.test.js +0 -931
  155. package/dist/CallingClient/CallingClient.test.js.map +0 -1
  156. package/dist/CallingClient/callRecordFixtures.js +0 -103
  157. package/dist/CallingClient/callRecordFixtures.js.map +0 -1
  158. package/dist/CallingClient/calling/CallerId/index.js +0 -287
  159. package/dist/CallingClient/calling/CallerId/index.js.map +0 -1
  160. package/dist/CallingClient/calling/CallerId/index.test.js +0 -274
  161. package/dist/CallingClient/calling/CallerId/index.test.js.map +0 -1
  162. package/dist/CallingClient/calling/CallerId/types.js +0 -7
  163. package/dist/CallingClient/calling/CallerId/types.js.map +0 -1
  164. package/dist/CallingClient/calling/call.js +0 -2995
  165. package/dist/CallingClient/calling/call.js.map +0 -1
  166. package/dist/CallingClient/calling/call.test.js +0 -2614
  167. package/dist/CallingClient/calling/call.test.js.map +0 -1
  168. package/dist/CallingClient/calling/callManager.js +0 -443
  169. package/dist/CallingClient/calling/callManager.js.map +0 -1
  170. package/dist/CallingClient/calling/callManager.test.js +0 -683
  171. package/dist/CallingClient/calling/callManager.test.js.map +0 -1
  172. package/dist/CallingClient/calling/index.js +0 -30
  173. package/dist/CallingClient/calling/index.js.map +0 -1
  174. package/dist/CallingClient/calling/types.js +0 -71
  175. package/dist/CallingClient/calling/types.js.map +0 -1
  176. package/dist/CallingClient/callingClientFixtures.js +0 -53
  177. package/dist/CallingClient/callingClientFixtures.js.map +0 -1
  178. package/dist/CallingClient/constants.js +0 -226
  179. package/dist/CallingClient/constants.js.map +0 -1
  180. package/dist/CallingClient/line/index.js +0 -312
  181. package/dist/CallingClient/line/index.js.map +0 -1
  182. package/dist/CallingClient/line/line.test.js +0 -270
  183. package/dist/CallingClient/line/line.test.js.map +0 -1
  184. package/dist/CallingClient/line/types.js +0 -25
  185. package/dist/CallingClient/line/types.js.map +0 -1
  186. package/dist/CallingClient/registration/index.js +0 -19
  187. package/dist/CallingClient/registration/index.js.map +0 -1
  188. package/dist/CallingClient/registration/register.js +0 -1295
  189. package/dist/CallingClient/registration/register.js.map +0 -1
  190. package/dist/CallingClient/registration/register.test.js +0 -838
  191. package/dist/CallingClient/registration/register.test.js.map +0 -1
  192. package/dist/CallingClient/registration/registerFixtures.js +0 -41
  193. package/dist/CallingClient/registration/registerFixtures.js.map +0 -1
  194. package/dist/CallingClient/registration/types.js +0 -7
  195. package/dist/CallingClient/registration/types.js.map +0 -1
  196. package/dist/CallingClient/types.js +0 -7
  197. package/dist/CallingClient/types.js.map +0 -1
  198. package/dist/Contacts/ContactsClient.js +0 -1139
  199. package/dist/Contacts/ContactsClient.js.map +0 -1
  200. package/dist/Contacts/ContactsClient.test.js +0 -725
  201. package/dist/Contacts/ContactsClient.test.js.map +0 -1
  202. package/dist/Contacts/constants.js +0 -36
  203. package/dist/Contacts/constants.js.map +0 -1
  204. package/dist/Contacts/contactFixtures.js +0 -340
  205. package/dist/Contacts/contactFixtures.js.map +0 -1
  206. package/dist/Contacts/types.js +0 -20
  207. package/dist/Contacts/types.js.map +0 -1
  208. package/dist/Errors/catalog/CallError.js +0 -94
  209. package/dist/Errors/catalog/CallError.js.map +0 -1
  210. package/dist/Errors/catalog/CallingDeviceError.js +0 -88
  211. package/dist/Errors/catalog/CallingDeviceError.js.map +0 -1
  212. package/dist/Errors/catalog/ExtendedError.js +0 -45
  213. package/dist/Errors/catalog/ExtendedError.js.map +0 -1
  214. package/dist/Errors/catalog/LineError.js +0 -90
  215. package/dist/Errors/catalog/LineError.js.map +0 -1
  216. package/dist/Errors/index.js +0 -21
  217. package/dist/Errors/index.js.map +0 -1
  218. package/dist/Errors/types.js +0 -62
  219. package/dist/Errors/types.js.map +0 -1
  220. package/dist/Events/impl/index.js +0 -82
  221. package/dist/Events/impl/index.js.map +0 -1
  222. package/dist/Events/types.js +0 -111
  223. package/dist/Events/types.js.map +0 -1
  224. package/dist/Logger/index.js +0 -221
  225. package/dist/Logger/index.js.map +0 -1
  226. package/dist/Logger/index.test.js +0 -62
  227. package/dist/Logger/index.test.js.map +0 -1
  228. package/dist/Logger/types.js +0 -37
  229. package/dist/Logger/types.js.map +0 -1
  230. package/dist/Metrics/index.js +0 -329
  231. package/dist/Metrics/index.js.map +0 -1
  232. package/dist/Metrics/index.test.js +0 -291
  233. package/dist/Metrics/index.test.js.map +0 -1
  234. package/dist/Metrics/types.js +0 -50
  235. package/dist/Metrics/types.js.map +0 -1
  236. package/dist/SDKConnector/index.js +0 -105
  237. package/dist/SDKConnector/index.js.map +0 -1
  238. package/dist/SDKConnector/index.test.js +0 -9
  239. package/dist/SDKConnector/index.test.js.map +0 -1
  240. package/dist/SDKConnector/types.js +0 -7
  241. package/dist/SDKConnector/types.js.map +0 -1
  242. package/dist/SDKConnector/utils.js +0 -40
  243. package/dist/SDKConnector/utils.js.map +0 -1
  244. package/dist/SDKConnector/utils.test.js +0 -9
  245. package/dist/SDKConnector/utils.test.js.map +0 -1
  246. package/dist/Voicemail/BroadworksBackendConnector.js +0 -632
  247. package/dist/Voicemail/BroadworksBackendConnector.js.map +0 -1
  248. package/dist/Voicemail/BroadworksBackendConnector.test.js +0 -733
  249. package/dist/Voicemail/BroadworksBackendConnector.test.js.map +0 -1
  250. package/dist/Voicemail/UcmBackendConnector.js +0 -566
  251. package/dist/Voicemail/UcmBackendConnector.js.map +0 -1
  252. package/dist/Voicemail/UcmBackendConnector.test.js +0 -628
  253. package/dist/Voicemail/UcmBackendConnector.test.js.map +0 -1
  254. package/dist/Voicemail/Voicemail.js +0 -378
  255. package/dist/Voicemail/Voicemail.js.map +0 -1
  256. package/dist/Voicemail/Voicemail.test.js +0 -226
  257. package/dist/Voicemail/Voicemail.test.js.map +0 -1
  258. package/dist/Voicemail/WxCallBackendConnector.js +0 -540
  259. package/dist/Voicemail/WxCallBackendConnector.js.map +0 -1
  260. package/dist/Voicemail/WxCallBackendConnector.test.js +0 -942
  261. package/dist/Voicemail/WxCallBackendConnector.test.js.map +0 -1
  262. package/dist/Voicemail/constants.js +0 -66
  263. package/dist/Voicemail/constants.js.map +0 -1
  264. package/dist/Voicemail/types.js +0 -7
  265. package/dist/Voicemail/types.js.map +0 -1
  266. package/dist/Voicemail/voicemailFixture.js +0 -559
  267. package/dist/Voicemail/voicemailFixture.js.map +0 -1
  268. package/dist/api.js +0 -134
  269. package/dist/api.js.map +0 -1
  270. package/dist/common/Utils.js +0 -1264
  271. package/dist/common/Utils.js.map +0 -1
  272. package/dist/common/Utils.test.js +0 -1227
  273. package/dist/common/Utils.test.js.map +0 -1
  274. package/dist/common/constants.js +0 -90
  275. package/dist/common/constants.js.map +0 -1
  276. package/dist/common/index.js +0 -19
  277. package/dist/common/index.js.map +0 -1
  278. package/dist/common/testUtil.js +0 -968
  279. package/dist/common/testUtil.js.map +0 -1
  280. package/dist/common/types.js +0 -75
  281. package/dist/common/types.js.map +0 -1
  282. package/dist/index.js +0 -63
  283. package/dist/index.js.map +0 -1
@@ -1,2614 +0,0 @@
1
- "use strict";
2
-
3
- var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
4
- var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
5
- var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
- var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
7
- var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
- var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
9
- var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
10
- var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
11
- var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
12
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
13
- var MediaSDK = _interopRequireWildcard(require("@webex/internal-media-core"));
14
- var _types = require("../../Errors/types");
15
- var Utils = _interopRequireWildcard(require("../../common/Utils"));
16
- var _types2 = require("../../Events/types");
17
- var _constants = require("../constants");
18
- var _types3 = require("../../common/types");
19
- var _types4 = require("../../Metrics/types");
20
- var _call = require("./call");
21
- var _types5 = require("./types");
22
- var _testUtil = require("../../common/testUtil");
23
- var _callManager = require("./callManager");
24
- var _Logger = _interopRequireDefault(require("../../Logger"));
25
- var _Errors = require("../../Errors");
26
- function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
28
- /* eslint-disable @typescript-eslint/no-explicit-any */
29
- /* eslint-disable dot-notation */
30
- /* eslint-disable @typescript-eslint/no-shadow */
31
-
32
- jest.mock('@webex/internal-media-core');
33
- var webex = (0, _testUtil.getTestUtilsWebex)();
34
- var mockMediaSDK = MediaSDK;
35
- var defaultServiceIndicator = _types3.ServiceIndicator.CALLING;
36
- var activeUrl = 'FakeActiveUrl';
37
- var mockLineId = 'e4e8ee2a-a154-4e52-8f11-ef4cde2dce72';
38
-
39
- // class MockMediaStream {
40
- // private track;
41
-
42
- // constructor(track: any) {
43
- // this.track = track;
44
- // }
45
- // }
46
-
47
- // globalThis.MediaStream = MockMediaStream;
48
-
49
- // // eslint-disable-next-line @typescript-eslint/no-unused-vars
50
- // jest.spyOn(window, 'MediaStream').mockImplementation((tracks: MediaStreamTrack[]) => {
51
- // return {} as MediaStream;
52
- // });
53
-
54
- // // Object.defineProperty(window, 'MediaStream', {
55
- // // writable: true,
56
- // // });
57
-
58
- describe('Call Tests', function () {
59
- var deviceId = '55dfb53f-bed2-36da-8e85-cee7f02aa68e';
60
- var dest = {
61
- type: _types3.CallType.URI,
62
- address: 'tel:5003'
63
- };
64
- var dummyMidCallEvent = {
65
- eventType: 'callInfo',
66
- eventData: {
67
- callerId: {
68
- from: '"Bob Marley" <sip:5010@207.182.171.130;user=phone>;tag=888068389-1654853820619-'
69
- }
70
- }
71
- };
72
- var callManager;
73
- var deleteCallFromCollection = jest.fn();
74
- var disconnectStats = {
75
- 'rtp-rxstat': {
76
- Dur: 53.77999999999787,
77
- LostPkt: 11,
78
- LatePkt: 0,
79
- Oct: 41156,
80
- Pkt: 2379,
81
- AvgJit: 0.041720656289440466,
82
- VQMetrics: {
83
- maxJitter: 0,
84
- VoPktSizeMs: 20,
85
- VoOneWayDelayMs: 0.26116666666666666,
86
- hwType: 'OS X 10.15.7 64-bit/Chrome-105.0.0.0',
87
- networkType: 'wifi',
88
- VoRxCodec: 'opus'
89
- }
90
- },
91
- 'rtp-txstat': {
92
- Dur: 53.77999999999787,
93
- Pkt: 2410,
94
- Oct: 41156,
95
- VQMetrics: {
96
- VoTxCodec: 'opus',
97
- rtpBitRate: 32000
98
- }
99
- }
100
- };
101
- var parseMediaQualityStatisticsMock = jest.spyOn(Utils, 'parseMediaQualityStatistics').mockReturnValue(disconnectStats);
102
- var mockTrack = {
103
- enabled: false
104
- };
105
- var roapMediaConnectionConfig = {
106
- skipInactiveTransceivers: true,
107
- iceServers: [],
108
- sdpMunging: {
109
- convertPort9to0: true,
110
- addContentSlides: false
111
- }
112
- };
113
- var roapMediaConnectionOptions = {
114
- localTracks: {
115
- audio: mockTrack
116
- },
117
- direction: {
118
- audio: 'sendrecv',
119
- video: 'inactive',
120
- screenShareVideo: 'inactive'
121
- }
122
- };
123
- afterEach(function () {
124
- webex.request = jest.fn();
125
- });
126
- beforeEach(function () {
127
- callManager = (0, _callManager.getCallManager)(webex, defaultServiceIndicator);
128
- });
129
- it('create call object', function () {
130
- webex.request.mockReturnValueOnce({
131
- statusCode: 200,
132
- body: {
133
- device: {
134
- deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',
135
- correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011'
136
- },
137
- callId: '8a67806f-fc4d-446b-a131-31e71ea5b020',
138
- callData: {
139
- callState: _types5.MobiusCallState.PROCEEDING
140
- }
141
- }
142
- });
143
- var call = (0, _call.createCall)(activeUrl, webex, dest, _types3.CallDirection.OUTBOUND, deviceId, mockLineId, deleteCallFromCollection, defaultServiceIndicator);
144
- expect(call).toBeTruthy();
145
- });
146
- it('delete call object when ending the call', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
147
- var callManager, mockStream, localAudioStream, call;
148
- return _regenerator.default.wrap(function _callee$(_context) {
149
- while (1) switch (_context.prev = _context.next) {
150
- case 0:
151
- webex.request.mockReturnValue({
152
- statusCode: 200,
153
- body: {
154
- device: {
155
- deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',
156
- correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011'
157
- },
158
- callId: '8a67806f-fc4d-446b-a131-31e71ea5b020'
159
- }
160
- });
161
- callManager = (0, _callManager.getCallManager)(webex, defaultServiceIndicator);
162
- mockStream = {
163
- outputStream: {
164
- getAudioTracks: jest.fn().mockReturnValue([mockTrack])
165
- }
166
- };
167
- localAudioStream = mockStream;
168
- call = callManager.createCall(dest, _types3.CallDirection.OUTBOUND, deviceId, mockLineId);
169
- expect(call).toBeTruthy();
170
- /* After creation , call manager should have 1 record */
171
- expect((0, _keys.default)(callManager.getActiveCalls()).length).toBe(1);
172
- call.mute(localAudioStream);
173
- expect(call.isMuted()).toEqual(true);
174
- expect(mockTrack.enabled).toEqual(false);
175
- call.mute(localAudioStream);
176
- expect(mockTrack.enabled).toEqual(true);
177
- expect(call.isMuted()).toEqual(false);
178
- call.end();
179
- _context.next = 16;
180
- return (0, Utils.waitForMsecs)(50);
181
- case 16:
182
- // Need to add a small delay for Promise and callback to finish.
183
- expect(parseMediaQualityStatisticsMock).toHaveBeenCalledTimes(1);
184
- expect(webex.request.mock.calls[0][0].body.metrics).toStrictEqual(disconnectStats);
185
- expect(call.getDisconnectReason().code).toBe(_types5.DisconnectCode.NORMAL);
186
- expect(call.getDisconnectReason().cause).toBe(_types5.DisconnectCause.NORMAL);
187
-
188
- /* After call ends, call manager should have 0 record */
189
- expect((0, _keys.default)(callManager.getActiveCalls()).length).toBe(0);
190
- case 21:
191
- case "end":
192
- return _context.stop();
193
- }
194
- }, _callee);
195
- })));
196
- it('Check whether media requests succeed or not', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
197
- var mediaResponse, call, response;
198
- return _regenerator.default.wrap(function _callee2$(_context2) {
199
- while (1) switch (_context2.prev = _context2.next) {
200
- case 0:
201
- webex.request.mockReturnValue({
202
- statusCode: 200,
203
- body: {
204
- device: {
205
- deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',
206
- correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011'
207
- },
208
- callId: '8a67806f-fc4d-446b-a131-31e71ea5b020'
209
- }
210
- });
211
- mediaResponse = {
212
- statusCode: 200,
213
- body: {
214
- device: {
215
- deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',
216
- correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011'
217
- },
218
- callId: '8a67806f-fc4d-446b-a131-31e71ea5b020'
219
- }
220
- };
221
- call = callManager.createCall(dest, _types3.CallDirection.INBOUND, deviceId, mockLineId);
222
- _context2.next = 5;
223
- return call['postMedia']({});
224
- case 5:
225
- response = _context2.sent;
226
- expect(response.body).toStrictEqual(mediaResponse.body);
227
- case 7:
228
- case "end":
229
- return _context2.stop();
230
- }
231
- }, _callee2);
232
- })));
233
- it('check whether callerId midcall event is serviced or not', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
234
- var call;
235
- return _regenerator.default.wrap(function _callee3$(_context3) {
236
- while (1) switch (_context3.prev = _context3.next) {
237
- case 0:
238
- call = callManager.createCall(dest, _types3.CallDirection.OUTBOUND, deviceId, mockLineId);
239
- call.handleMidCallEvent(dummyMidCallEvent);
240
- _context3.next = 4;
241
- return (0, Utils.waitForMsecs)(50);
242
- case 4:
243
- expect(call.getCallerInfo().name).toStrictEqual('Bob Marley');
244
- expect(call.getCallerInfo().num).toStrictEqual('5010');
245
- expect(call.getCallerInfo().avatarSrc).toBeFalsy();
246
- case 7:
247
- case "end":
248
- return _context3.stop();
249
- }
250
- }, _callee3);
251
- })));
252
- it('check whether call midcall event is serviced or not', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
253
- var call, logSpy, corelationId;
254
- return _regenerator.default.wrap(function _callee4$(_context4) {
255
- while (1) switch (_context4.prev = _context4.next) {
256
- case 0:
257
- call = callManager.createCall(dest, _types3.CallDirection.OUTBOUND, deviceId, mockLineId);
258
- dummyMidCallEvent.eventType = 'callState';
259
- logSpy = jest.spyOn(_Logger.default, 'log');
260
- call.handleMidCallEvent(dummyMidCallEvent);
261
- _context4.next = 6;
262
- return (0, Utils.waitForMsecs)(50);
263
- case 6:
264
- corelationId = call.getCorrelationId();
265
- expect(logSpy).toHaveBeenLastCalledWith("Received Midcall call event for correlationId : ".concat(corelationId), {
266
- file: 'call',
267
- method: 'handleMidCallEvent'
268
- });
269
- case 8:
270
- case "end":
271
- return _context4.stop();
272
- }
273
- }, _callee4);
274
- })));
275
- it('check call stats for active call', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
276
- var call, callRtpStats;
277
- return _regenerator.default.wrap(function _callee5$(_context5) {
278
- while (1) switch (_context5.prev = _context5.next) {
279
- case 0:
280
- call = callManager.createCall(dest, _types3.CallDirection.OUTBOUND, deviceId, mockLineId);
281
- _context5.prev = 1;
282
- _context5.next = 4;
283
- return call.getCallRtpStats();
284
- case 4:
285
- callRtpStats = _context5.sent;
286
- _context5.next = 10;
287
- break;
288
- case 7:
289
- _context5.prev = 7;
290
- _context5.t0 = _context5["catch"](1);
291
- console.error(_context5.t0);
292
- case 10:
293
- expect(callRtpStats).toStrictEqual(disconnectStats);
294
- case 11:
295
- case "end":
296
- return _context5.stop();
297
- }
298
- }, _callee5, null, [[1, 7]]);
299
- })));
300
- it('dial functionality tests for coverage', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
301
- var mockStream, localAudioStream, warnSpy, call;
302
- return _regenerator.default.wrap(function _callee6$(_context6) {
303
- while (1) switch (_context6.prev = _context6.next) {
304
- case 0:
305
- mockStream = {
306
- outputStream: {
307
- getAudioTracks: jest.fn().mockReturnValue([mockTrack])
308
- }
309
- };
310
- localAudioStream = mockStream;
311
- warnSpy = jest.spyOn(_Logger.default, 'warn');
312
- call = (0, _call.createCall)(activeUrl, webex, dest, _types3.CallDirection.OUTBOUND, deviceId, mockLineId, deleteCallFromCollection, defaultServiceIndicator);
313
- call.dial(localAudioStream);
314
- expect(mockTrack.enabled).toEqual(true);
315
- expect(mockMediaSDK.RoapMediaConnection).toBeCalledOnceWith(roapMediaConnectionConfig, roapMediaConnectionOptions, expect.any(String));
316
- expect(call['mediaStateMachine'].state.value).toBe('S_SEND_ROAP_OFFER');
317
- /* Now change the state and recall to check for error */
318
- call['mediaStateMachine'].state.value = 'S_SEND_ROAP_OFFER';
319
- call.dial(localAudioStream);
320
- expect(call['mediaStateMachine'].state.value).toBe('S_SEND_ROAP_OFFER');
321
- expect(warnSpy).toBeCalledOnceWith("Call cannot be dialed because the state is already : S_SEND_ROAP_OFFER", {
322
- file: 'call',
323
- method: 'dial'
324
- });
325
- case 12:
326
- case "end":
327
- return _context6.stop();
328
- }
329
- }, _callee6);
330
- })));
331
- it('answer functionality tests for coverage', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
332
- var mockStream, localAudioStream, warnSpy, call;
333
- return _regenerator.default.wrap(function _callee7$(_context7) {
334
- while (1) switch (_context7.prev = _context7.next) {
335
- case 0:
336
- mockStream = {
337
- outputStream: {
338
- getAudioTracks: jest.fn().mockReturnValue([mockTrack])
339
- }
340
- };
341
- localAudioStream = mockStream;
342
- warnSpy = jest.spyOn(_Logger.default, 'warn');
343
- call = (0, _call.createCall)(activeUrl, webex, dest, _types3.CallDirection.OUTBOUND, deviceId, mockLineId, deleteCallFromCollection, defaultServiceIndicator);
344
- /** Cannot answer in idle state */
345
- call.answer(localAudioStream);
346
- expect(mockTrack.enabled).toEqual(true);
347
- expect(mockMediaSDK.RoapMediaConnection).toBeCalledOnceWith(roapMediaConnectionConfig, roapMediaConnectionOptions, expect.any(String));
348
- expect(call['callStateMachine'].state.value).toBe('S_IDLE');
349
- expect(warnSpy).toBeCalledOnceWith("Call cannot be answered because the state is : S_IDLE", {
350
- file: 'call',
351
- method: 'answer'
352
- });
353
-
354
- /* Now change the state and recall to check for correct flow */
355
- call['callStateMachine'].state.value = 'S_SEND_CALL_PROGRESS';
356
- call.answer(localAudioStream);
357
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_CONNECT');
358
- case 12:
359
- case "end":
360
- return _context7.stop();
361
- }
362
- }, _callee7);
363
- })));
364
- });
365
- describe('State Machine handler tests', function () {
366
- var deviceId = '55dfb53f-bed2-36da-8e85-cee7f02aa68e';
367
- var dest = {
368
- type: _types3.CallType.URI,
369
- address: 'tel:5003'
370
- };
371
- var mockStatusBody = {
372
- device: {
373
- deviceId: '123e4567-e89b-12d3-a456-426614174000',
374
- correlationId: 'b5476d4c-f48b-475e-b4e2-994e24d14ca2'
375
- },
376
- callId: 'fcf86aa5-5539-4c9f-8b72-667786ae9b6c'
377
- };
378
- var call;
379
- var dtmfMock;
380
- beforeEach(function () {
381
- call = new _call.Call(activeUrl, webex, dest, _types3.CallDirection.OUTBOUND, deviceId, mockLineId, function () {
382
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
383
- var dummy = 10;
384
- }, defaultServiceIndicator);
385
- jest.clearAllTimers();
386
- jest.useFakeTimers();
387
- call['callStateMachine'].state.value = 'S_IDLE';
388
- call.mediaConnection = _testUtil.mediaConnection;
389
- dtmfMock = jest.spyOn(call['mediaConnection'], 'insertDTMF');
390
- });
391
-
392
- // afterEach(() => call.removeAllListeners());
393
-
394
- it('successful session refresh', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {
395
- var statusPayload, dummyEvent, funcSpy, logSpy;
396
- return _regenerator.default.wrap(function _callee8$(_context8) {
397
- while (1) switch (_context8.prev = _context8.next) {
398
- case 0:
399
- statusPayload = {
400
- statusCode: 200,
401
- body: mockStatusBody
402
- };
403
- dummyEvent = {
404
- type: 'E_CALL_ESTABLISHED'
405
- };
406
- call['callStateMachine'].state.value = 'S_SEND_CALL_CONNECT';
407
- webex.request.mockReturnValue(statusPayload);
408
- jest.spyOn(global, 'setInterval');
409
- funcSpy = jest.spyOn(call, 'postStatus').mockResolvedValue(statusPayload);
410
- logSpy = jest.spyOn(_Logger.default, 'info');
411
- call.sendCallStateMachineEvt(dummyEvent);
412
- jest.advanceTimersByTime(_constants.DEFAULT_SESSION_TIMER);
413
-
414
- /* This is to flush all the promises from the Promise queue so that
415
- * Jest.fakeTimers can advance time and also clear the promise Queue
416
- */
417
- _context8.next = 11;
418
- return (0, _testUtil.flushPromises)(3);
419
- case 11:
420
- expect(setInterval).toHaveBeenCalledTimes(1);
421
- expect(funcSpy).toBeCalledTimes(1);
422
- expect(logSpy).toBeCalledWith('Session refresh successful', {
423
- file: 'call',
424
- method: 'handleCallEstablished'
425
- });
426
- case 14:
427
- case "end":
428
- return _context8.stop();
429
- }
430
- }, _callee8);
431
- })));
432
- it('session refresh failure', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {
433
- var statusPayload, funcSpy;
434
- return _regenerator.default.wrap(function _callee9$(_context9) {
435
- while (1) switch (_context9.prev = _context9.next) {
436
- case 0:
437
- expect.assertions(4);
438
- statusPayload = {
439
- statusCode: 403
440
- };
441
- webex.request.mockReturnValue(statusPayload);
442
- jest.spyOn(global, 'clearInterval');
443
- call.on(_types2.CALL_EVENT_KEYS.CALL_ERROR, function (errObj) {
444
- expect(errObj.type).toStrictEqual(_types.ERROR_TYPE.FORBIDDEN_ERROR);
445
- expect(errObj.message).toStrictEqual('An unauthorized action has been received. This action has been blocked. Please contact the administrator if this persists.');
446
- });
447
- funcSpy = jest.spyOn(call, 'postStatus').mockRejectedValue(statusPayload);
448
- if (call['sessionTimer'] === undefined) {
449
- /* In cases where this test is run independently/alone, there is no sessionTimer initiated
450
- Thus we will check and initialize the timer when not present by calling handleCallEstablish() */
451
- call['handleCallEstablished']({});
452
- }
453
- call['handleCallEstablished']({});
454
- jest.advanceTimersByTime(_constants.DEFAULT_SESSION_TIMER);
455
-
456
- /* This is to flush all the promises from the Promise queue so that
457
- * Jest.fakeTimers can advance time and also clear the promise Queue
458
- */
459
- _context9.next = 11;
460
- return _promise.default.resolve();
461
- case 11:
462
- _context9.next = 13;
463
- return _promise.default.resolve();
464
- case 13:
465
- expect(clearInterval).toHaveBeenCalledTimes(1);
466
- expect(funcSpy).toBeCalledTimes(1);
467
- case 15:
468
- case "end":
469
- return _context9.stop();
470
- }
471
- }, _callee9);
472
- })));
473
- it('state changes during successful incoming call', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {
474
- var statusPayload, dummyEvent, postMediaSpy, deleteSpy, dummyOkEvent;
475
- return _regenerator.default.wrap(function _callee10$(_context10) {
476
- while (1) switch (_context10.prev = _context10.next) {
477
- case 0:
478
- statusPayload = {
479
- statusCode: 200,
480
- body: mockStatusBody
481
- };
482
- dummyEvent = {
483
- type: 'E_RECV_CALL_SETUP',
484
- data: {
485
- seq: 1,
486
- messageType: 'OFFER'
487
- }
488
- };
489
- postMediaSpy = jest.spyOn(call, 'postMedia');
490
- deleteSpy = jest.spyOn(call, 'delete');
491
- webex.request.mockReturnValue(statusPayload);
492
- call['direction'] = _types3.CallDirection.INBOUND;
493
- call.sendCallStateMachineEvt(dummyEvent);
494
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_PROGRESS');
495
- dummyEvent.type = 'E_SEND_CALL_CONNECT';
496
- call.sendCallStateMachineEvt(dummyEvent);
497
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_CONNECT');
498
-
499
- /* we should expect to forward the roap offer message to mediaSdk for further processing */
500
- dummyEvent.type = 'E_RECV_ROAP_OFFER';
501
- call.sendMediaStateMachineEvt(dummyEvent);
502
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
503
-
504
- /* expect sending roap answer to mobius */
505
- dummyEvent.type = 'E_SEND_ROAP_ANSWER';
506
- call.sendMediaStateMachineEvt(dummyEvent);
507
- expect(postMediaSpy).toBeCalledOnceWith(dummyEvent.data);
508
- dummyOkEvent = {
509
- type: 'E_ROAP_OK',
510
- data: {
511
- received: true,
512
- message: {
513
- seq: 1,
514
- messageType: 'OFFER'
515
- }
516
- }
517
- };
518
- /* we receive roap Ok from mobius and expect mediaSdk to process it */
519
- call.sendMediaStateMachineEvt(dummyOkEvent);
520
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyOkEvent.data.message);
521
- expect(call['callStateMachine'].state.value).toBe('S_CALL_ESTABLISHED');
522
- expect(call.isConnected()).toBe(true);
523
- call.sendDigit('1');
524
- expect(dtmfMock).toBeCalledOnceWith('1');
525
- call.sendCallStateMachineEvt({
526
- type: 'E_RECV_CALL_DISCONNECT'
527
- });
528
- expect(deleteSpy).toBeCalledOnceWith();
529
- expect(call['callStateMachine'].state.value).toBe('S_RECV_CALL_DISCONNECT');
530
- case 27:
531
- case "end":
532
- return _context10.stop();
533
- }
534
- }, _callee10);
535
- })));
536
- it('state changes during unsuccessful incoming call due to no offer', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11() {
537
- var statusPayload, dummyEvent;
538
- return _regenerator.default.wrap(function _callee11$(_context11) {
539
- while (1) switch (_context11.prev = _context11.next) {
540
- case 0:
541
- call['direction'] = _types3.CallDirection.INBOUND;
542
- statusPayload = {
543
- statusCode: 200,
544
- body: mockStatusBody
545
- };
546
- dummyEvent = {
547
- type: 'E_RECV_CALL_SETUP',
548
- data: {
549
- seq: 1,
550
- message: {},
551
- type: 'OFFER'
552
- }
553
- };
554
- webex.request.mockReturnValue(statusPayload);
555
- call.sendCallStateMachineEvt(dummyEvent);
556
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_PROGRESS');
557
- _context11.next = 8;
558
- return call['handleOutgoingCallConnect']({
559
- type: 'E_SEND_CALL_CONNECT'
560
- });
561
- case 8:
562
- /* state should not change since there is no offer received. */
563
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_PROGRESS');
564
- expect(call.isConnected()).toBeFalsy();
565
- call.sendCallStateMachineEvt({
566
- type: 'E_RECV_CALL_DISCONNECT'
567
- });
568
- expect(call['callStateMachine'].state.value).toBe('S_RECV_CALL_DISCONNECT');
569
- case 12:
570
- case "end":
571
- return _context11.stop();
572
- }
573
- }, _callee11);
574
- })));
575
- it('state changes during unsuccessful incoming call due error in call connect', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12() {
576
- var warnSpy, stateMachineSpy, statusPayload, roapMessage;
577
- return _regenerator.default.wrap(function _callee12$(_context12) {
578
- while (1) switch (_context12.prev = _context12.next) {
579
- case 0:
580
- warnSpy = jest.spyOn(_Logger.default, 'warn');
581
- stateMachineSpy = jest.spyOn(call, 'sendCallStateMachineEvt');
582
- statusPayload = {
583
- statusCode: 200,
584
- body: mockStatusBody
585
- };
586
- roapMessage = {
587
- seq: 1,
588
- message: {},
589
- type: 'OFFER'
590
- };
591
- call['direction'] = _types3.CallDirection.INBOUND;
592
- webex.request.mockReturnValue(statusPayload);
593
- call.sendCallStateMachineEvt({
594
- type: 'E_RECV_CALL_SETUP'
595
- });
596
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_PROGRESS');
597
- call.sendMediaStateMachineEvt({
598
- type: 'E_RECV_ROAP_OFFER',
599
- data: roapMessage
600
- });
601
- webex.request.mockRejectedValueOnce({
602
- statusCode: 403
603
- }).mockResolvedValue(statusPayload);
604
- _context12.next = 12;
605
- return call['handleOutgoingCallConnect']({
606
- type: 'E_SEND_CALL_CONNECT'
607
- });
608
- case 12:
609
- expect(call['callStateMachine'].state.value).toBe('S_UNKNOWN');
610
- expect(stateMachineSpy).toBeCalledTimes(3);
611
- expect(warnSpy).toBeCalledTimes(4);
612
- warnSpy.mockClear();
613
- /* Try sending a dtmf which shouldn't work as call is not connected. */
614
- call.sendDigit('1');
615
- expect(warnSpy).toBeCalledOnceWith("Can't send DTMF as call is not yet connected", {
616
- file: 'call',
617
- method: 'sendDigit'
618
- });
619
- case 18:
620
- case "end":
621
- return _context12.stop();
622
- }
623
- }, _callee12);
624
- })));
625
- it('state changes during successful outgoing call', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {
626
- var statusPayload, dummyEvent, postMediaSpy, dummyOkEvent;
627
- return _regenerator.default.wrap(function _callee13$(_context13) {
628
- while (1) switch (_context13.prev = _context13.next) {
629
- case 0:
630
- statusPayload = {
631
- statusCode: 200,
632
- body: mockStatusBody
633
- };
634
- dummyEvent = {
635
- type: 'E_SEND_CALL_SETUP',
636
- data: undefined
637
- };
638
- postMediaSpy = jest.spyOn(call, 'postMedia');
639
- webex.request.mockReturnValue(statusPayload);
640
- call.sendCallStateMachineEvt(dummyEvent);
641
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_SETUP');
642
- dummyEvent.type = 'E_RECV_CALL_PROGRESS';
643
- call.sendCallStateMachineEvt(dummyEvent);
644
- expect(call['callStateMachine'].state.value).toBe('S_RECV_CALL_PROGRESS');
645
- dummyEvent.type = 'E_SEND_ROAP_OFFER';
646
- call.sendMediaStateMachineEvt(dummyEvent);
647
-
648
- /**
649
- * Since the event doesn't have any data above, we should request media sdk for an offer here.
650
- * The below event is expected to be called again my mediaSdk.
651
- */
652
- dummyEvent.data = {
653
- seq: 1,
654
- messageType: 'OFFER',
655
- sdp: 'sdp'
656
- };
657
- call.sendMediaStateMachineEvt(dummyEvent);
658
- expect(_testUtil.mediaConnection.initiateOffer).toHaveBeenCalledTimes(1);
659
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyEvent.data);
660
- dummyEvent.type = 'E_RECV_ROAP_ANSWER';
661
- call.sendMediaStateMachineEvt(dummyEvent);
662
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
663
- dummyOkEvent = {
664
- type: 'E_ROAP_OK',
665
- data: {
666
- received: false,
667
- message: {
668
- seq: 1,
669
- messageType: 'OK'
670
- }
671
- }
672
- };
673
- call.sendMediaStateMachineEvt(dummyOkEvent);
674
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyOkEvent.data.message);
675
- dummyEvent.type = 'E_RECV_ROAP_OFFER_REQUEST';
676
- call.sendMediaStateMachineEvt(dummyEvent);
677
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
678
- dummyEvent.type = 'E_SEND_ROAP_OFFER';
679
- call.sendMediaStateMachineEvt(dummyEvent);
680
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyEvent.data);
681
- dummyEvent.type = 'E_RECV_ROAP_ANSWER';
682
- call.sendMediaStateMachineEvt(dummyEvent);
683
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
684
- call.sendMediaStateMachineEvt(dummyOkEvent);
685
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyOkEvent.data.message);
686
-
687
- /* With the two roap offer/answer transactions that we simulated earlier
688
- we get a total 4 outgoing and 3 incoming roap messages.
689
- */
690
- expect(postMediaSpy).toBeCalledTimes(4);
691
- expect(_testUtil.mediaConnection.roapMessageReceived).toBeCalledTimes(3);
692
- dummyEvent.type = 'E_RECV_CALL_CONNECT';
693
- call.sendCallStateMachineEvt(dummyEvent);
694
- expect(call['callStateMachine'].state.value).toBe('S_CALL_ESTABLISHED');
695
- expect(call.isConnected()).toBe(true);
696
- call.sendCallStateMachineEvt({
697
- type: 'E_SEND_CALL_DISCONNECT'
698
- });
699
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_DISCONNECT');
700
- case 40:
701
- case "end":
702
- return _context13.stop();
703
- }
704
- }, _callee13);
705
- })));
706
- it('state changes during successful outgoing call with early media', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14() {
707
- var statusPayload, dummyEvent;
708
- return _regenerator.default.wrap(function _callee14$(_context14) {
709
- while (1) switch (_context14.prev = _context14.next) {
710
- case 0:
711
- statusPayload = {
712
- statusCode: 200,
713
- body: mockStatusBody
714
- };
715
- dummyEvent = {
716
- type: 'E_SEND_CALL_SETUP',
717
- data: {
718
- seq: 1,
719
- message: {},
720
- type: 'OFFER'
721
- }
722
- };
723
- webex.request.mockReturnValue(statusPayload);
724
- call.sendCallStateMachineEvt(dummyEvent);
725
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_SETUP');
726
- dummyEvent.type = 'E_RECV_CALL_PROGRESS';
727
- call.sendCallStateMachineEvt(dummyEvent);
728
- expect(call['callStateMachine'].state.value).toBe('S_RECV_CALL_PROGRESS');
729
-
730
- /* Send a second callProgress event with inband media and it should handle */
731
- dummyEvent.data['callProgressData'] = {
732
- inbandMedia: true
733
- };
734
- dummyEvent.data['callerId'] = {
735
- from: '"Bob Marley" <sip:5010@207.182.171.130;user=phone>;tag=888068389-1654853820619-'
736
- };
737
- call.sendCallStateMachineEvt(dummyEvent);
738
- expect(call['callStateMachine'].state.value).toBe('S_RECV_CALL_PROGRESS');
739
- dummyEvent.type = 'E_RECV_CALL_CONNECT';
740
- call.sendCallStateMachineEvt(dummyEvent);
741
- expect(call['callStateMachine'].state.value).toBe('S_CALL_ESTABLISHED');
742
- call.sendCallStateMachineEvt({
743
- type: 'E_RECV_CALL_DISCONNECT'
744
- });
745
- expect(call['callStateMachine'].state.value).toBe('S_RECV_CALL_DISCONNECT');
746
- case 17:
747
- case "end":
748
- return _context14.stop();
749
- }
750
- }, _callee14);
751
- })));
752
- it('state changes during unsuccessful outgoing call due to error in call setup', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15() {
753
- var statusPayload, dummyEvent;
754
- return _regenerator.default.wrap(function _callee15$(_context15) {
755
- while (1) switch (_context15.prev = _context15.next) {
756
- case 0:
757
- statusPayload = {
758
- statusCode: 403,
759
- body: mockStatusBody
760
- };
761
- dummyEvent = {
762
- type: 'E_SEND_CALL_SETUP',
763
- data: {
764
- seq: 1,
765
- message: {},
766
- type: 'OFFER'
767
- }
768
- };
769
- webex.request.mockRejectedValueOnce(statusPayload);
770
- call.sendCallStateMachineEvt(dummyEvent);
771
- _context15.next = 6;
772
- return (0, _testUtil.flushPromises)(3);
773
- case 6:
774
- expect(call['callStateMachine'].state.value).toBe('S_UNKNOWN');
775
- case 7:
776
- case "end":
777
- return _context15.stop();
778
- }
779
- }, _callee15);
780
- })));
781
- it('state changes during unsuccessful outgoing call due to error in media ok', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
782
- var statusPayload, dummyEvent;
783
- return _regenerator.default.wrap(function _callee16$(_context16) {
784
- while (1) switch (_context16.prev = _context16.next) {
785
- case 0:
786
- statusPayload = {
787
- statusCode: 403,
788
- body: mockStatusBody
789
- };
790
- dummyEvent = {
791
- type: 'E_ROAP_OK',
792
- data: {
793
- received: false,
794
- message: {}
795
- }
796
- };
797
- call['callStateMachine'].state.value = 'S_RECV_CALL_PROGRESS';
798
- call['earlyMedia'] = true;
799
- call['mediaStateMachine'].state.value = 'S_RECV_ROAP_ANSWER';
800
- webex.request.mockRejectedValue(statusPayload);
801
- _context16.next = 8;
802
- return call['handleRoapEstablished']({}, dummyEvent);
803
- case 8:
804
- _context16.next = 10;
805
- return (0, _testUtil.flushPromises)(2);
806
- case 10:
807
- expect(call.isConnected()).toBe(false);
808
- expect(call['mediaStateMachine'].state.value).toBe('S_ROAP_ERROR');
809
- expect(call['callStateMachine'].state.value).toBe('S_UNKNOWN');
810
- case 13:
811
- case "end":
812
- return _context16.stop();
813
- }
814
- }, _callee16);
815
- })));
816
- it('state changes during unsuccessful outgoing call since no sdp in offer', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17() {
817
- var statusPayload, dummyEvent;
818
- return _regenerator.default.wrap(function _callee17$(_context17) {
819
- while (1) switch (_context17.prev = _context17.next) {
820
- case 0:
821
- statusPayload = {
822
- statusCode: 403,
823
- body: mockStatusBody
824
- };
825
- dummyEvent = {
826
- type: 'E_SEND_ROAP_OFFER',
827
- data: {
828
- seq: 1,
829
- type: 'OFFER'
830
- }
831
- };
832
- webex.request.mockReturnValue(statusPayload);
833
- call['callStateMachine'].state.value = 'S_RECV_CALL_PROGRESS';
834
- call['mediaStateMachine'].state.value = 'S_ROAP_IDLE';
835
- call.sendMediaStateMachineEvt(dummyEvent);
836
- /* since there is no sdp, mediaMachine should remain in same state
837
- and an initiateOffer request to be sent to SDK only once */
838
- expect(call['mediaStateMachine'].state.value).toBe('S_SEND_ROAP_OFFER');
839
- expect(_testUtil.mediaConnection.initiateOffer).toBeCalledOnceWith();
840
- case 8:
841
- case "end":
842
- return _context17.stop();
843
- }
844
- }, _callee17);
845
- })));
846
- it('Outgoing Roap offer retry-after error case during midcall', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18() {
847
- var statusPayload, funcSpy, stateMachineSpy, dummyEvent;
848
- return _regenerator.default.wrap(function _callee18$(_context18) {
849
- while (1) switch (_context18.prev = _context18.next) {
850
- case 0:
851
- statusPayload = {
852
- statusCode: 503,
853
- headers: {
854
- 'retry-after': 1
855
- },
856
- body: mockStatusBody
857
- };
858
- jest.spyOn(global, 'setTimeout');
859
- funcSpy = jest.spyOn(call, 'postMedia').mockRejectedValueOnce(statusPayload);
860
- stateMachineSpy = jest.spyOn(call, 'sendMediaStateMachineEvt');
861
- dummyEvent = {
862
- type: 'E_SEND_ROAP_OFFER',
863
- data: {
864
- seq: 1,
865
- message: {},
866
- type: 'OFFER',
867
- sdp: 'sdp'
868
- }
869
- };
870
- call['connected'] = true;
871
- _context18.next = 8;
872
- return call['handleOutgoingRoapOffer']({}, dummyEvent);
873
- case 8:
874
- jest.advanceTimersByTime(1005);
875
- expect(setTimeout).toHaveBeenCalledTimes(1);
876
- expect(funcSpy).toHaveBeenCalledWith(dummyEvent.data);
877
-
878
- /* first failure , and second because of retry-after */
879
- expect(funcSpy).toHaveBeenCalledTimes(2);
880
- expect(stateMachineSpy).toBeCalledOnceWith(dummyEvent);
881
- case 13:
882
- case "end":
883
- return _context18.stop();
884
- }
885
- }, _callee18);
886
- })));
887
- it('Outgoing Roap offer retry-after error case during call establishment', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
888
- var statusPayload, funcSpy, stateMachineSpy, dummyEvent;
889
- return _regenerator.default.wrap(function _callee19$(_context19) {
890
- while (1) switch (_context19.prev = _context19.next) {
891
- case 0:
892
- statusPayload = {
893
- statusCode: 503,
894
- headers: {
895
- 'retry-after': 1
896
- },
897
- body: mockStatusBody
898
- };
899
- jest.spyOn(global, 'setTimeout');
900
- funcSpy = jest.spyOn(call, 'postMedia').mockRejectedValueOnce(statusPayload);
901
- stateMachineSpy = jest.spyOn(call, 'sendMediaStateMachineEvt');
902
- dummyEvent = {
903
- type: 'E_SEND_ROAP_OFFER',
904
- data: {
905
- seq: 1,
906
- message: {},
907
- type: 'OFFER',
908
- sdp: 'sdp'
909
- }
910
- };
911
- call['connected'] = false;
912
- _context19.next = 8;
913
- return call['handleOutgoingRoapOffer']({}, dummyEvent);
914
- case 8:
915
- jest.advanceTimersByTime(1005);
916
- expect(funcSpy).toBeCalledOnceWith(dummyEvent.data);
917
-
918
- /* These shouldn't be called as call is not connected yet */
919
- expect(setTimeout).not.toHaveBeenCalled();
920
- expect(stateMachineSpy).not.toBeCalled();
921
- case 12:
922
- case "end":
923
- return _context19.stop();
924
- }
925
- }, _callee19);
926
- })));
927
- it('Outgoing Roap Answer retry-after error case during midcall', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
928
- var statusPayload, funcSpy, stateMachineSpy, dummyEvent;
929
- return _regenerator.default.wrap(function _callee20$(_context20) {
930
- while (1) switch (_context20.prev = _context20.next) {
931
- case 0:
932
- statusPayload = {
933
- statusCode: 503,
934
- headers: {
935
- 'retry-after': 1
936
- },
937
- body: mockStatusBody
938
- };
939
- jest.spyOn(global, 'setTimeout');
940
- funcSpy = jest.spyOn(call, 'postMedia').mockRejectedValueOnce(statusPayload);
941
- stateMachineSpy = jest.spyOn(call, 'sendMediaStateMachineEvt');
942
- dummyEvent = {
943
- type: 'E_SEND_ROAP_ANSWER',
944
- data: {
945
- seq: 1,
946
- message: {},
947
- type: 'OFFER'
948
- }
949
- };
950
- call['connected'] = true;
951
- call['mediaStateMachine'].state.value = 'S_RECV_ROAP_OFFER';
952
- _context20.next = 9;
953
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
954
- case 9:
955
- jest.advanceTimersByTime(1005);
956
- expect(setTimeout).toHaveBeenCalledTimes(1);
957
- expect(funcSpy).toHaveBeenCalledWith(dummyEvent.data);
958
-
959
- /* first failure , and second because of retry-after */
960
- expect(funcSpy).toHaveBeenCalledTimes(2);
961
- expect(stateMachineSpy).toBeCalledOnceWith(dummyEvent);
962
- case 14:
963
- case "end":
964
- return _context20.stop();
965
- }
966
- }, _callee20);
967
- })));
968
- it('Outgoing Roap answer retry-after error case during call establishment', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21() {
969
- var statusPayload, funcSpy, stateMachineSpy, dummyEvent;
970
- return _regenerator.default.wrap(function _callee21$(_context21) {
971
- while (1) switch (_context21.prev = _context21.next) {
972
- case 0:
973
- statusPayload = {
974
- statusCode: 503,
975
- headers: {
976
- 'retry-after': 1
977
- },
978
- body: mockStatusBody
979
- };
980
- jest.spyOn(global, 'setTimeout');
981
- funcSpy = jest.spyOn(call, 'postMedia').mockRejectedValueOnce(statusPayload);
982
- stateMachineSpy = jest.spyOn(call, 'sendMediaStateMachineEvt');
983
- dummyEvent = {
984
- type: 'E_SEND_ROAP_ANSWER',
985
- data: {
986
- seq: 1,
987
- message: {},
988
- type: 'OFFER'
989
- }
990
- };
991
- call['connected'] = false;
992
- _context21.next = 8;
993
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
994
- case 8:
995
- jest.advanceTimersByTime(1005);
996
- expect(funcSpy).toBeCalledOnceWith(dummyEvent.data);
997
- expect(funcSpy).toHaveBeenCalledTimes(1);
998
-
999
- /* These shouldn't be called as call is not connected yet */
1000
- expect(setTimeout).not.toHaveBeenCalled();
1001
- expect(stateMachineSpy).not.toBeCalled();
1002
- case 13:
1003
- case "end":
1004
- return _context21.stop();
1005
- }
1006
- }, _callee21);
1007
- })));
1008
- it('ROAP error during mid call', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee22() {
1009
- var statusPayload, warnSpy, stateMachineSpy, funcSpy, errorEvent;
1010
- return _regenerator.default.wrap(function _callee22$(_context22) {
1011
- while (1) switch (_context22.prev = _context22.next) {
1012
- case 0:
1013
- statusPayload = {
1014
- statusCode: 200,
1015
- body: mockStatusBody
1016
- };
1017
- warnSpy = jest.spyOn(_Logger.default, 'warn');
1018
- stateMachineSpy = jest.spyOn(call, 'sendCallStateMachineEvt');
1019
- funcSpy = jest.spyOn(call, 'postMedia').mockResolvedValue(statusPayload);
1020
- errorEvent = {
1021
- type: 'E_ROAP_ERROR',
1022
- data: {
1023
- seq: 2,
1024
- messageType: 'ERROR',
1025
- errorType: 'OUT_OF_ORDER'
1026
- }
1027
- };
1028
- call['mediaStateMachine'].state.value = 'S_SEND_ROAP_ANSWER';
1029
- call['connected'] = true;
1030
- call.sendMediaStateMachineEvt(errorEvent);
1031
- expect(funcSpy).toBeCalledOnceWith(errorEvent.data);
1032
- expect(warnSpy).not.toHaveBeenCalled();
1033
- expect(stateMachineSpy).not.toHaveBeenCalled();
1034
- case 11:
1035
- case "end":
1036
- return _context22.stop();
1037
- }
1038
- }, _callee22);
1039
- })));
1040
- it('ROAP ok retry-after during mid call', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee23() {
1041
- var statusPayload, funcSpy, stateMachineSpy, dummyEvent;
1042
- return _regenerator.default.wrap(function _callee23$(_context23) {
1043
- while (1) switch (_context23.prev = _context23.next) {
1044
- case 0:
1045
- statusPayload = {
1046
- statusCode: 503,
1047
- headers: {
1048
- 'retry-after': 1
1049
- },
1050
- body: mockStatusBody
1051
- };
1052
- jest.spyOn(global, 'setTimeout');
1053
- funcSpy = jest.spyOn(call, 'postMedia').mockRejectedValueOnce(statusPayload);
1054
- stateMachineSpy = jest.spyOn(call, 'sendMediaStateMachineEvt');
1055
- dummyEvent = {
1056
- type: 'E_ROAP_OK',
1057
- data: {
1058
- seq: 1,
1059
- message: {},
1060
- type: 'OK'
1061
- }
1062
- };
1063
- call['connected'] = true;
1064
- call['mediaStateMachine'].state.value = 'S_RECV_ROAP_ANSWER';
1065
- _context23.next = 9;
1066
- return call['handleRoapEstablished']({}, dummyEvent);
1067
- case 9:
1068
- jest.advanceTimersByTime(1005);
1069
- expect(setTimeout).toHaveBeenCalledTimes(1);
1070
- expect(funcSpy).toHaveBeenCalled();
1071
-
1072
- /* first failure , and second because of retry-after */
1073
- expect(funcSpy).toHaveBeenCalledTimes(2);
1074
- expect(stateMachineSpy).toBeCalledOnceWith(dummyEvent);
1075
- case 14:
1076
- case "end":
1077
- return _context23.stop();
1078
- }
1079
- }, _callee23);
1080
- })));
1081
- it('Unable to communicate roap error with mobius', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
1082
- var statusPayload, stateMachineSpy, funcSpy, errorEvent;
1083
- return _regenerator.default.wrap(function _callee24$(_context24) {
1084
- while (1) switch (_context24.prev = _context24.next) {
1085
- case 0:
1086
- statusPayload = {
1087
- statusCode: 403,
1088
- body: mockStatusBody
1089
- };
1090
- stateMachineSpy = jest.spyOn(call, 'sendCallStateMachineEvt');
1091
- funcSpy = jest.spyOn(call, 'postMedia').mockRejectedValue(statusPayload);
1092
- errorEvent = {
1093
- type: 'E_ROAP_ERROR',
1094
- data: {
1095
- seq: 2,
1096
- messageType: 'ERROR',
1097
- errorType: 'OUT_OF_ORDER'
1098
- }
1099
- };
1100
- call['mediaStateMachine'].state.value = 'S_SEND_ROAP_ANSWER';
1101
- call['connected'] = true;
1102
- call.sendMediaStateMachineEvt(errorEvent);
1103
- expect(funcSpy).toBeCalledOnceWith(errorEvent.data);
1104
- expect(stateMachineSpy).not.toHaveBeenCalled();
1105
- case 9:
1106
- case "end":
1107
- return _context24.stop();
1108
- }
1109
- }, _callee24);
1110
- })));
1111
- it('ROAP error during call establishment', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {
1112
- var statusPayload, warnSpy, stateMachineSpy, funcSpy, errorEvent;
1113
- return _regenerator.default.wrap(function _callee25$(_context25) {
1114
- while (1) switch (_context25.prev = _context25.next) {
1115
- case 0:
1116
- statusPayload = {
1117
- statusCode: 200,
1118
- body: mockStatusBody
1119
- };
1120
- warnSpy = jest.spyOn(_Logger.default, 'warn');
1121
- stateMachineSpy = jest.spyOn(call, 'sendCallStateMachineEvt');
1122
- funcSpy = jest.spyOn(call, 'postMedia').mockResolvedValue(statusPayload);
1123
- errorEvent = {
1124
- type: 'E_ROAP_ERROR',
1125
- data: {
1126
- seq: 2,
1127
- messageType: 'ERROR',
1128
- errorType: 'OUT_OF_ORDER'
1129
- }
1130
- };
1131
- call['connected'] = false;
1132
- _context25.next = 8;
1133
- return call['handleRoapError']({}, errorEvent);
1134
- case 8:
1135
- expect(funcSpy).toBeCalledOnceWith(errorEvent.data);
1136
- expect(warnSpy).toBeCalledOnceWith('Call failed due to media issue', {
1137
- file: 'call',
1138
- method: 'handleRoapError'
1139
- });
1140
- expect(stateMachineSpy).toBeCalledOnceWith({
1141
- data: {
1142
- media: true
1143
- },
1144
- type: 'E_UNKNOWN'
1145
- });
1146
- case 11:
1147
- case "end":
1148
- return _context25.stop();
1149
- }
1150
- }, _callee25);
1151
- })));
1152
- it('state changes during successful incoming call with out of order events', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee26() {
1153
- var statusPayload, dummyEvent, postMediaSpy, dummyOkEvent, dummyOfferEvent;
1154
- return _regenerator.default.wrap(function _callee26$(_context26) {
1155
- while (1) switch (_context26.prev = _context26.next) {
1156
- case 0:
1157
- statusPayload = {
1158
- statusCode: 200,
1159
- body: mockStatusBody
1160
- };
1161
- dummyEvent = {
1162
- type: 'E_RECV_CALL_SETUP',
1163
- data: {
1164
- seq: 1,
1165
- messageType: 'OFFER'
1166
- }
1167
- };
1168
- postMediaSpy = jest.spyOn(call, 'postMedia');
1169
- webex.request.mockReturnValue(statusPayload);
1170
- call['direction'] = _types3.CallDirection.INBOUND;
1171
- call.sendCallStateMachineEvt(dummyEvent);
1172
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_PROGRESS');
1173
- dummyEvent.type = 'E_SEND_CALL_CONNECT';
1174
- call.sendCallStateMachineEvt(dummyEvent);
1175
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_CONNECT');
1176
-
1177
- /* we should expect to forward the roap offer message to mediaSdk for further processing */
1178
- dummyEvent.type = 'E_RECV_ROAP_OFFER';
1179
- call.sendMediaStateMachineEvt(dummyEvent);
1180
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
1181
-
1182
- /* expect sending roap answer to mobius */
1183
- dummyEvent.type = 'E_SEND_ROAP_ANSWER';
1184
- dummyEvent.data = {
1185
- seq: 1,
1186
- messageType: 'ANSWER'
1187
- };
1188
- _context26.next = 17;
1189
- return call.sendMediaStateMachineEvt(dummyEvent);
1190
- case 17:
1191
- expect(postMediaSpy).toBeCalledOnceWith(dummyEvent.data);
1192
-
1193
- /* we receive roap Offer Request followed by roap Ok from mobius and handle
1194
- out of order events by buffering and processing them in sequence */
1195
- dummyOkEvent = {
1196
- type: 'E_ROAP_OK',
1197
- data: {
1198
- received: true,
1199
- message: {
1200
- seq: 1,
1201
- messageType: 'OK'
1202
- }
1203
- }
1204
- };
1205
- dummyEvent.type = 'E_RECV_ROAP_OFFER_REQUEST';
1206
- dummyEvent.data = {
1207
- seq: 2,
1208
- messageType: 'OFFER_REQUEST'
1209
- };
1210
- _context26.next = 23;
1211
- return call.sendMediaStateMachineEvt(dummyEvent);
1212
- case 23:
1213
- expect(call['receivedRoapOKSeq']).toBe(0);
1214
- expect(_testUtil.mediaConnection.roapMessageReceived).not.toHaveBeenLastCalledWith(dummyEvent.data);
1215
- call.sendMediaStateMachineEvt(dummyOkEvent);
1216
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenNthCalledWith(2, dummyOkEvent.data.message);
1217
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
1218
- dummyOfferEvent = {
1219
- type: 'E_SEND_ROAP_OFFER',
1220
- data: {
1221
- seq: 2,
1222
- messageType: 'OFFER',
1223
- sdp: 'sdp'
1224
- }
1225
- };
1226
- expect(call['mediaStateMachine'].state.value).toBe('S_RECV_ROAP_OFFER_REQUEST');
1227
- call.sendMediaStateMachineEvt(dummyOfferEvent);
1228
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyOfferEvent.data);
1229
- dummyEvent.type = 'E_RECV_ROAP_ANSWER';
1230
- dummyEvent.data = {
1231
- seq: 2,
1232
- messageType: 'ANSWER'
1233
- };
1234
- call.sendMediaStateMachineEvt(dummyEvent);
1235
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
1236
- dummyOkEvent.data = {
1237
- received: false,
1238
- message: {
1239
- seq: 2,
1240
- messageType: 'OK'
1241
- }
1242
- };
1243
- call.sendMediaStateMachineEvt(dummyOkEvent);
1244
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyOkEvent.data.message);
1245
-
1246
- /* With the two roap offer/answer transactions that we simulated earlier
1247
- we get a total 4 outgoing and 3 incoming roap messages.
1248
- */
1249
- expect(postMediaSpy).toBeCalledTimes(3);
1250
- expect(_testUtil.mediaConnection.roapMessageReceived).toBeCalledTimes(4);
1251
- expect(call['callStateMachine'].state.value).toBe('S_CALL_ESTABLISHED');
1252
- expect(call.isConnected()).toBe(true);
1253
- dummyEvent.type = 'E_CALL_HOLD';
1254
- dummyEvent.data = {
1255
- seq: 3,
1256
- messageType: 'OFFER'
1257
- };
1258
- call.sendCallStateMachineEvt(dummyEvent);
1259
- dummyEvent.type = 'E_RECV_ROAP_OFFER';
1260
- _context26.next = 49;
1261
- return call.sendMediaStateMachineEvt(dummyEvent);
1262
- case 49:
1263
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
1264
- dummyEvent.type = 'E_SEND_ROAP_ANSWER';
1265
- dummyEvent.data = {
1266
- seq: 3,
1267
- messageType: 'ANSWER'
1268
- };
1269
- _context26.next = 54;
1270
- return call.sendMediaStateMachineEvt(dummyEvent);
1271
- case 54:
1272
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyEvent.data);
1273
- dummyEvent.type = 'E_RECV_ROAP_OFFER';
1274
- dummyEvent.data = {
1275
- seq: 4,
1276
- messageType: 'OFFER'
1277
- };
1278
- call.sendMediaStateMachineEvt(dummyEvent);
1279
- expect(call['receivedRoapOKSeq']).toBe(2);
1280
- expect(_testUtil.mediaConnection.roapMessageReceived).not.toHaveBeenLastCalledWith(dummyEvent.data);
1281
- dummyOkEvent.data = {
1282
- received: true,
1283
- message: {
1284
- seq: 3,
1285
- messageType: 'OK'
1286
- }
1287
- };
1288
- _context26.next = 63;
1289
- return call.sendMediaStateMachineEvt(dummyOkEvent);
1290
- case 63:
1291
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenNthCalledWith(6, dummyOkEvent.data.message);
1292
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
1293
- dummyEvent.type = 'E_SEND_ROAP_ANSWER';
1294
- dummyEvent.data = {
1295
- seq: 4,
1296
- messageType: 'ANSWER'
1297
- };
1298
- expect(call['mediaStateMachine'].state.value).toBe('S_RECV_ROAP_OFFER');
1299
- call.sendMediaStateMachineEvt(dummyEvent);
1300
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyEvent.data);
1301
- case 70:
1302
- case "end":
1303
- return _context26.stop();
1304
- }
1305
- }, _callee26);
1306
- })));
1307
- it('successfully handles out of order events when ROAP OK is received while executing outgoingRoapAnswer', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee27() {
1308
- var mockStatusBody, statusPayload, dummyEvent, postMediaSpy, dummyOkEvent, dummyOfferEvent;
1309
- return _regenerator.default.wrap(function _callee27$(_context27) {
1310
- while (1) switch (_context27.prev = _context27.next) {
1311
- case 0:
1312
- mockStatusBody = {
1313
- device: {
1314
- deviceId: '123e4567-e89b-12d3-a456-426614174000',
1315
- correlationId: 'b5476d4c-f48b-475e-b4e2-994e24d14ca2'
1316
- },
1317
- callId: 'fcf86aa5-5539-4c9f-8b72-667786ae9b6c'
1318
- };
1319
- statusPayload = {
1320
- statusCode: 200,
1321
- body: mockStatusBody
1322
- };
1323
- dummyEvent = {
1324
- type: 'E_RECV_CALL_SETUP',
1325
- data: {
1326
- seq: 1,
1327
- messageType: 'OFFER'
1328
- }
1329
- };
1330
- postMediaSpy = jest.spyOn(call, 'postMedia');
1331
- webex.request.mockReturnValue(statusPayload);
1332
- call['direction'] = _types3.CallDirection.INBOUND;
1333
- call.sendCallStateMachineEvt(dummyEvent);
1334
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_PROGRESS');
1335
- dummyEvent.type = 'E_SEND_CALL_CONNECT';
1336
- call.sendCallStateMachineEvt(dummyEvent);
1337
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_CONNECT');
1338
-
1339
- /* we should expect to forward the roap offer message to mediaSdk for further processing */
1340
- dummyEvent.type = 'E_RECV_ROAP_OFFER';
1341
- call.sendMediaStateMachineEvt(dummyEvent);
1342
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
1343
-
1344
- /* expect sending roap answer to mobius */
1345
- dummyEvent.type = 'E_SEND_ROAP_ANSWER';
1346
- dummyEvent.data = {
1347
- seq: 1,
1348
- messageType: 'ANSWER'
1349
- };
1350
- _context27.next = 18;
1351
- return call.sendMediaStateMachineEvt(dummyEvent);
1352
- case 18:
1353
- expect(postMediaSpy).toBeCalledOnceWith(dummyEvent.data);
1354
-
1355
- /* we receive roap Offer Request followed by roap Ok from mobius and handle
1356
- out of order events by buffering and processing them in sequence */
1357
- dummyOkEvent = {
1358
- type: 'E_ROAP_OK',
1359
- data: {
1360
- received: true,
1361
- message: {
1362
- seq: 1,
1363
- messageType: 'OK'
1364
- }
1365
- }
1366
- };
1367
- dummyEvent.type = 'E_RECV_ROAP_OFFER_REQUEST';
1368
- dummyEvent.data = {
1369
- seq: 2,
1370
- messageType: 'OFFER_REQUEST'
1371
- };
1372
- _context27.next = 24;
1373
- return call.sendMediaStateMachineEvt(dummyEvent);
1374
- case 24:
1375
- expect(call['receivedRoapOKSeq']).toBe(0);
1376
- expect(_testUtil.mediaConnection.roapMessageReceived).not.toHaveBeenLastCalledWith(dummyEvent.data);
1377
- call.sendMediaStateMachineEvt(dummyOkEvent);
1378
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenNthCalledWith(2, dummyOkEvent.data.message);
1379
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
1380
- dummyOfferEvent = {
1381
- type: 'E_SEND_ROAP_OFFER',
1382
- data: {
1383
- seq: 2,
1384
- messageType: 'OFFER',
1385
- sdp: 'sdp'
1386
- }
1387
- };
1388
- expect(call['mediaStateMachine'].state.value).toBe('S_RECV_ROAP_OFFER_REQUEST');
1389
- call.sendMediaStateMachineEvt(dummyOfferEvent);
1390
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyOfferEvent.data);
1391
- dummyEvent.type = 'E_RECV_ROAP_ANSWER';
1392
- dummyEvent.data = {
1393
- seq: 2,
1394
- messageType: 'ANSWER'
1395
- };
1396
- call.sendMediaStateMachineEvt(dummyEvent);
1397
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
1398
- dummyOkEvent.data = {
1399
- received: false,
1400
- message: {
1401
- seq: 2,
1402
- messageType: 'OK'
1403
- }
1404
- };
1405
- call.sendMediaStateMachineEvt(dummyOkEvent);
1406
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyOkEvent.data.message);
1407
-
1408
- /* With the two roap offer/answer transactions that we simulated earlier
1409
- we get a total 4 outgoing and 3 incoming roap messages.
1410
- */
1411
- expect(postMediaSpy).toBeCalledTimes(3);
1412
- expect(_testUtil.mediaConnection.roapMessageReceived).toBeCalledTimes(4);
1413
- expect(call['callStateMachine'].state.value).toBe('S_CALL_ESTABLISHED');
1414
- expect(call.isConnected()).toBe(true);
1415
- dummyEvent.type = 'E_CALL_HOLD';
1416
- dummyEvent.data = {
1417
- seq: 3,
1418
- messageType: 'OFFER'
1419
- };
1420
- call.sendCallStateMachineEvt(dummyEvent);
1421
- dummyEvent.type = 'E_RECV_ROAP_OFFER';
1422
- _context27.next = 50;
1423
- return call.sendMediaStateMachineEvt(dummyEvent);
1424
- case 50:
1425
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
1426
- dummyEvent.type = 'E_SEND_ROAP_ANSWER';
1427
- dummyEvent.data = {
1428
- seq: 3,
1429
- messageType: 'ANSWER'
1430
- };
1431
- _context27.next = 55;
1432
- return call.sendMediaStateMachineEvt(dummyEvent);
1433
- case 55:
1434
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyEvent.data);
1435
- dummyEvent.type = 'E_RECV_ROAP_OFFER';
1436
- dummyEvent.data = {
1437
- seq: 4,
1438
- messageType: 'OFFER'
1439
- };
1440
- dummyOkEvent.data = {
1441
- received: true,
1442
- message: {
1443
- seq: 3,
1444
- messageType: 'OK'
1445
- }
1446
- };
1447
- call.sendMediaStateMachineEvt(dummyEvent);
1448
- _context27.next = 62;
1449
- return call.sendMediaStateMachineEvt(dummyOkEvent);
1450
- case 62:
1451
- expect(call['receivedRoapOKSeq']).toBe(3);
1452
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenNthCalledWith(6, dummyOkEvent.data.message);
1453
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
1454
- dummyEvent.type = 'E_SEND_ROAP_ANSWER';
1455
- dummyEvent.data = {
1456
- seq: 4,
1457
- messageType: 'ANSWER'
1458
- };
1459
- expect(call['mediaStateMachine'].state.value).toBe('S_RECV_ROAP_OFFER');
1460
- call.sendMediaStateMachineEvt(dummyEvent);
1461
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyEvent.data);
1462
- case 70:
1463
- case "end":
1464
- return _context27.stop();
1465
- }
1466
- }, _callee27);
1467
- })));
1468
- it('handle hold event successfully when media received after progress but before connect', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee28() {
1469
- var statusPayload, dummyEvent, postMediaSpy, infoSpy, dummyOkEvent;
1470
- return _regenerator.default.wrap(function _callee28$(_context28) {
1471
- while (1) switch (_context28.prev = _context28.next) {
1472
- case 0:
1473
- statusPayload = {
1474
- statusCode: 200,
1475
- body: mockStatusBody
1476
- };
1477
- dummyEvent = {
1478
- type: 'E_SEND_CALL_SETUP',
1479
- data: {
1480
- seq: 1,
1481
- messageType: 'OFFER',
1482
- sdp: 'sdp'
1483
- }
1484
- };
1485
- postMediaSpy = jest.spyOn(call, 'postMedia');
1486
- infoSpy = jest.spyOn(_Logger.default, 'info');
1487
- webex.request.mockReturnValue(statusPayload);
1488
- call.sendCallStateMachineEvt(dummyEvent);
1489
- expect(call['callStateMachine'].state.value).toBe('S_SEND_CALL_SETUP');
1490
- dummyEvent.type = 'E_SEND_ROAP_OFFER';
1491
- call.sendMediaStateMachineEvt(dummyEvent);
1492
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyEvent.data);
1493
- dummyEvent.type = 'E_RECV_CALL_PROGRESS';
1494
- dummyEvent.data = undefined;
1495
- call.sendCallStateMachineEvt(dummyEvent);
1496
- expect(call['callStateMachine'].state.value).toBe('S_RECV_CALL_PROGRESS');
1497
- dummyEvent.type = 'E_RECV_ROAP_ANSWER';
1498
- dummyEvent.data = {
1499
- seq: 1,
1500
- messageType: 'ANSWER',
1501
- sdp: 'sdp'
1502
- };
1503
- call.sendMediaStateMachineEvt(dummyEvent);
1504
- expect(_testUtil.mediaConnection.roapMessageReceived).toHaveBeenLastCalledWith(dummyEvent.data);
1505
- expect(call['mediaNegotiationCompleted']).toBe(false);
1506
- dummyOkEvent = {
1507
- type: 'E_ROAP_OK',
1508
- data: {
1509
- received: false,
1510
- message: {
1511
- seq: 1,
1512
- messageType: 'OK'
1513
- }
1514
- }
1515
- };
1516
- call.sendMediaStateMachineEvt(dummyOkEvent);
1517
- expect(call['mediaNegotiationCompleted']).toBe(true);
1518
- expect(postMediaSpy).toHaveBeenLastCalledWith(dummyOkEvent.data.message);
1519
- dummyEvent.type = 'E_RECV_CALL_CONNECT';
1520
- dummyEvent.data = undefined;
1521
- call.sendCallStateMachineEvt(dummyEvent);
1522
-
1523
- /* Call will move to connect state then immediately move to established state as
1524
- media negotiation is already completed before connect was received
1525
- */
1526
- expect(call['callStateMachine'].state.value).toBe('S_CALL_ESTABLISHED');
1527
- expect(call.isConnected()).toBe(true);
1528
- dummyEvent.type = 'E_CALL_HOLD';
1529
- dummyEvent.data = undefined;
1530
- call.sendCallStateMachineEvt(dummyEvent);
1531
- expect(call['callStateMachine'].state.value).toBe('S_CALL_HOLD');
1532
- expect(infoSpy).toHaveBeenLastCalledWith("handleCallHold: ".concat(call.getCorrelationId(), " "), {
1533
- file: 'call',
1534
- method: 'handleCallHold'
1535
- });
1536
- case 33:
1537
- case "end":
1538
- return _context28.stop();
1539
- }
1540
- }, _callee28);
1541
- })));
1542
- });
1543
- describe('Supplementary Services tests', function () {
1544
- var deviceId = '55dfb53f-bed2-36da-8e85-cee7f02aa68e';
1545
- var dest = {
1546
- type: _types3.CallType.URI,
1547
- address: 'tel:5003'
1548
- };
1549
- var mockResponseBody = {
1550
- device: {
1551
- deviceId: '123e4567-e89b-12d3-a456-426614174000',
1552
- correlationId: 'b5476d4c-f48b-475e-b4e2-994e24d14ca2'
1553
- },
1554
- callId: 'fcf86aa5-5539-4c9f-8b72-667786ae9b6c'
1555
- };
1556
- var call;
1557
- beforeEach(function () {
1558
- /* Since we are not actually testing from the start of a call , so it's good to set the below
1559
- * parameters manually
1560
- */
1561
-
1562
- call = new _call.Call(activeUrl, webex, dest, _types3.CallDirection.OUTBOUND, deviceId, mockLineId, function () {
1563
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
1564
- var dummy = 10;
1565
- }, defaultServiceIndicator);
1566
- call['connected'] = true;
1567
- call['earlyMedia'] = false;
1568
-
1569
- /* Also supplementary services will start always from Call_Established state */
1570
- call['callStateMachine'].state.value = 'S_CALL_ESTABLISHED';
1571
- call.removeAllListeners(_types2.CALL_EVENT_KEYS.CALL_ERROR);
1572
- jest.clearAllTimers();
1573
- jest.useFakeTimers();
1574
- });
1575
- describe('Call hold-resume tests', function () {
1576
- var mockHeldEvent = {
1577
- eventType: 'callState',
1578
- eventData: {
1579
- callState: 'HELD'
1580
- }
1581
- };
1582
- var mockResumeEvent = {
1583
- eventType: 'callState',
1584
- eventData: {
1585
- callState: 'CONNECTED'
1586
- }
1587
- };
1588
- var dummyEvent = {
1589
- type: 'E_SEND_ROAP_OFFER',
1590
- data: {
1591
- seq: 1,
1592
- message: {},
1593
- type: 'OFFER'
1594
- }
1595
- };
1596
- beforeEach(function () {
1597
- call.removeAllListeners();
1598
- });
1599
- it('Handle successful Call hold case without delayed http response', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee30() {
1600
- var responsePayload, warnSpy, roapEvent;
1601
- return _regenerator.default.wrap(function _callee30$(_context30) {
1602
- while (1) switch (_context30.prev = _context30.next) {
1603
- case 0:
1604
- expect.assertions(7);
1605
- responsePayload = {
1606
- statusCode: 200,
1607
- body: mockResponseBody
1608
- };
1609
- jest.spyOn(webex, 'request').mockResolvedValue(responsePayload);
1610
- jest.spyOn(global, 'setTimeout');
1611
- jest.spyOn(global, 'clearTimeout');
1612
- warnSpy = jest.spyOn(_Logger.default, 'warn');
1613
- call['held'] = false;
1614
- call.on(_types2.CALL_EVENT_KEYS.HELD, /*#__PURE__*/function () {
1615
- var _ref30 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee29(correlationId) {
1616
- return _regenerator.default.wrap(function _callee29$(_context29) {
1617
- while (1) switch (_context29.prev = _context29.next) {
1618
- case 0:
1619
- expect(correlationId).toStrictEqual(call.getCorrelationId());
1620
- case 1:
1621
- case "end":
1622
- return _context29.stop();
1623
- }
1624
- }, _callee29);
1625
- }));
1626
- return function (_x) {
1627
- return _ref30.apply(this, arguments);
1628
- };
1629
- }());
1630
- _context30.next = 10;
1631
- return call.doHoldResume();
1632
- case 10:
1633
- _context30.next = 12;
1634
- return (0, _testUtil.flushPromises)(2);
1635
- case 12:
1636
- expect(setTimeout).toHaveBeenCalledTimes(1);
1637
- call.handleMidCallEvent(mockHeldEvent);
1638
-
1639
- /* At this point, the Call State should be S_CALL_HOLD
1640
- */
1641
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_HOLD');
1642
-
1643
- /* We simulate the media Connection events manually here as we are not really testing with actual
1644
- * media.
1645
- */
1646
- call['handleIncomingRoapOffer']({}, dummyEvent);
1647
- roapEvent = JSON.parse((0, _stringify.default)(dummyEvent));
1648
- roapEvent.data.type = 'ANSWER';
1649
- _context30.next = 20;
1650
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
1651
- case 20:
1652
- roapEvent.data.type = 'OK';
1653
- _context30.next = 23;
1654
- return call['handleRoapEstablished']({}, dummyEvent);
1655
- case 23:
1656
- expect(clearTimeout).toHaveBeenCalledTimes(1);
1657
- /* isHeld flag should be set and an Hold event should be emitted */
1658
- expect(call.isHeld()).toStrictEqual(true);
1659
- /* We should return back to call established state */
1660
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
1661
- jest.advanceTimersByTime(12000);
1662
- expect(warnSpy).not.toHaveBeenCalledWith('Hold response timed out', {
1663
- file: 'call',
1664
- method: 'handleCallHold'
1665
- });
1666
- case 28:
1667
- case "end":
1668
- return _context30.stop();
1669
- }
1670
- }, _callee30);
1671
- })));
1672
- it('Handle successful Call hold case with delayed http response', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee32() {
1673
- var responsePayload, warnSpy, roapEvent;
1674
- return _regenerator.default.wrap(function _callee32$(_context32) {
1675
- while (1) switch (_context32.prev = _context32.next) {
1676
- case 0:
1677
- expect.assertions(8);
1678
- responsePayload = {
1679
- statusCode: 200,
1680
- body: mockResponseBody
1681
- };
1682
- jest.spyOn(webex, 'request').mockResolvedValue(responsePayload);
1683
- jest.spyOn(global, 'setTimeout');
1684
- jest.spyOn(global, 'clearTimeout');
1685
- warnSpy = jest.spyOn(_Logger.default, 'warn');
1686
- call['held'] = false;
1687
- call.on(_types2.CALL_EVENT_KEYS.HELD, /*#__PURE__*/function () {
1688
- var _ref32 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee31(correlationId) {
1689
- return _regenerator.default.wrap(function _callee31$(_context31) {
1690
- while (1) switch (_context31.prev = _context31.next) {
1691
- case 0:
1692
- expect(correlationId).toStrictEqual(call.getCorrelationId());
1693
- case 1:
1694
- case "end":
1695
- return _context31.stop();
1696
- }
1697
- }, _callee31);
1698
- }));
1699
- return function (_x2) {
1700
- return _ref32.apply(this, arguments);
1701
- };
1702
- }());
1703
- call.doHoldResume();
1704
- _context32.next = 11;
1705
- return _promise.default.resolve();
1706
- case 11:
1707
- _context32.next = 13;
1708
- return _promise.default.resolve();
1709
- case 13:
1710
- expect(setTimeout).not.toHaveBeenCalled();
1711
- call.handleMidCallEvent(mockHeldEvent);
1712
-
1713
- /* At this point, the Call State should be S_CALL_HOLD
1714
- */
1715
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_HOLD');
1716
- expect(call.isHeld()).toBe(true);
1717
- /* We simulate the media Connection events manually here as we are not really testing with actual
1718
- * media.
1719
- */
1720
- call['handleIncomingRoapOffer']({}, dummyEvent);
1721
- roapEvent = JSON.parse((0, _stringify.default)(dummyEvent));
1722
- roapEvent.data.type = 'ANSWER';
1723
- _context32.next = 22;
1724
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
1725
- case 22:
1726
- roapEvent.data.type = 'OK';
1727
- _context32.next = 25;
1728
- return call['handleRoapEstablished']({}, dummyEvent);
1729
- case 25:
1730
- expect(clearTimeout).not.toHaveBeenCalled();
1731
- /* isHeld flag should be set and an Hold event should be emitted */
1732
- expect(call.isHeld()).toStrictEqual(true);
1733
- /* We should return back to call established state */
1734
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
1735
- jest.advanceTimersByTime(12000);
1736
- expect(warnSpy).not.toHaveBeenCalledWith('Hold response timed out', {
1737
- file: 'call',
1738
- method: 'handleCallHold'
1739
- });
1740
- case 30:
1741
- case "end":
1742
- return _context32.stop();
1743
- }
1744
- }, _callee32);
1745
- })));
1746
- it('Handle failure Call Hold case during signalling', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee34() {
1747
- var responsePayload;
1748
- return _regenerator.default.wrap(function _callee34$(_context34) {
1749
- while (1) switch (_context34.prev = _context34.next) {
1750
- case 0:
1751
- expect.assertions(4);
1752
- responsePayload = {
1753
- statusCode: 503,
1754
- body: mockResponseBody
1755
- };
1756
- jest.spyOn(webex, 'request').mockRejectedValue(responsePayload);
1757
- call['held'] = false;
1758
- call.on(_types2.CALL_EVENT_KEYS.HOLD_ERROR, /*#__PURE__*/function () {
1759
- var _ref34 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee33(errObj) {
1760
- return _regenerator.default.wrap(function _callee33$(_context33) {
1761
- while (1) switch (_context33.prev = _context33.next) {
1762
- case 0:
1763
- expect(errObj.type).toStrictEqual(_types.ERROR_TYPE.SERVICE_UNAVAILABLE);
1764
- expect(errObj.message).toStrictEqual('An unknown error occurred. Wait a moment and try again.');
1765
- case 2:
1766
- case "end":
1767
- return _context33.stop();
1768
- }
1769
- }, _callee33);
1770
- }));
1771
- return function (_x3) {
1772
- return _ref34.apply(this, arguments);
1773
- };
1774
- }());
1775
- _context34.next = 7;
1776
- return call.doHoldResume();
1777
- case 7:
1778
- _context34.next = 9;
1779
- return (0, _testUtil.flushPromises)(2);
1780
- case 9:
1781
- expect(call.isHeld()).toStrictEqual(false);
1782
-
1783
- /* At this point , the Call State should transition to S_CALL_ESTABLISHED
1784
- */
1785
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
1786
- case 11:
1787
- case "end":
1788
- return _context34.stop();
1789
- }
1790
- }, _callee34);
1791
- })));
1792
- it('Handle failure Call Hold case during offer/answer exchange', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee36() {
1793
- var responsePayload, rejectPayload, roapEvent;
1794
- return _regenerator.default.wrap(function _callee36$(_context36) {
1795
- while (1) switch (_context36.prev = _context36.next) {
1796
- case 0:
1797
- expect.assertions(5);
1798
- responsePayload = {
1799
- statusCode: 200,
1800
- body: mockResponseBody
1801
- };
1802
- rejectPayload = {
1803
- statusCode: 503,
1804
- body: mockResponseBody
1805
- };
1806
- jest.spyOn(webex, 'request').mockResolvedValueOnce(responsePayload).mockRejectedValueOnce(rejectPayload);
1807
- call['held'] = false;
1808
- call.on(_types2.CALL_EVENT_KEYS.HOLD_ERROR, /*#__PURE__*/function () {
1809
- var _ref36 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee35(errObj) {
1810
- return _regenerator.default.wrap(function _callee35$(_context35) {
1811
- while (1) switch (_context35.prev = _context35.next) {
1812
- case 0:
1813
- expect(errObj.type).toStrictEqual(_types.ERROR_TYPE.SERVICE_UNAVAILABLE);
1814
- expect(errObj.message).toStrictEqual('An unknown error occurred. Wait a moment and try again.');
1815
- case 2:
1816
- case "end":
1817
- return _context35.stop();
1818
- }
1819
- }, _callee35);
1820
- }));
1821
- return function (_x4) {
1822
- return _ref36.apply(this, arguments);
1823
- };
1824
- }());
1825
- call.doHoldResume();
1826
- _context36.next = 9;
1827
- return (0, _testUtil.flushPromises)(2);
1828
- case 9:
1829
- /* the Call State should transition to S_CALL_ESTABLISHED
1830
- */
1831
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_HOLD');
1832
- call['handleIncomingRoapOffer']({}, dummyEvent);
1833
- roapEvent = JSON.parse((0, _stringify.default)(dummyEvent));
1834
- /* We are intentionally failing the ROAP ANSWER */
1835
- roapEvent.data.type = 'ANSWER';
1836
- _context36.next = 15;
1837
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
1838
- case 15:
1839
- expect(call.isHeld()).toStrictEqual(false);
1840
- /* We should return back to call established state */
1841
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
1842
- case 17:
1843
- case "end":
1844
- return _context36.stop();
1845
- }
1846
- }, _callee36);
1847
- })));
1848
- it('Handle failure Call Hold case during roap ok out', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee37() {
1849
- var responsePayload, warnSpy, roapEvent;
1850
- return _regenerator.default.wrap(function _callee37$(_context37) {
1851
- while (1) switch (_context37.prev = _context37.next) {
1852
- case 0:
1853
- responsePayload = {
1854
- statusCode: 200,
1855
- body: mockResponseBody
1856
- };
1857
- jest.spyOn(webex, 'request').mockResolvedValue(responsePayload);
1858
- jest.spyOn(global, 'setTimeout');
1859
- jest.spyOn(global, 'clearTimeout');
1860
- warnSpy = jest.spyOn(_Logger.default, 'warn');
1861
- call['held'] = false;
1862
- _context37.next = 8;
1863
- return call.doHoldResume();
1864
- case 8:
1865
- _context37.next = 10;
1866
- return (0, _testUtil.flushPromises)(2);
1867
- case 10:
1868
- expect(setTimeout).toHaveBeenCalledTimes(1);
1869
-
1870
- /* At this point, the Call State should be S_CALL_HOLD
1871
- */
1872
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_HOLD');
1873
-
1874
- /* We simulate the media Connection events manually here as we are not really testing with actual
1875
- * media.
1876
- */
1877
- call['handleIncomingRoapOffer']({}, dummyEvent);
1878
- roapEvent = JSON.parse((0, _stringify.default)(dummyEvent));
1879
- roapEvent.data.type = 'ANSWER';
1880
- _context37.next = 17;
1881
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
1882
- case 17:
1883
- jest.spyOn(webex, 'request').mockRejectedValue({
1884
- statusCode: 403
1885
- });
1886
- roapEvent.data.type = 'OK';
1887
- _context37.next = 21;
1888
- return call['handleRoapEstablished']({}, dummyEvent);
1889
- case 21:
1890
- /* this is for coverage */
1891
- call['callStateMachine'].state.value = 'S_CALL_HOLD';
1892
- _context37.next = 24;
1893
- return call['handleRoapEstablished']({}, dummyEvent);
1894
- case 24:
1895
- expect(call.isHeld()).toStrictEqual(false);
1896
- /* We should return back to call established state */
1897
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
1898
- expect(warnSpy).toHaveBeenCalledWith('MediaOk failed with Mobius', {
1899
- file: 'call',
1900
- method: 'handleRoapEstablished'
1901
- });
1902
- case 27:
1903
- case "end":
1904
- return _context37.stop();
1905
- }
1906
- }, _callee37);
1907
- })));
1908
- it('Handle failure Call resume case during roap ok out', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee38() {
1909
- var responsePayload, warnSpy, roapEvent;
1910
- return _regenerator.default.wrap(function _callee38$(_context38) {
1911
- while (1) switch (_context38.prev = _context38.next) {
1912
- case 0:
1913
- responsePayload = {
1914
- statusCode: 200,
1915
- body: mockResponseBody
1916
- };
1917
- jest.spyOn(webex, 'request').mockResolvedValue(responsePayload);
1918
- jest.spyOn(global, 'setTimeout');
1919
- jest.spyOn(global, 'clearTimeout');
1920
- warnSpy = jest.spyOn(_Logger.default, 'warn');
1921
- call['held'] = true;
1922
- _context38.next = 8;
1923
- return call.doHoldResume();
1924
- case 8:
1925
- _context38.next = 10;
1926
- return (0, _testUtil.flushPromises)(2);
1927
- case 10:
1928
- expect(setTimeout).toHaveBeenCalledTimes(1);
1929
-
1930
- /* At this point, the Call State should be S_CALL_RESUME
1931
- */
1932
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_RESUME');
1933
-
1934
- /* We simulate the media Connection events manually here as we are not really testing with actual
1935
- * media.
1936
- */
1937
- call['handleIncomingRoapOffer']({}, dummyEvent);
1938
- roapEvent = JSON.parse((0, _stringify.default)(dummyEvent));
1939
- roapEvent.data.type = 'ANSWER';
1940
- _context38.next = 17;
1941
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
1942
- case 17:
1943
- jest.spyOn(webex, 'request').mockRejectedValue({
1944
- statusCode: 403
1945
- });
1946
- roapEvent.data.type = 'OK';
1947
- _context38.next = 21;
1948
- return call['handleRoapEstablished']({}, dummyEvent);
1949
- case 21:
1950
- expect(call.isHeld()).toStrictEqual(true);
1951
- /* We should return back to call established state */
1952
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
1953
- expect(warnSpy).toHaveBeenCalledWith('MediaOk failed with Mobius', {
1954
- file: 'call',
1955
- method: 'handleRoapEstablished'
1956
- });
1957
- case 24:
1958
- case "end":
1959
- return _context38.stop();
1960
- }
1961
- }, _callee38);
1962
- })));
1963
- it('Handle Call hold case where successful Held response does not come', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee40() {
1964
- var responsePayload, roapEvent;
1965
- return _regenerator.default.wrap(function _callee40$(_context40) {
1966
- while (1) switch (_context40.prev = _context40.next) {
1967
- case 0:
1968
- expect.assertions(5);
1969
- responsePayload = {
1970
- statusCode: 200,
1971
- body: mockResponseBody
1972
- };
1973
- jest.spyOn(webex, 'request').mockResolvedValue(responsePayload);
1974
- call['held'] = false;
1975
- call.on(_types2.CALL_EVENT_KEYS.HOLD_ERROR, /*#__PURE__*/function () {
1976
- var _ref40 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39(errObj) {
1977
- return _regenerator.default.wrap(function _callee39$(_context39) {
1978
- while (1) switch (_context39.prev = _context39.next) {
1979
- case 0:
1980
- expect(errObj.type).toStrictEqual(_types.ERROR_TYPE.TIMEOUT);
1981
- expect(errObj.message).toStrictEqual('An error occurred while placing the call on hold. Wait a moment and try again.');
1982
- case 2:
1983
- case "end":
1984
- return _context39.stop();
1985
- }
1986
- }, _callee39);
1987
- }));
1988
- return function (_x5) {
1989
- return _ref40.apply(this, arguments);
1990
- };
1991
- }());
1992
- jest.runAllTimers();
1993
- call.doHoldResume();
1994
- _context40.next = 9;
1995
- return (0, _testUtil.flushPromises)(2);
1996
- case 9:
1997
- /* At this point, the Call State should be S_CALL_HOLD
1998
- */
1999
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_HOLD');
2000
-
2001
- /* We simulate the media Connection events manually here as we are not really testing with actual
2002
- * media.
2003
- */
2004
- call['handleIncomingRoapOffer']({}, dummyEvent);
2005
- roapEvent = JSON.parse((0, _stringify.default)(dummyEvent));
2006
- roapEvent.data.type = 'ANSWER';
2007
- _context40.next = 15;
2008
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
2009
- case 15:
2010
- roapEvent.data.type = 'OK';
2011
- _context40.next = 18;
2012
- return call['handleRoapEstablished']({}, dummyEvent);
2013
- case 18:
2014
- /* Advancing timer by 12 seconds so that it gets timed out */
2015
- jest.advanceTimersByTime(12000);
2016
-
2017
- /* isHeld flag should be unset */
2018
- expect(call.isHeld()).toStrictEqual(false);
2019
- /* We should return back to call established state */
2020
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2021
- case 21:
2022
- case "end":
2023
- return _context40.stop();
2024
- }
2025
- }, _callee40);
2026
- })));
2027
- it('Handle successful Call Resume case without delayed http response', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee42() {
2028
- var responsePayload, warnSpy, roapEvent;
2029
- return _regenerator.default.wrap(function _callee42$(_context42) {
2030
- while (1) switch (_context42.prev = _context42.next) {
2031
- case 0:
2032
- expect.assertions(7);
2033
- responsePayload = {
2034
- statusCode: 200,
2035
- body: mockResponseBody
2036
- };
2037
- jest.spyOn(webex, 'request').mockResolvedValue(responsePayload);
2038
- jest.spyOn(global, 'setTimeout');
2039
- jest.spyOn(global, 'clearTimeout');
2040
- warnSpy = jest.spyOn(_Logger.default, 'warn');
2041
- call['held'] = true;
2042
- call.on(_types2.CALL_EVENT_KEYS.RESUMED, /*#__PURE__*/function () {
2043
- var _ref42 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee41(correlationId) {
2044
- return _regenerator.default.wrap(function _callee41$(_context41) {
2045
- while (1) switch (_context41.prev = _context41.next) {
2046
- case 0:
2047
- expect(correlationId).toStrictEqual(call.getCorrelationId());
2048
- case 1:
2049
- case "end":
2050
- return _context41.stop();
2051
- }
2052
- }, _callee41);
2053
- }));
2054
- return function (_x6) {
2055
- return _ref42.apply(this, arguments);
2056
- };
2057
- }());
2058
- _context42.next = 10;
2059
- return call.doHoldResume();
2060
- case 10:
2061
- _context42.next = 12;
2062
- return (0, _testUtil.flushPromises)(2);
2063
- case 12:
2064
- expect(setTimeout).toHaveBeenCalledTimes(1);
2065
- call.handleMidCallEvent(mockResumeEvent);
2066
-
2067
- /* At this point ,the Call State should be S_CALL_RESUME
2068
- */
2069
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_RESUME');
2070
-
2071
- /* We simulate the media Connection events manually here as we are not really testing with actual
2072
- * media.
2073
- */
2074
- call['handleIncomingRoapOffer']({}, dummyEvent);
2075
- roapEvent = JSON.parse((0, _stringify.default)(dummyEvent));
2076
- roapEvent.data.type = 'ANSWER';
2077
- _context42.next = 20;
2078
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
2079
- case 20:
2080
- roapEvent.data.type = 'OK';
2081
- _context42.next = 23;
2082
- return call['handleRoapEstablished']({}, dummyEvent);
2083
- case 23:
2084
- expect(clearTimeout).toHaveBeenCalledTimes(1);
2085
- /* isHeld flag should not be set and an Resume event should be emitted */
2086
- expect(call.isHeld()).toStrictEqual(false);
2087
- /* We should return back to call established state */
2088
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2089
- jest.advanceTimersByTime(12000);
2090
- expect(warnSpy).not.toHaveBeenCalledWith('Resume response timed out', {
2091
- file: 'call',
2092
- method: 'handleCallResume'
2093
- });
2094
- case 28:
2095
- case "end":
2096
- return _context42.stop();
2097
- }
2098
- }, _callee42);
2099
- })));
2100
- it('Handle successful Call Resume case with delayed http response', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee44() {
2101
- var responsePayload, warnSpy, roapEvent;
2102
- return _regenerator.default.wrap(function _callee44$(_context44) {
2103
- while (1) switch (_context44.prev = _context44.next) {
2104
- case 0:
2105
- expect.assertions(7);
2106
- responsePayload = {
2107
- statusCode: 200,
2108
- body: mockResponseBody
2109
- };
2110
- jest.spyOn(webex, 'request').mockResolvedValue(responsePayload);
2111
- jest.spyOn(global, 'setTimeout');
2112
- jest.spyOn(global, 'clearTimeout');
2113
- warnSpy = jest.spyOn(_Logger.default, 'warn');
2114
- call['held'] = true;
2115
- call.on(_types2.CALL_EVENT_KEYS.RESUMED, /*#__PURE__*/function () {
2116
- var _ref44 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee43(correlationId) {
2117
- return _regenerator.default.wrap(function _callee43$(_context43) {
2118
- while (1) switch (_context43.prev = _context43.next) {
2119
- case 0:
2120
- expect(correlationId).toStrictEqual(call.getCorrelationId());
2121
- case 1:
2122
- case "end":
2123
- return _context43.stop();
2124
- }
2125
- }, _callee43);
2126
- }));
2127
- return function (_x7) {
2128
- return _ref44.apply(this, arguments);
2129
- };
2130
- }());
2131
- call.doHoldResume();
2132
- _context44.next = 11;
2133
- return _promise.default.resolve();
2134
- case 11:
2135
- _context44.next = 13;
2136
- return _promise.default.resolve();
2137
- case 13:
2138
- expect(setTimeout).not.toHaveBeenCalled();
2139
- call.handleMidCallEvent(mockResumeEvent);
2140
-
2141
- /* At this point ,the Call State should be S_CALL_RESUME
2142
- */
2143
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_RESUME');
2144
-
2145
- /* We simulate the media Connection events manually here as we are not really testing with actual
2146
- * media.
2147
- */
2148
- call['handleIncomingRoapOffer']({}, dummyEvent);
2149
- roapEvent = JSON.parse((0, _stringify.default)(dummyEvent));
2150
- roapEvent.data.type = 'ANSWER';
2151
- _context44.next = 21;
2152
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
2153
- case 21:
2154
- roapEvent.data.type = 'OK';
2155
- _context44.next = 24;
2156
- return call['handleRoapEstablished']({}, dummyEvent);
2157
- case 24:
2158
- expect(clearTimeout).not.toHaveBeenCalled();
2159
- /* isHeld flag should not be set and an Resume event should be emitted */
2160
- expect(call.isHeld()).toStrictEqual(false);
2161
- /* We should return back to call established state */
2162
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2163
- jest.advanceTimersByTime(12000);
2164
- expect(warnSpy).not.toHaveBeenCalledWith('Resume response timed out', {
2165
- file: 'call',
2166
- method: 'handleCallResume'
2167
- });
2168
- case 29:
2169
- case "end":
2170
- return _context44.stop();
2171
- }
2172
- }, _callee44);
2173
- })));
2174
- it('Handle failure Call Resume case during signalling', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee46() {
2175
- var responsePayload;
2176
- return _regenerator.default.wrap(function _callee46$(_context46) {
2177
- while (1) switch (_context46.prev = _context46.next) {
2178
- case 0:
2179
- expect.assertions(4);
2180
- responsePayload = {
2181
- statusCode: 503,
2182
- body: mockResponseBody
2183
- };
2184
- jest.spyOn(webex, 'request').mockRejectedValue(responsePayload);
2185
- call['held'] = true;
2186
- call.on(_types2.CALL_EVENT_KEYS.RESUME_ERROR, /*#__PURE__*/function () {
2187
- var _ref46 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee45(errObj) {
2188
- return _regenerator.default.wrap(function _callee45$(_context45) {
2189
- while (1) switch (_context45.prev = _context45.next) {
2190
- case 0:
2191
- expect(errObj.type).toStrictEqual(_types.ERROR_TYPE.SERVICE_UNAVAILABLE);
2192
- expect(errObj.message).toStrictEqual('An unknown error occurred. Wait a moment and try again.');
2193
- case 2:
2194
- case "end":
2195
- return _context45.stop();
2196
- }
2197
- }, _callee45);
2198
- }));
2199
- return function (_x8) {
2200
- return _ref46.apply(this, arguments);
2201
- };
2202
- }());
2203
- _context46.next = 7;
2204
- return call.doHoldResume();
2205
- case 7:
2206
- _context46.next = 9;
2207
- return (0, _testUtil.flushPromises)(2);
2208
- case 9:
2209
- expect(call.isHeld()).toStrictEqual(true);
2210
-
2211
- /* At this point , the Call State should transition to S_CALL_ESTABLISHED
2212
- */
2213
-
2214
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2215
- case 11:
2216
- case "end":
2217
- return _context46.stop();
2218
- }
2219
- }, _callee46);
2220
- })));
2221
- it('Handle failure Call Resume case during offer/answer exchange', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee48() {
2222
- var responsePayload, rejectPayload, roapEvent;
2223
- return _regenerator.default.wrap(function _callee48$(_context48) {
2224
- while (1) switch (_context48.prev = _context48.next) {
2225
- case 0:
2226
- expect.assertions(5);
2227
- responsePayload = {
2228
- statusCode: 200,
2229
- body: mockResponseBody
2230
- };
2231
- rejectPayload = {
2232
- statusCode: 503,
2233
- body: mockResponseBody
2234
- };
2235
- jest.spyOn(webex, 'request').mockResolvedValueOnce(responsePayload).mockRejectedValueOnce(rejectPayload);
2236
- call['held'] = true;
2237
- call.on(_types2.CALL_EVENT_KEYS.RESUME_ERROR, /*#__PURE__*/function () {
2238
- var _ref48 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee47(errObj) {
2239
- return _regenerator.default.wrap(function _callee47$(_context47) {
2240
- while (1) switch (_context47.prev = _context47.next) {
2241
- case 0:
2242
- expect(errObj.type).toStrictEqual(_types.ERROR_TYPE.SERVICE_UNAVAILABLE);
2243
- expect(errObj.message).toStrictEqual('An unknown error occurred. Wait a moment and try again.');
2244
- case 2:
2245
- case "end":
2246
- return _context47.stop();
2247
- }
2248
- }, _callee47);
2249
- }));
2250
- return function (_x9) {
2251
- return _ref48.apply(this, arguments);
2252
- };
2253
- }());
2254
- call.doHoldResume();
2255
- _context48.next = 9;
2256
- return (0, _testUtil.flushPromises)(2);
2257
- case 9:
2258
- /* At this point , the Call State should transition to S_CALL_ESTABLISHED
2259
- */
2260
-
2261
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_RESUME');
2262
- call['handleIncomingRoapOffer']({}, dummyEvent);
2263
- roapEvent = JSON.parse((0, _stringify.default)(dummyEvent));
2264
- /* We are intentionally failing the ROAP ANSWER */
2265
- roapEvent.data.type = 'ANSWER';
2266
- _context48.next = 15;
2267
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
2268
- case 15:
2269
- expect(call.isHeld()).toStrictEqual(true);
2270
- /* We should return back to call established state */
2271
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2272
- case 17:
2273
- case "end":
2274
- return _context48.stop();
2275
- }
2276
- }, _callee48);
2277
- })));
2278
- it('Handle Call resume case where successful response does not come', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee50() {
2279
- var responsePayload, roapEvent;
2280
- return _regenerator.default.wrap(function _callee50$(_context50) {
2281
- while (1) switch (_context50.prev = _context50.next) {
2282
- case 0:
2283
- expect.assertions(5);
2284
- responsePayload = {
2285
- statusCode: 200,
2286
- body: mockResponseBody
2287
- };
2288
- jest.spyOn(webex, 'request').mockResolvedValue(responsePayload);
2289
- call['held'] = true;
2290
- call.on(_types2.CALL_EVENT_KEYS.RESUME_ERROR, /*#__PURE__*/function () {
2291
- var _ref50 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee49(errObj) {
2292
- return _regenerator.default.wrap(function _callee49$(_context49) {
2293
- while (1) switch (_context49.prev = _context49.next) {
2294
- case 0:
2295
- expect(errObj.type).toStrictEqual(_types.ERROR_TYPE.TIMEOUT);
2296
- expect(errObj.message).toStrictEqual('An error occurred while resuming the call. Wait a moment and try again.');
2297
- case 2:
2298
- case "end":
2299
- return _context49.stop();
2300
- }
2301
- }, _callee49);
2302
- }));
2303
- return function (_x10) {
2304
- return _ref50.apply(this, arguments);
2305
- };
2306
- }());
2307
- call.doHoldResume();
2308
- _context50.next = 8;
2309
- return (0, _testUtil.flushPromises)(2);
2310
- case 8:
2311
- /* At this point ,the Call State should be S_CALL_RESUME
2312
- */
2313
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_RESUME');
2314
-
2315
- /* We simulate the media Connection events manually here as we are not really testing with actual
2316
- * media.
2317
- */
2318
- call['handleIncomingRoapOffer']({}, dummyEvent);
2319
- roapEvent = JSON.parse((0, _stringify.default)(dummyEvent));
2320
- roapEvent.data.type = 'ANSWER';
2321
- _context50.next = 14;
2322
- return call['handleOutgoingRoapAnswer']({}, dummyEvent);
2323
- case 14:
2324
- roapEvent.data.type = 'OK';
2325
- _context50.next = 17;
2326
- return call['handleRoapEstablished']({}, dummyEvent);
2327
- case 17:
2328
- /* Advancing timer by 12 seconds so that it gets timed out */
2329
- jest.advanceTimersByTime(12000);
2330
- expect(call.isHeld()).toStrictEqual(true);
2331
- /* We should return back to call established state */
2332
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2333
- case 20:
2334
- case "end":
2335
- return _context50.stop();
2336
- }
2337
- }, _callee50);
2338
- })));
2339
- });
2340
- describe('Call transfer tests', function () {
2341
- var transfereeNumber = '5004';
2342
- var transfereeDest = {
2343
- type: _types3.CallType.URI,
2344
- address: "tel:".concat(transfereeNumber)
2345
- };
2346
- var secondCall;
2347
-
2348
- /* A spy on handleCallErrors to check whether it is being invoked or not depending on tests */
2349
- var handleErrorSpy = jest.spyOn(Utils, 'handleCallErrors');
2350
- var transferLoggingContext = {
2351
- file: 'call',
2352
- method: 'completeTransfer'
2353
- };
2354
- beforeEach(function () {
2355
- /* We will put the first call on hold to perform the transfer */
2356
- call['held'] = true;
2357
-
2358
- /* We will create a second call just like the first call, but call is active, i.e, not held */
2359
- secondCall = new _call.Call(activeUrl, webex, transfereeDest, _types3.CallDirection.OUTBOUND, deviceId, mockLineId, function () {
2360
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
2361
- var dummy = 10;
2362
- }, defaultServiceIndicator);
2363
- secondCall['connected'] = true;
2364
- secondCall['earlyMedia'] = false;
2365
- secondCall['callStateMachine'].state.value = 'S_CALL_ESTABLISHED';
2366
- secondCall.removeAllListeners(_types2.CALL_EVENT_KEYS.CALL_ERROR);
2367
- secondCall['held'] = false;
2368
- });
2369
- it('Handle successful consult transfer case ', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee53() {
2370
- var responsePayload, requestSpy, warnSpy, infoSpy, metricSpy;
2371
- return _regenerator.default.wrap(function _callee53$(_context53) {
2372
- while (1) switch (_context53.prev = _context53.next) {
2373
- case 0:
2374
- expect.assertions(9);
2375
- responsePayload = {
2376
- statusCode: 200,
2377
- body: mockResponseBody
2378
- };
2379
- requestSpy = jest.spyOn(webex, 'request').mockResolvedValue(responsePayload);
2380
- warnSpy = jest.spyOn(_Logger.default, 'warn');
2381
- infoSpy = jest.spyOn(_Logger.default, 'info');
2382
- metricSpy = jest.spyOn(call['metricManager'], 'submitCallMetric');
2383
- call.on(_types2.CALL_EVENT_KEYS.DISCONNECT, /*#__PURE__*/function () {
2384
- var _ref52 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee51(correlationId) {
2385
- return _regenerator.default.wrap(function _callee51$(_context51) {
2386
- while (1) switch (_context51.prev = _context51.next) {
2387
- case 0:
2388
- expect(correlationId).toStrictEqual(call.getCorrelationId());
2389
- case 1:
2390
- case "end":
2391
- return _context51.stop();
2392
- }
2393
- }, _callee51);
2394
- }));
2395
- return function (_x11) {
2396
- return _ref52.apply(this, arguments);
2397
- };
2398
- }());
2399
- secondCall.on(_types2.CALL_EVENT_KEYS.DISCONNECT, /*#__PURE__*/function () {
2400
- var _ref53 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee52(correlationId) {
2401
- return _regenerator.default.wrap(function _callee52$(_context52) {
2402
- while (1) switch (_context52.prev = _context52.next) {
2403
- case 0:
2404
- expect(correlationId).toStrictEqual(secondCall.getCorrelationId());
2405
- case 1:
2406
- case "end":
2407
- return _context52.stop();
2408
- }
2409
- }, _callee52);
2410
- }));
2411
- return function (_x12) {
2412
- return _ref53.apply(this, arguments);
2413
- };
2414
- }());
2415
- _context53.next = 10;
2416
- return call.completeTransfer(_types5.TransferType.CONSULT, secondCall.getCallId(), undefined);
2417
- case 10:
2418
- _context53.next = 12;
2419
- return (0, _testUtil.flushPromises)(2);
2420
- case 12:
2421
- expect(requestSpy).toBeCalled();
2422
- expect(metricSpy).toHaveBeenCalledWith(_types4.METRIC_EVENT.CALL, _types4.TRANSFER_ACTION.CONSULT, _types4.METRIC_TYPE.BEHAVIORAL, call.getCallId(), call.getCorrelationId(), undefined);
2423
- call.sendCallStateMachineEvt({
2424
- type: 'E_RECV_CALL_DISCONNECT'
2425
- });
2426
- secondCall.sendCallStateMachineEvt({
2427
- type: 'E_RECV_CALL_DISCONNECT'
2428
- });
2429
-
2430
- /* We should return back to S_RECV_CALL_DISCONNECT state for both the calls */
2431
- expect(call['callStateMachine'].state.value).toStrictEqual('S_RECV_CALL_DISCONNECT');
2432
- expect(secondCall['callStateMachine'].state.value).toStrictEqual('S_RECV_CALL_DISCONNECT');
2433
- expect(handleErrorSpy).not.toBeCalled();
2434
- expect(infoSpy).toHaveBeenCalledWith("Initiating Consult transfer between : ".concat(call.getCallId(), " and ").concat(secondCall.getCallId()), transferLoggingContext);
2435
- expect(warnSpy).not.toHaveBeenCalledWith("Consult Transfer failed for correlationId ".concat(call.getCorrelationId()), transferLoggingContext);
2436
- case 21:
2437
- case "end":
2438
- return _context53.stop();
2439
- }
2440
- }, _callee53);
2441
- })));
2442
- it('Handle successful blind transfer case ', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee55() {
2443
- var responsePayload, requestSpy, warnSpy, infoSpy, metricSpy;
2444
- return _regenerator.default.wrap(function _callee55$(_context55) {
2445
- while (1) switch (_context55.prev = _context55.next) {
2446
- case 0:
2447
- expect.assertions(7);
2448
- responsePayload = {
2449
- statusCode: 200,
2450
- body: mockResponseBody
2451
- };
2452
- requestSpy = jest.spyOn(webex, 'request').mockResolvedValue(responsePayload);
2453
- warnSpy = jest.spyOn(_Logger.default, 'warn');
2454
- infoSpy = jest.spyOn(_Logger.default, 'info');
2455
- metricSpy = jest.spyOn(call['metricManager'], 'submitCallMetric');
2456
- call.on(_types2.CALL_EVENT_KEYS.DISCONNECT, /*#__PURE__*/function () {
2457
- var _ref55 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee54(correlationId) {
2458
- return _regenerator.default.wrap(function _callee54$(_context54) {
2459
- while (1) switch (_context54.prev = _context54.next) {
2460
- case 0:
2461
- expect(correlationId).toStrictEqual(call.getCorrelationId());
2462
- case 1:
2463
- case "end":
2464
- return _context54.stop();
2465
- }
2466
- }, _callee54);
2467
- }));
2468
- return function (_x13) {
2469
- return _ref55.apply(this, arguments);
2470
- };
2471
- }());
2472
- _context55.next = 9;
2473
- return call.completeTransfer(_types5.TransferType.BLIND, undefined, transfereeNumber);
2474
- case 9:
2475
- _context55.next = 11;
2476
- return (0, _testUtil.flushPromises)(2);
2477
- case 11:
2478
- expect(requestSpy).toBeCalled();
2479
- expect(metricSpy).toHaveBeenCalledWith(_types4.METRIC_EVENT.CALL, _types4.TRANSFER_ACTION.BLIND, _types4.METRIC_TYPE.BEHAVIORAL, call.getCallId(), call.getCorrelationId(), undefined);
2480
- call.sendCallStateMachineEvt({
2481
- type: 'E_RECV_CALL_DISCONNECT'
2482
- });
2483
-
2484
- /* We should return back to S_RECV_CALL_DISCONNECT state */
2485
- expect(call['callStateMachine'].state.value).toStrictEqual('S_RECV_CALL_DISCONNECT');
2486
- expect(handleErrorSpy).not.toBeCalled();
2487
- expect(infoSpy).toHaveBeenCalledWith("Initiating Blind transfer with : ".concat(transfereeNumber), transferLoggingContext);
2488
- expect(warnSpy).not.toHaveBeenCalledWith("Blind Transfer failed for correlationId ".concat(call.getCorrelationId()), transferLoggingContext);
2489
- case 18:
2490
- case "end":
2491
- return _context55.stop();
2492
- }
2493
- }, _callee55);
2494
- })));
2495
- it('Handle unsuccessful blind transfer case', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee56() {
2496
- var responsePayload, emitSpy, requestSpy, warnSpy, metricSpy;
2497
- return _regenerator.default.wrap(function _callee56$(_context56) {
2498
- while (1) switch (_context56.prev = _context56.next) {
2499
- case 0:
2500
- responsePayload = {
2501
- statusCode: 403,
2502
- body: mockResponseBody
2503
- };
2504
- emitSpy = jest.spyOn(call, 'emit');
2505
- requestSpy = jest.spyOn(webex, 'request').mockRejectedValue(responsePayload);
2506
- warnSpy = jest.spyOn(_Logger.default, 'warn');
2507
- metricSpy = jest.spyOn(call['metricManager'], 'submitCallMetric');
2508
- _context56.next = 7;
2509
- return call.completeTransfer(_types5.TransferType.BLIND, undefined, transfereeNumber);
2510
- case 7:
2511
- _context56.next = 9;
2512
- return (0, _testUtil.flushPromises)(1);
2513
- case 9:
2514
- expect(requestSpy).toBeCalled();
2515
- /* We should be in CALL_ESTABLISHED state */
2516
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2517
- expect(call['held']).toBe(true);
2518
- expect(handleErrorSpy).toHaveBeenCalledWith(expect.anything(), _types.ERROR_LAYER.CALL_CONTROL,
2519
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
2520
- expect.anything(), call.getCorrelationId(), responsePayload, 'completeTransfer', 'call');
2521
- /* check whether error event is being emitted by sdk */
2522
- expect(emitSpy).toBeCalledOnceWith(_types2.CALL_EVENT_KEYS.TRANSFER_ERROR, expect.any(_Errors.CallError));
2523
- expect(warnSpy).toHaveBeenCalledWith("Blind Transfer failed for correlationId ".concat(call.getCorrelationId()), transferLoggingContext);
2524
- expect(metricSpy).toHaveBeenCalledWith(_types4.METRIC_EVENT.CALL_ERROR, _types4.TRANSFER_ACTION.BLIND, _types4.METRIC_TYPE.BEHAVIORAL, call.getCallId(), call.getCorrelationId(), expect.any(_Errors.CallError));
2525
- case 16:
2526
- case "end":
2527
- return _context56.stop();
2528
- }
2529
- }, _callee56);
2530
- })));
2531
- it('Handle unsuccessful consult transfer case', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee57() {
2532
- var responsePayload, emitSpy, requestSpy, warnSpy, metricSpy;
2533
- return _regenerator.default.wrap(function _callee57$(_context57) {
2534
- while (1) switch (_context57.prev = _context57.next) {
2535
- case 0:
2536
- responsePayload = {
2537
- statusCode: 403,
2538
- body: mockResponseBody
2539
- };
2540
- emitSpy = jest.spyOn(call, 'emit');
2541
- requestSpy = jest.spyOn(webex, 'request').mockRejectedValue(responsePayload);
2542
- warnSpy = jest.spyOn(_Logger.default, 'warn');
2543
- metricSpy = jest.spyOn(call['metricManager'], 'submitCallMetric');
2544
- _context57.next = 7;
2545
- return call.completeTransfer(_types5.TransferType.CONSULT, secondCall.getCallId(), undefined);
2546
- case 7:
2547
- _context57.next = 9;
2548
- return (0, _testUtil.flushPromises)(2);
2549
- case 9:
2550
- expect(requestSpy).toBeCalled();
2551
- /* We should be in CALL_ESTABLISHED state */
2552
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2553
- expect(call['held']).toBe(true);
2554
- expect(secondCall['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2555
- expect(handleErrorSpy).toHaveBeenCalledWith(expect.anything(), _types.ERROR_LAYER.CALL_CONTROL,
2556
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
2557
- expect.anything(), call.getCorrelationId(), responsePayload, 'completeTransfer', 'call');
2558
- /* check whether error event is being emitted by sdk */
2559
- expect(emitSpy).toHaveBeenCalledWith(_types2.CALL_EVENT_KEYS.TRANSFER_ERROR, expect.any(_Errors.CallError));
2560
- expect(warnSpy).toHaveBeenCalledWith("Consult Transfer failed for correlationId ".concat(call.getCorrelationId()), transferLoggingContext);
2561
- expect(metricSpy).toHaveBeenCalledWith(_types4.METRIC_EVENT.CALL_ERROR, _types4.TRANSFER_ACTION.CONSULT, _types4.METRIC_TYPE.BEHAVIORAL, call.getCallId(), call.getCorrelationId(), expect.any(_Errors.CallError));
2562
- case 17:
2563
- case "end":
2564
- return _context57.stop();
2565
- }
2566
- }, _callee57);
2567
- })));
2568
- it('Handle blind transfer with undefined transferTarget', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee58() {
2569
- var requestSpy, warnSpy;
2570
- return _regenerator.default.wrap(function _callee58$(_context58) {
2571
- while (1) switch (_context58.prev = _context58.next) {
2572
- case 0:
2573
- requestSpy = jest.spyOn(webex, 'request');
2574
- warnSpy = jest.spyOn(_Logger.default, 'warn');
2575
- _context58.next = 4;
2576
- return call.completeTransfer(_types5.TransferType.BLIND, undefined, undefined);
2577
- case 4:
2578
- /* We should be in CALL_ESTABLISHED state */
2579
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2580
- expect(secondCall['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2581
- expect(handleErrorSpy).not.toBeCalled();
2582
- expect(requestSpy).not.toBeCalled();
2583
- expect(warnSpy).toBeCalledOnceWith("Invalid information received, transfer failed for correlationId: ".concat(call.getCorrelationId()), transferLoggingContext);
2584
- case 9:
2585
- case "end":
2586
- return _context58.stop();
2587
- }
2588
- }, _callee58);
2589
- })));
2590
- it('Handle consult transfer with undefined transferCallId', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee59() {
2591
- var requestSpy, warnSpy;
2592
- return _regenerator.default.wrap(function _callee59$(_context59) {
2593
- while (1) switch (_context59.prev = _context59.next) {
2594
- case 0:
2595
- requestSpy = jest.spyOn(webex, 'request');
2596
- warnSpy = jest.spyOn(_Logger.default, 'warn');
2597
- _context59.next = 4;
2598
- return call.completeTransfer(_types5.TransferType.CONSULT, undefined, undefined);
2599
- case 4:
2600
- /* We should be in CALL_ESTABLISHED state */
2601
- expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2602
- expect(secondCall['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');
2603
- expect(handleErrorSpy).not.toBeCalled();
2604
- expect(requestSpy).not.toBeCalled();
2605
- expect(warnSpy).toBeCalledOnceWith("Invalid information received, transfer failed for correlationId: ".concat(call.getCorrelationId()), transferLoggingContext);
2606
- case 9:
2607
- case "end":
2608
- return _context59.stop();
2609
- }
2610
- }, _callee59);
2611
- })));
2612
- });
2613
- });
2614
- //# sourceMappingURL=call.test.js.map