@webex/calling 3.12.0-next.6 → 3.12.0-next.60
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/CallingClient/CallingClient.js +454 -224
- package/dist/CallingClient/CallingClient.js.map +1 -1
- package/dist/CallingClient/CallingClient.test.js +513 -154
- package/dist/CallingClient/CallingClient.test.js.map +1 -1
- package/dist/CallingClient/calling/call.js +589 -445
- package/dist/CallingClient/calling/call.js.map +1 -1
- package/dist/CallingClient/calling/call.test.js +695 -445
- package/dist/CallingClient/calling/call.test.js.map +1 -1
- package/dist/CallingClient/calling/callManager.js +81 -31
- package/dist/CallingClient/calling/callManager.js.map +1 -1
- package/dist/CallingClient/calling/callManager.test.js +123 -0
- package/dist/CallingClient/calling/callManager.test.js.map +1 -1
- package/dist/CallingClient/calling/types.js +2 -0
- package/dist/CallingClient/calling/types.js.map +1 -1
- package/dist/CallingClient/constants.js +28 -3
- package/dist/CallingClient/constants.js.map +1 -1
- package/dist/CallingClient/line/index.js +4 -1
- package/dist/CallingClient/line/index.js.map +1 -1
- package/dist/CallingClient/line/line.test.js +16 -1
- package/dist/CallingClient/line/line.test.js.map +1 -1
- package/dist/CallingClient/registration/register.js +724 -407
- package/dist/CallingClient/registration/register.js.map +1 -1
- package/dist/CallingClient/registration/register.test.js +380 -58
- package/dist/CallingClient/registration/register.test.js.map +1 -1
- package/dist/CallingClient/registration/types.js.map +1 -1
- package/dist/CallingClient/registration/webWorker.js +41 -104
- package/dist/CallingClient/registration/webWorker.js.map +1 -1
- package/dist/CallingClient/registration/webWorker.test.js +39 -153
- package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
- package/dist/CallingClient/registration/webWorkerStr.js +1 -1
- package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
- package/dist/CallingClient/types.js.map +1 -1
- package/dist/CallingClient/utils/constants.js +58 -0
- package/dist/CallingClient/utils/constants.js.map +1 -0
- package/dist/CallingClient/utils/index.js +63 -0
- package/dist/CallingClient/utils/index.js.map +1 -0
- package/dist/CallingClient/utils/mobiusSocketMapper.js +122 -0
- package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -0
- package/dist/CallingClient/utils/mobiusSocketMapper.test.js +221 -0
- package/dist/CallingClient/utils/mobiusSocketMapper.test.js.map +1 -0
- package/dist/CallingClient/utils/request.js +435 -0
- package/dist/CallingClient/utils/request.js.map +1 -0
- package/dist/CallingClient/utils/request.test.js +999 -0
- package/dist/CallingClient/utils/request.test.js.map +1 -0
- package/dist/CallingClient/utils/types.js +7 -0
- package/dist/CallingClient/utils/types.js.map +1 -0
- package/dist/CallingClient/utils/wsFeatureFlag.js +70 -0
- package/dist/CallingClient/utils/wsFeatureFlag.js.map +1 -0
- package/dist/CallingClient/utils/wsFeatureFlag.test.js +139 -0
- package/dist/CallingClient/utils/wsFeatureFlag.test.js.map +1 -0
- package/dist/Contacts/ContactsClient.js +13 -11
- package/dist/Contacts/ContactsClient.js.map +1 -1
- package/dist/Contacts/ContactsClient.test.js +3 -8
- package/dist/Contacts/ContactsClient.test.js.map +1 -1
- package/dist/Events/types.js +11 -11
- package/dist/Events/types.js.map +1 -1
- package/dist/Metrics/index.js +63 -2
- package/dist/Metrics/index.js.map +1 -1
- package/dist/Metrics/index.test.js +357 -1
- package/dist/Metrics/index.test.js.map +1 -1
- package/dist/Metrics/types.js +19 -1
- package/dist/Metrics/types.js.map +1 -1
- package/dist/SDKConnector/types.js.map +1 -1
- package/dist/common/Utils.js +156 -51
- package/dist/common/Utils.js.map +1 -1
- package/dist/common/Utils.test.js +79 -0
- package/dist/common/Utils.test.js.map +1 -1
- package/dist/common/testUtil.js +8 -4
- package/dist/common/testUtil.js.map +1 -1
- package/dist/common/types.js +2 -0
- package/dist/common/types.js.map +1 -1
- package/dist/index.js +37 -5
- package/dist/index.js.map +1 -1
- package/dist/mobius-socket/config.js +24 -0
- package/dist/mobius-socket/config.js.map +1 -0
- package/dist/mobius-socket/errors.js +143 -0
- package/dist/mobius-socket/errors.js.map +1 -0
- package/dist/mobius-socket/errors.test.js +20 -0
- package/dist/mobius-socket/errors.test.js.map +1 -0
- package/dist/mobius-socket/index.js +57 -0
- package/dist/mobius-socket/index.js.map +1 -0
- package/dist/mobius-socket/mobius-socket-events.test.js +492 -0
- package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -0
- package/dist/mobius-socket/mobius-socket.js +849 -0
- package/dist/mobius-socket/mobius-socket.js.map +1 -0
- package/dist/mobius-socket/mobius-socket.test.js +1898 -0
- package/dist/mobius-socket/mobius-socket.test.js.map +1 -0
- package/dist/mobius-socket/socket/constants.js +55 -0
- package/dist/mobius-socket/socket/constants.js.map +1 -0
- package/dist/mobius-socket/socket/index.js +15 -0
- package/dist/mobius-socket/socket/index.js.map +1 -0
- package/dist/mobius-socket/socket/socket-base.js +604 -0
- package/dist/mobius-socket/socket/socket-base.js.map +1 -0
- package/dist/mobius-socket/socket/socket.js +19 -0
- package/dist/mobius-socket/socket/socket.js.map +1 -0
- package/dist/mobius-socket/socket/socket.shim.js +26 -0
- package/dist/mobius-socket/socket/socket.shim.js.map +1 -0
- package/dist/mobius-socket/socket/types.js +7 -0
- package/dist/mobius-socket/socket/types.js.map +1 -0
- package/dist/mobius-socket/socket.test.js +727 -0
- package/dist/mobius-socket/socket.test.js.map +1 -0
- package/dist/mobius-socket/test/mocha-helpers.js +23 -0
- package/dist/mobius-socket/test/mocha-helpers.js.map +1 -0
- package/dist/mobius-socket/test/promise-tick.js +28 -0
- package/dist/mobius-socket/test/promise-tick.js.map +1 -0
- package/dist/mobius-socket/types.js +7 -0
- package/dist/mobius-socket/types.js.map +1 -0
- package/dist/module/CallingClient/CallingClient.js +126 -10
- package/dist/module/CallingClient/calling/call.js +177 -61
- package/dist/module/CallingClient/calling/callManager.js +39 -7
- package/dist/module/CallingClient/calling/types.js +2 -0
- package/dist/module/CallingClient/constants.js +24 -0
- package/dist/module/CallingClient/line/index.js +2 -2
- package/dist/module/CallingClient/registration/register.js +239 -63
- package/dist/module/CallingClient/registration/webWorker.js +42 -61
- package/dist/module/CallingClient/registration/webWorkerStr.js +47 -82
- package/dist/module/CallingClient/utils/constants.js +36 -0
- package/dist/module/CallingClient/utils/index.js +5 -0
- package/dist/module/CallingClient/utils/mobiusSocketMapper.js +72 -0
- package/dist/module/CallingClient/utils/request.js +211 -0
- package/dist/module/CallingClient/utils/types.js +1 -0
- package/dist/module/CallingClient/utils/wsFeatureFlag.js +41 -0
- package/dist/module/Contacts/ContactsClient.js +1 -1
- package/dist/module/Events/types.js +4 -10
- package/dist/module/Metrics/index.js +48 -1
- package/dist/module/Metrics/types.js +18 -0
- package/dist/module/common/Utils.js +60 -17
- package/dist/module/common/testUtil.js +5 -1
- package/dist/module/common/types.js +2 -0
- package/dist/module/index.js +3 -2
- package/dist/module/mobius-socket/config.js +15 -0
- package/dist/module/mobius-socket/errors.js +58 -0
- package/dist/module/mobius-socket/index.js +24 -0
- package/dist/module/mobius-socket/mobius-socket.js +593 -0
- package/dist/module/mobius-socket/socket/constants.js +26 -0
- package/dist/module/mobius-socket/socket/index.js +4 -0
- package/dist/module/mobius-socket/socket/socket-base.js +368 -0
- package/dist/module/mobius-socket/socket/socket.js +9 -0
- package/dist/module/mobius-socket/socket/socket.shim.js +12 -0
- package/dist/module/mobius-socket/socket/types.js +1 -0
- package/dist/module/mobius-socket/types.js +1 -0
- package/dist/types/CallingClient/CallingClient.d.ts +8 -0
- package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/call.d.ts +12 -0
- package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/callManager.d.ts +4 -2
- package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
- package/dist/types/CallingClient/calling/types.d.ts +34 -9
- package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
- package/dist/types/CallingClient/constants.d.ts +24 -0
- package/dist/types/CallingClient/constants.d.ts.map +1 -1
- package/dist/types/CallingClient/line/index.d.ts +1 -1
- package/dist/types/CallingClient/line/index.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/register.d.ts +7 -1
- package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/types.d.ts +4 -2
- package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
- package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
- package/dist/types/CallingClient/types.d.ts +1 -0
- package/dist/types/CallingClient/types.d.ts.map +1 -1
- package/dist/types/CallingClient/utils/constants.d.ts +35 -0
- package/dist/types/CallingClient/utils/constants.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/index.d.ts +6 -0
- package/dist/types/CallingClient/utils/index.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +5 -0
- package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/request.d.ts +28 -0
- package/dist/types/CallingClient/utils/request.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/types.d.ts +34 -0
- package/dist/types/CallingClient/utils/types.d.ts.map +1 -0
- package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts +4 -0
- package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts.map +1 -0
- package/dist/types/Events/types.d.ts +14 -13
- package/dist/types/Events/types.d.ts.map +1 -1
- package/dist/types/Metrics/index.d.ts.map +1 -1
- package/dist/types/Metrics/types.d.ts +19 -2
- package/dist/types/Metrics/types.d.ts.map +1 -1
- package/dist/types/SDKConnector/types.d.ts +37 -12
- package/dist/types/SDKConnector/types.d.ts.map +1 -1
- package/dist/types/common/Utils.d.ts +11 -3
- package/dist/types/common/Utils.d.ts.map +1 -1
- package/dist/types/common/testUtil.d.ts +4 -1
- package/dist/types/common/testUtil.d.ts.map +1 -1
- package/dist/types/common/types.d.ts +3 -0
- package/dist/types/common/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/mobius-socket/config.d.ts +17 -0
- package/dist/types/mobius-socket/config.d.ts.map +1 -0
- package/dist/types/mobius-socket/errors.d.ts +32 -0
- package/dist/types/mobius-socket/errors.d.ts.map +1 -0
- package/dist/types/mobius-socket/index.d.ts +14 -0
- package/dist/types/mobius-socket/index.d.ts.map +1 -0
- package/dist/types/mobius-socket/mobius-socket.d.ts +48 -0
- package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/constants.d.ts +27 -0
- package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/index.d.ts +5 -0
- package/dist/types/mobius-socket/socket/index.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/socket-base.d.ts +43 -0
- package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/socket.d.ts +6 -0
- package/dist/types/mobius-socket/socket/socket.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/socket.shim.d.ts +6 -0
- package/dist/types/mobius-socket/socket/socket.shim.d.ts.map +1 -0
- package/dist/types/mobius-socket/socket/types.d.ts +61 -0
- package/dist/types/mobius-socket/socket/types.d.ts.map +1 -0
- package/dist/types/mobius-socket/types.d.ts +21 -0
- package/dist/types/mobius-socket/types.d.ts.map +1 -0
- package/package.json +20 -5
- package/src/mobius-socket/socket/socket.shim.ts +22 -0
- package/src/mobius-socket/socket/socket.ts +14 -0
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
4
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
5
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
6
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
7
|
+
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
8
|
+
var _Object$defineProperty2 = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
9
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
10
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
11
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-property"));
|
|
12
|
+
var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
|
|
13
|
+
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
14
|
+
var _apply = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/apply"));
|
|
15
|
+
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
16
|
+
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
17
|
+
var _construct2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/construct"));
|
|
18
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
19
|
+
var _wrap2 = _interopRequireDefault(require("lodash/wrap"));
|
|
20
|
+
var _crypto = require("crypto");
|
|
21
|
+
var _sinon = _interopRequireDefault(require("sinon"));
|
|
22
|
+
var _testHelperChai = require("@webex/test-helper-chai");
|
|
23
|
+
var _testHelperMockWebex = _interopRequireDefault(require("@webex/test-helper-mock-webex"));
|
|
24
|
+
var _testHelperMockWebSocket = _interopRequireDefault(require("@webex/test-helper-mock-web-socket"));
|
|
25
|
+
var _index = _interopRequireDefault(require("./index"));
|
|
26
|
+
var _config = _interopRequireDefault(require("./config"));
|
|
27
|
+
var _socket = _interopRequireDefault(require("./socket"));
|
|
28
|
+
var _constants = require("./socket/constants");
|
|
29
|
+
var _promiseTick = _interopRequireDefault(require("./test/promise-tick"));
|
|
30
|
+
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
31
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty3.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty2(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } /*!
|
|
32
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
33
|
+
*/
|
|
34
|
+
if (!crypto.randomUUID) {
|
|
35
|
+
(0, _defineProperty2.default)(crypto, 'randomUUID', {
|
|
36
|
+
value: _crypto.randomUUID,
|
|
37
|
+
configurable: true
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
describe('plugin-mobiusSocket', function () {
|
|
41
|
+
var createUuid = function createUuid() {
|
|
42
|
+
return crypto.randomUUID();
|
|
43
|
+
};
|
|
44
|
+
describe('MobiusSocket', function () {
|
|
45
|
+
describe('Events', function () {
|
|
46
|
+
var mobiusSocket;
|
|
47
|
+
var mockWebSocket;
|
|
48
|
+
var originalSendSpy;
|
|
49
|
+
var socketOpenStub;
|
|
50
|
+
var usingFakeTimers;
|
|
51
|
+
var webex;
|
|
52
|
+
var fakeTestMessage = {
|
|
53
|
+
id: createUuid(),
|
|
54
|
+
data: {
|
|
55
|
+
eventType: 'fake.test'
|
|
56
|
+
},
|
|
57
|
+
timestamp: (0, _now.default)(),
|
|
58
|
+
trackingId: "suffix_".concat(createUuid(), "_").concat((0, _now.default)())
|
|
59
|
+
};
|
|
60
|
+
var statusStartTypingMessage = {
|
|
61
|
+
id: createUuid(),
|
|
62
|
+
data: {
|
|
63
|
+
eventType: 'status.start_typing',
|
|
64
|
+
actor: {
|
|
65
|
+
id: 'actorId'
|
|
66
|
+
},
|
|
67
|
+
conversationId: createUuid()
|
|
68
|
+
},
|
|
69
|
+
timestamp: (0, _now.default)(),
|
|
70
|
+
trackingId: "suffix_".concat(createUuid(), "_").concat((0, _now.default)())
|
|
71
|
+
};
|
|
72
|
+
var emitAuthResponse = function emitAuthResponse() {
|
|
73
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
74
|
+
_ref$statusCode = _ref.statusCode,
|
|
75
|
+
statusCode = _ref$statusCode === void 0 ? 200 : _ref$statusCode,
|
|
76
|
+
_ref$statusMessage = _ref.statusMessage,
|
|
77
|
+
statusMessage = _ref$statusMessage === void 0 ? 'OK' : _ref$statusMessage;
|
|
78
|
+
var sendSpy = mockWebSocket.send.lastCall ? mockWebSocket.send : originalSendSpy;
|
|
79
|
+
var authRequest = JSON.parse(sendSpy.lastCall.args[0]);
|
|
80
|
+
mockWebSocket.emit('message', {
|
|
81
|
+
data: (0, _stringify.default)({
|
|
82
|
+
type: 'response_event',
|
|
83
|
+
subtype: _constants.MESSAGE_TYPES.AUTH,
|
|
84
|
+
trackingId: authRequest.trackingId,
|
|
85
|
+
statusCode: statusCode,
|
|
86
|
+
statusMessage: statusMessage
|
|
87
|
+
})
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
beforeEach(function () {
|
|
91
|
+
jest.useFakeTimers({
|
|
92
|
+
doNotFake: ['nextTick']
|
|
93
|
+
});
|
|
94
|
+
usingFakeTimers = true;
|
|
95
|
+
});
|
|
96
|
+
afterEach(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
97
|
+
var _t;
|
|
98
|
+
return _regenerator.default.wrap(function (_context) {
|
|
99
|
+
while (1) switch (_context.prev = _context.next) {
|
|
100
|
+
case 0:
|
|
101
|
+
if (usingFakeTimers) {
|
|
102
|
+
jest.useRealTimers();
|
|
103
|
+
usingFakeTimers = false;
|
|
104
|
+
}
|
|
105
|
+
if (!mobiusSocket) {
|
|
106
|
+
_context.next = 4;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
_context.prev = 1;
|
|
110
|
+
_context.next = 2;
|
|
111
|
+
return mobiusSocket.disconnect();
|
|
112
|
+
case 2:
|
|
113
|
+
_context.next = 4;
|
|
114
|
+
break;
|
|
115
|
+
case 3:
|
|
116
|
+
_context.prev = 3;
|
|
117
|
+
_t = _context["catch"](1);
|
|
118
|
+
case 4:
|
|
119
|
+
if (mockWebSocket && typeof mockWebSocket.close === 'function') {
|
|
120
|
+
try {
|
|
121
|
+
mockWebSocket.close();
|
|
122
|
+
} catch (e) {
|
|
123
|
+
// Ignore cleanup errors in tests.
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Restore stubs
|
|
127
|
+
if (_socket.default.getWebSocketConstructor.restore) {
|
|
128
|
+
_socket.default.getWebSocketConstructor.restore();
|
|
129
|
+
}
|
|
130
|
+
if (socketOpenStub && socketOpenStub.restore) {
|
|
131
|
+
socketOpenStub.restore();
|
|
132
|
+
}
|
|
133
|
+
case 5:
|
|
134
|
+
case "end":
|
|
135
|
+
return _context.stop();
|
|
136
|
+
}
|
|
137
|
+
}, _callee, null, [[1, 3]]);
|
|
138
|
+
})));
|
|
139
|
+
beforeEach(function () {
|
|
140
|
+
webex = new _testHelperMockWebex.default();
|
|
141
|
+
webex.internal.device.registered = true;
|
|
142
|
+
webex.internal.metrics.submitClientMetrics = _sinon.default.stub();
|
|
143
|
+
webex.trackingId = 'fakeTrackingId';
|
|
144
|
+
webex.logger = console;
|
|
145
|
+
_sinon.default.stub(_socket.default, 'getWebSocketConstructor').callsFake(function () {
|
|
146
|
+
return function () {
|
|
147
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
148
|
+
args[_key] = arguments[_key];
|
|
149
|
+
}
|
|
150
|
+
mockWebSocket = (0, _construct2.default)(_testHelperMockWebSocket.default, args);
|
|
151
|
+
originalSendSpy = mockWebSocket.send;
|
|
152
|
+
return mockWebSocket;
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
var origOpen = _socket.default.prototype.open;
|
|
156
|
+
socketOpenStub = _sinon.default.stub(_socket.default.prototype, 'open').callsFake(function () {
|
|
157
|
+
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
158
|
+
args[_key2] = arguments[_key2];
|
|
159
|
+
}
|
|
160
|
+
var promise = (0, _apply.default)(origOpen, this, args);
|
|
161
|
+
process.nextTick(function () {
|
|
162
|
+
mockWebSocket.open();
|
|
163
|
+
// Simulate Mobius auth response after socket open
|
|
164
|
+
process.nextTick(function () {
|
|
165
|
+
emitAuthResponse();
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
return promise;
|
|
169
|
+
});
|
|
170
|
+
mobiusSocket = new _index.default(webex, _objectSpread({}, _config.default.mobiusSocket));
|
|
171
|
+
mobiusSocket.logger = {
|
|
172
|
+
debug: jest.fn(),
|
|
173
|
+
error: jest.fn(),
|
|
174
|
+
info: jest.fn(),
|
|
175
|
+
log: jest.fn(),
|
|
176
|
+
warn: jest.fn()
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
it('removes all listeners for an event when off() is called without a listener', function () {
|
|
180
|
+
var firstListener = _sinon.default.stub();
|
|
181
|
+
var secondListener = _sinon.default.stub();
|
|
182
|
+
mobiusSocket.on('event:fake.test', firstListener);
|
|
183
|
+
mobiusSocket.on('event:fake.test', secondListener);
|
|
184
|
+
mobiusSocket.off('event:fake.test');
|
|
185
|
+
mobiusSocket.emit('event:fake.test', fakeTestMessage);
|
|
186
|
+
_testHelperChai.assert.notCalled(firstListener);
|
|
187
|
+
_testHelperChai.assert.notCalled(secondListener);
|
|
188
|
+
});
|
|
189
|
+
afterEach(function () {
|
|
190
|
+
if (socketOpenStub) {
|
|
191
|
+
socketOpenStub.restore();
|
|
192
|
+
}
|
|
193
|
+
if (_socket.default.getWebSocketConstructor.restore) {
|
|
194
|
+
_socket.default.getWebSocketConstructor.restore();
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
describe('when connected', function () {
|
|
198
|
+
it('emits the `online` event', function () {
|
|
199
|
+
var spy = _sinon.default.spy();
|
|
200
|
+
mobiusSocket.on('online', spy);
|
|
201
|
+
var promise = mobiusSocket.connect();
|
|
202
|
+
return promise.then(function () {
|
|
203
|
+
return _testHelperChai.assert.called(spy);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
describe('when disconnected', function () {
|
|
208
|
+
it('emits the `offline` event', function () {
|
|
209
|
+
var spy = _sinon.default.spy();
|
|
210
|
+
mobiusSocket.on('offline', spy);
|
|
211
|
+
var promise = mobiusSocket.connect();
|
|
212
|
+
mockWebSocket.open();
|
|
213
|
+
return promise.then(function () {
|
|
214
|
+
var disconnectPromise = mobiusSocket.disconnect();
|
|
215
|
+
mockWebSocket.emit('close', {
|
|
216
|
+
code: 1000,
|
|
217
|
+
reason: 'Done'
|
|
218
|
+
});
|
|
219
|
+
return disconnectPromise;
|
|
220
|
+
}).then(function () {
|
|
221
|
+
return _testHelperChai.assert.calledOnce(spy);
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
describe('when reconnected', function () {
|
|
225
|
+
it('emits the `online` event', function () {
|
|
226
|
+
var spy = _sinon.default.spy();
|
|
227
|
+
mobiusSocket.on('online', spy);
|
|
228
|
+
var promise = mobiusSocket.connect();
|
|
229
|
+
mockWebSocket.open();
|
|
230
|
+
return promise.then(function () {
|
|
231
|
+
return _testHelperChai.assert.calledOnce(spy);
|
|
232
|
+
}).then(function () {
|
|
233
|
+
return mockWebSocket.emit('close', {
|
|
234
|
+
code: 1000,
|
|
235
|
+
reason: 'Idle'
|
|
236
|
+
});
|
|
237
|
+
}).then(function () {
|
|
238
|
+
return mobiusSocket.connect();
|
|
239
|
+
}).then(function () {
|
|
240
|
+
return _testHelperChai.assert.calledTwice(spy);
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
describe('when `mercury.buffer_state` is received', function () {
|
|
246
|
+
// This test is here because the buffer states message may arrive before
|
|
247
|
+
// the mobiusSocket Promise resolves.
|
|
248
|
+
it('gets emitted', function () {
|
|
249
|
+
var sendSpy;
|
|
250
|
+
var resolveTest;
|
|
251
|
+
var rejectTest;
|
|
252
|
+
var bufferStateSpy = _sinon.default.spy();
|
|
253
|
+
var onlineSpy = _sinon.default.spy();
|
|
254
|
+
mobiusSocket.on('event:mercury.buffer_state', bufferStateSpy);
|
|
255
|
+
mobiusSocket.on('online', onlineSpy);
|
|
256
|
+
_socket.default.getWebSocketConstructor.callsFake(function () {
|
|
257
|
+
return function () {
|
|
258
|
+
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
259
|
+
args[_key3] = arguments[_key3];
|
|
260
|
+
}
|
|
261
|
+
mockWebSocket = (0, _construct2.default)(_testHelperMockWebSocket.default, args);
|
|
262
|
+
sendSpy = mockWebSocket.send;
|
|
263
|
+
mockWebSocket.send = (0, _wrap2.default)(mockWebSocket.send, function (fn) {
|
|
264
|
+
var _this = this;
|
|
265
|
+
for (var _len4 = arguments.length, sendArgs = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
|
|
266
|
+
sendArgs[_key4 - 1] = arguments[_key4];
|
|
267
|
+
}
|
|
268
|
+
process.nextTick(function () {
|
|
269
|
+
(0, _apply.default)(fn, _this, sendArgs);
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
process.nextTick(function () {
|
|
273
|
+
_testHelperChai.assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is still connecting');
|
|
274
|
+
_testHelperChai.assert.isFalse(mobiusSocket.connected, 'MobiusSocket has not yet connected');
|
|
275
|
+
_testHelperChai.assert.notCalled(onlineSpy);
|
|
276
|
+
_testHelperChai.assert.lengthOf(sendSpy.args, 0, 'The client has not yet sent the auth message');
|
|
277
|
+
// set websocket readystate to 1 to allow a successful send message
|
|
278
|
+
mockWebSocket.readyState = 1;
|
|
279
|
+
mockWebSocket.emit('open');
|
|
280
|
+
mockWebSocket.emit('message', {
|
|
281
|
+
data: (0, _stringify.default)({
|
|
282
|
+
id: createUuid(),
|
|
283
|
+
data: {
|
|
284
|
+
eventType: 'mercury.buffer_state'
|
|
285
|
+
}
|
|
286
|
+
})
|
|
287
|
+
});
|
|
288
|
+
// using lengthOf because notCalled doesn't allow the helpful
|
|
289
|
+
// string assertion
|
|
290
|
+
_testHelperChai.assert.lengthOf(sendSpy.args, 0, 'The client has not acked the buffer_state message');
|
|
291
|
+
(0, _promiseTick.default)(1).then(function () {
|
|
292
|
+
_testHelperChai.assert.called(bufferStateSpy);
|
|
293
|
+
resolveTest();
|
|
294
|
+
}).catch(rejectTest);
|
|
295
|
+
});
|
|
296
|
+
return mockWebSocket;
|
|
297
|
+
};
|
|
298
|
+
});
|
|
299
|
+
return new _promise.default(function (resolve, reject) {
|
|
300
|
+
resolveTest = resolve;
|
|
301
|
+
rejectTest = reject;
|
|
302
|
+
mobiusSocket.connect().catch(function () {});
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
describe('when a CloseEvent is received', function () {
|
|
307
|
+
var events = [{
|
|
308
|
+
code: 1000,
|
|
309
|
+
reason: 'idle',
|
|
310
|
+
action: 'close'
|
|
311
|
+
}, {
|
|
312
|
+
code: 1000,
|
|
313
|
+
reason: 'done (forced)',
|
|
314
|
+
action: 'close'
|
|
315
|
+
}, {
|
|
316
|
+
code: 1000,
|
|
317
|
+
reason: 'pong not received',
|
|
318
|
+
action: 'close'
|
|
319
|
+
}, {
|
|
320
|
+
code: 1000,
|
|
321
|
+
reason: 'pong mismatch',
|
|
322
|
+
action: 'close'
|
|
323
|
+
}, {
|
|
324
|
+
code: 1000,
|
|
325
|
+
action: 'close'
|
|
326
|
+
}, {
|
|
327
|
+
code: 1003,
|
|
328
|
+
action: 'close'
|
|
329
|
+
}, {
|
|
330
|
+
code: 1001,
|
|
331
|
+
action: 'close'
|
|
332
|
+
}, {
|
|
333
|
+
code: 1005,
|
|
334
|
+
action: 'reconnect'
|
|
335
|
+
}, {
|
|
336
|
+
code: 1006,
|
|
337
|
+
action: 'reconnect'
|
|
338
|
+
}, {
|
|
339
|
+
code: 1011,
|
|
340
|
+
action: 'reconnect'
|
|
341
|
+
}, {
|
|
342
|
+
code: 4000,
|
|
343
|
+
action: 'replace'
|
|
344
|
+
}, {
|
|
345
|
+
action: 'close'
|
|
346
|
+
}];
|
|
347
|
+
events.forEach(function (def) {
|
|
348
|
+
var action = def.action,
|
|
349
|
+
reason = def.reason,
|
|
350
|
+
code = def.code;
|
|
351
|
+
var description;
|
|
352
|
+
if (code && reason) {
|
|
353
|
+
description = "with code `".concat(code, "` and reason `").concat(reason, "`");
|
|
354
|
+
} else if (code) {
|
|
355
|
+
description = "with code `".concat(code, "`");
|
|
356
|
+
} else if (reason) {
|
|
357
|
+
description = "with reason `".concat(reason, "`");
|
|
358
|
+
}
|
|
359
|
+
describe("when an event ".concat(description, " is received"), function () {
|
|
360
|
+
it("takes the ".concat(action, " action"), function () {
|
|
361
|
+
if (mobiusSocket.reconnect.restore) {
|
|
362
|
+
mobiusSocket.reconnect.restore();
|
|
363
|
+
}
|
|
364
|
+
_sinon.default.spy(mobiusSocket, 'connect');
|
|
365
|
+
var offlineSpy = _sinon.default.spy();
|
|
366
|
+
var permanentSpy = _sinon.default.spy();
|
|
367
|
+
var transientSpy = _sinon.default.spy();
|
|
368
|
+
var replacedSpy = _sinon.default.spy();
|
|
369
|
+
mobiusSocket.on('offline', offlineSpy);
|
|
370
|
+
mobiusSocket.on('offline.permanent', permanentSpy);
|
|
371
|
+
mobiusSocket.on('offline.transient', transientSpy);
|
|
372
|
+
mobiusSocket.on('offline.replaced', replacedSpy);
|
|
373
|
+
var promise = mobiusSocket.connect();
|
|
374
|
+
mockWebSocket.open();
|
|
375
|
+
return promise.then(function () {
|
|
376
|
+
// Make sure mobiusSocket.connect has a call count of zero
|
|
377
|
+
mobiusSocket.connect.resetHistory();
|
|
378
|
+
mockWebSocket.emit('close', {
|
|
379
|
+
code: code,
|
|
380
|
+
reason: reason
|
|
381
|
+
});
|
|
382
|
+
return (0, _promiseTick.default)(1);
|
|
383
|
+
}).then(function () {
|
|
384
|
+
_testHelperChai.assert.called(offlineSpy);
|
|
385
|
+
_testHelperChai.assert.calledWith(offlineSpy, {
|
|
386
|
+
code: code,
|
|
387
|
+
reason: reason
|
|
388
|
+
});
|
|
389
|
+
switch (action) {
|
|
390
|
+
case 'close':
|
|
391
|
+
_testHelperChai.assert.called(permanentSpy);
|
|
392
|
+
_testHelperChai.assert.notCalled(transientSpy);
|
|
393
|
+
_testHelperChai.assert.notCalled(replacedSpy);
|
|
394
|
+
break;
|
|
395
|
+
case 'reconnect':
|
|
396
|
+
_testHelperChai.assert.notCalled(permanentSpy);
|
|
397
|
+
_testHelperChai.assert.called(transientSpy);
|
|
398
|
+
_testHelperChai.assert.notCalled(replacedSpy);
|
|
399
|
+
break;
|
|
400
|
+
case 'replace':
|
|
401
|
+
_testHelperChai.assert.notCalled(permanentSpy);
|
|
402
|
+
_testHelperChai.assert.notCalled(transientSpy);
|
|
403
|
+
_testHelperChai.assert.called(replacedSpy);
|
|
404
|
+
break;
|
|
405
|
+
default:
|
|
406
|
+
(0, _testHelperChai.assert)(false, 'unreachable code reached');
|
|
407
|
+
}
|
|
408
|
+
_testHelperChai.assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');
|
|
409
|
+
if (action === 'reconnect') {
|
|
410
|
+
_testHelperChai.assert.called(mobiusSocket.connect);
|
|
411
|
+
_testHelperChai.assert.calledWith(mobiusSocket.connect, mockWebSocket.url);
|
|
412
|
+
_testHelperChai.assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');
|
|
413
|
+
|
|
414
|
+
// Block until reconnect completes so logs don't overlap
|
|
415
|
+
return mobiusSocket.connect();
|
|
416
|
+
}
|
|
417
|
+
_testHelperChai.assert.notCalled(mobiusSocket.connect);
|
|
418
|
+
_testHelperChai.assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');
|
|
419
|
+
return _promise.default.resolve();
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
});
|
|
425
|
+
describe('when a MessageEvent is received', function () {
|
|
426
|
+
it('emits the MobiusSocket envelope', function () {
|
|
427
|
+
var startSpy = _sinon.default.spy();
|
|
428
|
+
var stopSpy = _sinon.default.spy();
|
|
429
|
+
mobiusSocket.on('event:status.start_typing', startSpy);
|
|
430
|
+
mobiusSocket.on('event:status.stop_typing', stopSpy);
|
|
431
|
+
var promise = mobiusSocket.connect();
|
|
432
|
+
mockWebSocket.open();
|
|
433
|
+
return promise.then(function () {
|
|
434
|
+
mockWebSocket.emit('message', {
|
|
435
|
+
data: (0, _stringify.default)(statusStartTypingMessage)
|
|
436
|
+
});
|
|
437
|
+
return (0, _promiseTick.default)(1);
|
|
438
|
+
}).then(function () {
|
|
439
|
+
_testHelperChai.assert.calledOnce(startSpy);
|
|
440
|
+
_testHelperChai.assert.notCalled(stopSpy);
|
|
441
|
+
_testHelperChai.assert.calledWith(startSpy, statusStartTypingMessage);
|
|
442
|
+
});
|
|
443
|
+
});
|
|
444
|
+
it("emits the MobiusSocket envelope named by the MobiusSocket event's eventType", function () {
|
|
445
|
+
var startSpy = _sinon.default.spy();
|
|
446
|
+
var stopSpy = _sinon.default.spy();
|
|
447
|
+
mobiusSocket.on('event:status.start_typing', startSpy);
|
|
448
|
+
mobiusSocket.on('event:status.stop_typing', stopSpy);
|
|
449
|
+
var promise = mobiusSocket.connect();
|
|
450
|
+
mockWebSocket.open();
|
|
451
|
+
return promise.then(function () {
|
|
452
|
+
mockWebSocket.emit('message', {
|
|
453
|
+
data: (0, _stringify.default)(statusStartTypingMessage)
|
|
454
|
+
});
|
|
455
|
+
return (0, _promiseTick.default)(1);
|
|
456
|
+
}).then(function () {
|
|
457
|
+
_testHelperChai.assert.calledOnce(startSpy);
|
|
458
|
+
_testHelperChai.assert.notCalled(stopSpy);
|
|
459
|
+
_testHelperChai.assert.calledWith(startSpy, statusStartTypingMessage);
|
|
460
|
+
});
|
|
461
|
+
});
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
// Mobius does not use sequence numbers, so sequence-mismatch tests are not applicable
|
|
465
|
+
});
|
|
466
|
+
});
|
|
467
|
+
|
|
468
|
+
/*
|
|
469
|
+
// On mobiusSocket:
|
|
470
|
+
online
|
|
471
|
+
offline
|
|
472
|
+
offline.transient
|
|
473
|
+
offline.permanent
|
|
474
|
+
offline.replaced
|
|
475
|
+
event
|
|
476
|
+
event:locus.participant_joined
|
|
477
|
+
mockWebSocket.connection-failed
|
|
478
|
+
mockWebSocket.sequence-mismatch
|
|
479
|
+
// On webex:
|
|
480
|
+
mobiusSocket.online
|
|
481
|
+
mobiusSocket.offline
|
|
482
|
+
mobiusSocket.offline.transient
|
|
483
|
+
mobiusSocket.offline.permanent
|
|
484
|
+
mobiusSocket.offline.replaced
|
|
485
|
+
mobiusSocket.event
|
|
486
|
+
mobiusSocket.event:locus.participant_joined
|
|
487
|
+
mobiusSocket.mockWebSocket.connection-failed
|
|
488
|
+
mobiusSocket.mockWebSocket.sequence-mismatch
|
|
489
|
+
// TODO go through all it(`emits...`) and make sure corresponding tests are here
|
|
490
|
+
*/
|
|
491
|
+
});
|
|
492
|
+
//# sourceMappingURL=mobius-socket-events.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_crypto","require","_sinon","_interopRequireDefault","_testHelperChai","_testHelperMockWebex","_testHelperMockWebSocket","_index","_config","_socket","_constants","_promiseTick","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty3","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty2","crypto","randomUUID","_defineProperty2","value","configurable","describe","createUuid","mobiusSocket","mockWebSocket","originalSendSpy","socketOpenStub","usingFakeTimers","webex","fakeTestMessage","id","data","eventType","timestamp","_now","trackingId","concat","statusStartTypingMessage","actor","conversationId","emitAuthResponse","_ref","undefined","_ref$statusCode","statusCode","_ref$statusMessage","statusMessage","sendSpy","send","lastCall","authRequest","JSON","parse","args","emit","_stringify","type","subtype","MESSAGE_TYPES","AUTH","beforeEach","jest","useFakeTimers","doNotFake","afterEach","_asyncToGenerator2","_regenerator","mark","_callee","_t","wrap","_context","prev","next","useRealTimers","disconnect","close","Socket","getWebSocketConstructor","restore","stop","MockWebex","internal","device","registered","metrics","submitClientMetrics","sinon","stub","logger","console","callsFake","_len","Array","_key","_construct2","MockWebSocket","origOpen","prototype","open","_len2","_key2","promise","_apply","process","nextTick","MobiusSocket","mobiusConfig","debug","fn","error","info","log","warn","it","firstListener","secondListener","on","off","assert","notCalled","spy","connect","then","called","disconnectPromise","code","reason","calledOnce","calledTwice","resolveTest","rejectTest","bufferStateSpy","onlineSpy","_len3","_key3","_wrap2","_this","_len4","sendArgs","_key4","isTrue","connecting","isFalse","connected","lengthOf","readyState","promiseTick","catch","_promise","resolve","reject","events","action","def","description","reconnect","offlineSpy","permanentSpy","transientSpy","replacedSpy","resetHistory","calledWith","url","startSpy","stopSpy"],"sources":["mobius-socket-events.test.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {randomUUID} from 'crypto';\nimport sinon from 'sinon';\nimport {assert} from '@webex/test-helper-chai';\nimport MockWebex from '@webex/test-helper-mock-webex';\nimport MockWebSocket from '@webex/test-helper-mock-web-socket';\nimport {wrap} from 'lodash';\nimport MobiusSocket from './index';\nimport mobiusConfig from './config';\nimport Socket from './socket';\nimport {MESSAGE_TYPES} from './socket/constants';\n\nimport promiseTick from './test/promise-tick';\n\nif (!crypto.randomUUID) {\n Object.defineProperty(crypto, 'randomUUID', {\n value: randomUUID,\n configurable: true,\n });\n}\n\ndescribe('plugin-mobiusSocket', () => {\n const createUuid = () => crypto.randomUUID();\n\n describe('MobiusSocket', () => {\n describe('Events', () => {\n let mobiusSocket;\n let mockWebSocket;\n let originalSendSpy;\n let socketOpenStub;\n let usingFakeTimers;\n let webex;\n\n const fakeTestMessage = {\n id: createUuid(),\n data: {\n eventType: 'fake.test',\n },\n timestamp: Date.now(),\n trackingId: `suffix_${createUuid()}_${Date.now()}`,\n };\n\n const statusStartTypingMessage = {\n id: createUuid(),\n data: {\n eventType: 'status.start_typing',\n actor: {\n id: 'actorId',\n },\n conversationId: createUuid(),\n },\n timestamp: Date.now(),\n trackingId: `suffix_${createUuid()}_${Date.now()}`,\n };\n\n const emitAuthResponse = ({statusCode = 200, statusMessage = 'OK'} = {}) => {\n const sendSpy = mockWebSocket.send.lastCall ? mockWebSocket.send : originalSendSpy;\n const authRequest = JSON.parse(sendSpy.lastCall.args[0]);\n\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n type: 'response_event',\n subtype: MESSAGE_TYPES.AUTH,\n trackingId: authRequest.trackingId,\n statusCode,\n statusMessage,\n }),\n });\n };\n\n beforeEach(() => {\n jest.useFakeTimers({doNotFake: ['nextTick']});\n usingFakeTimers = true;\n });\n\n afterEach(async () => {\n if (usingFakeTimers) {\n jest.useRealTimers();\n usingFakeTimers = false;\n }\n if (mobiusSocket) {\n try {\n await mobiusSocket.disconnect();\n } catch (e) {\n // Ignore cleanup errors in tests.\n }\n }\n if (mockWebSocket && typeof mockWebSocket.close === 'function') {\n try {\n mockWebSocket.close();\n } catch (e) {\n // Ignore cleanup errors in tests.\n }\n }\n // Restore stubs\n if (Socket.getWebSocketConstructor.restore) {\n Socket.getWebSocketConstructor.restore();\n }\n if (socketOpenStub && socketOpenStub.restore) {\n socketOpenStub.restore();\n }\n });\n\n beforeEach(() => {\n webex = new MockWebex();\n\n webex.internal.device.registered = true;\n webex.internal.metrics.submitClientMetrics = sinon.stub();\n webex.trackingId = 'fakeTrackingId';\n\n webex.logger = console;\n\n sinon.stub(Socket, 'getWebSocketConstructor').callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n originalSendSpy = mockWebSocket.send;\n\n return mockWebSocket;\n }\n );\n\n const origOpen = Socket.prototype.open;\n\n socketOpenStub = sinon.stub(Socket.prototype, 'open').callsFake(function (...args) {\n const promise = Reflect.apply(origOpen, this, args);\n\n process.nextTick(() => {\n mockWebSocket.open();\n // Simulate Mobius auth response after socket open\n process.nextTick(() => {\n emitAuthResponse();\n });\n });\n\n return promise;\n });\n\n mobiusSocket = new MobiusSocket(webex, {...mobiusConfig.mobiusSocket});\n\n (mobiusSocket as any).logger = {\n debug: jest.fn(),\n error: jest.fn(),\n info: jest.fn(),\n log: jest.fn(),\n warn: jest.fn(),\n };\n });\n\n it('removes all listeners for an event when off() is called without a listener', () => {\n const firstListener = sinon.stub();\n const secondListener = sinon.stub();\n\n mobiusSocket.on('event:fake.test', firstListener);\n mobiusSocket.on('event:fake.test', secondListener);\n\n mobiusSocket.off('event:fake.test');\n mobiusSocket.emit('event:fake.test', fakeTestMessage);\n\n assert.notCalled(firstListener);\n assert.notCalled(secondListener);\n });\n\n afterEach(() => {\n if (socketOpenStub) {\n socketOpenStub.restore();\n }\n\n if (Socket.getWebSocketConstructor.restore) {\n Socket.getWebSocketConstructor.restore();\n }\n });\n\n describe('when connected', () => {\n it('emits the `online` event', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('online', spy);\n const promise = mobiusSocket.connect();\n\n return promise.then(() => assert.called(spy));\n });\n });\n\n describe('when disconnected', () => {\n it('emits the `offline` event', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('offline', spy);\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n const disconnectPromise = mobiusSocket.disconnect();\n\n mockWebSocket.emit('close', {\n code: 1000,\n reason: 'Done',\n });\n\n return disconnectPromise;\n })\n .then(() => assert.calledOnce(spy));\n });\n\n describe('when reconnected', () => {\n it('emits the `online` event', () => {\n const spy = sinon.spy();\n\n mobiusSocket.on('online', spy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => assert.calledOnce(spy))\n .then(() => mockWebSocket.emit('close', {code: 1000, reason: 'Idle'}))\n .then(() => mobiusSocket.connect())\n .then(() => assert.calledTwice(spy));\n });\n });\n });\n\n describe('when `mercury.buffer_state` is received', () => {\n // This test is here because the buffer states message may arrive before\n // the mobiusSocket Promise resolves.\n it('gets emitted', () => {\n let sendSpy;\n let resolveTest;\n let rejectTest;\n const bufferStateSpy = sinon.spy();\n const onlineSpy = sinon.spy();\n\n mobiusSocket.on('event:mercury.buffer_state', bufferStateSpy);\n mobiusSocket.on('online', onlineSpy);\n\n Socket.getWebSocketConstructor.callsFake(\n () =>\n function (...args) {\n mockWebSocket = new MockWebSocket(...args);\n sendSpy = mockWebSocket.send;\n mockWebSocket.send = wrap(mockWebSocket.send, function (fn, ...sendArgs) {\n process.nextTick(() => {\n Reflect.apply(fn, this, sendArgs);\n });\n });\n\n process.nextTick(() => {\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is still connecting');\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket has not yet connected');\n assert.notCalled(onlineSpy);\n assert.lengthOf(sendSpy.args, 0, 'The client has not yet sent the auth message');\n // set websocket readystate to 1 to allow a successful send message\n mockWebSocket.readyState = 1;\n mockWebSocket.emit('open');\n mockWebSocket.emit('message', {\n data: JSON.stringify({\n id: createUuid(),\n data: {\n eventType: 'mercury.buffer_state',\n },\n }),\n });\n // using lengthOf because notCalled doesn't allow the helpful\n // string assertion\n assert.lengthOf(\n sendSpy.args,\n 0,\n 'The client has not acked the buffer_state message'\n );\n\n promiseTick(1)\n .then(() => {\n assert.called(bufferStateSpy);\n resolveTest();\n })\n .catch(rejectTest);\n });\n\n return mockWebSocket;\n }\n );\n\n return new Promise((resolve, reject) => {\n resolveTest = resolve;\n rejectTest = reject;\n mobiusSocket.connect().catch(() => {});\n });\n });\n });\n\n describe('when a CloseEvent is received', () => {\n const events = [\n {\n code: 1000,\n reason: 'idle',\n action: 'close',\n },\n {\n code: 1000,\n reason: 'done (forced)',\n action: 'close',\n },\n {\n code: 1000,\n reason: 'pong not received',\n action: 'close',\n },\n {\n code: 1000,\n reason: 'pong mismatch',\n action: 'close',\n },\n {\n code: 1000,\n action: 'close',\n },\n {\n code: 1003,\n action: 'close',\n },\n {\n code: 1001,\n action: 'close',\n },\n {\n code: 1005,\n action: 'reconnect',\n },\n {\n code: 1006,\n action: 'reconnect',\n },\n {\n code: 1011,\n action: 'reconnect',\n },\n {\n code: 4000,\n action: 'replace',\n },\n {\n action: 'close',\n },\n ];\n\n events.forEach((def) => {\n const {action, reason, code} = def;\n let description;\n\n if (code && reason) {\n description = `with code \\`${code}\\` and reason \\`${reason}\\``;\n } else if (code) {\n description = `with code \\`${code}\\``;\n } else if (reason) {\n description = `with reason \\`${reason}\\``;\n }\n\n describe(`when an event ${description} is received`, () => {\n it(`takes the ${action} action`, () => {\n if (mobiusSocket.reconnect.restore) {\n mobiusSocket.reconnect.restore();\n }\n\n sinon.spy(mobiusSocket, 'connect');\n\n const offlineSpy = sinon.spy();\n const permanentSpy = sinon.spy();\n const transientSpy = sinon.spy();\n const replacedSpy = sinon.spy();\n\n mobiusSocket.on('offline', offlineSpy);\n mobiusSocket.on('offline.permanent', permanentSpy);\n mobiusSocket.on('offline.transient', transientSpy);\n mobiusSocket.on('offline.replaced', replacedSpy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n // Make sure mobiusSocket.connect has a call count of zero\n mobiusSocket.connect.resetHistory();\n\n mockWebSocket.emit('close', {code, reason});\n\n return promiseTick(1);\n })\n .then(() => {\n assert.called(offlineSpy);\n assert.calledWith(offlineSpy, {\n code,\n reason,\n });\n switch (action) {\n case 'close':\n assert.called(permanentSpy);\n assert.notCalled(transientSpy);\n assert.notCalled(replacedSpy);\n break;\n case 'reconnect':\n assert.notCalled(permanentSpy);\n assert.called(transientSpy);\n assert.notCalled(replacedSpy);\n break;\n case 'replace':\n assert.notCalled(permanentSpy);\n assert.notCalled(transientSpy);\n assert.called(replacedSpy);\n break;\n default:\n assert(false, 'unreachable code reached');\n }\n assert.isFalse(mobiusSocket.connected, 'MobiusSocket is not connected');\n if (action === 'reconnect') {\n assert.called(mobiusSocket.connect);\n assert.calledWith(mobiusSocket.connect, mockWebSocket.url);\n assert.isTrue(mobiusSocket.connecting, 'MobiusSocket is connecting');\n\n // Block until reconnect completes so logs don't overlap\n return mobiusSocket.connect();\n }\n\n assert.notCalled(mobiusSocket.connect);\n assert.isFalse(mobiusSocket.connecting, 'MobiusSocket is not connecting');\n\n return Promise.resolve();\n });\n });\n });\n });\n });\n\n describe('when a MessageEvent is received', () => {\n it('emits the MobiusSocket envelope', () => {\n const startSpy = sinon.spy();\n const stopSpy = sinon.spy();\n\n mobiusSocket.on('event:status.start_typing', startSpy);\n mobiusSocket.on('event:status.stop_typing', stopSpy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n mockWebSocket.emit('message', {data: JSON.stringify(statusStartTypingMessage)});\n\n return promiseTick(1);\n })\n .then(() => {\n assert.calledOnce(startSpy);\n assert.notCalled(stopSpy);\n assert.calledWith(startSpy, statusStartTypingMessage);\n });\n });\n\n it(\"emits the MobiusSocket envelope named by the MobiusSocket event's eventType\", () => {\n const startSpy = sinon.spy();\n const stopSpy = sinon.spy();\n\n mobiusSocket.on('event:status.start_typing', startSpy);\n mobiusSocket.on('event:status.stop_typing', stopSpy);\n\n const promise = mobiusSocket.connect();\n\n mockWebSocket.open();\n\n return promise\n .then(() => {\n mockWebSocket.emit('message', {data: JSON.stringify(statusStartTypingMessage)});\n\n return promiseTick(1);\n })\n .then(() => {\n assert.calledOnce(startSpy);\n assert.notCalled(stopSpy);\n assert.calledWith(startSpy, statusStartTypingMessage);\n });\n });\n });\n\n // Mobius does not use sequence numbers, so sequence-mismatch tests are not applicable\n });\n });\n\n /*\n // On mobiusSocket:\n online\n offline\n offline.transient\n offline.permanent\n offline.replaced\n event\n event:locus.participant_joined\n mockWebSocket.connection-failed\n mockWebSocket.sequence-mismatch\n\n // On webex:\n mobiusSocket.online\n mobiusSocket.offline\n mobiusSocket.offline.transient\n mobiusSocket.offline.permanent\n mobiusSocket.offline.replaced\n mobiusSocket.event\n mobiusSocket.event:locus.participant_joined\n mobiusSocket.mockWebSocket.connection-failed\n mobiusSocket.mockWebSocket.sequence-mismatch\n\n // TODO go through all it(`emits...`) and make sure corresponding tests are here\n */\n});\n"],"mappings":"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","ignoreList":[]}
|