@webex/test-helper-mock-webex 3.0.0-beta.3 → 3.0.0-beta.300

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/index.js CHANGED
@@ -1,15 +1,18 @@
1
1
  "use strict";
2
2
 
3
+ var _Object$keys2 = 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$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
3
9
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
4
-
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
5
11
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
6
-
7
12
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
8
-
9
- var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
10
-
11
13
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
12
-
14
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
13
16
  /*!
14
17
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
15
18
  */
@@ -19,28 +22,22 @@ if (typeof _promise.default === 'undefined') {
19
22
  // eslint-disable-next-line global-require
20
23
  require('es6-promise').polyfill();
21
24
  }
22
-
23
25
  var _ = require('lodash');
24
-
25
26
  var sinon = require('sinon');
26
-
27
27
  var State = require('ampersand-state');
28
-
29
28
  var nonInternalPlugins = ['authorization', 'credentials', 'memberships', 'messages', 'logger', 'people', 'phone', 'meetings', 'rooms', 'teams', 'teamMemberships', 'webhooks'];
29
+
30
30
  /**
31
31
  * Mock Webex constructor
32
32
  * @param {Object} options
33
33
  * @returns {MockWebex}
34
34
  */
35
-
36
35
  function makeWebex(options) {
37
36
  var requestPromise = _promise.default.resolve({
38
37
  statusCode: 200,
39
38
  body: {}
40
39
  });
41
-
42
40
  var uploadPromise = _promise.default.resolve({});
43
-
44
41
  options = options || {};
45
42
  options.children = options.children || {};
46
43
  var internalOptions = {};
@@ -54,23 +51,22 @@ function makeWebex(options) {
54
51
  }
55
52
  });
56
53
  internalOptions.children = internalChildren;
57
- options.children = externalChildren; // This weird assignment is to make sure "internal" is the first property.
58
- // Because it turns out we're relying on ordering
54
+ options.children = externalChildren;
59
55
 
