@webex/test-helper-mock-webex 2.59.3-next.1 → 2.59.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintrc.js CHANGED
@@ -1,6 +1,6 @@
1
- const config = {
2
- root: true,
3
- extends: ['@webex/eslint-config-legacy'],
4
- };
5
-
6
- module.exports = config;
1
+ const config = {
2
+ root: true,
3
+ extends: ['@webex/eslint-config-legacy'],
4
+ };
5
+
6
+ module.exports = config;
package/README.md CHANGED
@@ -1,31 +1,31 @@
1
- # @webex/test-helper-mock-webex
2
-
3
- [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme)
4
-
5
- >
6
-
7
- - [Install](#install)
8
- - [Usage](#usage)
9
- - [Contribute](#contribute)
10
- - [Maintainers](#maintainers)
11
- - [License](#license)
12
-
13
- ## Install
14
-
15
- ```bash
16
- npm install --save @webex/test-helper-mock-webex
17
- ```
18
-
19
- ## Usage
20
-
21
- ## Maintainers
22
-
23
- This package is maintained by [Cisco Webex for Developers](https://developer.webex.com/).
24
-
25
- ## Contribute
26
-
27
- Pull requests welcome. Please see [CONTRIBUTING.md](https://github.com/webex/webex-js-sdk/blob/master/CONTRIBUTING.md) for more details.
28
-
29
- ## License
30
-
31
- © 2016-2020 Cisco and/or its affiliates. All Rights Reserved.
1
+ # @webex/test-helper-mock-webex
2
+
3
+ [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme)
4
+
5
+ >
6
+
7
+ - [Install](#install)
8
+ - [Usage](#usage)
9
+ - [Contribute](#contribute)
10
+ - [Maintainers](#maintainers)
11
+ - [License](#license)
12
+
13
+ ## Install
14
+
15
+ ```bash
16
+ npm install --save @webex/test-helper-mock-webex
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ## Maintainers
22
+
23
+ This package is maintained by [Cisco Webex for Developers](https://developer.webex.com/).
24
+
25
+ ## Contribute
26
+
27
+ Pull requests welcome. Please see [CONTRIBUTING.md](https://github.com/webex/webex-js-sdk/blob/master/CONTRIBUTING.md) for more details.
28
+
29
+ ## License
30
+
31
+ © 2016-2020 Cisco and/or its affiliates. All Rights Reserved.
package/babel.config.js CHANGED
@@ -1,3 +1,3 @@
1
- const babelConfigLegacy = require('@webex/babel-config-legacy');
2
-
3
- module.exports = babelConfigLegacy;
1
+ const babelConfigLegacy = require('@webex/babel-config-legacy');
2
+
3
+ module.exports = babelConfigLegacy;
package/dist/index.js CHANGED
@@ -13,8 +13,8 @@ var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/objec
13
13
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
14
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
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; }
16
- /*!
17
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
16
+ /*!
17
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
18
18
  */
19
19
 
20
20
  /* istanbul ignore next */
@@ -27,10 +27,10 @@ var sinon = require('sinon');
27
27
  var State = require('ampersand-state');
28
28
  var nonInternalPlugins = ['authorization', 'credentials', 'memberships', 'messages', 'logger', 'people', 'phone', 'meetings', 'rooms', 'teams', 'teamMemberships', 'webhooks'];
29
29
 
30
- /**
31
- * Mock Webex constructor
32
- * @param {Object} options
33
- * @returns {MockWebex}
30
+ /**
31
+ * Mock Webex constructor
32
+ * @param {Object} options
33
+ * @returns {MockWebex}
34
34
  */
35
35
  function makeWebex(options) {
36
36
  var requestPromise = _promise.default.resolve({
@@ -62,10 +62,10 @@ function makeWebex(options) {
62
62
  return requestPromise;
63
63
  };
64
64
 
65
- /**
66
- * produces a mock storage object
67
- * @param {Object} data
68
- * @returns {Storage}
65
+ /**
66
+ * produces a mock storage object
67
+ * @param {Object} data
68
+ * @returns {Storage}
69
69
  */
70
70
  function makeMockStorage(data) {
71
71
  data = data || {};
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_promise","default","require","polyfill","_","sinon","State","nonInternalPlugins","makeWebex","options","requestPromise","resolve","statusCode","body","uploadPromise","children","internalOptions","internalChildren","externalChildren","_keys","forEach","key","indexOf","_objectSpread","internal","extend","on","makeMockStorage","data","spy","once","listenTo","listenToAndRun","clear","namespace","del","get","ret","reject","Error","put","value","JSON","parse","_stringify","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","concat","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":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\n/* istanbul ignore next */\r\nif (typeof Promise === 'undefined') {\r\n // eslint-disable-next-line global-require\r\n require('es6-promise').polyfill();\r\n}\r\n\r\nconst _ = require('lodash');\r\nconst sinon = require('sinon');\r\nconst State = require('ampersand-state');\r\n\r\nconst nonInternalPlugins = [\r\n 'authorization',\r\n 'credentials',\r\n 'memberships',\r\n 'messages',\r\n 'logger',\r\n 'people',\r\n 'phone',\r\n 'meetings',\r\n 'rooms',\r\n 'teams',\r\n 'teamMemberships',\r\n 'webhooks',\r\n];\r\n\r\n/**\r\n * Mock Webex constructor\r\n * @param {Object} options\r\n * @returns {MockWebex}\r\n */\r\nfunction makeWebex(options) {\r\n const requestPromise = Promise.resolve({statusCode: 200, body: {}});\r\n const uploadPromise = Promise.resolve({});\r\n\r\n options = options || {};\r\n options.children = options.children || {};\r\n\r\n const internalOptions = {};\r\n\r\n const internalChildren = {};\r\n const externalChildren = {};\r\n\r\n Object.keys(options.children).forEach((key) => {\r\n if (nonInternalPlugins.indexOf(key) === -1) {\r\n internalChildren[key] = options.children[key];\r\n } else {\r\n externalChildren[key] = options.children[key];\r\n }\r\n });\r\n\r\n internalOptions.children = internalChildren;\r\n options.children = externalChildren;\r\n\r\n // This weird assignment is to make sure \"internal\" is the first property.\r\n // Because it turns out we're relying on ordering\r\n options.children = {\r\n internal: State.extend(internalOptions),\r\n ...options.children,\r\n };\r\n\r\n requestPromise.on = uploadPromise.on = function on() {\r\n return requestPromise;\r\n };\r\n\r\n /**\r\n * produces a mock storage object\r\n * @param {Object} data\r\n * @returns {Storage}\r\n */\r\n function makeMockStorage(data) {\r\n data = data || {};\r\n\r\n return {\r\n data,\r\n on: sinon.spy(),\r\n once: sinon.spy(),\r\n listenTo: sinon.spy(),\r\n listenToAndRun: sinon.spy(),\r\n clear: function clear(namespace) {\r\n this.data = this.data || data;\r\n this.data[namespace] = {};\r\n },\r\n del: function del(namespace, key) {\r\n this.data = this.data || data;\r\n this.data[namespace] = this.data[namespace] || {};\r\n // eslint-disable-next-line prefer-reflect\r\n delete this.data[namespace][key];\r\n },\r\n get: function get(namespace, key) {\r\n this.data = this.data || data;\r\n this.data[namespace] = this.data[namespace] || {};\r\n const ret = this.data[namespace][key];\r\n\r\n if (ret) {\r\n return Promise.resolve(ret);\r\n }\r\n\r\n return Promise.reject(new Error('MockNotFoundError'));\r\n },\r\n put: function put(namespace, key, value) {\r\n this.data = this.data || data;\r\n try {\r\n // this is the simplest way to to turn ampstate objects into bare\r\n // objects without actually checking if they're ampstate objects\r\n value = JSON.parse(JSON.stringify(value));\r\n } catch (err) {\r\n // ignore\r\n }\r\n this.data[namespace] = this.data[namespace] || {};\r\n this.data[namespace][key] = value;\r\n\r\n return Promise.resolve();\r\n },\r\n };\r\n }\r\n\r\n const request = sinon.stub().returns(requestPromise);\r\n const upload = sinon.stub().returns(uploadPromise);\r\n const MockWebex = State.extend(\r\n _.defaults(options, {\r\n extraProperies: 'allow',\r\n request,\r\n upload,\r\n refresh: function refresh() {\r\n return Promise.resolve();\r\n },\r\n setConfig: function setConfig(config) {\r\n this.config.credentials.idbroker.url =\r\n config.credentials.idbroker.url || process.env.IDBROKER_BASE_URL;\r\n this.config.credentials.identity.url =\r\n config.credentials.identity.url || process.env.IDENTITY_BASE_URL;\r\n\r\n return Promise.resolve();\r\n },\r\n config: {\r\n credentials: {\r\n idbroker: {\r\n url: process.env.IDBROKER_BASE_URL,\r\n defaultUrl: process.env.IDBROKER_BASE_URL,\r\n },\r\n identity: {\r\n url: process.env.IDENTITY_BASE_URL,\r\n defaultUrl: process.env.IDENTITY_BASE_URL,\r\n },\r\n activationUrl: `${\r\n process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'\r\n }/idb/token/v1/actions/UserActivation/invoke`,\r\n authorizeUrl: `${\r\n process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'\r\n }/idb/oauth2/v1/authorize`,\r\n setPasswordUrl: `${\r\n process.env.IDBROKER_BASE_URL || 'https://identity.webex.com'\r\n }/identity/scim/v1/Users`,\r\n logoutUrl: `${\r\n process.env.IDBROKER_BASE_URL || 'https://idbroker.webex.com'\r\n }/idb/oauth2/v1/logout`,\r\n // eslint-disable-next-line camelcase\r\n client_id: 'fake',\r\n // eslint-disable-next-line camelcase\r\n client_secret: 'fake',\r\n // eslint-disable-next-line camelcase\r\n redirect_uri: 'http://example.com',\r\n // eslint-disable-next-line camelcase\r\n scope: 'scope:one',\r\n service: 'webex',\r\n },\r\n conversation: {\r\n allowedTags: {\r\n 'webex-mention': ['data-object-type', 'data-object-id', 'data-object-url'],\r\n },\r\n },\r\n avatar: {},\r\n device: {},\r\n encryption: {},\r\n logger: {},\r\n mercury: {},\r\n metrics: {},\r\n support: {},\r\n user: {},\r\n llm: {},\r\n voicea: {},\r\n meetings: {\r\n mediaSettings: {\r\n sendAudio: true,\r\n sendVideo: true,\r\n receiveAudio: true,\r\n receiveVideo: true,\r\n pstn: false,\r\n sendShare: false,\r\n receiveShare: false,\r\n },\r\n reconnection: {\r\n enabled: true,\r\n detection: true,\r\n retry: {\r\n times: 2,\r\n backOff: {\r\n start: 1000,\r\n rate: 2,\r\n },\r\n },\r\n },\r\n stats: {\r\n interval: 1000,\r\n historyMax: 120,\r\n },\r\n metrics: {\r\n clientType: 'TEAMS_CLIENT',\r\n clientName: 'WEBEX_JS_SDK',\r\n mqaMetricsInterval: 60000,\r\n autoSendMQA: true,\r\n },\r\n },\r\n },\r\n initialize: function initialize(attrs) {\r\n this.boundedStorage = makeMockStorage(attrs && attrs.initialBoundedStorage);\r\n this.unboundedStorage = makeMockStorage(attrs && attrs.initialUnboundedStorage);\r\n },\r\n })\r\n );\r\n\r\n const webex = new MockWebex(options && options.attrs);\r\n\r\n sinon.spy(webex, 'refresh');\r\n _.defaults(webex, {\r\n credentials: {\r\n authorization: 'Basic NOTATOKEN',\r\n getUserToken: sinon.stub().returns(\r\n Promise.resolve({\r\n toString: function toString() {\r\n return 'Basic NOTATOKEN';\r\n },\r\n })\r\n ),\r\n getClientToken: sinon.stub().returns(\r\n Promise.resolve({\r\n toString: function toString() {\r\n return 'Basic NOTATOKEN';\r\n },\r\n })\r\n ),\r\n },\r\n sessionId: 'mock-webex_88888888-4444-4444-4444-aaaaaaaaaaaa',\r\n logger: process.env.MOCK_LOGGER\r\n ? console\r\n : {\r\n error: sinon.spy(),\r\n warn: sinon.spy(),\r\n log: sinon.spy(),\r\n info: sinon.spy(),\r\n debug: sinon.spy(),\r\n },\r\n });\r\n\r\n _.defaults(webex.internal, {\r\n avatar: {},\r\n conversation: {},\r\n device: {\r\n webSocketUrl: 'ws://example.com',\r\n getWebSocketUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),\r\n features: {\r\n developer: {\r\n get: sinon.stub(),\r\n },\r\n entitlement: {\r\n get: sinon.stub(),\r\n },\r\n user: {\r\n get: sinon.stub(),\r\n },\r\n },\r\n registered: true,\r\n register: sinon.stub().returns(Promise.resolve()),\r\n },\r\n feature: {\r\n setFeature: sinon.stub().returns(Promise.resolve(false)),\r\n getFeature: sinon.stub().returns(Promise.resolve(false)),\r\n },\r\n encryption: {},\r\n metrics: {\r\n sendUnstructured: sinon.spy(),\r\n },\r\n support: {},\r\n user: {},\r\n mercury: {},\r\n llm: {},\r\n voicea: {},\r\n });\r\n\r\n return webex;\r\n}\r\n\r\nmodule.exports = makeWebex;\r\n"],"mappings":"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"}
1
+ {"version":3,"names":["_promise","default","require","polyfill","_","sinon","State","nonInternalPlugins","makeWebex","options","requestPromise","resolve","statusCode","body","uploadPromise","children","internalOptions","internalChildren","externalChildren","_keys","forEach","key","indexOf","_objectSpread","internal","extend","on","makeMockStorage","data","spy","once","listenTo","listenToAndRun","clear","namespace","del","get","ret","reject","Error","put","value","JSON","parse","_stringify","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","concat","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/* 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 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\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 },\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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"}
package/jest.config.js CHANGED
@@ -1,3 +1,3 @@
1
- const config = require('@webex/jest-config-legacy');
2
-
3
- module.exports = config;
1
+ const config = require('@webex/jest-config-legacy');
2
+
3
+ module.exports = config;
package/package.json CHANGED
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "@webex/test-helper-mock-webex",
3
+ "version": "2.59.4",
3
4
  "description": "",
4
5
  "license": "MIT",
5
6
  "main": "dist/index.js",
@@ -13,13 +14,13 @@
13
14
  },
14
15
  "devDependencies": {
15
16
  "@babel/core": "^7.17.10",
16
- "@webex/babel-config-legacy": "^0.0.0",
17
- "@webex/eslint-config-legacy": "^0.0.0",
18
- "@webex/jest-config-legacy": "^0.0.0",
19
- "@webex/legacy-tools": "^0.0.0",
20
- "@webex/test-helper-chai": "^2.59.3-next.1",
21
- "@webex/test-helper-mocha": "^2.59.3-next.1",
22
- "@webex/test-helper-test-users": "^2.59.3-next.1",
17
+ "@webex/babel-config-legacy": "2.59.4",
18
+ "@webex/eslint-config-legacy": "2.59.4",
19
+ "@webex/jest-config-legacy": "2.59.4",
20
+ "@webex/legacy-tools": "2.59.4",
21
+ "@webex/test-helper-chai": "2.59.4",
22
+ "@webex/test-helper-mocha": "2.59.4",
23
+ "@webex/test-helper-test-users": "2.59.4",
23
24
  "eslint": "^8.24.0",
24
25
  "prettier": "^2.7.1",
25
26
  "sinon": "^9.2.4"
@@ -32,12 +33,10 @@
32
33
  "scripts": {
33
34
  "build": "yarn build:src",
34
35
  "build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps",
35
- "deploy:npm": "yarn npm publish",
36
36
  "test": "yarn test:style && yarn test:unit && yarn test:integration && yarn test:browser",
37
37
  "test:browser": "webex-legacy-tools test --integration --unit --runner karma",
38
38
  "test:integration": "webex-legacy-tools test --integration --runner mocha",
39
39
  "test:style": "eslint ./src/**/*.*",
40
40
  "test:unit": "webex-legacy-tools test --unit --runner jest"
41
- },
42
- "version": "2.59.3-next.1"
43
- }
41
+ }
42
+ }
package/process CHANGED
@@ -1 +1 @@
1
- module.exports = {browser: true};
1
+ module.exports = {browser: true};
package/src/index.js CHANGED
@@ -1,297 +1,297 @@
1
- /*!
2
- * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
- */
4
-
5
- /* istanbul ignore next */
6
- if (typeof Promise === 'undefined') {
7
- // eslint-disable-next-line global-require
8
- require('es6-promise').polyfill();
9
- }
10
-
11
- const _ = require('lodash');
12
- const sinon = require('sinon');
13
- const State = require('ampersand-state');
14
-
15
- const nonInternalPlugins = [
16
- 'authorization',
17
- 'credentials',
18
- 'memberships',
19
- 'messages',
20
- 'logger',
21
- 'people',
22
- 'phone',
23
- 'meetings',
24
- 'rooms',
25
- 'teams',
26
- 'teamMemberships',
27
- 'webhooks',
28
- ];
29
-
30
- /**
31
- * Mock Webex constructor
32
- * @param {Object} options
33
- * @returns {MockWebex}
34
- */
35
- function makeWebex(options) {
36
- const requestPromise = Promise.resolve({statusCode: 200, body: {}});
37
- const uploadPromise = Promise.resolve({});
38
-
39
- options = options || {};
40
- options.children = options.children || {};
41
-
42
- const internalOptions = {};
43
-
44
- const internalChildren = {};
45
- const externalChildren = {};
46
-
47
- Object.keys(options.children).forEach((key) => {
48
- if (nonInternalPlugins.indexOf(key) === -1) {
49
- internalChildren[key] = options.children[key];
50
- } else {
51
- externalChildren[key] = options.children[key];
52
- }
53
- });
54
-
55
- internalOptions.children = internalChildren;
56
- options.children = externalChildren;
57
-
58
- // This weird assignment is to make sure "internal" is the first property.
59
- // Because it turns out we're relying on ordering
60
- options.children = {
61
- internal: State.extend(internalOptions),
62
- ...options.children,
63
- };
64
-
65
- requestPromise.on = uploadPromise.on = function on() {
66
- return requestPromise;
67
- };
68
-
69
- /**
70
- * produces a mock storage object
71
- * @param {Object} data
72
- * @returns {Storage}
73
- */
74
- function makeMockStorage(data) {
75
- data = data || {};
76
-
77
- return {
78
- data,
79
- on: sinon.spy(),
80
- once: sinon.spy(),
81
- listenTo: sinon.spy(),
82
- listenToAndRun: sinon.spy(),
83
- clear: function clear(namespace) {
84
- this.data = this.data || data;
85
- this.data[namespace] = {};
86
- },
87
- del: function del(namespace, key) {
88
- this.data = this.data || data;
89
- this.data[namespace] = this.data[namespace] || {};
90
- // eslint-disable-next-line prefer-reflect
91
- delete this.data[namespace][key];
92
- },
93
- get: function get(namespace, key) {
94
- this.data = this.data || data;
95
- this.data[namespace] = this.data[namespace] || {};
96
- const ret = this.data[namespace][key];
97
-
98
- if (ret) {
99
- return Promise.resolve(ret);
100
- }
101
-
102
- return Promise.reject(new Error('MockNotFoundError'));
103
- },
104
- put: function put(namespace, key, value) {
105
- this.data = this.data || data;
106
- try {
107
- // this is the simplest way to to turn ampstate objects into bare
108
- // objects without actually checking if they're ampstate objects
109
- value = JSON.parse(JSON.stringify(value));
110
- } catch (err) {
111
- // ignore
112
- }
113
- this.data[namespace] = this.data[namespace] || {};
114
- this.data[namespace][key] = value;
115
-
116
- return Promise.resolve();
117
- },
118
- };
119
- }
120
-
121
- const request = sinon.stub().returns(requestPromise);
122
- const upload = sinon.stub().returns(uploadPromise);
123
- const MockWebex = State.extend(
124
- _.defaults(options, {
125
- extraProperies: 'allow',
126
- request,
127
- upload,
128
- refresh: function refresh() {
129
- return Promise.resolve();
130
- },
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();
138
- },
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',
170
- },
171
- conversation: {
172
- allowedTags: {
173
- 'webex-mention': ['data-object-type', 'data-object-id', 'data-object-url'],
174
- },
175
- },
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
- sendAudio: true,
189
- sendVideo: true,
190
- receiveAudio: true,
191
- receiveVideo: true,
192
- pstn: false,
193
- sendShare: false,
194
- receiveShare: false,
195
- },
196
- reconnection: {
197
- enabled: true,
198
- detection: true,
199
- retry: {
200
- times: 2,
201
- backOff: {
202
- start: 1000,
203
- rate: 2,
204
- },
205
- },
206
- },
207
- stats: {
208
- interval: 1000,
209
- historyMax: 120,
210
- },
211
- metrics: {
212
- clientType: 'TEAMS_CLIENT',
213
- clientName: 'WEBEX_JS_SDK',
214
- mqaMetricsInterval: 60000,
215
- autoSendMQA: true,
216
- },
217
- },
218
- },
219
- initialize: function initialize(attrs) {
220
- this.boundedStorage = makeMockStorage(attrs && attrs.initialBoundedStorage);
221
- this.unboundedStorage = makeMockStorage(attrs && attrs.initialUnboundedStorage);
222
- },
223
- })
224
- );
225
-
226
- const webex = new MockWebex(options && options.attrs);
227
-
228
- sinon.spy(webex, 'refresh');
229
- _.defaults(webex, {
230
- credentials: {
231
- authorization: 'Basic NOTATOKEN',
232
- getUserToken: sinon.stub().returns(
233
- Promise.resolve({
234
- toString: function toString() {
235
- return 'Basic NOTATOKEN';
236
- },
237
- })
238
- ),
239
- getClientToken: sinon.stub().returns(
240
- Promise.resolve({
241
- toString: function toString() {
242
- return 'Basic NOTATOKEN';
243
- },
244
- })
245
- ),
246
- },
247
- sessionId: 'mock-webex_88888888-4444-4444-4444-aaaaaaaaaaaa',
248
- logger: process.env.MOCK_LOGGER
249
- ? console
250
- : {
251
- error: sinon.spy(),
252
- warn: sinon.spy(),
253
- log: sinon.spy(),
254
- info: sinon.spy(),
255
- debug: sinon.spy(),
256
- },
257
- });
258
-
259
- _.defaults(webex.internal, {
260
- avatar: {},
261
- conversation: {},
262
- device: {
263
- webSocketUrl: 'ws://example.com',
264
- getWebSocketUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),
265
- features: {
266
- developer: {
267
- get: sinon.stub(),
268
- },
269
- entitlement: {
270
- get: sinon.stub(),
271
- },
272
- user: {
273
- get: sinon.stub(),
274
- },
275
- },
276
- registered: true,
277
- register: sinon.stub().returns(Promise.resolve()),
278
- },
279
- feature: {
280
- setFeature: sinon.stub().returns(Promise.resolve(false)),
281
- getFeature: sinon.stub().returns(Promise.resolve(false)),
282
- },
283
- encryption: {},
284
- metrics: {
285
- sendUnstructured: sinon.spy(),
286
- },
287
- support: {},
288
- user: {},
289
- mercury: {},
290
- llm: {},
291
- voicea: {},
292
- });
293
-
294
- return webex;
295
- }
296
-
297
- module.exports = makeWebex;
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ /* istanbul ignore next */
6
+ if (typeof Promise === 'undefined') {
7
+ // eslint-disable-next-line global-require
8
+ require('es6-promise').polyfill();
9
+ }
10
+
11
+ const _ = require('lodash');
12
+ const sinon = require('sinon');
13
+ const State = require('ampersand-state');
14
+
15
+ const nonInternalPlugins = [
16
+ 'authorization',
17
+ 'credentials',
18
+ 'memberships',
19
+ 'messages',
20
+ 'logger',
21
+ 'people',
22
+ 'phone',
23
+ 'meetings',
24
+ 'rooms',
25
+ 'teams',
26
+ 'teamMemberships',
27
+ 'webhooks',
28
+ ];
29
+
30
+ /**
31
+ * Mock Webex constructor
32
+ * @param {Object} options
33
+ * @returns {MockWebex}
34
+ */
35
+ function makeWebex(options) {
36
+ const requestPromise = Promise.resolve({statusCode: 200, body: {}});
37
+ const uploadPromise = Promise.resolve({});
38
+
39
+ options = options || {};
40
+ options.children = options.children || {};
41
+
42
+ const internalOptions = {};
43
+
44
+ const internalChildren = {};
45
+ const externalChildren = {};
46
+
47
+ Object.keys(options.children).forEach((key) => {
48
+ if (nonInternalPlugins.indexOf(key) === -1) {
49
+ internalChildren[key] = options.children[key];
50
+ } else {
51
+ externalChildren[key] = options.children[key];
52
+ }
53
+ });
54
+
55
+ internalOptions.children = internalChildren;
56
+ options.children = externalChildren;
57
+
58
+ // This weird assignment is to make sure "internal" is the first property.
59
+ // Because it turns out we're relying on ordering
60
+ options.children = {
61
+ internal: State.extend(internalOptions),
62
+ ...options.children,
63
+ };
64
+
65
+ requestPromise.on = uploadPromise.on = function on() {
66
+ return requestPromise;
67
+ };
68
+
69
+ /**
70
+ * produces a mock storage object
71
+ * @param {Object} data
72
+ * @returns {Storage}
73
+ */
74
+ function makeMockStorage(data) {
75
+ data = data || {};
76
+
77
+ return {
78
+ data,
79
+ on: sinon.spy(),
80
+ once: sinon.spy(),
81
+ listenTo: sinon.spy(),
82
+ listenToAndRun: sinon.spy(),
83
+ clear: function clear(namespace) {
84
+ this.data = this.data || data;
85
+ this.data[namespace] = {};
86
+ },
87
+ del: function del(namespace, key) {
88
+ this.data = this.data || data;
89
+ this.data[namespace] = this.data[namespace] || {};
90
+ // eslint-disable-next-line prefer-reflect
91
+ delete this.data[namespace][key];
92
+ },
93
+ get: function get(namespace, key) {
94
+ this.data = this.data || data;
95
+ this.data[namespace] = this.data[namespace] || {};
96
+ const ret = this.data[namespace][key];
97
+
98
+ if (ret) {
99
+ return Promise.resolve(ret);
100
+ }
101
+
102
+ return Promise.reject(new Error('MockNotFoundError'));
103
+ },
104
+ put: function put(namespace, key, value) {
105
+ this.data = this.data || data;
106
+ try {
107
+ // this is the simplest way to to turn ampstate objects into bare
108
+ // objects without actually checking if they're ampstate objects
109
+ value = JSON.parse(JSON.stringify(value));
110
+ } catch (err) {
111
+ // ignore
112
+ }
113
+ this.data[namespace] = this.data[namespace] || {};
114
+ this.data[namespace][key] = value;
115
+
116
+ return Promise.resolve();
117
+ },
118
+ };
119
+ }
120
+
121
+ const request = sinon.stub().returns(requestPromise);
122
+ const upload = sinon.stub().returns(uploadPromise);
123
+ const MockWebex = State.extend(
124
+ _.defaults(options, {
125
+ extraProperies: 'allow',
126
+ request,
127
+ upload,
128
+ refresh: function refresh() {
129
+ return Promise.resolve();
130
+ },
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();
138
+ },
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',
170
+ },
171
+ conversation: {
172
+ allowedTags: {
173
+ 'webex-mention': ['data-object-type', 'data-object-id', 'data-object-url'],
174
+ },
175
+ },
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
+ sendAudio: true,
189
+ sendVideo: true,
190
+ receiveAudio: true,
191
+ receiveVideo: true,
192
+ pstn: false,
193
+ sendShare: false,
194
+ receiveShare: false,
195
+ },
196
+ reconnection: {
197
+ enabled: true,
198
+ detection: true,
199
+ retry: {
200
+ times: 2,
201
+ backOff: {
202
+ start: 1000,
203
+ rate: 2,
204
+ },
205
+ },
206
+ },
207
+ stats: {
208
+ interval: 1000,
209
+ historyMax: 120,
210
+ },
211
+ metrics: {
212
+ clientType: 'TEAMS_CLIENT',
213
+ clientName: 'WEBEX_JS_SDK',
214
+ mqaMetricsInterval: 60000,
215
+ autoSendMQA: true,
216
+ },
217
+ },
218
+ },
219
+ initialize: function initialize(attrs) {
220
+ this.boundedStorage = makeMockStorage(attrs && attrs.initialBoundedStorage);
221
+ this.unboundedStorage = makeMockStorage(attrs && attrs.initialUnboundedStorage);
222
+ },
223
+ })
224
+ );
225
+
226
+ const webex = new MockWebex(options && options.attrs);
227
+
228
+ sinon.spy(webex, 'refresh');
229
+ _.defaults(webex, {
230
+ credentials: {
231
+ authorization: 'Basic NOTATOKEN',
232
+ getUserToken: sinon.stub().returns(
233
+ Promise.resolve({
234
+ toString: function toString() {
235
+ return 'Basic NOTATOKEN';
236
+ },
237
+ })
238
+ ),
239
+ getClientToken: sinon.stub().returns(
240
+ Promise.resolve({
241
+ toString: function toString() {
242
+ return 'Basic NOTATOKEN';
243
+ },
244
+ })
245
+ ),
246
+ },
247
+ sessionId: 'mock-webex_88888888-4444-4444-4444-aaaaaaaaaaaa',
248
+ logger: process.env.MOCK_LOGGER
249
+ ? console
250
+ : {
251
+ error: sinon.spy(),
252
+ warn: sinon.spy(),
253
+ log: sinon.spy(),
254
+ info: sinon.spy(),
255
+ debug: sinon.spy(),
256
+ },
257
+ });
258
+
259
+ _.defaults(webex.internal, {
260
+ avatar: {},
261
+ conversation: {},
262
+ device: {
263
+ webSocketUrl: 'ws://example.com',
264
+ getWebSocketUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),
265
+ features: {
266
+ developer: {
267
+ get: sinon.stub(),
268
+ },
269
+ entitlement: {
270
+ get: sinon.stub(),
271
+ },
272
+ user: {
273
+ get: sinon.stub(),
274
+ },
275
+ },
276
+ registered: true,
277
+ register: sinon.stub().returns(Promise.resolve()),
278
+ },
279
+ feature: {
280
+ setFeature: sinon.stub().returns(Promise.resolve(false)),
281
+ getFeature: sinon.stub().returns(Promise.resolve(false)),
282
+ },
283
+ encryption: {},
284
+ metrics: {
285
+ sendUnstructured: sinon.spy(),
286
+ },
287
+ support: {},
288
+ user: {},
289
+ mercury: {},
290
+ llm: {},
291
+ voicea: {},
292
+ });
293
+
294
+ return webex;
295
+ }
296
+
297
+ module.exports = makeWebex;