@webex/calling 3.8.0 → 3.8.1-next.2

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 (166) hide show
  1. package/dist/CallHistory/CallHistory.js +100 -63
  2. package/dist/CallHistory/CallHistory.js.map +1 -1
  3. package/dist/CallHistory/CallHistory.test.js +115 -19
  4. package/dist/CallHistory/CallHistory.test.js.map +1 -1
  5. package/dist/CallHistory/constants.js +9 -1
  6. package/dist/CallHistory/constants.js.map +1 -1
  7. package/dist/CallSettings/CallSettings.js +46 -13
  8. package/dist/CallSettings/CallSettings.js.map +1 -1
  9. package/dist/CallSettings/UcmBackendConnector.js +62 -18
  10. package/dist/CallSettings/UcmBackendConnector.js.map +1 -1
  11. package/dist/CallSettings/UcmBackendConnector.test.js +70 -7
  12. package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -1
  13. package/dist/CallSettings/WxCallBackendConnector.js +153 -103
  14. package/dist/CallSettings/WxCallBackendConnector.js.map +1 -1
  15. package/dist/CallSettings/WxCallBackendConnector.test.js +52 -15
  16. package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -1
  17. package/dist/CallSettings/constants.js +15 -1
  18. package/dist/CallSettings/constants.js.map +1 -1
  19. package/dist/CallingClient/CallingClient.js +220 -159
  20. package/dist/CallingClient/CallingClient.js.map +1 -1
  21. package/dist/CallingClient/CallingClient.test.js +53 -24
  22. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  23. package/dist/CallingClient/calling/call.js +251 -189
  24. package/dist/CallingClient/calling/call.js.map +1 -1
  25. package/dist/CallingClient/calling/call.test.js +96 -41
  26. package/dist/CallingClient/calling/call.test.js.map +1 -1
  27. package/dist/CallingClient/calling/callManager.js +73 -48
  28. package/dist/CallingClient/calling/callManager.js.map +1 -1
  29. package/dist/CallingClient/calling/callManager.test.js +96 -37
  30. package/dist/CallingClient/calling/callManager.test.js.map +1 -1
  31. package/dist/CallingClient/constants.js +105 -3
  32. package/dist/CallingClient/constants.js.map +1 -1
  33. package/dist/CallingClient/line/index.js +47 -18
  34. package/dist/CallingClient/line/index.js.map +1 -1
  35. package/dist/CallingClient/line/line.test.js +2 -2
  36. package/dist/CallingClient/line/line.test.js.map +1 -1
  37. package/dist/CallingClient/registration/register.js +359 -297
  38. package/dist/CallingClient/registration/register.js.map +1 -1
  39. package/dist/CallingClient/registration/register.test.js +561 -163
  40. package/dist/CallingClient/registration/register.test.js.map +1 -1
  41. package/dist/CallingClient/registration/types.js.map +1 -1
  42. package/dist/Contacts/ContactsClient.js +156 -102
  43. package/dist/Contacts/ContactsClient.js.map +1 -1
  44. package/dist/Contacts/ContactsClient.test.js +197 -49
  45. package/dist/Contacts/ContactsClient.test.js.map +1 -1
  46. package/dist/Contacts/constants.js +11 -1
  47. package/dist/Contacts/constants.js.map +1 -1
  48. package/dist/Errors/types.js +2 -0
  49. package/dist/Errors/types.js.map +1 -1
  50. package/dist/Events/impl/index.js +1 -1
  51. package/dist/Events/impl/index.js.map +1 -1
  52. package/dist/Metrics/index.js +102 -41
  53. package/dist/Metrics/index.js.map +1 -1
  54. package/dist/Metrics/index.test.js +10 -4
  55. package/dist/Metrics/index.test.js.map +1 -1
  56. package/dist/Metrics/types.js +4 -1
  57. package/dist/Metrics/types.js.map +1 -1
  58. package/dist/SDKConnector/types.js.map +1 -1
  59. package/dist/Voicemail/BroadworksBackendConnector.js +154 -91
  60. package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -1
  61. package/dist/Voicemail/BroadworksBackendConnector.test.js +99 -19
  62. package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -1
  63. package/dist/Voicemail/UcmBackendConnector.js +105 -54
  64. package/dist/Voicemail/UcmBackendConnector.js.map +1 -1
  65. package/dist/Voicemail/UcmBackendConnector.test.js +127 -17
  66. package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -1
  67. package/dist/Voicemail/Voicemail.js +198 -79
  68. package/dist/Voicemail/Voicemail.js.map +1 -1
  69. package/dist/Voicemail/Voicemail.test.js +188 -23
  70. package/dist/Voicemail/Voicemail.test.js.map +1 -1
  71. package/dist/Voicemail/WxCallBackendConnector.js +277 -161
  72. package/dist/Voicemail/WxCallBackendConnector.js.map +1 -1
  73. package/dist/Voicemail/WxCallBackendConnector.test.js +268 -10
  74. package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -1
  75. package/dist/Voicemail/constants.js +25 -1
  76. package/dist/Voicemail/constants.js.map +1 -1
  77. package/dist/Voicemail/types.js.map +1 -1
  78. package/dist/common/Utils.js +168 -104
  79. package/dist/common/Utils.js.map +1 -1
  80. package/dist/common/Utils.test.js +199 -35
  81. package/dist/common/Utils.test.js.map +1 -1
  82. package/dist/common/constants.js +2 -1
  83. package/dist/common/constants.js.map +1 -1
  84. package/dist/common/testUtil.js +3 -0
  85. package/dist/common/testUtil.js.map +1 -1
  86. package/dist/common/types.js.map +1 -1
  87. package/dist/index.js +12 -0
  88. package/dist/index.js.map +1 -1
  89. package/dist/module/CallHistory/CallHistory.js +32 -13
  90. package/dist/module/CallHistory/constants.js +6 -0
  91. package/dist/module/CallSettings/CallSettings.js +36 -3
  92. package/dist/module/CallSettings/UcmBackendConnector.js +50 -5
  93. package/dist/module/CallSettings/WxCallBackendConnector.js +54 -18
  94. package/dist/module/CallSettings/constants.js +12 -0
  95. package/dist/module/CallingClient/CallingClient.js +54 -16
  96. package/dist/module/CallingClient/calling/call.js +172 -121
  97. package/dist/module/CallingClient/calling/callManager.js +51 -26
  98. package/dist/module/CallingClient/constants.js +102 -2
  99. package/dist/module/CallingClient/line/index.js +37 -8
  100. package/dist/module/CallingClient/registration/register.js +103 -64
  101. package/dist/module/Contacts/ContactsClient.js +65 -21
  102. package/dist/module/Contacts/constants.js +10 -0
  103. package/dist/module/Errors/types.js +2 -0
  104. package/dist/module/Events/impl/index.js +1 -1
  105. package/dist/module/Metrics/index.js +57 -2
  106. package/dist/module/Metrics/types.js +3 -0
  107. package/dist/module/Voicemail/BroadworksBackendConnector.js +66 -17
  108. package/dist/module/Voicemail/UcmBackendConnector.js +51 -11
  109. package/dist/module/Voicemail/Voicemail.js +109 -9
  110. package/dist/module/Voicemail/WxCallBackendConnector.js +67 -18
  111. package/dist/module/Voicemail/constants.js +21 -0
  112. package/dist/module/common/Utils.js +51 -12
  113. package/dist/module/common/constants.js +1 -0
  114. package/dist/module/common/testUtil.js +3 -0
  115. package/dist/module/index.js +1 -0
  116. package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
  117. package/dist/types/CallHistory/constants.d.ts +6 -0
  118. package/dist/types/CallHistory/constants.d.ts.map +1 -1
  119. package/dist/types/CallSettings/CallSettings.d.ts.map +1 -1
  120. package/dist/types/CallSettings/UcmBackendConnector.d.ts.map +1 -1
  121. package/dist/types/CallSettings/WxCallBackendConnector.d.ts.map +1 -1
  122. package/dist/types/CallSettings/constants.d.ts +12 -0
  123. package/dist/types/CallSettings/constants.d.ts.map +1 -1
  124. package/dist/types/CallingClient/CallingClient.d.ts +2 -3
  125. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  126. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  127. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  128. package/dist/types/CallingClient/constants.d.ts +102 -2
  129. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  130. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  131. package/dist/types/CallingClient/registration/register.d.ts +3 -1
  132. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  133. package/dist/types/CallingClient/registration/types.d.ts +1 -0
  134. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  135. package/dist/types/Contacts/ContactsClient.d.ts.map +1 -1
  136. package/dist/types/Contacts/constants.d.ts +10 -0
  137. package/dist/types/Contacts/constants.d.ts.map +1 -1
  138. package/dist/types/Errors/types.d.ts +2 -0
  139. package/dist/types/Errors/types.d.ts.map +1 -1
  140. package/dist/types/Metrics/index.d.ts +1 -1
  141. package/dist/types/Metrics/index.d.ts.map +1 -1
  142. package/dist/types/Metrics/types.d.ts +7 -2
  143. package/dist/types/Metrics/types.d.ts.map +1 -1
  144. package/dist/types/SDKConnector/types.d.ts +11 -2
  145. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  146. package/dist/types/Voicemail/BroadworksBackendConnector.d.ts.map +1 -1
  147. package/dist/types/Voicemail/UcmBackendConnector.d.ts.map +1 -1
  148. package/dist/types/Voicemail/Voicemail.d.ts +1 -1
  149. package/dist/types/Voicemail/Voicemail.d.ts.map +1 -1
  150. package/dist/types/Voicemail/WxCallBackendConnector.d.ts +3 -1
  151. package/dist/types/Voicemail/WxCallBackendConnector.d.ts.map +1 -1
  152. package/dist/types/Voicemail/constants.d.ts +21 -0
  153. package/dist/types/Voicemail/constants.d.ts.map +1 -1
  154. package/dist/types/Voicemail/types.d.ts +1 -1
  155. package/dist/types/Voicemail/types.d.ts.map +1 -1
  156. package/dist/types/common/Utils.d.ts +4 -4
  157. package/dist/types/common/Utils.d.ts.map +1 -1
  158. package/dist/types/common/constants.d.ts +1 -0
  159. package/dist/types/common/constants.d.ts.map +1 -1
  160. package/dist/types/common/testUtil.d.ts +3 -0
  161. package/dist/types/common/testUtil.d.ts.map +1 -1
  162. package/dist/types/common/types.d.ts +12 -0
  163. package/dist/types/common/types.d.ts.map +1 -1
  164. package/dist/types/index.d.ts +2 -0
  165. package/dist/types/index.d.ts.map +1 -1
  166. package/package.json +4 -3