60
- options.children = (0, _assign.default)({
56
+ // This weird assignment is to make sure "internal" is the first property.
57
+ // Because it turns out we're relying on ordering
58
+ options.children = _objectSpread({
61
59
  internal: State.extend(internalOptions)
62
60
  }, options.children);
63
-
64
61
  requestPromise.on = uploadPromise.on = function on() {
65
62
  return requestPromise;
66
63
  };
64
+
67
65
  /**
68
66
  * produces a mock storage object
69
67
  * @param {Object} data
70
68
  * @returns {Storage}
71
69
  */
72
-
73
-
74
70
  function makeMockStorage(data) {
75
71
  data = data || {};
76
72
  return {
@@ -85,38 +81,34 @@ function makeWebex(options) {
85
81
  },
86
82
  del: function del(namespace, key) {
87
83
  this.data = this.data || data;
88
- this.data[namespace] = this.data[namespace] || {}; // eslint-disable-next-line prefer-reflect
89
-
84
+ this.data[namespace] = this.data[namespace] || {};
85
+ // eslint-disable-next-line prefer-reflect
90
86
  delete this.data[namespace][key];
91
87
  },
92
88
  get: function get(namespace, key) {
93
89
  this.data = this.data || data;
94
90
  this.data[namespace] = this.data[namespace] || {};
95
91
  var ret = this.data[namespace][key];
96
-
97
92
  if (ret) {
98
93
  return _promise.default.resolve(ret);
99
94
  }
100
-
101
95
  return _promise.default.reject(new Error('MockNotFoundError'));
102
96
  },
103
97
  put: function put(namespace, key, value) {
104
98
  this.data = this.data || data;
105
-
106
99
  try {
107
100
  // this is the simplest way to to turn ampstate objects into bare
108
101
  // objects without actually checking if they're ampstate objects
109
102
  value = JSON.parse((0, _stringify.default)(value));
110
- } catch (err) {// ignore
103
+ } catch (err) {
104
+ // ignore
111
105
  }
112
-
113
106
  this.data[namespace] = this.data[namespace] || {};
114
107
  this.data[namespace][key] = value;
115
108
  return _promise.default.resolve();
116
109
  }
117
110
  };
118
111
  }
119
-
120
112
  var request = sinon.stub().returns(requestPromise);
121
113
  var upload = sinon.stub().returns(uploadPromise);
122
114
  var MockWebex = State.extend(_.defaults(options, {
@@ -172,13 +164,7 @@ function makeWebex(options) {
172
164
  voicea: {},
173
165
  meetings: {
174
166
  mediaSettings: {
175
- sendAudio: true,
176
- sendVideo: true,
177
- receiveAudio: true,
178
- receiveVideo: true,
179
- pstn: false,
180
- sendShare: false,
181
- receiveShare: false
167
+ pstn: false
182
168
  },
183
169
  reconnection: {
184
170
  enabled: true,
@@ -210,7 +196,6 @@ function makeWebex(options) {
210
196
  }));
211
197
  var webex = new MockWebex(options && options.attrs);
212
198
  sinon.spy(webex, 'refresh');
213
-
214
199
  _.defaults(webex, {
215
200
  credentials: {
216
201
  authorization: 'Basic NOTATOKEN',
@@ -234,7 +219,6 @@ function makeWebex(options) {
234
219
  debug: sinon.spy()
235
220
  }
236
221
  });
237
-
238
222
  _.defaults(webex.internal, {
239
223
  avatar: {},
240
224
  conversation: {},
@@ -253,7 +237,15 @@ function makeWebex(options) {
253
237
  }
254
238
  },
255
239
  registered: true,
256
- register: sinon.stub().returns(_promise.default.resolve())
240
+ register: sinon.stub().returns(_promise.default.resolve()),
241
+ ipNetworkDetector: {
242
+ get supportsIpV4() {
243
+ return true;
244
+ },
245
+ get supportsIpV6() {
246
+ return true;
247
+ }
248
+ }
257
249
  },
258
250
  feature: {
259
251
  setFeature: sinon.stub().returns(_promise.default.resolve(false)),
@@ -267,11 +259,25 @@ function makeWebex(options) {
267
259
  user: {},
268
260
  mercury: {},
269
261
  llm: {},
270
- voicea: {}
262
+ voicea: {},
263
+ newMetrics: {
264
+ submitInternalEvent: sinon.stub(),
265
+ submitMQE: sinon.stub(),
266
+ submitClientEvent: sinon.stub(),
267
+ callDiagnosticLatencies: {
268
+ saveTimestamp: sinon.stub()
269
+ },
270
+ callDiagnosticMetrics: {
271
+ submitClientEvent: sinon.stub(),
272
+ submitMQE: sinon.stub(),
273
+ callDiagnosticEventsBatcher: {
274
+ queue: sinon.stub()
275
+ },
276
+ submitToCallDiagnostics: sinon.stub()
277
+ }
278
+ }
271
279
  });
272
-
273
280
  return webex;
274
281
  }
275
-
276
282
  module.exports = makeWebex;
277
283
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["require","polyfill","_","sinon","State","nonInternalPlugins","makeWebex","options","requestPromise","resolve","statusCode","body","uploadPromise","children","internalOptions","internalChildren","externalChildren","forEach","key","indexOf","internal","extend","on","makeMockStorage","data","spy","once","listenTo","listenToAndRun","clear","namespace","del","get","ret","reject","Error","put","value","JSON","parse","err","request","stub","returns","upload","MockWebex","defaults","extraProperies","refresh","setConfig","config","credentials","idbroker","url","process","env","IDBROKER_BASE_URL","identity","IDENTITY_BASE_URL","defaultUrl","activationUrl","authorizeUrl","setPasswordUrl","logoutUrl","client_id","client_secret","redirect_uri","scope","service","conversation","allowedTags","avatar","device","encryption","logger","mercury","metrics","support","user","llm","voicea","meetings","mediaSettings","sendAudio","sendVideo","receiveAudio","receiveVideo","pstn","sendShare","receiveShare","reconnection","enabled","detection","retry","times","backOff","start","rate","stats","interval","historyMax","clientType","clientName","mqaMetricsInterval","autoSendMQA","initialize","attrs","boundedStorage","initialBoundedStorage","unboundedStorage","initialUnboundedStorage","webex","authorization","getUserToken","toString","getClientToken","sessionId","MOCK_LOGGER","console","error","warn","log","info","debug","webSocketUrl","getWebSocketUrl","features","developer","entitlement","registered","register","feature","setFeature","getFeature","sendUnstructured","module","exports"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n\n/* istanbul ignore next */\nif (typeof Promise === 'undefined') {\n // eslint-disable-next-line global-require\n require('es6-promise').polyfill();\n}\n\nconst _ = require('lodash');\nconst sinon = require('sinon');\nconst State = require('ampersand-state');\n\nconst nonInternalPlugins = [\n 'authorization',\n 'credentials',\n 'memberships',\n 'messages',\n 'logger',\n 'people',\n 'phone',\n 'meetings',\n 'rooms',\n 'teams',\n 'teamMemberships',\n 'webhooks'\n];\n\n/**\n * Mock Webex constructor\n * @param {Object} options\n * @returns {MockWebex}\n */\nfunction makeWebex(options) {\n const requestPromise = Promise.resolve({statusCode: 200, body: {}});\n const uploadPromise = Promise.resolve({});\n\n options = options || {};\n options.children = options.children || {};\n\n const internalOptions = {};\n\n const internalChildren = {};\n const externalChildren = {};\n\n Object.keys(options.children).forEach((key) => {\n if (nonInternalPlugins.indexOf(key) === -1) {\n internalChildren[key] = options.children[key];\n }\n else {\n externalChildren[key] = options.children[key];\n }\n });\n\n internalOptions.children = internalChildren;\n options.children = externalChildren;\n\n // This weird assignment is to make sure \"internal\" is the first property.\n // Because it turns out we're relying on ordering\n options.children = Object.assign({\n internal: State.extend(internalOptions)\n }, options.children);\n\n requestPromise.on = uploadPromise.on = function on() {\n return requestPromise;\n };\n\n /**\n * produces a mock storage object\n * @param {Object} data\n * @returns {Storage}\n */\n function makeMockStorage(data) {\n data = data || {};\n\n return {\n data,\n on: sinon.spy(),\n once: sinon.spy(),\n listenTo: sinon.spy(),\n listenToAndRun: sinon.spy(),\n clear: function clear(namespace) {\n this.data = this.data || data;\n this.data[namespace] = {};\n },\n del: function del(namespace, key) {\n this.data = this.data || data;\n this.data[namespace] = this.data[namespace] || {};\n // eslint-disable-next-line prefer-reflect\n delete this.data[namespace][key];\n },\n get: function get(namespace, key) {\n this.data = this.data || data;\n this.data[namespace] = this.data[namespace] || {};\n const ret = this.data[namespace][key];\n\n if (ret) {\n return Promise.resolve(ret);\n }\n\n return Promise.reject(new Error('MockNotFoundError'));\n },\n put: function put(namespace, key, value) {\n this.data = this.data || data;\n try {\n // this is the simplest way to to turn ampstate objects into bare\n // objects without actually checking if they're ampstate objects\n value = JSON.parse(JSON.stringify(value));\n }\n catch (err) {\n // ignore\n }\n this.data[namespace] = this.data[namespace] || {};\n this.data[namespace][key] = value;\n\n return Promise.resolve();\n }\n };\n }\n\n const request = sinon.stub().returns(requestPromise);\n const upload = sinon.stub().returns(uploadPromise);\n const MockWebex = State.extend(_.defaults(options, {\n extraProperies: 'allow',\n request,\n upload,\n refresh: function refresh() {\n return Promise.resolve();\n },\n setConfig: function setConfig(config) {\n this.config.credentials.idbroker.url = config.credentials.idbroker.url || process.env.IDBROKER_BASE_URL;\n this.config.credentials.identity.url = config.credentials.identity.url || process.env.IDENTITY_BASE_URL;\n\n return Promise.resolve();\n },\n config: {\n credentials: {\n idbroker: {\n url: process.env.IDBROKER_BASE_URL,\n defaultUrl: process.env.IDBROKER_BASE_URL\n },\n identity: {\n url: process.env.IDENTITY_BASE_URL,\n defaultUrl: process.env.IDENTITY_BASE_URL\n },\n activationUrl: `${process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'}/idb/token/v1/actions/UserActivation/invoke`,\n authorizeUrl: `${process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'}/idb/oauth2/v1/authorize`,\n setPasswordUrl: `${process.env.IDBROKER_BASE_URL || 'https://identity.webex.com'}/identity/scim/v1/Users`,\n logoutUrl: `${process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'}/idb/oauth2/v1/logout`,\n // eslint-disable-next-line camelcase\n client_id: 'fake',\n // eslint-disable-next-line camelcase\n client_secret: 'fake',\n // eslint-disable-next-line camelcase\n redirect_uri: 'http://example.com',\n // eslint-disable-next-line camelcase\n scope: 'scope:one',\n service: 'webex'\n },\n conversation: {\n allowedTags: {\n 'webex-mention': ['data-object-type', 'data-object-id', 'data-object-url']\n }\n },\n avatar: {},\n device: {},\n encryption: {},\n logger: {},\n mercury: {},\n metrics: {},\n support: {},\n user: {},\n llm: {},\n voicea: {},\n meetings: {\n mediaSettings: {\n sendAudio: true,\n sendVideo: true,\n receiveAudio: true,\n receiveVideo: true,\n pstn: false,\n sendShare: false,\n receiveShare: false\n },\n reconnection: {\n enabled: true,\n detection: true,\n retry: {\n times: 2,\n backOff: {\n start: 1000,\n rate: 2\n }\n }\n },\n stats: {\n interval: 1000,\n historyMax: 120\n },\n metrics: {\n clientType: 'TEAMS_CLIENT',\n clientName: 'WEBEX_JS_SDK',\n mqaMetricsInterval: 60000,\n autoSendMQA: true\n }\n }\n },\n initialize: function initialize(attrs) {\n this.boundedStorage = makeMockStorage(attrs && attrs.initialBoundedStorage);\n this.unboundedStorage = makeMockStorage(attrs && attrs.initialUnboundedStorage);\n }\n }));\n\n const webex = new MockWebex(options && options.attrs);\n\n sinon.spy(webex, 'refresh');\n _.defaults(webex, {\n credentials: {\n authorization: 'Basic NOTATOKEN',\n getUserToken: sinon.stub().returns(Promise.resolve({\n toString: function toString() {\n return 'Basic NOTATOKEN';\n }\n })),\n getClientToken: sinon.stub().returns(Promise.resolve({\n toString: function toString() {\n return 'Basic NOTATOKEN';\n }\n }))\n },\n sessionId: 'mock-webex_88888888-4444-4444-4444-aaaaaaaaaaaa',\n logger: process.env.MOCK_LOGGER ? console : {\n error: sinon.spy(),\n warn: sinon.spy(),\n log: sinon.spy(),\n info: sinon.spy(),\n debug: sinon.spy()\n }\n });\n\n _.defaults(webex.internal, {\n avatar: {},\n conversation: {},\n device: {\n webSocketUrl: 'ws://example.com',\n getWebSocketUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),\n features: {\n developer: {\n get: sinon.stub()\n },\n entitlement: {\n get: sinon.stub()\n },\n user: {\n get: sinon.stub()\n }\n },\n registered: true,\n register: sinon.stub().returns(Promise.resolve())\n },\n feature: {\n setFeature: sinon.stub().returns(Promise.resolve(false)),\n getFeature: sinon.stub().returns(Promise.resolve(false))\n },\n encryption: {},\n metrics: {\n sendUnstructured: sinon.spy()\n },\n support: {},\n user: {},\n mercury: {},\n llm: {},\n voicea: {},\n });\n\n return webex;\n}\n\nmodule.exports = makeWebex;\n"],"mappings":"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"}
1
+ {"version":3,"names":["require","polyfill","_","sinon","State","nonInternalPlugins","makeWebex","options","requestPromise","resolve","statusCode","body","uploadPromise","children","internalOptions","internalChildren","externalChildren","forEach","key","indexOf","internal","extend","on","makeMockStorage","data","spy","once","listenTo","listenToAndRun","clear","namespace","del","get","ret","reject","Error","put","value","JSON","parse","err","request","stub","returns","upload","MockWebex","defaults","extraProperies","refresh","setConfig","config","credentials","idbroker","url","process","env","IDBROKER_BASE_URL","identity","IDENTITY_BASE_URL","defaultUrl","activationUrl","authorizeUrl","setPasswordUrl","logoutUrl","client_id","client_secret","redirect_uri","scope","service","conversation","allowedTags","avatar","device","encryption","logger","mercury","metrics","support","user","llm","voicea","meetings","mediaSettings","pstn","reconnection","enabled","detection","retry","times","backOff","start","rate","stats","interval","historyMax","clientType","clientName","mqaMetricsInterval","autoSendMQA","initialize","attrs","boundedStorage","initialBoundedStorage","unboundedStorage","initialUnboundedStorage","webex","authorization","getUserToken","toString","getClientToken","sessionId","MOCK_LOGGER","console","error","warn","log","info","debug","webSocketUrl","getWebSocketUrl","features","developer","entitlement","registered","register","ipNetworkDetector","supportsIpV4","supportsIpV6","feature","setFeature","getFeature","sendUnstructured","newMetrics","submitInternalEvent","submitMQE","submitClientEvent","callDiagnosticLatencies","saveTimestamp","callDiagnosticMetrics","callDiagnosticEventsBatcher","queue","submitToCallDiagnostics","module","exports"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* istanbul ignore next */\nif (typeof Promise === 'undefined') {\n // eslint-disable-next-line global-require\n require('es6-promise').polyfill();\n}\n\nconst _ = require('lodash');\nconst sinon = require('sinon');\nconst State = require('ampersand-state');\n\nconst nonInternalPlugins = [\n 'authorization',\n 'credentials',\n 'memberships',\n 'messages',\n 'logger',\n 'people',\n 'phone',\n 'meetings',\n 'rooms',\n 'teams',\n 'teamMemberships',\n 'webhooks',\n];\n\n/**\n * Mock Webex constructor\n * @param {Object} options\n * @returns {MockWebex}\n */\nfunction makeWebex(options) {\n const requestPromise = Promise.resolve({statusCode: 200, body: {}});\n const uploadPromise = Promise.resolve({});\n\n options = options || {};\n options.children = options.children || {};\n\n const internalOptions = {};\n\n const internalChildren = {};\n const externalChildren = {};\n\n Object.keys(options.children).forEach((key) => {\n if (nonInternalPlugins.indexOf(key) === -1) {\n internalChildren[key] = options.children[key];\n } else {\n externalChildren[key] = options.children[key];\n }\n });\n\n internalOptions.children = internalChildren;\n options.children = externalChildren;\n\n // This weird assignment is to make sure \"internal\" is the first property.\n // Because it turns out we're relying on ordering\n options.children = {\n internal: State.extend(internalOptions),\n ...options.children,\n };\n\n requestPromise.on = uploadPromise.on = function on() {\n return requestPromise;\n };\n\n /**\n * produces a mock storage object\n * @param {Object} data\n * @returns {Storage}\n */\n function makeMockStorage(data) {\n data = data || {};\n\n return {\n data,\n on: sinon.spy(),\n once: sinon.spy(),\n listenTo: sinon.spy(),\n listenToAndRun: sinon.spy(),\n clear: function clear(namespace) {\n this.data = this.data || data;\n this.data[namespace] = {};\n },\n del: function del(namespace, key) {\n this.data = this.data || data;\n this.data[namespace] = this.data[namespace] || {};\n // eslint-disable-next-line prefer-reflect\n delete this.data[namespace][key];\n },\n get: function get(namespace, key) {\n this.data = this.data || data;\n this.data[namespace] = this.data[namespace] || {};\n const ret = this.data[namespace][key];\n\n if (ret) {\n return Promise.resolve(ret);\n }\n\n return Promise.reject(new Error('MockNotFoundError'));\n },\n put: function put(namespace, key, value) {\n this.data = this.data || data;\n try {\n // this is the simplest way to to turn ampstate objects into bare\n // objects without actually checking if they're ampstate objects\n value = JSON.parse(JSON.stringify(value));\n } catch (err) {\n // ignore\n }\n this.data[namespace] = this.data[namespace] || {};\n this.data[namespace][key] = value;\n\n return Promise.resolve();\n },\n };\n }\n\n const request = sinon.stub().returns(requestPromise);\n const upload = sinon.stub().returns(uploadPromise);\n const MockWebex = State.extend(\n _.defaults(options, {\n extraProperies: 'allow',\n request,\n upload,\n refresh: function refresh() {\n return Promise.resolve();\n },\n setConfig: function setConfig(config) {\n this.config.credentials.idbroker.url =\n config.credentials.idbroker.url || process.env.IDBROKER_BASE_URL;\n this.config.credentials.identity.url =\n config.credentials.identity.url || process.env.IDENTITY_BASE_URL;\n\n return Promise.resolve();\n },\n config: {\n credentials: {\n idbroker: {\n url: process.env.IDBROKER_BASE_URL,\n defaultUrl: process.env.IDBROKER_BASE_URL,\n },\n identity: {\n url: process.env.IDENTITY_BASE_URL,\n defaultUrl: process.env.IDENTITY_BASE_URL,\n },\n activationUrl: `${\n process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'\n }/idb/token/v1/actions/UserActivation/invoke`,\n authorizeUrl: `${\n process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'\n }/idb/oauth2/v1/authorize`,\n setPasswordUrl: `${\n process.env.IDBROKER_BASE_URL || 'https://identity.webex.com'\n }/identity/scim/v1/Users`,\n logoutUrl: `${\n process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'\n }/idb/oauth2/v1/logout`,\n // eslint-disable-next-line camelcase\n client_id: 'fake',\n // eslint-disable-next-line camelcase\n client_secret: 'fake',\n // eslint-disable-next-line camelcase\n redirect_uri: 'http://example.com',\n // eslint-disable-next-line camelcase\n scope: 'scope:one',\n service: 'webex',\n },\n conversation: {\n allowedTags: {\n 'webex-mention': ['data-object-type', 'data-object-id', 'data-object-url'],\n },\n },\n avatar: {},\n device: {},\n encryption: {},\n logger: {},\n mercury: {},\n metrics: {},\n support: {},\n user: {},\n llm: {},\n voicea: {},\n meetings: {\n mediaSettings: {\n pstn: false,\n },\n reconnection: {\n enabled: true,\n detection: true,\n retry: {\n times: 2,\n backOff: {\n start: 1000,\n rate: 2,\n },\n },\n },\n stats: {\n interval: 1000,\n historyMax: 120,\n },\n metrics: {\n clientType: 'TEAMS_CLIENT',\n clientName: 'WEBEX_JS_SDK',\n mqaMetricsInterval: 60000,\n autoSendMQA: true,\n },\n },\n },\n initialize: function initialize(attrs) {\n this.boundedStorage = makeMockStorage(attrs && attrs.initialBoundedStorage);\n this.unboundedStorage = makeMockStorage(attrs && attrs.initialUnboundedStorage);\n },\n })\n );\n\n const webex = new MockWebex(options && options.attrs);\n\n sinon.spy(webex, 'refresh');\n _.defaults(webex, {\n credentials: {\n authorization: 'Basic NOTATOKEN',\n getUserToken: sinon.stub().returns(\n Promise.resolve({\n toString: function toString() {\n return 'Basic NOTATOKEN';\n },\n })\n ),\n getClientToken: sinon.stub().returns(\n Promise.resolve({\n toString: function toString() {\n return 'Basic NOTATOKEN';\n },\n })\n ),\n },\n sessionId: 'mock-webex_88888888-4444-4444-4444-aaaaaaaaaaaa',\n logger: process.env.MOCK_LOGGER\n ? console\n : {\n error: sinon.spy(),\n warn: sinon.spy(),\n log: sinon.spy(),\n info: sinon.spy(),\n debug: sinon.spy(),\n },\n });\n\n _.defaults(webex.internal, {\n avatar: {},\n conversation: {},\n device: {\n webSocketUrl: 'ws://example.com',\n getWebSocketUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),\n features: {\n developer: {\n get: sinon.stub(),\n },\n entitlement: {\n get: sinon.stub(),\n },\n user: {\n get: sinon.stub(),\n },\n },\n registered: true,\n register: sinon.stub().returns(Promise.resolve()),\n ipNetworkDetector: {\n get supportsIpV4() {\n return true;\n },\n get supportsIpV6() {\n return true;\n },\n },\n },\n feature: {\n setFeature: sinon.stub().returns(Promise.resolve(false)),\n getFeature: sinon.stub().returns(Promise.resolve(false)),\n },\n encryption: {},\n metrics: {\n sendUnstructured: sinon.spy(),\n },\n support: {},\n user: {},\n mercury: {},\n llm: {},\n voicea: {},\n newMetrics: {\n submitInternalEvent: sinon.stub(),\n submitMQE: sinon.stub(),\n submitClientEvent: sinon.stub(),\n callDiagnosticLatencies: {\n saveTimestamp: sinon.stub(),\n },\n callDiagnosticMetrics: {\n submitClientEvent: sinon.stub(),\n submitMQE: sinon.stub(),\n callDiagnosticEventsBatcher: {\n queue: sinon.stub(),\n },\n submitToCallDiagnostics: sinon.stub(),\n },\n },\n });\n\n return webex;\n}\n\nmodule.exports = makeWebex;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/test-helper-mock-webex",
3
- "version": "3.0.0-beta.3",
3
+ "version": "3.0.0-beta.300",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
package/src/index.js CHANGED
@@ -2,7 +2,6 @@
2
2
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
4
 
5
-
6
5
  /* istanbul ignore next */
7
6
  if (typeof Promise === 'undefined') {
8
7
  // eslint-disable-next-line global-require
@@ -25,7 +24,7 @@ const nonInternalPlugins = [
25
24
  'rooms',
26
25
  'teams',
27
26
  'teamMemberships',
28
- 'webhooks'
27
+ 'webhooks',
29
28
  ];
30
29
 
31
30
  /**
@@ -48,8 +47,7 @@ function makeWebex(options) {
48
47
  Object.keys(options.children).forEach((key) => {
49
48
  if (nonInternalPlugins.indexOf(key) === -1) {
50
49
  internalChildren[key] = options.children[key];
51
- }
52
- else {
50
+ } else {
53
51
  externalChildren[key] = options.children[key];
54
52
  }
55
53
  });
@@ -59,9 +57,10 @@ function makeWebex(options) {
59
57
 
60
58
  // This weird assignment is to make sure "internal" is the first property.
61
59
  // Because it turns out we're relying on ordering
62
- options.children = Object.assign({
63
- internal: State.extend(internalOptions)
64
- }, options.children);
60
+ options.children = {
61
+ internal: State.extend(internalOptions),
62
+ ...options.children,
63
+ };
65
64
 
66
65
  requestPromise.on = uploadPromise.on = function on() {
67
66
  return requestPromise;
@@ -108,110 +107,115 @@ function makeWebex(options) {
108
107
  // this is the simplest way to to turn ampstate objects into bare
109
108
  // objects without actually checking if they're ampstate objects
110
109
  value = JSON.parse(JSON.stringify(value));
111
- }
112
- catch (err) {
110
+ } catch (err) {
113
111
  // ignore
114
112
  }
115
113
  this.data[namespace] = this.data[namespace] || {};
116
114
  this.data[namespace][key] = value;
117
115
 
118
116
  return Promise.resolve();
119
- }
117
+ },
120
118
  };
121
119
  }
122
120
 
123
121
  const request = sinon.stub().returns(requestPromise);
124
122
  const upload = sinon.stub().returns(uploadPromise);
125
- const MockWebex = State.extend(_.defaults(options, {
126
- extraProperies: 'allow',
127
- request,
128
- upload,
129
- refresh: function refresh() {
130
- return Promise.resolve();
131
- },
132
- setConfig: function setConfig(config) {
133
- this.config.credentials.idbroker.url = config.credentials.idbroker.url || process.env.IDBROKER_BASE_URL;
134
- this.config.credentials.identity.url = config.credentials.identity.url || process.env.IDENTITY_BASE_URL;
135
-
136
- return Promise.resolve();
137
- },
138
- config: {
139
- credentials: {
140
- idbroker: {
141
- url: process.env.IDBROKER_BASE_URL,
142
- defaultUrl: process.env.IDBROKER_BASE_URL
143
- },
144
- identity: {
145
- url: process.env.IDENTITY_BASE_URL,
146
- defaultUrl: process.env.IDENTITY_BASE_URL
147
- },
148
- activationUrl: `${process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'}/idb/token/v1/actions/UserActivation/invoke`,
149
- authorizeUrl: `${process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'}/idb/oauth2/v1/authorize`,
150
- setPasswordUrl: `${process.env.IDBROKER_BASE_URL || 'https://identity.webex.com'}/identity/scim/v1/Users`,
151
- logoutUrl: `${process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'}/idb/oauth2/v1/logout`,
152
- // eslint-disable-next-line camelcase
153
- client_id: 'fake',
154
- // eslint-disable-next-line camelcase
155
- client_secret: 'fake',
156
- // eslint-disable-next-line camelcase
157
- redirect_uri: 'http://example.com',
158
- // eslint-disable-next-line camelcase
159
- scope: 'scope:one',
160
- service: 'webex'
123
+ const MockWebex = State.extend(
124
+ _.defaults(options, {
125
+ extraProperies: 'allow',
126
+ request,
127
+ upload,
128
+ refresh: function refresh() {
129
+ return Promise.resolve();
161
130
  },
162
- conversation: {
163
- allowedTags: {
164
- 'webex-mention': ['data-object-type', 'data-object-id', 'data-object-url']
165
- }
131
+ setConfig: function setConfig(config) {
132
+ this.config.credentials.idbroker.url =
133
+ config.credentials.idbroker.url || process.env.IDBROKER_BASE_URL;
134
+ this.config.credentials.identity.url =
135
+ config.credentials.identity.url || process.env.IDENTITY_BASE_URL;
136
+
137
+ return Promise.resolve();
166
138
  },
167
- avatar: {},
168
- device: {},
169
- encryption: {},
170
- logger: {},
171
- mercury: {},
172
- metrics: {},
173
- support: {},
174
- user: {},
175
- llm: {},
176
- voicea: {},
177
- meetings: {
178
- mediaSettings: {
179
- sendAudio: true,
180
- sendVideo: true,
181
- receiveAudio: true,
182
- receiveVideo: true,
183
- pstn: false,
184
- sendShare: false,
185
- receiveShare: false
139
+ config: {
140
+ credentials: {
141
+ idbroker: {
142
+ url: process.env.IDBROKER_BASE_URL,
143
+ defaultUrl: process.env.IDBROKER_BASE_URL,
144
+ },
145
+ identity: {
146
+ url: process.env.IDENTITY_BASE_URL,
147
+ defaultUrl: process.env.IDENTITY_BASE_URL,
148
+ },
149
+ activationUrl: `${
150
+ process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'
151
+ }/idb/token/v1/actions/UserActivation/invoke`,
152
+ authorizeUrl: `${
153
+ process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'
154
+ }/idb/oauth2/v1/authorize`,
155
+ setPasswordUrl: `${
156
+ process.env.IDBROKER_BASE_URL || 'https://identity.webex.com'
157
+ }/identity/scim/v1/Users`,
158
+ logoutUrl: `${
159
+ process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'
160
+ }/idb/oauth2/v1/logout`,
161
+ // eslint-disable-next-line camelcase
162
+ client_id: 'fake',
163
+ // eslint-disable-next-line camelcase
164
+ client_secret: 'fake',
165
+ // eslint-disable-next-line camelcase
166
+ redirect_uri: 'http://example.com',
167
+ // eslint-disable-next-line camelcase
168
+ scope: 'scope:one',
169
+ service: 'webex',
186
170
  },
187
- reconnection: {
188
- enabled: true,
189
- detection: true,
190
- retry: {
191
- times: 2,
192
- backOff: {
193
- start: 1000,
194
- rate: 2
195
- }
196
- }
171
+ conversation: {
172
+ allowedTags: {
173
+ 'webex-mention': ['data-object-type', 'data-object-id', 'data-object-url'],
174
+ },
197
175
  },
198
- stats: {
199
- interval: 1000,
200
- historyMax: 120
176
+ avatar: {},
177
+ device: {},
178
+ encryption: {},
179
+ logger: {},
180
+ mercury: {},
181
+ metrics: {},
182
+ support: {},
183
+ user: {},
184
+ llm: {},
185
+ voicea: {},
186
+ meetings: {
187
+ mediaSettings: {
188
+ pstn: false,
189
+ },
190
+ reconnection: {
191
+ enabled: true,
192
+ detection: true,
193
+ retry: {
194
+ times: 2,
195
+ backOff: {
196
+ start: 1000,
197
+ rate: 2,
198
+ },
199
+ },
200
+ },
201
+ stats: {
202
+ interval: 1000,
203
+ historyMax: 120,
204
+ },
205
+ metrics: {
206
+ clientType: 'TEAMS_CLIENT',
207
+ clientName: 'WEBEX_JS_SDK',
208
+ mqaMetricsInterval: 60000,
209
+ autoSendMQA: true,
210
+ },
201
211
  },
202
- metrics: {
203
- clientType: 'TEAMS_CLIENT',
204
- clientName: 'WEBEX_JS_SDK',
205
- mqaMetricsInterval: 60000,
206
- autoSendMQA: true
207
- }
208
- }
209
- },
210
- initialize: function initialize(attrs) {
211
- this.boundedStorage = makeMockStorage(attrs && attrs.initialBoundedStorage);
212
- this.unboundedStorage = makeMockStorage(attrs && attrs.initialUnboundedStorage);
213
- }
214
- }));
212
+ },
213
+ initialize: function initialize(attrs) {
214
+ this.boundedStorage = makeMockStorage(attrs && attrs.initialBoundedStorage);
215
+ this.unboundedStorage = makeMockStorage(attrs && attrs.initialUnboundedStorage);
216
+ },
217
+ })
218
+ );
215
219
 
216
220
  const webex = new MockWebex(options && options.attrs);
217
221
 
@@ -219,25 +223,31 @@ function makeWebex(options) {
219
223
  _.defaults(webex, {
220
224
  credentials: {
221
225
  authorization: 'Basic NOTATOKEN',
222
- getUserToken: sinon.stub().returns(Promise.resolve({
223
- toString: function toString() {
224
- return 'Basic NOTATOKEN';
225
- }
226
- })),
227
- getClientToken: sinon.stub().returns(Promise.resolve({
228
- toString: function toString() {
229
- return 'Basic NOTATOKEN';
230
- }
231
- }))
226
+ getUserToken: sinon.stub().returns(
227
+ Promise.resolve({
228
+ toString: function toString() {
229
+ return 'Basic NOTATOKEN';
230
+ },
231
+ })
232
+ ),
233
+ getClientToken: sinon.stub().returns(
234
+ Promise.resolve({
235
+ toString: function toString() {
236
+ return 'Basic NOTATOKEN';
237
+ },
238
+ })
239
+ ),
232
240
  },
233
241
  sessionId: 'mock-webex_88888888-4444-4444-4444-aaaaaaaaaaaa',
234
- logger: process.env.MOCK_LOGGER ? console : {
235
- error: sinon.spy(),
236
- warn: sinon.spy(),
237
- log: sinon.spy(),
238
- info: sinon.spy(),
239
- debug: sinon.spy()
240
- }
242
+ logger: process.env.MOCK_LOGGER
243
+ ? console
244
+ : {
245
+ error: sinon.spy(),
246
+ warn: sinon.spy(),
247
+ log: sinon.spy(),
248
+ info: sinon.spy(),
249
+ debug: sinon.spy(),
250
+ },
241
251
  });
242
252
 
243
253
  _.defaults(webex.internal, {
@@ -248,31 +258,55 @@ function makeWebex(options) {
248
258
  getWebSocketUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),
249
259
  features: {
250
260
  developer: {
251
- get: sinon.stub()
261
+ get: sinon.stub(),
252
262
  },
253
263
  entitlement: {
254
- get: sinon.stub()
264
+ get: sinon.stub(),
255
265
  },
256
266
  user: {
257
- get: sinon.stub()
258
- }
267
+ get: sinon.stub(),
268
+ },
259
269
  },
260
270
  registered: true,
261
- register: sinon.stub().returns(Promise.resolve())
271
+ register: sinon.stub().returns(Promise.resolve()),
272
+ ipNetworkDetector: {
273
+ get supportsIpV4() {
274
+ return true;
275
+ },
276
+ get supportsIpV6() {
277
+ return true;
278
+ },
279
+ },
262
280
  },
263
281
  feature: {
264
282
  setFeature: sinon.stub().returns(Promise.resolve(false)),
265
- getFeature: sinon.stub().returns(Promise.resolve(false))
283
+ getFeature: sinon.stub().returns(Promise.resolve(false)),
266
284
  },
267
285
  encryption: {},
268
286
  metrics: {
269
- sendUnstructured: sinon.spy()
287
+ sendUnstructured: sinon.spy(),
270
288
  },
271
289
  support: {},
272
290
  user: {},
273
291
  mercury: {},
274
292
  llm: {},
275
293
  voicea: {},
294
+ newMetrics: {
295
+ submitInternalEvent: sinon.stub(),
296
+ submitMQE: sinon.stub(),
297
+ submitClientEvent: sinon.stub(),
298
+ callDiagnosticLatencies: {
299
+ saveTimestamp: sinon.stub(),
300
+ },
301
+ callDiagnosticMetrics: {
302
+ submitClientEvent: sinon.stub(),
303
+ submitMQE: sinon.stub(),
304
+ callDiagnosticEventsBatcher: {
305
+ queue: sinon.stub(),
306
+ },
307
+ submitToCallDiagnostics: sinon.stub(),
308
+ },
309
+ },
276
310
  });
277
311
 
278
312
  return webex;