@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 +6 -6
- package/README.md +31 -31
- package/babel.config.js +3 -3
- package/dist/index.js +10 -10
- package/dist/index.js.map +1 -1
- package/jest.config.js +3 -3
- package/package.json +10 -11
- package/process +1 -1
- package/src/index.js +297 -297
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
|
-
[](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
|
+
[](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": "
|
|
17
|
-
"@webex/eslint-config-legacy": "
|
|
18
|
-
"@webex/jest-config-legacy": "
|
|
19
|
-
"@webex/legacy-tools": "
|
|
20
|
-
"@webex/test-helper-chai": "
|
|
21
|
-
"@webex/test-helper-mocha": "
|
|
22
|
-
"@webex/test-helper-test-users": "
|
|
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
|
-
|
|
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;
|