@@ -1,12 +1,17 @@
1
1
  "use strict";
2
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");
3
7
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
4
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
5
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
6
10
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
7
11
  var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
8
12
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
9
- var _Utils = require("../../common/Utils");
13
+ var _Utils = _interopRequireWildcard(require("../../common/Utils"));
14
+ var utils = _Utils;
10
15
  var _types = require("../../common/types");
11
16
  var _testUtil = require("../../common/testUtil");
12
17
  var _callManager = require("./callManager");
@@ -14,6 +19,8 @@ var _types2 = require("./types");
14
19
  var _call = require("./call");
15
20
  var _Logger = _interopRequireDefault(require("../../Logger"));
16
21
  var _types3 = require("../../Events/types");
22
+ function _getRequireWildcardCache(e) { if ("function" != typeof _WeakMap) return null; var r = new _WeakMap(), t = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
23
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? _Object$getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? _Object$defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
24
  /* eslint-disable @typescript-eslint/no-explicit-any */
18
25
  /* eslint-disable dot-notation */
19
26
 
@@ -147,7 +154,7 @@ describe('Call Manager Tests with respect to calls', function () {
147
154
  expect(callManager).toMatchObject(callManagerNew);
148
155
  });
149
156
  it('create a call using call manager', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
150
- var call;
157
+ var logSpy, call;
151
158
  return _regenerator.default.wrap(function _callee$(_context) {
152
159
  while (1) switch (_context.prev = _context.next) {
153
160
  case 0:
@@ -165,16 +172,18 @@ describe('Call Manager Tests with respect to calls', function () {
165
172
  }
166
173
  }
167
174
  });
175
+ logSpy = jest.spyOn(_Logger.default, 'log');
168
176
  expect(callManager).toBeTruthy();
169
- _context.next = 5;
177
+ _context.next = 6;
170
178
  return callManager.createCall(_types.CallDirection.OUTBOUND, deviceId, mockLineId, dest);
171
- case 5:
179
+ case 6:
172
180
  call = _context.sent;
173
181
  call.setCallId('8a67806f-fc4d-446b-a131-31e71ea5b020');
174
182
  expect(call).toBeTruthy();
175
183
  expect(call.getCallId()).toStrictEqual('8a67806f-fc4d-446b-a131-31e71ea5b020');
176
184
  expect(call.lineId).toStrictEqual(mockLineId);
177
- case 10:
185
+ expect(logSpy).toHaveBeenCalledWith('Creating call object', {});
186
+ case 12:
178
187
  case "end":
179
188
  return _context.stop();
180
189
  }
@@ -297,7 +306,8 @@ describe('Call Manager Tests with respect to calls', function () {
297
306
  }, _callee5);
298
307
  })));
