@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.
- package/dist/CallHistory/CallHistory.js +100 -63
- package/dist/CallHistory/CallHistory.js.map +1 -1
- package/dist/CallHistory/CallHistory.test.js +115 -19
- package/dist/CallHistory/CallHistory.test.js.map +1 -1
- package/dist/CallHistory/constants.js +9 -1
- package/dist/CallHistory/constants.js.map +1 -1
- package/dist/CallSettings/CallSettings.js +46 -13
- package/dist/CallSettings/CallSettings.js.map +1 -1
- package/dist/CallSettings/UcmBackendConnector.js +62 -18
- package/dist/CallSettings/UcmBackendConnector.js.map +1 -1
- package/dist/CallSettings/UcmBackendConnector.test.js +70 -7
- package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -1
- package/dist/CallSettings/WxCallBackendConnector.js +153 -103
- package/dist/CallSettings/WxCallBackendConnector.js.map +1 -1
- package/dist/CallSettings/WxCallBackendConnector.test.js +52 -15
- package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -1
- package/dist/CallSettings/constants.js +15 -1
- package/dist/CallSettings/constants.js.map +1 -1
- package/dist/CallingClient/CallingClient.js +220 -159
- package/dist/CallingClient/CallingClient.js.map +1 -1
- package/dist/CallingClient/CallingClient.test.js +53 -24
- package/dist/CallingClient/CallingClient.test.js.map +1 -1
- package/dist/CallingClient/calling/call.js +251 -189
- package/dist/CallingClient/calling/call.js.map +1 -1
- package/dist/CallingClient/calling/call.test.js +96 -41
- package/dist/CallingClient/calling/call.test.js.map +1 -1
- package/dist/CallingClient/calling/callManager.js +73 -48
- package/dist/CallingClient/calling/callManager.js.map +1 -1
- package/dist/CallingClient/calling/callManager.test.js +96 -37
- package/dist/CallingClient/calling/callManager.test.js.map +1 -1
- package/dist/CallingClient/constants.js +105 -3
- package/dist/CallingClient/constants.js.map +1 -1
- package/dist/CallingClient/line/index.js +47 -18
- package/dist/CallingClient/line/index.js.map +1 -1
- package/dist/CallingClient/line/line.test.js +2 -2
- package/dist/CallingClient/line/line.test.js.map +1 -1
- package/dist/CallingClient/registration/register.js +359 -297
- package/dist/CallingClient/registration/register.js.map +1 -1
- package/dist/CallingClient/registration/register.test.js +561 -163
- package/dist/CallingClient/registration/register.test.js.map +1 -1
- package/dist/CallingClient/registration/types.js.map +1 -1
- package/dist/Contacts/ContactsClient.js +156 -102
- package/dist/Contacts/ContactsClient.js.map +1 -1
- package/dist/Contacts/ContactsClient.test.js +197 -49
- package/dist/Contacts/ContactsClient.test.js.map +1 -1
- package/dist/Contacts/constants.js +11 -1
- package/dist/Contacts/constants.js.map +1 -1
- package/dist/Errors/types.js +2 -0
- package/dist/Errors/types.js.map +1 -1
- package/dist/Events/impl/index.js +1 -1
- package/dist/Events/impl/index.js.map +1 -1
- package/dist/Metrics/index.js +102 -41
- package/dist/Metrics/index.js.map +1 -1
- package/dist/Metrics/index.test.js +10 -4
- package/dist/Metrics/index.test.js.map +1 -1
- package/dist/Metrics/types.js +4 -1
- package/dist/Metrics/types.js.map +1 -1
- package/dist/SDKConnector/types.js.map +1 -1
- package/dist/Voicemail/BroadworksBackendConnector.js +154 -91
- package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -1
- package/dist/Voicemail/BroadworksBackendConnector.test.js +99 -19
- package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -1
- package/dist/Voicemail/UcmBackendConnector.js +105 -54
- package/dist/Voicemail/UcmBackendConnector.js.map +1 -1
- package/dist/Voicemail/UcmBackendConnector.test.js +127 -17
- package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -1
- package/dist/Voicemail/Voicemail.js +198 -79
- package/dist/Voicemail/Voicemail.js.map +1 -1
- package/dist/Voicemail/Voicemail.test.js +188 -23
- package/dist/Voicemail/Voicemail.test.js.map +1 -1
- package/dist/Voicemail/WxCallBackendConnector.js +277 -161
- package/dist/Voicemail/WxCallBackendConnector.js.map +1 -1
- package/dist/Voicemail/WxCallBackendConnector.test.js +268 -10
- package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -1
- package/dist/Voicemail/constants.js +25 -1
- package/dist/Voicemail/constants.js.map +1 -1
- package/dist/Voicemail/types.js.map +1 -1
- package/dist/common/Utils.js +168 -104
- package/dist/common/Utils.js.map +1 -1
- package/dist/common/Utils.test.js +199 -35
- package/dist/common/Utils.test.js.map +1 -1
- package/dist/common/constants.js +2 -1
- package/dist/common/constants.js.map +1 -1
- package/dist/common/testUtil.js +3 -0
- package/dist/common/testUtil.js.map +1 -1
- package/dist/common/types.js.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/module/CallHistory/CallHistory.js +32 -13
- package/dist/module/CallHistory/constants.js +6 -0
- package/dist/module/CallSettings/CallSettings.js +36 -3
- package/dist/module/CallSettings/UcmBackendConnector.js +50 -5
- package/dist/module/CallSettings/WxCallBackendConnector.js +54 -18
- package/dist/module/CallSettings/constants.js +12 -0
- package/dist/module/CallingClient/CallingClient.js +54 -16
- package/dist/module/CallingClient/calling/call.js +172 -121
- package/dist/module/CallingClient/calling/callManager.js +51 -26
- package/dist/module/CallingClient/constants.js +102 -2
- package/dist/module/CallingClient/line/index.js +37 -8
- package/dist/module/CallingClient/registration/register.js +103 -64
- package/dist/module/Contacts/ContactsClient.js +65 -21
- package/dist/module/Contacts/constants.js +10 -0
- package/dist/module/Errors/types.js +2 -0
- package/dist/module/Events/impl/index.js +1 -1
- package/dist/module/Metrics/index.js +57 -2
- package/dist/module/Metrics/types.js +3 -0
- package/dist/module/Voicemail/BroadworksBackendConnector.js +66 -17
- package/dist/module/Voicemail/UcmBackendConnector.js +51 -11
- package/dist/module/Voicemail/Voicemail.js +109 -9
- package/dist/module/Voicemail/WxCallBackendConnector.js +67 -18
- package/dist/module/Voicemail/constants.js +21 -0
- package/dist/module/common/Utils.js +51 -12
- package/dist/module/common/constants.js +1 -0
- package/dist/module/common/testUtil.js +3 -0
- package/dist/module/index.js +1 -0
- package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
- package/dist/types/CallHistory/constants.d.ts +6 -0
- package/dist/types/CallHistory/constants.d.ts.map +1 -1
- package/dist/types/CallSettings/CallSettings.d.ts.map +1 -1
- package/dist/types/CallSettings/UcmBackendConnector.d.ts.map +1 -1
- package/dist/types/CallSettings/WxCallBackendConnector.d.ts.map +1 -1
- package/dist/types/CallSettings/constants.d.ts +12 -0
- package/dist/types/CallSettings/constants.d.ts.map +1 -1
- package/dist/types/CallingClient/CallingClient.d.ts +2 -3
- package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
- package/dist/types/CallingClient/constants.d.ts +102 -2
- package/dist/types/CallingClient/constants.d.ts.map +1 -1
- package/dist/types/CallingClient/line/index.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/register.d.ts +3 -1
- package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/types.d.ts +1 -0
- package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
- package/dist/types/Contacts/ContactsClient.d.ts.map +1 -1
- package/dist/types/Contacts/constants.d.ts +10 -0
- package/dist/types/Contacts/constants.d.ts.map +1 -1
- package/dist/types/Errors/types.d.ts +2 -0
- package/dist/types/Errors/types.d.ts.map +1 -1
- package/dist/types/Metrics/index.d.ts +1 -1
- package/dist/types/Metrics/index.d.ts.map +1 -1
- package/dist/types/Metrics/types.d.ts +7 -2
- package/dist/types/Metrics/types.d.ts.map +1 -1
- package/dist/types/SDKConnector/types.d.ts +11 -2
- package/dist/types/SDKConnector/types.d.ts.map +1 -1
- package/dist/types/Voicemail/BroadworksBackendConnector.d.ts.map +1 -1
- package/dist/types/Voicemail/UcmBackendConnector.d.ts.map +1 -1
- package/dist/types/Voicemail/Voicemail.d.ts +1 -1
- package/dist/types/Voicemail/Voicemail.d.ts.map +1 -1
- package/dist/types/Voicemail/WxCallBackendConnector.d.ts +3 -1
- package/dist/types/Voicemail/WxCallBackendConnector.d.ts.map +1 -1
- package/dist/types/Voicemail/constants.d.ts +21 -0
- package/dist/types/Voicemail/constants.d.ts.map +1 -1
- package/dist/types/Voicemail/types.d.ts +1 -1
- package/dist/types/Voicemail/types.d.ts.map +1 -1
- package/dist/types/common/Utils.d.ts +4 -4
- package/dist/types/common/Utils.d.ts.map +1 -1
- package/dist/types/common/constants.d.ts +1 -0
- package/dist/types/common/constants.d.ts.map +1 -1
- package/dist/types/common/testUtil.d.ts +3 -0
- package/dist/types/common/testUtil.d.ts.map +1 -1
- package/dist/types/common/types.d.ts +12 -0
- package/dist/types/common/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- 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 =
|
|
177
|
+
_context.next = 6;
|
|
170
178
|
return callManager.createCall(_types.CallDirection.OUTBOUND, deviceId, mockLineId, dest);
|
|
171
|
-
case
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
309
|
-
|
|
310
|
-
|
|
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 (
|
|
322
|
+
return callManager['dequeueWsEvents'](mediaEvent);
|
|
314
323
|
case 8:
|
|
315
324
|
_context6.next = 10;
|
|
316
|
-
return
|
|
325
|
+
return (0, _Utils.waitForMsecs)(50);
|
|
317
326
|
case 10:
|
|
318
327
|
_context6.next = 12;
|
|
319
|
-
return (
|
|
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(
|
|
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
|
|
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
|
-
|
|
514
|
+
jest.clearAllMocks();
|
|
515
|
+
_context9.next = 4;
|
|
493
516
|
return callManager['dequeueWsEvents'](mediaEvent);
|
|
494
|
-
case
|
|
517
|
+
case 4:
|
|
495
518
|
eventData = {
|
|
496
519
|
data: mediaEvent.data.message,
|
|
497
520
|
type: 'E_RECV_ROAP_OFFER'
|
|
498
521
|
};
|
|
499
|
-
expect(funcSpy).
|
|
500
|
-
case
|
|
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
|
-
|
|
535
|
+
jest.clearAllMocks();
|
|
536
|
+
_context10.next = 4;
|
|
513
537
|
return callManager['dequeueWsEvents'](mediaEvent);
|
|
514
|
-
case
|
|
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
|
|
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
|
-
|
|
556
|
+
jest.clearAllMocks();
|
|
557
|
+
_context11.next = 4;
|
|
533
558
|
return callManager['dequeueWsEvents'](mediaEvent);
|
|
534
|
-
case
|
|
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
|
|
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
|
-
|
|
577
|
+
jest.clearAllMocks();
|
|
578
|
+
_context12.next = 4;
|
|
553
579
|
return callManager['dequeueWsEvents'](mediaEvent);
|
|
554
|
-
case
|
|
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
|
|
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
|
-
|
|
603
|
+
jest.clearAllMocks();
|
|
604
|
+
infoSpy = jest.spyOn(_Logger.default, 'info');
|
|
605
|
+
_context13.next = 5;
|
|
576
606
|
return callManager['dequeueWsEvents'](mediaEvent);
|
|
577
|
-
case
|
|
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
|
-
|
|
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
|
-
|
|
637
|
+
jest.clearAllMocks();
|
|
638
|
+
infoSpy = jest.spyOn(_Logger.default, 'info');
|
|
639
|
+
_context14.next = 5;
|
|
594
640
|
return callManager['dequeueWsEvents'](mediaEvent);
|
|
595
|
-
case
|
|
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
|
-
|
|
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
|
-
|
|
727
|
+
jest.clearAllMocks();
|
|
728
|
+
_context18.next = 4;
|
|
670
729
|
return callManager['dequeueWsEvents'](setupEvent);
|
|
671
|
-
case
|
|
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
|
|
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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"}
|