299
308
  it('Accept an incoming call but Outgoing patch request fails', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
300
- var warnSpy;
309
+ var _mediaEvent$data$mess, _mediaEvent$data$mess2, _mediaEvent$data$mess3;
310
+ var errorSpy, logSpy, uploadLogsSpy;
301
311
  return _regenerator.default.wrap(function _callee6$(_context6) {
302
312
  while (1) switch (_context6.prev = _context6.next) {
303
313
  case 0:
@@ -305,27 +315,38 @@ describe('Call Manager Tests with respect to calls', function () {
305
315
  /* Intentionally failing the Patch with 503 */
306
316
  dummyResponse.statusCode = 503;
307
317
  patchMock.mockRejectedValue(dummyResponse);
308
- warnSpy = jest.spyOn(_Logger.default, 'warn');
309
- _context6.next = 6;
310
- return callManager['dequeueWsEvents'](mediaEvent);
311
- case 6:
318
+ errorSpy = jest.spyOn(_Logger.default, 'error');
319
+ logSpy = jest.spyOn(_Logger.default, 'log');
320
+ uploadLogsSpy = jest.spyOn(utils, 'uploadLogs').mockResolvedValue();
312
321
  _context6.next = 8;
313
- return (0, _Utils.waitForMsecs)(50);
322
+ return callManager['dequeueWsEvents'](mediaEvent);
314
323
  case 8:
315
324
  _context6.next = 10;
316
- return callManager['dequeueWsEvents'](setupEvent);
325
+ return (0, _Utils.waitForMsecs)(50);
317
326
  case 10:
318
327
  _context6.next = 12;
319
- return (0, _Utils.waitForMsecs)(50);
328
+ return callManager['dequeueWsEvents'](setupEvent);
320
329
  case 12:
330
+ _context6.next = 14;
331
+ return (0, _Utils.waitForMsecs)(50);
332
+ case 14:
321
333
  expect(patchMock).toHaveBeenCalledWith(_types2.MobiusCallState.ALERTING);
322
- expect(warnSpy).toHaveBeenCalledWith('Failed to signal call progression', {
334
+ expect(errorSpy).toHaveBeenCalledWith(Error("Failed to signal call progression: ".concat(dummyResponse)), {
323
335
  file: 'call',
324
336
  method: 'handleOutgoingCallAlerting'
325
337
  });
338
+ expect(logSpy).toHaveBeenCalledWith("Received call media mobiusEvent for call: ".concat(mediaEvent.data.correlationId), expect.objectContaining({
339
+ file: 'callManager',
340
+ method: 'dequeueWsEvents'
341
+ }));
342
+ expect(logSpy).toHaveBeenCalledWith("ROAP message from mobius with type: ".concat((_mediaEvent$data$mess = mediaEvent.data.message) === null || _mediaEvent$data$mess === void 0 ? void 0 : _mediaEvent$data$mess.messageType, ", seq: ").concat((_mediaEvent$data$mess2 = mediaEvent.data.message) === null || _mediaEvent$data$mess2 === void 0 ? void 0 : _mediaEvent$data$mess2.seq, " , version: ").concat((_mediaEvent$data$mess3 = mediaEvent.data.message) === null || _mediaEvent$data$mess3 === void 0 ? void 0 : _mediaEvent$data$mess3.version), expect.objectContaining({
343
+ file: 'callManager',
344
+ method: 'dequeueWsEvents'
345
+ }));
346
+ expect(uploadLogsSpy).toHaveBeenCalled();
326
347
  /* No calls should have been added as call progress failed */
327
348
  expect((0, _keys.default)(callManager.getActiveCalls()).length).toBe(0);
328
- case 15:
349
+ case 20:
329
350
  case "end":
330
351
  return _context6.stop();
331
352
  }
@@ -474,6 +495,7 @@ describe('Coverage for Events listener', function () {
474
495
  }
475
496
  });
476
497
  beforeEach(function () {
498
+ jest.clearAllMocks();
477
499
  callManager = (0, _callManager.getCallManager)(webex, defaultServiceIndicator);
478
500
  callManager.removeAllListeners(_types3.LINE_EVENT_KEYS.INCOMING_CALL);
479
501
  call = callManager.createCall(_types.CallDirection.OUTBOUND, deviceId, mockLineId, dest);
@@ -489,15 +511,16 @@ describe('Coverage for Events listener', function () {
489
511
  while (1) switch (_context9.prev = _context9.next) {
490
512
  case 0:
491
513
  mediaEvent.data.callId = dummyCallId;
492
- _context9.next = 3;
514
+ jest.clearAllMocks();
515
+ _context9.next = 4;
493
516
  return callManager['dequeueWsEvents'](mediaEvent);
494
- case 3:
517
+ case 4:
495
518
  eventData = {
496
519
  data: mediaEvent.data.message,
497
520
  type: 'E_RECV_ROAP_OFFER'
498
521
  };
499
- expect(funcSpy).toHaveBeenLastCalledWith(eventData);
500
- case 5:
522
+ expect(funcSpy).toHaveBeenCalledWith(eventData);
523
+ case 6:
501
524
  case "end":
502
525
  return _context9.stop();
503
526
  }
@@ -509,15 +532,16 @@ describe('Coverage for Events listener', function () {
509
532
  while (1) switch (_context10.prev = _context10.next) {
510
533
  case 0:
511
534
  mediaEvent.data.message.messageType = 'ANSWER';
512
- _context10.next = 3;
535
+ jest.clearAllMocks();
536
+ _context10.next = 4;
513
537
  return callManager['dequeueWsEvents'](mediaEvent);
514
- case 3:
538
+ case 4:
515
539
  eventData = {
516
540
  data: mediaEvent.data.message,
517
541
  type: 'E_RECV_ROAP_ANSWER'
518
542
  };
519
543
  expect(funcSpy).toHaveBeenCalledWith(eventData);
520
- case 5:
544
+ case 6:
521
545
  case "end":
522
546
  return _context10.stop();
523
547
  }
@@ -529,15 +553,16 @@ describe('Coverage for Events listener', function () {
529
553
  while (1) switch (_context11.prev = _context11.next) {
530
554
  case 0:
531
555
  mediaEvent.data.message.messageType = 'OFFER_REQUEST';
532
- _context11.next = 3;
556
+ jest.clearAllMocks();
557
+ _context11.next = 4;
533
558
  return callManager['dequeueWsEvents'](mediaEvent);
534
- case 3:
559
+ case 4:
535
560
  eventData = {
536
561
  data: mediaEvent.data.message,
537
562
  type: 'E_RECV_ROAP_OFFER_REQUEST'
538
563
  };
539
564
  expect(funcSpy).toHaveBeenCalledWith(eventData);
540
- case 5:
565
+ case 6:
541
566
  case "end":
542
567
  return _context11.stop();
543
568
  }
@@ -549,9 +574,10 @@ describe('Coverage for Events listener', function () {
549
574
  while (1) switch (_context12.prev = _context12.next) {
550
575
  case 0:
551
576
  mediaEvent.data.message.messageType = 'OK';
552
- _context12.next = 3;
577
+ jest.clearAllMocks();
578
+ _context12.next = 4;
553
579
  return callManager['dequeueWsEvents'](mediaEvent);
554
- case 3:
580
+ case 4:
555
581
  mediaOK = {
556
582
  received: true,
557
583
  message: mediaEvent.data.message
@@ -561,43 +587,75 @@ describe('Coverage for Events listener', function () {
561
587
  type: 'E_ROAP_OK'
562
588
  };
563
589
  expect(funcSpy).toHaveBeenCalledWith(eventData);
564
- case 6:
590
+ case 7:
565
591
  case "end":
566
592
  return _context12.stop();
567
593
  }
568
594
  }, _callee12);
569
595
  })));
570
596
  it('When Error is Received', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13() {
597
+ var _mediaEvent$data$mess4, _mediaEvent$data$mess5, _mediaEvent$data$mess6, _mediaEvent$data$mess7;
598
+ var infoSpy;
571
599
  return _regenerator.default.wrap(function _callee13$(_context13) {
572
600
  while (1) switch (_context13.prev = _context13.next) {
573
601
  case 0:
574
602
  mediaEvent.data.message.messageType = 'ERROR';
575
- _context13.next = 3;
603
+ jest.clearAllMocks();
604
+ infoSpy = jest.spyOn(_Logger.default, 'info');
605
+ _context13.next = 5;
576
606
  return callManager['dequeueWsEvents'](mediaEvent);
577
- case 3:
607
+ case 5:
608
+ expect(logSpy).toHaveBeenCalledWith("Received call media mobiusEvent for call: ".concat(mediaEvent.data.correlationId), {
609
+ file: 'callManager',
610
+ method: 'dequeueWsEvents'
611
+ });
612
+ expect(logSpy).toHaveBeenCalledWith("ROAP message from mobius with type: ".concat((_mediaEvent$data$mess4 = mediaEvent.data.message) === null || _mediaEvent$data$mess4 === void 0 ? void 0 : _mediaEvent$data$mess4.messageType, ", seq: ").concat((_mediaEvent$data$mess5 = mediaEvent.data.message) === null || _mediaEvent$data$mess5 === void 0 ? void 0 : _mediaEvent$data$mess5.seq, " , version: ").concat((_mediaEvent$data$mess6 = mediaEvent.data.message) === null || _mediaEvent$data$mess6 === void 0 ? void 0 : _mediaEvent$data$mess6.version), {
613
+ file: 'callManager',
614
+ method: 'dequeueWsEvents'
615
+ });
578
616
  expect(logSpy).toHaveBeenCalledWith('Received Error...', {
579
617
  file: 'callManager',
580
618
  method: 'dequeueWsEvents'
581
619
  });
582
- case 4:
620
+ expect(infoSpy).toHaveBeenCalledWith("SDP from mobius ".concat((_mediaEvent$data$mess7 = mediaEvent.data.message) === null || _mediaEvent$data$mess7 === void 0 ? void 0 : _mediaEvent$data$mess7.sdp), {
621
+ file: 'callManager',
622
+ method: 'dequeueWsEvents'
623
+ });
624
+ case 9:
583
625
  case "end":
584
626
  return _context13.stop();
585
627
  }
586
628
  }, _callee13);
587
629
  })));
588
630
  it('When Unknown event is Received', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14() {
631
+ var _mediaEvent$data$mess8, _mediaEvent$data$mess9, _mediaEvent$data$mess10, _mediaEvent$data$mess11;
632
+ var infoSpy;
589
633
  return _regenerator.default.wrap(function _callee14$(_context14) {
590
634
  while (1) switch (_context14.prev = _context14.next) {
591
635
  case 0:
592
636
  mediaEvent.data.message.messageType = 'UNKNOWN';
593
- _context14.next = 3;
637
+ jest.clearAllMocks();
638
+ infoSpy = jest.spyOn(_Logger.default, 'info');
639
+ _context14.next = 5;
594
640
  return callManager['dequeueWsEvents'](mediaEvent);
595
- case 3:
641
+ case 5:
642
+ expect(logSpy).toHaveBeenCalledWith("Received call media mobiusEvent for call: ".concat(mediaEvent.data.correlationId), {
643
+ file: 'callManager',
644
+ method: 'dequeueWsEvents'
645
+ });
646
+ expect(logSpy).toHaveBeenCalledWith("ROAP message from mobius with type: ".concat((_mediaEvent$data$mess8 = mediaEvent.data.message) === null || _mediaEvent$data$mess8 === void 0 ? void 0 : _mediaEvent$data$mess8.messageType, ", seq: ").concat((_mediaEvent$data$mess9 = mediaEvent.data.message) === null || _mediaEvent$data$mess9 === void 0 ? void 0 : _mediaEvent$data$mess9.seq, " , version: ").concat((_mediaEvent$data$mess10 = mediaEvent.data.message) === null || _mediaEvent$data$mess10 === void 0 ? void 0 : _mediaEvent$data$mess10.version), {
647
+ file: 'callManager',
648
+ method: 'dequeueWsEvents'
649
+ });
596
650
  expect(logSpy).toHaveBeenCalledWith('Unknown Media mobiusEvent: UNKNOWN ', {
597
651
  file: 'callManager',
598
652
  method: 'dequeueWsEvents'
599
653
  });
600
- case 4:
654
+ expect(infoSpy).toHaveBeenCalledWith("SDP from mobius ".concat((_mediaEvent$data$mess11 = mediaEvent.data.message) === null || _mediaEvent$data$mess11 === void 0 ? void 0 : _mediaEvent$data$mess11.sdp), {
655
+ file: 'callManager',
656
+ method: 'dequeueWsEvents'
657
+ });
658
+ case 9:
601
659
  case "end":
602
660
  return _context14.stop();
603
661
  }
@@ -666,14 +724,15 @@ describe('Coverage for Events listener', function () {
666
724
  while (1) switch (_context18.prev = _context18.next) {
667
725
  case 0:
668
726
  setupEvent.data.eventType = 'mobius.callunknown';
669
- _context18.next = 3;
727
+ jest.clearAllMocks();
728
+ _context18.next = 4;
670
729
  return callManager['dequeueWsEvents'](setupEvent);
671
- case 3:
730
+ case 4:
672
731
  expect(logSpy).toHaveBeenCalledWith('Unknown Call Event mobiusEvent: mobius.callunknown', {
673
732
  file: 'callManager',
674
733
  method: 'dequeueWsEvents'
675
734
  });
676
- case 4:
735
+ case 5:
677
736
  case "end":
678
737
  return _context18.stop();
679
738
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_Utils","require","_types","_testUtil","_callManager","_types2","_call","_Logger","_interopRequireDefault","_types3","webex","getTestUtilsWebex","defaultServiceIndicator","ServiceIndicator","CALLING","mediaEvent","id","data","message","messageType","sdp","seq","version","callId","callUrl","deviceId","correlationId","eventType","timestamp","trackingId","alertType","headers","sequenceNumber","filterMessage","setupEvent","callerId","from","broadworksCorrelationInfo","disconnectEvent","causecode","cause","dest","type","CallType","URI","address","successResponseBody","statusCode","body","device","callData","callState","MobiusCallState","PROCEEDING","mockLineId","mockLine","lineId","describe","dummyResponse","patchMock","jest","spyOn","Call","prototype","setDisconnectReasonMock","deleteCallMock","initMediaConnectionMock","mediaRoapEventsListenerMock","mediaTrackListenerMock","postMediaMock","mockResolvedValue","mockReturnValue","callManager","beforeEach","getCallManager","removeAllListeners","LINE_EVENT_KEYS","INCOMING_CALL","expect","_keys","default","getActiveCalls","length","toBe","afterEach","calls","_values","forEach","call","end","it","toBeTruthy","callManagerNew","toMatchObject","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","updateLine","request","mockReturnValueOnce","createCall","CallDirection","OUTBOUND","sent","setCallId","getCallId","toStrictEqual","stop","_callee2","_callee2$","_context2","on","callObj","getBroadworksCorrelationInfo","waitForMsecs","toHaveBeenCalledWith","ALERTING","_callee3","_callee3$","_context3","_callee4","_callee4$","_context4","getCorrelationId","toHaveBeenCalled","_callee5","_callee5$","_context5","not","_callee6","warnSpy","_callee6$","_context6","mockRejectedValue","log","file","method","_callee8","_callee8$","_context8","_ref8","_callee7","mediaSpy","mediaClose","track","_callee7$","_context7","state","value","answer","localAudioTrack","CONNECTED","_x","apply","arguments","dummyCallId","funcSpy","callSpy","logSpy","_callee9","eventData","_callee9$","_context9","toHaveBeenLastCalledWith","_callee10","_callee10$","_context10","_callee11","_callee11$","_context11","_callee12","mediaOK","_callee12$","_context12","received","_callee13","_callee13$","_context13","_callee14","_callee14$","_context14","_callee15","_callee15$","_context15","_callee16","connectEvent","_callee16$","_context16","JSON","parse","_stringify","_callee17","answerEvent","_callee17$","_context17","_callee18","_callee18$","_context18"],"sources":["callManager.test.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable dot-notation */\nimport {waitForMsecs} from '../../common/Utils';\nimport {CallDirection, CallType, ServiceIndicator} from '../../common/types';\nimport {getTestUtilsWebex} from '../../common/testUtil';\nimport {getCallManager} from './callManager';\nimport {ICall, ICallManager, MobiusCallState} from './types';\nimport {Call} from './call';\nimport log from '../../Logger';\nimport {ILine} from '../line/types';\nimport {LINE_EVENT_KEYS} from '../../Events/types';\n\nconst webex = getTestUtilsWebex();\nconst defaultServiceIndicator = ServiceIndicator.CALLING;\n\nconst mediaEvent = {\n id: '73e6a2b2-968c-44ea-a536-e7702722f8d8',\n data: {\n message: {\n messageType: 'OFFER',\n sdp: 'v=0\\r\\no=BroadWorks 175625 1653906127914 IN IP4 207.182.171.180\\r\\ns=-\\r\\nc=IN IP4 207.182.171.180\\r\\nt=0 0\\r\\na=ice-lite\\r\\nm=audio 19564 UDP/TLS/RTP/SAVPF 99 9 0 8 18 102 101\\r\\na=sendrecv\\r\\na=rtpmap:99 opus/48000/2\\r\\na=rtpmap:9 G722/8000\\r\\na=rtpmap:0 PCMU/8000\\r\\na=rtpmap:8 PCMA/8000\\r\\na=rtpmap:18 G729/8000\\r\\na=fmtp:18 annexb=no\\r\\na=rtpmap:102 iLBC/8000\\r\\na=fmtp:102 mode=30\\r\\na=rtpmap:101 telephone-event/8000\\r\\na=rtcp-mux\\r\\na=setup:actpass\\r\\na=ssrc:379289707 cname:HC3h2tromqGgnGaf\\r\\na=ice-ufrag:mLbW\\r\\na=ice-pwd:Hct9MYtML1sedttd8fLCg9aJ\\r\\na=fingerprint:sha-256 5E:F5:3D:98:57:03:D7:73:8F:C3:D4:FC:EC:FE:7F:4D:04:D8:EE:2A:29:C4:9F:35:C5:0F:D1:2D:CE:E4:AE:AA\\r\\na=candidate:mse 1 UDP 2130706431 207.182.171.180 19564 typ host\\r\\na=candidate:mse 2 UDP 2130706430 207.182.171.180 19565 typ host',\n seq: 1,\n version: '2',\n },\n callId: 'f2e89262-7d9a-489f-b65d-3b56a31c7bfe',\n callUrl:\n '[https://wdm-intb.ciscospark.com/wdm/api/v1/devices/14ef3832-a7af-4457-a660-fd1918d627d0]',\n deviceId: '375b8503-f716-3407-853b-cd9a8c4419a7',\n correlationId: '',\n eventType: 'mobius.media',\n },\n timestamp: 1653906128188,\n trackingId: 'ROUTER_62949AD0-DB6E-01BB-595A-03158964595A',\n alertType: 'full',\n headers: {},\n sequenceNumber: 7,\n filterMessage: false,\n};\n\nconst setupEvent = {\n id: '3ee919c7-202d-4f8c-9b74-e5ee8a693dfa',\n data: {\n callerId: {\n 'x-broadworks-remote-party-info':\n 'userId=\"hkkcq0ekby@64941297.int10.bcld.webex.com\";userDn=\"tel:+12142865895;ext=5008;country-code=1\";externalId=652fe0c7-05ce-4acd-8bda-9a080830187f',\n from: '\"Bob Marley\" <sip:5008@207.182.171.130;user=phone>;tag=379221777-1653906128003-',\n },\n callId: 'f2e89262-7d9a-489f-b65d-3b56a31c7bfe',\n callUrl:\n '[https://wdm-intb.ciscospark.com/wdm/api/v1/devices/14ef3832-a7af-4457-a660-fd1918d627d0]',\n deviceId: '375b8503-f716-3407-853b-cd9a8c4419a7',\n correlationId: '',\n eventType: 'mobius.call',\n broadworksCorrelationInfo: 'Sample_broadworksCorrelationInfo',\n },\n timestamp: 1653906128159,\n trackingId: 'ROUTER_62949AD0-DB6E-01BB-595A-03158964595A',\n alertType: 'full',\n headers: {},\n sequenceNumber: 6,\n filterMessage: false,\n};\n\nconst disconnectEvent = {\n id: 'f3e37504-5867-48ea-8d67-4e82b3ce1755',\n data: {\n causecode: 0,\n cause: 'Normal disconnect',\n callId: 'cbfe802c-cc8d-407f-863d-0abf8d6cc497',\n callUrl:\n '[https://wdm-intb.ciscospark.com/wdm/api/v1/devices/5691641c-7f0c-47a4-b248-e585ebcf653d]',\n deviceId: 'b9270663-54c8-3540-b01f-ed807dc5f9e8',\n correlationId: '',\n eventType: 'mobius.calldisconnected',\n },\n timestamp: 1653925625934,\n trackingId: 'NA_fe7efbbc-de52-438c-a6c3-58e96db230ba',\n alertType: 'full',\n headers: {},\n sequenceNumber: 6,\n filterMessage: false,\n};\nconst deviceId = '55dfb53f-bed2-36da-8e85-cee7f02aa68e';\nconst dest = {\n type: CallType.URI,\n address: 'tel:5003',\n};\n\nconst successResponseBody = {\n statusCode: 200,\n body: {\n device: {\n deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',\n correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011',\n },\n callId: '8a67806f-fc4d-446b-a131-31e71ea5b020',\n callData: {\n callState: MobiusCallState.PROCEEDING,\n },\n },\n};\n\nconst mockLineId = 'e4e8ee2a-a154-4e52-8f11-ef4cde2dce72';\nconst mockLine = {\n lineId: mockLineId,\n} as ILine;\n\ndescribe('Call Manager Tests with respect to calls', () => {\n const dummyResponse = {\n statusCode: 200,\n body: {\n device: {\n deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',\n correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011',\n },\n },\n };\n\n const patchMock = jest.spyOn(Call.prototype as any, 'patch');\n const setDisconnectReasonMock = jest.spyOn(Call.prototype as any, 'setDisconnectReason');\n const deleteCallMock = jest.spyOn(Call.prototype as any, 'delete');\n const initMediaConnectionMock = jest.spyOn(Call.prototype as any, 'initMediaConnection');\n const mediaRoapEventsListenerMock = jest.spyOn(Call.prototype as any, 'mediaRoapEventsListener');\n const mediaTrackListenerMock = jest.spyOn(Call.prototype as any, 'mediaTrackListener');\n const postMediaMock = jest.spyOn(Call.prototype as any, 'postMedia');\n\n deleteCallMock.mockResolvedValue(dummyResponse); // Both are using dummy response\n setDisconnectReasonMock.mockReturnValue({});\n initMediaConnectionMock.mockReturnValue({});\n mediaRoapEventsListenerMock.mockReturnValue({});\n mediaTrackListenerMock.mockReturnValue({});\n postMediaMock.mockResolvedValue({});\n\n let callManager: ICallManager;\n\n beforeEach(() => {\n callManager = getCallManager(webex, defaultServiceIndicator);\n callManager.removeAllListeners(LINE_EVENT_KEYS.INCOMING_CALL);\n /* expect 0 calls at the beginning of each test as we are clearing calls at the end of every test case */\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(0);\n });\n\n afterEach(() => {\n /* lets clear all calls at the end of every test case */\n const calls = Object.values(callManager.getActiveCalls());\n\n calls.forEach((call) => {\n call.end();\n });\n });\n\n it('check instance of call manager', () => {\n expect(callManager).toBeTruthy();\n });\n\n it('Check whether callManager is singleton', () => {\n const callManagerNew = getCallManager(webex, defaultServiceIndicator);\n\n expect(callManager).toMatchObject(callManagerNew);\n });\n\n it('create a call using call manager', async () => {\n callManager.updateLine('8a67806f-fc4d-446b-a131-31e71ea5b010', mockLine);\n webex.request.mockReturnValueOnce({\n statusCode: 200,\n body: {\n device: {\n deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',\n correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011',\n },\n callId: '8a67806f-fc4d-446b-a131-31e71ea5b020',\n callData: {\n callState: MobiusCallState.PROCEEDING,\n },\n },\n });\n\n expect(callManager).toBeTruthy();\n const call = await callManager.createCall(CallDirection.OUTBOUND, deviceId, mockLineId, dest);\n\n call.setCallId('8a67806f-fc4d-446b-a131-31e71ea5b020');\n\n expect(call).toBeTruthy();\n expect(call.getCallId()).toStrictEqual('8a67806f-fc4d-446b-a131-31e71ea5b020');\n expect(call.lineId).toStrictEqual(mockLineId);\n });\n\n it('Accept an incoming call from Mobius where Call Setup was the first message', async () => {\n callManager.updateLine('375b8503-f716-3407-853b-cd9a8c4419a7', mockLine);\n callManager.on(LINE_EVENT_KEYS.INCOMING_CALL, (callObj: ICall) => {\n expect(callObj.getCallId()).toStrictEqual(setupEvent.data.callId);\n expect(callObj.getBroadworksCorrelationInfo()).toStrictEqual(\n setupEvent.data.broadworksCorrelationInfo\n );\n expect(callObj.lineId).toStrictEqual(mockLineId);\n });\n patchMock.mockResolvedValue(dummyResponse);\n\n await callManager['dequeueWsEvents'](setupEvent);\n await waitForMsecs(50);\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n\n expect(patchMock).toHaveBeenCalledWith(MobiusCallState.ALERTING);\n /* setUp event should create the call and count will be 1 for new call */\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(1);\n });\n\n it('Accept an incoming call from Mobius where Media Event was the first message', async () => {\n callManager.updateLine('8a67806f-fc4d-446b-a131-31e71ea5b010', mockLine);\n patchMock.mockResolvedValue(dummyResponse);\n callManager.on(LINE_EVENT_KEYS.INCOMING_CALL, (callObj: ICall) => {\n expect(callObj.getCallId()).toStrictEqual(setupEvent.data.callId);\n expect(callObj['remoteRoapMessage'].sdp).toStrictEqual(mediaEvent.data.message.sdp);\n });\n\n await callManager['dequeueWsEvents'](mediaEvent);\n /* check whether SDP is buffered */\n await callManager['dequeueWsEvents'](setupEvent);\n expect(patchMock).toHaveBeenCalledWith(MobiusCallState.ALERTING);\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(1);\n });\n\n it('Disconnect a call if received a Call Disconnect event', async () => {\n webex.request.mockReturnValueOnce(successResponseBody);\n\n /* lets add a call to disconnect it later */\n const call = await callManager.createCall(dest, CallDirection.OUTBOUND, deviceId, mockLineId);\n\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(1);\n /* clear the last added call */\n\n patchMock.mockResolvedValue(dummyResponse);\n disconnectEvent.data.correlationId = call.getCorrelationId();\n callManager['dequeueWsEvents'](disconnectEvent);\n\n /* Add a small delay , to simulate sending of Delete request and clearing from Call records */\n await waitForMsecs(50);\n\n expect(deleteCallMock).toHaveBeenCalled();\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(0);\n });\n\n it('Do not Disconnect a call if call has been disconnected already', async () => {\n webex.request.mockReturnValueOnce(successResponseBody);\n\n /* lets add a call to disconnect it later */\n await callManager.createCall(CallDirection.OUTBOUND, deviceId, mockLineId, dest);\n\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(1);\n /* clear the last added call */\n\n patchMock.mockResolvedValue(dummyResponse);\n disconnectEvent.data.correlationId = '1234';\n callManager['dequeueWsEvents'](disconnectEvent);\n\n /* Add a small delay , to simulate sending of Delete request and clearing from Call records */\n await waitForMsecs(50);\n\n expect(deleteCallMock).not.toHaveBeenCalled();\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(1);\n });\n\n it('Accept an incoming call but Outgoing patch request fails', async () => {\n callManager.updateLine('8a67806f-fc4d-446b-a131-31e71ea5b010', mockLine);\n /* Intentionally failing the Patch with 503 */\n dummyResponse.statusCode = 503;\n patchMock.mockRejectedValue(dummyResponse);\n\n const warnSpy = jest.spyOn(log, 'warn');\n\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n await callManager['dequeueWsEvents'](setupEvent);\n await waitForMsecs(50);\n\n expect(patchMock).toHaveBeenCalledWith(MobiusCallState.ALERTING);\n expect(warnSpy).toHaveBeenCalledWith('Failed to signal call progression', {\n file: 'call',\n method: 'handleOutgoingCallAlerting',\n });\n /* No calls should have been added as call progress failed */\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(0);\n });\n\n it('Walk through an End to End call', async () => {\n callManager.updateLine('8a67806f-fc4d-446b-a131-31e71ea5b010', mockLine);\n let call: ICall;\n\n callManager.on(LINE_EVENT_KEYS.INCOMING_CALL, async (callObj: ICall) => {\n expect(callObj.getCallId()).toStrictEqual(setupEvent.data.callId);\n call = callObj;\n await waitForMsecs(50);\n\n const mediaSpy = jest.spyOn(call['mediaConnection'], 'roapMessageReceived');\n const mediaClose = jest.spyOn(call['mediaConnection'], 'close').mockReturnValue({});\n\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(3);\n expect(call['callStateMachine'].state.value).toStrictEqual('S_SEND_CALL_PROGRESS');\n expect(patchMock).toHaveBeenCalledWith(MobiusCallState.ALERTING);\n\n /* Receive ROAP Offer */\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_RECV_ROAP_OFFER');\n\n const track = {} as MediaStreamTrack;\n\n /* User answers the call */\n await call.answer({localAudioTrack: track});\n await waitForMsecs(50);\n\n expect(call['callStateMachine'].state.value).toStrictEqual('S_SEND_CALL_CONNECT');\n expect(patchMock).toHaveBeenCalledWith(MobiusCallState.CONNECTED);\n expect(mediaSpy).toHaveBeenCalled(); /* We pass the offer to media connection */\n\n /* We are manually sending this event , ideally it will sent by MediaConnection. */\n call['sendMediaStateMachineEvt']({type: 'E_SEND_ROAP_ANSWER'});\n\n await waitForMsecs(50);\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_SEND_ROAP_ANSWER');\n\n /* Simulate ROAP_OK */\n mediaEvent.data.message.messageType = 'OK';\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n\n expect(mediaSpy).toHaveBeenCalled();\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_ROAP_OK');\n expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');\n\n /* Simulate ROAP Offer_request */\n mediaEvent.data.message.messageType = 'OFFER_REQUEST';\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n expect(mediaSpy).toHaveBeenCalled();\n\n /* We are manually sending this event , ideally it will sent by Media Connection. */\n call['sendMediaStateMachineEvt']({type: 'E_SEND_ROAP_OFFER'});\n\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_SEND_ROAP_OFFER');\n\n /* Simulate ROAP Answer */\n mediaEvent.data.message.messageType = 'ANSWER';\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n expect(mediaSpy).toHaveBeenCalled();\n\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_ROAP_OK');\n expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');\n\n /* Start Call disconnect */\n disconnectEvent.data.correlationId = call.getCorrelationId();\n callManager['dequeueWsEvents'](disconnectEvent);\n await waitForMsecs(50);\n\n expect(deleteCallMock).toHaveBeenCalled();\n expect(mediaClose).toHaveBeenCalled();\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_ROAP_TEARDOWN');\n expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_CLEARED');\n\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(2);\n });\n\n patchMock.mockResolvedValue(dummyResponse);\n await callManager['dequeueWsEvents'](setupEvent);\n });\n});\n\ndescribe('Coverage for Events listener', () => {\n let callManager: ICallManager;\n let call: ICall;\n const dummyCallId = '8a67806f-fc4d-4469-a131-31e71ec5b011';\n\n webex.request.mockReturnValueOnce({\n statusCode: 200,\n body: {\n device: {\n deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',\n correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011',\n },\n callId: '8a67806f-fc4d-446b-a131-31e71ea5b020',\n callData: {\n callState: MobiusCallState.PROCEEDING,\n },\n },\n });\n\n beforeEach(() => {\n callManager = getCallManager(webex, defaultServiceIndicator);\n callManager.removeAllListeners(LINE_EVENT_KEYS.INCOMING_CALL);\n call = callManager.createCall(CallDirection.OUTBOUND, deviceId, mockLineId, dest);\n call.setCallId(dummyCallId);\n setupEvent.data.correlationId = call.getCorrelationId();\n });\n\n const funcSpy = jest.spyOn(Call.prototype as any, 'sendMediaStateMachineEvt');\n const callSpy = jest.spyOn(Call.prototype as any, 'sendCallStateMachineEvt');\n const logSpy = jest.spyOn(log, 'log');\n\n it('When Offer is received', async () => {\n mediaEvent.data.callId = dummyCallId;\n\n await callManager['dequeueWsEvents'](mediaEvent);\n const eventData = {data: mediaEvent.data.message, type: 'E_RECV_ROAP_OFFER'};\n\n expect(funcSpy).toHaveBeenLastCalledWith(eventData);\n });\n\n it('When Answer is received', async () => {\n mediaEvent.data.message.messageType = 'ANSWER';\n await callManager['dequeueWsEvents'](mediaEvent);\n\n const eventData = {data: mediaEvent.data.message, type: 'E_RECV_ROAP_ANSWER'};\n\n expect(funcSpy).toHaveBeenCalledWith(eventData);\n });\n\n it('When Offer Request is received', async () => {\n mediaEvent.data.message.messageType = 'OFFER_REQUEST';\n await callManager['dequeueWsEvents'](mediaEvent);\n\n const eventData = {data: mediaEvent.data.message, type: 'E_RECV_ROAP_OFFER_REQUEST'};\n\n expect(funcSpy).toHaveBeenCalledWith(eventData);\n });\n\n it('When OK is received', async () => {\n mediaEvent.data.message.messageType = 'OK';\n await callManager['dequeueWsEvents'](mediaEvent);\n\n const mediaOK = {received: true, message: mediaEvent.data.message};\n const eventData = {data: mediaOK, type: 'E_ROAP_OK'};\n\n expect(funcSpy).toHaveBeenCalledWith(eventData);\n });\n\n it('When Error is Received', async () => {\n mediaEvent.data.message.messageType = 'ERROR';\n await callManager['dequeueWsEvents'](mediaEvent);\n\n expect(logSpy).toHaveBeenCalledWith('Received Error...', {\n file: 'callManager',\n method: 'dequeueWsEvents',\n });\n });\n\n it('When Unknown event is Received', async () => {\n mediaEvent.data.message.messageType = 'UNKNOWN';\n await callManager['dequeueWsEvents'](mediaEvent);\n\n expect(logSpy).toHaveBeenCalledWith('Unknown Media mobiusEvent: UNKNOWN ', {\n file: 'callManager',\n method: 'dequeueWsEvents',\n });\n });\n\n it('When Progress/Connect event is Received', async () => {\n setupEvent.data.eventType = 'mobius.callprogress';\n await callManager['dequeueWsEvents'](setupEvent);\n expect(callSpy).toHaveBeenCalledWith({type: 'E_RECV_CALL_PROGRESS', data: setupEvent.data});\n });\n\n it('Silently discard an event in the state machine', async () => {\n call['callStateMachine'].state.value = 'S_SEND_CALL_CONNECT';\n expect(call['callStateMachine'].state.value).toStrictEqual('S_SEND_CALL_CONNECT');\n\n const connectEvent = JSON.parse(JSON.stringify(setupEvent));\n\n connectEvent.data.eventType = 'mobius.callconnected';\n await callManager['dequeueWsEvents'](connectEvent);\n\n /* There should not be any state change */\n expect(call['callStateMachine'].state.value).toStrictEqual('S_SEND_CALL_CONNECT');\n });\n\n it('Silently discard an ROAP_ANSWER after being in ROAP_OK state', async () => {\n call['mediaStateMachine'].state.value = 'S_ROAP_OK';\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_ROAP_OK');\n\n const answerEvent = JSON.parse(JSON.stringify(mediaEvent));\n\n answerEvent.data.message.messageType = 'ANSWER';\n await callManager['dequeueWsEvents'](answerEvent);\n\n /* There should not be any state change */\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_ROAP_OK');\n });\n\n it('When Unknown Call event is Received', async () => {\n setupEvent.data.eventType = 'mobius.callunknown';\n await callManager['dequeueWsEvents'](setupEvent);\n expect(logSpy).toHaveBeenCalledWith('Unknown Call Event mobiusEvent: mobius.callunknown', {\n file: 'callManager',\n method: 'dequeueWsEvents',\n });\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["_Utils","_interopRequireWildcard","require","utils","_types","_testUtil","_callManager","_types2","_call","_Logger","_interopRequireDefault","_types3","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","webex","getTestUtilsWebex","defaultServiceIndicator","ServiceIndicator","CALLING","mediaEvent","id","data","message","messageType","sdp","seq","version","callId","callUrl","deviceId","correlationId","eventType","timestamp","trackingId","alertType","headers","sequenceNumber","filterMessage","setupEvent","callerId","from","broadworksCorrelationInfo","disconnectEvent","causecode","cause","dest","type","CallType","URI","address","successResponseBody","statusCode","body","device","callData","callState","MobiusCallState","PROCEEDING","mockLineId","mockLine","lineId","describe","dummyResponse","patchMock","jest","spyOn","Call","setDisconnectReasonMock","deleteCallMock","initMediaConnectionMock","mediaRoapEventsListenerMock","mediaTrackListenerMock","postMediaMock","mockResolvedValue","mockReturnValue","callManager","beforeEach","getCallManager","removeAllListeners","LINE_EVENT_KEYS","INCOMING_CALL","expect","_keys","getActiveCalls","length","toBe","afterEach","calls","_values","forEach","end","it","toBeTruthy","callManagerNew","toMatchObject","_asyncToGenerator2","_regenerator","mark","_callee","logSpy","wrap","_callee$","_context","prev","next","updateLine","request","mockReturnValueOnce","log","createCall","CallDirection","OUTBOUND","sent","setCallId","getCallId","toStrictEqual","toHaveBeenCalledWith","stop","_callee2","_callee2$","_context2","on","callObj","getBroadworksCorrelationInfo","waitForMsecs","ALERTING","_callee3","_callee3$","_context3","_callee4","_callee4$","_context4","getCorrelationId","toHaveBeenCalled","_callee5","_callee5$","_context5","not","_callee6","_mediaEvent$data$mess","_mediaEvent$data$mess2","_mediaEvent$data$mess3","errorSpy","uploadLogsSpy","_callee6$","_context6","mockRejectedValue","Error","concat","file","method","objectContaining","_callee8","_callee8$","_context8","_ref8","_callee7","mediaSpy","mediaClose","track","_callee7$","_context7","state","value","answer","localAudioTrack","CONNECTED","_x","apply","arguments","dummyCallId","clearAllMocks","funcSpy","callSpy","_callee9","eventData","_callee9$","_context9","_callee10","_callee10$","_context10","_callee11","_callee11$","_context11","_callee12","mediaOK","_callee12$","_context12","received","_callee13","_mediaEvent$data$mess4","_mediaEvent$data$mess5","_mediaEvent$data$mess6","_mediaEvent$data$mess7","infoSpy","_callee13$","_context13","_callee14","_mediaEvent$data$mess8","_mediaEvent$data$mess9","_mediaEvent$data$mess10","_mediaEvent$data$mess11","_callee14$","_context14","_callee15","_callee15$","_context15","_callee16","connectEvent","_callee16$","_context16","JSON","parse","_stringify","_callee17","answerEvent","_callee17$","_context17","_callee18","_callee18$","_context18"],"sources":["callManager.test.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable dot-notation */\nimport {waitForMsecs} from '../../common/Utils';\nimport {CallDirection, CallType, ServiceIndicator} from '../../common/types';\nimport {getTestUtilsWebex} from '../../common/testUtil';\nimport {getCallManager} from './callManager';\nimport {ICall, ICallManager, MobiusCallState} from './types';\nimport {Call} from './call';\nimport log from '../../Logger';\nimport {ILine} from '../line/types';\nimport {LINE_EVENT_KEYS} from '../../Events/types';\nimport * as utils from '../../common/Utils';\n\nconst webex = getTestUtilsWebex();\nconst defaultServiceIndicator = ServiceIndicator.CALLING;\n\nconst mediaEvent = {\n id: '73e6a2b2-968c-44ea-a536-e7702722f8d8',\n data: {\n message: {\n messageType: 'OFFER',\n sdp: 'v=0\\r\\no=BroadWorks 175625 1653906127914 IN IP4 207.182.171.180\\r\\ns=-\\r\\nc=IN IP4 207.182.171.180\\r\\nt=0 0\\r\\na=ice-lite\\r\\nm=audio 19564 UDP/TLS/RTP/SAVPF 99 9 0 8 18 102 101\\r\\na=sendrecv\\r\\na=rtpmap:99 opus/48000/2\\r\\na=rtpmap:9 G722/8000\\r\\na=rtpmap:0 PCMU/8000\\r\\na=rtpmap:8 PCMA/8000\\r\\na=rtpmap:18 G729/8000\\r\\na=fmtp:18 annexb=no\\r\\na=rtpmap:102 iLBC/8000\\r\\na=fmtp:102 mode=30\\r\\na=rtpmap:101 telephone-event/8000\\r\\na=rtcp-mux\\r\\na=setup:actpass\\r\\na=ssrc:379289707 cname:HC3h2tromqGgnGaf\\r\\na=ice-ufrag:mLbW\\r\\na=ice-pwd:Hct9MYtML1sedttd8fLCg9aJ\\r\\na=fingerprint:sha-256 5E:F5:3D:98:57:03:D7:73:8F:C3:D4:FC:EC:FE:7F:4D:04:D8:EE:2A:29:C4:9F:35:C5:0F:D1:2D:CE:E4:AE:AA\\r\\na=candidate:mse 1 UDP 2130706431 207.182.171.180 19564 typ host\\r\\na=candidate:mse 2 UDP 2130706430 207.182.171.180 19565 typ host',\n seq: 1,\n version: '2',\n },\n callId: 'f2e89262-7d9a-489f-b65d-3b56a31c7bfe',\n callUrl:\n '[https://wdm-intb.ciscospark.com/wdm/api/v1/devices/14ef3832-a7af-4457-a660-fd1918d627d0]',\n deviceId: '375b8503-f716-3407-853b-cd9a8c4419a7',\n correlationId: '',\n eventType: 'mobius.media',\n },\n timestamp: 1653906128188,\n trackingId: 'ROUTER_62949AD0-DB6E-01BB-595A-03158964595A',\n alertType: 'full',\n headers: {},\n sequenceNumber: 7,\n filterMessage: false,\n};\n\nconst setupEvent = {\n id: '3ee919c7-202d-4f8c-9b74-e5ee8a693dfa',\n data: {\n callerId: {\n 'x-broadworks-remote-party-info':\n 'userId=\"hkkcq0ekby@64941297.int10.bcld.webex.com\";userDn=\"tel:+12142865895;ext=5008;country-code=1\";externalId=652fe0c7-05ce-4acd-8bda-9a080830187f',\n from: '\"Bob Marley\" <sip:5008@207.182.171.130;user=phone>;tag=379221777-1653906128003-',\n },\n callId: 'f2e89262-7d9a-489f-b65d-3b56a31c7bfe',\n callUrl:\n '[https://wdm-intb.ciscospark.com/wdm/api/v1/devices/14ef3832-a7af-4457-a660-fd1918d627d0]',\n deviceId: '375b8503-f716-3407-853b-cd9a8c4419a7',\n correlationId: '',\n eventType: 'mobius.call',\n broadworksCorrelationInfo: 'Sample_broadworksCorrelationInfo',\n },\n timestamp: 1653906128159,\n trackingId: 'ROUTER_62949AD0-DB6E-01BB-595A-03158964595A',\n alertType: 'full',\n headers: {},\n sequenceNumber: 6,\n filterMessage: false,\n};\n\nconst disconnectEvent = {\n id: 'f3e37504-5867-48ea-8d67-4e82b3ce1755',\n data: {\n causecode: 0,\n cause: 'Normal disconnect',\n callId: 'cbfe802c-cc8d-407f-863d-0abf8d6cc497',\n callUrl:\n '[https://wdm-intb.ciscospark.com/wdm/api/v1/devices/5691641c-7f0c-47a4-b248-e585ebcf653d]',\n deviceId: 'b9270663-54c8-3540-b01f-ed807dc5f9e8',\n correlationId: '',\n eventType: 'mobius.calldisconnected',\n },\n timestamp: 1653925625934,\n trackingId: 'NA_fe7efbbc-de52-438c-a6c3-58e96db230ba',\n alertType: 'full',\n headers: {},\n sequenceNumber: 6,\n filterMessage: false,\n};\nconst deviceId = '55dfb53f-bed2-36da-8e85-cee7f02aa68e';\nconst dest = {\n type: CallType.URI,\n address: 'tel:5003',\n};\n\nconst successResponseBody = {\n statusCode: 200,\n body: {\n device: {\n deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',\n correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011',\n },\n callId: '8a67806f-fc4d-446b-a131-31e71ea5b020',\n callData: {\n callState: MobiusCallState.PROCEEDING,\n },\n },\n};\n\nconst mockLineId = 'e4e8ee2a-a154-4e52-8f11-ef4cde2dce72';\nconst mockLine = {\n lineId: mockLineId,\n} as ILine;\n\ndescribe('Call Manager Tests with respect to calls', () => {\n const dummyResponse = {\n statusCode: 200,\n body: {\n device: {\n deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',\n correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011',\n },\n },\n };\n\n const patchMock = jest.spyOn(Call.prototype as any, 'patch');\n const setDisconnectReasonMock = jest.spyOn(Call.prototype as any, 'setDisconnectReason');\n const deleteCallMock = jest.spyOn(Call.prototype as any, 'delete');\n const initMediaConnectionMock = jest.spyOn(Call.prototype as any, 'initMediaConnection');\n const mediaRoapEventsListenerMock = jest.spyOn(Call.prototype as any, 'mediaRoapEventsListener');\n const mediaTrackListenerMock = jest.spyOn(Call.prototype as any, 'mediaTrackListener');\n const postMediaMock = jest.spyOn(Call.prototype as any, 'postMedia');\n\n deleteCallMock.mockResolvedValue(dummyResponse); // Both are using dummy response\n setDisconnectReasonMock.mockReturnValue({});\n initMediaConnectionMock.mockReturnValue({});\n mediaRoapEventsListenerMock.mockReturnValue({});\n mediaTrackListenerMock.mockReturnValue({});\n postMediaMock.mockResolvedValue({});\n\n let callManager: ICallManager;\n\n beforeEach(() => {\n callManager = getCallManager(webex, defaultServiceIndicator);\n callManager.removeAllListeners(LINE_EVENT_KEYS.INCOMING_CALL);\n /* expect 0 calls at the beginning of each test as we are clearing calls at the end of every test case */\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(0);\n });\n\n afterEach(() => {\n /* lets clear all calls at the end of every test case */\n const calls = Object.values(callManager.getActiveCalls());\n\n calls.forEach((call) => {\n call.end();\n });\n });\n\n it('check instance of call manager', () => {\n expect(callManager).toBeTruthy();\n });\n\n it('Check whether callManager is singleton', () => {\n const callManagerNew = getCallManager(webex, defaultServiceIndicator);\n\n expect(callManager).toMatchObject(callManagerNew);\n });\n\n it('create a call using call manager', async () => {\n callManager.updateLine('8a67806f-fc4d-446b-a131-31e71ea5b010', mockLine);\n webex.request.mockReturnValueOnce({\n statusCode: 200,\n body: {\n device: {\n deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',\n correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011',\n },\n callId: '8a67806f-fc4d-446b-a131-31e71ea5b020',\n callData: {\n callState: MobiusCallState.PROCEEDING,\n },\n },\n });\n\n const logSpy = jest.spyOn(log, 'log');\n\n expect(callManager).toBeTruthy();\n const call = await callManager.createCall(CallDirection.OUTBOUND, deviceId, mockLineId, dest);\n\n call.setCallId('8a67806f-fc4d-446b-a131-31e71ea5b020');\n\n expect(call).toBeTruthy();\n expect(call.getCallId()).toStrictEqual('8a67806f-fc4d-446b-a131-31e71ea5b020');\n expect(call.lineId).toStrictEqual(mockLineId);\n expect(logSpy).toHaveBeenCalledWith('Creating call object', {});\n });\n\n it('Accept an incoming call from Mobius where Call Setup was the first message', async () => {\n callManager.updateLine('375b8503-f716-3407-853b-cd9a8c4419a7', mockLine);\n callManager.on(LINE_EVENT_KEYS.INCOMING_CALL, (callObj: ICall) => {\n expect(callObj.getCallId()).toStrictEqual(setupEvent.data.callId);\n expect(callObj.getBroadworksCorrelationInfo()).toStrictEqual(\n setupEvent.data.broadworksCorrelationInfo\n );\n expect(callObj.lineId).toStrictEqual(mockLineId);\n });\n patchMock.mockResolvedValue(dummyResponse);\n\n await callManager['dequeueWsEvents'](setupEvent);\n await waitForMsecs(50);\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n\n expect(patchMock).toHaveBeenCalledWith(MobiusCallState.ALERTING);\n /* setUp event should create the call and count will be 1 for new call */\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(1);\n });\n\n it('Accept an incoming call from Mobius where Media Event was the first message', async () => {\n callManager.updateLine('8a67806f-fc4d-446b-a131-31e71ea5b010', mockLine);\n patchMock.mockResolvedValue(dummyResponse);\n callManager.on(LINE_EVENT_KEYS.INCOMING_CALL, (callObj: ICall) => {\n expect(callObj.getCallId()).toStrictEqual(setupEvent.data.callId);\n expect(callObj['remoteRoapMessage'].sdp).toStrictEqual(mediaEvent.data.message.sdp);\n });\n\n await callManager['dequeueWsEvents'](mediaEvent);\n /* check whether SDP is buffered */\n await callManager['dequeueWsEvents'](setupEvent);\n expect(patchMock).toHaveBeenCalledWith(MobiusCallState.ALERTING);\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(1);\n });\n\n it('Disconnect a call if received a Call Disconnect event', async () => {\n webex.request.mockReturnValueOnce(successResponseBody);\n\n /* lets add a call to disconnect it later */\n const call = await callManager.createCall(dest, CallDirection.OUTBOUND, deviceId, mockLineId);\n\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(1);\n /* clear the last added call */\n\n patchMock.mockResolvedValue(dummyResponse);\n disconnectEvent.data.correlationId = call.getCorrelationId();\n callManager['dequeueWsEvents'](disconnectEvent);\n\n /* Add a small delay , to simulate sending of Delete request and clearing from Call records */\n await waitForMsecs(50);\n\n expect(deleteCallMock).toHaveBeenCalled();\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(0);\n });\n\n it('Do not Disconnect a call if call has been disconnected already', async () => {\n webex.request.mockReturnValueOnce(successResponseBody);\n\n /* lets add a call to disconnect it later */\n await callManager.createCall(CallDirection.OUTBOUND, deviceId, mockLineId, dest);\n\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(1);\n /* clear the last added call */\n\n patchMock.mockResolvedValue(dummyResponse);\n disconnectEvent.data.correlationId = '1234';\n callManager['dequeueWsEvents'](disconnectEvent);\n\n /* Add a small delay , to simulate sending of Delete request and clearing from Call records */\n await waitForMsecs(50);\n\n expect(deleteCallMock).not.toHaveBeenCalled();\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(1);\n });\n\n it('Accept an incoming call but Outgoing patch request fails', async () => {\n callManager.updateLine('8a67806f-fc4d-446b-a131-31e71ea5b010', mockLine);\n /* Intentionally failing the Patch with 503 */\n dummyResponse.statusCode = 503;\n patchMock.mockRejectedValue(dummyResponse);\n\n const errorSpy = jest.spyOn(log, 'error');\n const logSpy = jest.spyOn(log, 'log');\n const uploadLogsSpy = jest.spyOn(utils, 'uploadLogs').mockResolvedValue();\n\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n await callManager['dequeueWsEvents'](setupEvent);\n await waitForMsecs(50);\n\n expect(patchMock).toHaveBeenCalledWith(MobiusCallState.ALERTING);\n expect(errorSpy).toHaveBeenCalledWith(\n Error(`Failed to signal call progression: ${dummyResponse}`),\n {\n file: 'call',\n method: 'handleOutgoingCallAlerting',\n }\n );\n expect(logSpy).toHaveBeenCalledWith(\n `Received call media mobiusEvent for call: ${mediaEvent.data.correlationId}`,\n expect.objectContaining({\n file: 'callManager',\n method: 'dequeueWsEvents',\n })\n );\n expect(logSpy).toHaveBeenCalledWith(\n `ROAP message from mobius with type: ${mediaEvent.data.message?.messageType}, seq: ${mediaEvent.data.message?.seq} , version: ${mediaEvent.data.message?.version}`,\n expect.objectContaining({\n file: 'callManager',\n method: 'dequeueWsEvents',\n })\n );\n expect(uploadLogsSpy).toHaveBeenCalled();\n /* No calls should have been added as call progress failed */\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(0);\n });\n\n it('Walk through an End to End call', async () => {\n callManager.updateLine('8a67806f-fc4d-446b-a131-31e71ea5b010', mockLine);\n let call: ICall;\n\n callManager.on(LINE_EVENT_KEYS.INCOMING_CALL, async (callObj: ICall) => {\n expect(callObj.getCallId()).toStrictEqual(setupEvent.data.callId);\n call = callObj;\n await waitForMsecs(50);\n\n const mediaSpy = jest.spyOn(call['mediaConnection'], 'roapMessageReceived');\n const mediaClose = jest.spyOn(call['mediaConnection'], 'close').mockReturnValue({});\n\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(3);\n expect(call['callStateMachine'].state.value).toStrictEqual('S_SEND_CALL_PROGRESS');\n expect(patchMock).toHaveBeenCalledWith(MobiusCallState.ALERTING);\n\n /* Receive ROAP Offer */\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_RECV_ROAP_OFFER');\n\n const track = {} as MediaStreamTrack;\n\n /* User answers the call */\n await call.answer({localAudioTrack: track});\n await waitForMsecs(50);\n\n expect(call['callStateMachine'].state.value).toStrictEqual('S_SEND_CALL_CONNECT');\n expect(patchMock).toHaveBeenCalledWith(MobiusCallState.CONNECTED);\n expect(mediaSpy).toHaveBeenCalled(); /* We pass the offer to media connection */\n\n /* We are manually sending this event , ideally it will sent by MediaConnection. */\n call['sendMediaStateMachineEvt']({type: 'E_SEND_ROAP_ANSWER'});\n\n await waitForMsecs(50);\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_SEND_ROAP_ANSWER');\n\n /* Simulate ROAP_OK */\n mediaEvent.data.message.messageType = 'OK';\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n\n expect(mediaSpy).toHaveBeenCalled();\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_ROAP_OK');\n expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');\n\n /* Simulate ROAP Offer_request */\n mediaEvent.data.message.messageType = 'OFFER_REQUEST';\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n expect(mediaSpy).toHaveBeenCalled();\n\n /* We are manually sending this event , ideally it will sent by Media Connection. */\n call['sendMediaStateMachineEvt']({type: 'E_SEND_ROAP_OFFER'});\n\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_SEND_ROAP_OFFER');\n\n /* Simulate ROAP Answer */\n mediaEvent.data.message.messageType = 'ANSWER';\n await callManager['dequeueWsEvents'](mediaEvent);\n await waitForMsecs(50);\n expect(mediaSpy).toHaveBeenCalled();\n\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_ROAP_OK');\n expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_ESTABLISHED');\n\n /* Start Call disconnect */\n disconnectEvent.data.correlationId = call.getCorrelationId();\n callManager['dequeueWsEvents'](disconnectEvent);\n await waitForMsecs(50);\n\n expect(deleteCallMock).toHaveBeenCalled();\n expect(mediaClose).toHaveBeenCalled();\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_ROAP_TEARDOWN');\n expect(call['callStateMachine'].state.value).toStrictEqual('S_CALL_CLEARED');\n\n expect(Object.keys(callManager.getActiveCalls()).length).toBe(2);\n });\n\n patchMock.mockResolvedValue(dummyResponse);\n await callManager['dequeueWsEvents'](setupEvent);\n });\n});\n\ndescribe('Coverage for Events listener', () => {\n let callManager: ICallManager;\n let call: ICall;\n const dummyCallId = '8a67806f-fc4d-4469-a131-31e71ec5b011';\n\n webex.request.mockReturnValueOnce({\n statusCode: 200,\n body: {\n device: {\n deviceId: '8a67806f-fc4d-446b-a131-31e71ea5b010',\n correlationId: '8a67806f-fc4d-446b-a131-31e71ea5b011',\n },\n callId: '8a67806f-fc4d-446b-a131-31e71ea5b020',\n callData: {\n callState: MobiusCallState.PROCEEDING,\n },\n },\n });\n\n beforeEach(() => {\n jest.clearAllMocks();\n\n callManager = getCallManager(webex, defaultServiceIndicator);\n callManager.removeAllListeners(LINE_EVENT_KEYS.INCOMING_CALL);\n call = callManager.createCall(CallDirection.OUTBOUND, deviceId, mockLineId, dest);\n call.setCallId(dummyCallId);\n setupEvent.data.correlationId = call.getCorrelationId();\n });\n\n const funcSpy = jest.spyOn(Call.prototype as any, 'sendMediaStateMachineEvt');\n const callSpy = jest.spyOn(Call.prototype as any, 'sendCallStateMachineEvt');\n const logSpy = jest.spyOn(log, 'log');\n\n it('When Offer is received', async () => {\n mediaEvent.data.callId = dummyCallId;\n jest.clearAllMocks();\n await callManager['dequeueWsEvents'](mediaEvent);\n const eventData = {data: mediaEvent.data.message, type: 'E_RECV_ROAP_OFFER'};\n expect(funcSpy).toHaveBeenCalledWith(eventData);\n });\n\n it('When Answer is received', async () => {\n mediaEvent.data.message.messageType = 'ANSWER';\n jest.clearAllMocks();\n\n await callManager['dequeueWsEvents'](mediaEvent);\n\n const eventData = {data: mediaEvent.data.message, type: 'E_RECV_ROAP_ANSWER'};\n\n expect(funcSpy).toHaveBeenCalledWith(eventData);\n });\n\n it('When Offer Request is received', async () => {\n mediaEvent.data.message.messageType = 'OFFER_REQUEST';\n jest.clearAllMocks();\n await callManager['dequeueWsEvents'](mediaEvent);\n\n const eventData = {data: mediaEvent.data.message, type: 'E_RECV_ROAP_OFFER_REQUEST'};\n\n expect(funcSpy).toHaveBeenCalledWith(eventData);\n });\n\n it('When OK is received', async () => {\n mediaEvent.data.message.messageType = 'OK';\n jest.clearAllMocks();\n await callManager['dequeueWsEvents'](mediaEvent);\n\n const mediaOK = {received: true, message: mediaEvent.data.message};\n const eventData = {data: mediaOK, type: 'E_ROAP_OK'};\n\n expect(funcSpy).toHaveBeenCalledWith(eventData);\n });\n\n it('When Error is Received', async () => {\n mediaEvent.data.message.messageType = 'ERROR';\n jest.clearAllMocks();\n const infoSpy = jest.spyOn(log, 'info');\n await callManager['dequeueWsEvents'](mediaEvent);\n\n expect(logSpy).toHaveBeenCalledWith(\n `Received call media mobiusEvent for call: ${mediaEvent.data.correlationId}`,\n {\n file: 'callManager',\n method: 'dequeueWsEvents',\n }\n );\n expect(logSpy).toHaveBeenCalledWith(\n `ROAP message from mobius with type: ${mediaEvent.data.message?.messageType}, seq: ${mediaEvent.data.message?.seq} , version: ${mediaEvent.data.message?.version}`,\n {\n file: 'callManager',\n method: 'dequeueWsEvents',\n }\n );\n expect(logSpy).toHaveBeenCalledWith('Received Error...', {\n file: 'callManager',\n method: 'dequeueWsEvents',\n });\n expect(infoSpy).toHaveBeenCalledWith(`SDP from mobius ${mediaEvent.data.message?.sdp}`, {\n file: 'callManager',\n method: 'dequeueWsEvents',\n });\n });\n\n it('When Unknown event is Received', async () => {\n mediaEvent.data.message.messageType = 'UNKNOWN';\n jest.clearAllMocks();\n const infoSpy = jest.spyOn(log, 'info');\n await callManager['dequeueWsEvents'](mediaEvent);\n\n expect(logSpy).toHaveBeenCalledWith(\n `Received call media mobiusEvent for call: ${mediaEvent.data.correlationId}`,\n {\n file: 'callManager',\n method: 'dequeueWsEvents',\n }\n );\n expect(logSpy).toHaveBeenCalledWith(\n `ROAP message from mobius with type: ${mediaEvent.data.message?.messageType}, seq: ${mediaEvent.data.message?.seq} , version: ${mediaEvent.data.message?.version}`,\n {\n file: 'callManager',\n method: 'dequeueWsEvents',\n }\n );\n expect(logSpy).toHaveBeenCalledWith('Unknown Media mobiusEvent: UNKNOWN ', {\n file: 'callManager',\n method: 'dequeueWsEvents',\n });\n expect(infoSpy).toHaveBeenCalledWith(`SDP from mobius ${mediaEvent.data.message?.sdp}`, {\n file: 'callManager',\n method: 'dequeueWsEvents',\n });\n });\n\n it('When Progress/Connect event is Received', async () => {\n setupEvent.data.eventType = 'mobius.callprogress';\n await callManager['dequeueWsEvents'](setupEvent);\n expect(callSpy).toHaveBeenCalledWith({type: 'E_RECV_CALL_PROGRESS', data: setupEvent.data});\n });\n\n it('Silently discard an event in the state machine', async () => {\n call['callStateMachine'].state.value = 'S_SEND_CALL_CONNECT';\n expect(call['callStateMachine'].state.value).toStrictEqual('S_SEND_CALL_CONNECT');\n\n const connectEvent = JSON.parse(JSON.stringify(setupEvent));\n\n connectEvent.data.eventType = 'mobius.callconnected';\n await callManager['dequeueWsEvents'](connectEvent);\n\n /* There should not be any state change */\n expect(call['callStateMachine'].state.value).toStrictEqual('S_SEND_CALL_CONNECT');\n });\n\n it('Silently discard an ROAP_ANSWER after being in ROAP_OK state', async () => {\n call['mediaStateMachine'].state.value = 'S_ROAP_OK';\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_ROAP_OK');\n\n const answerEvent = JSON.parse(JSON.stringify(mediaEvent));\n\n answerEvent.data.message.messageType = 'ANSWER';\n await callManager['dequeueWsEvents'](answerEvent);\n\n /* There should not be any state change */\n expect(call['mediaStateMachine'].state.value).toStrictEqual('S_ROAP_OK');\n });\n\n it('When Unknown Call event is Received', async () => {\n setupEvent.data.eventType = 'mobius.callunknown';\n jest.clearAllMocks();\n await callManager['dequeueWsEvents'](setupEvent);\n\n expect(logSpy).toHaveBeenCalledWith('Unknown Call Event mobiusEvent: mobius.callunknown', {\n file: 'callManager',\n method: 'dequeueWsEvents',\n });\n });\n});\n"],"mappings":"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"}