@webex/webex-core 3.0.0-beta.2 → 3.0.0-beta.21
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/config.js +1 -11
- package/dist/config.js.map +1 -1
- package/dist/credentials-config.js +44 -64
- package/dist/credentials-config.js.map +1 -1
- package/dist/index.js +0 -76
- package/dist/index.js.map +1 -1
- package/dist/interceptors/auth.js +22 -55
- package/dist/interceptors/auth.js.map +1 -1
- package/dist/interceptors/default-options.js +0 -20
- package/dist/interceptors/default-options.js.map +1 -1
- package/dist/interceptors/embargo.js +0 -21
- package/dist/interceptors/embargo.js.map +1 -1
- package/dist/interceptors/network-timing.js +2 -21
- package/dist/interceptors/network-timing.js.map +1 -1
- package/dist/interceptors/payload-transformer.js +2 -22
- package/dist/interceptors/payload-transformer.js.map +1 -1
- package/dist/interceptors/rate-limit.js +25 -57
- package/dist/interceptors/rate-limit.js.map +1 -1
- package/dist/interceptors/redirect.js +4 -33
- package/dist/interceptors/redirect.js.map +1 -1
- package/dist/interceptors/request-event.js +3 -30
- package/dist/interceptors/request-event.js.map +1 -1
- package/dist/interceptors/request-logger.js +1 -30
- package/dist/interceptors/request-logger.js.map +1 -1
- package/dist/interceptors/request-timing.js +3 -22
- package/dist/interceptors/request-timing.js.map +1 -1
- package/dist/interceptors/response-logger.js +2 -31
- package/dist/interceptors/response-logger.js.map +1 -1
- package/dist/interceptors/user-agent.js +2 -29
- package/dist/interceptors/user-agent.js.map +1 -1
- package/dist/interceptors/webex-tracking-id.js +5 -28
- package/dist/interceptors/webex-tracking-id.js.map +1 -1
- package/dist/interceptors/webex-user-agent.js +5 -38
- package/dist/interceptors/webex-user-agent.js.map +1 -1
- package/dist/lib/batcher.js +3 -51
- package/dist/lib/batcher.js.map +1 -1
- package/dist/lib/credentials/credentials.js +39 -119
- package/dist/lib/credentials/credentials.js.map +1 -1
- package/dist/lib/credentials/grant-errors.js +0 -49
- package/dist/lib/credentials/grant-errors.js.map +1 -1
- package/dist/lib/credentials/index.js +1 -13
- package/dist/lib/credentials/index.js.map +1 -1
- package/dist/lib/credentials/scope.js +1 -7
- package/dist/lib/credentials/scope.js.map +1 -1
- package/dist/lib/credentials/token-collection.js +1 -7
- package/dist/lib/credentials/token-collection.js.map +1 -1
- package/dist/lib/credentials/token.js +39 -118
- package/dist/lib/credentials/token.js.map +1 -1
- package/dist/lib/page.js +13 -26
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/services/constants.js +0 -2
- package/dist/lib/services/constants.js.map +1 -1
- package/dist/lib/services/index.js +1 -28
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/interceptors/server-error.js +2 -23
- package/dist/lib/services/interceptors/server-error.js.map +1 -1
- package/dist/lib/services/interceptors/service.js +12 -34
- package/dist/lib/services/interceptors/service.js.map +1 -1
- package/dist/lib/services/metrics.js +0 -2
- package/dist/lib/services/metrics.js.map +1 -1
- package/dist/lib/services/service-catalog.js +10 -90
- package/dist/lib/services/service-catalog.js.map +1 -1
- package/dist/lib/services/service-fed-ramp.js +0 -2
- package/dist/lib/services/service-fed-ramp.js.map +1 -1
- package/dist/lib/services/service-host.js +47 -62
- package/dist/lib/services/service-host.js.map +1 -1
- package/dist/lib/services/service-registry.js +78 -90
- package/dist/lib/services/service-registry.js.map +1 -1
- package/dist/lib/services/service-state.js +3 -15
- package/dist/lib/services/service-state.js.map +1 -1
- package/dist/lib/services/service-url.js +4 -25
- package/dist/lib/services/service-url.js.map +1 -1
- package/dist/lib/services/services.js +122 -238
- package/dist/lib/services/services.js.map +1 -1
- package/dist/lib/stateless-webex-plugin.js +5 -28
- package/dist/lib/stateless-webex-plugin.js.map +1 -1
- package/dist/lib/storage/decorators.js +19 -62
- package/dist/lib/storage/decorators.js.map +1 -1
- package/dist/lib/storage/errors.js +0 -23
- package/dist/lib/storage/errors.js.map +1 -1
- package/dist/lib/storage/index.js +2 -16
- package/dist/lib/storage/index.js.map +1 -1
- package/dist/lib/storage/make-webex-plugin-store.js +11 -41
- package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
- package/dist/lib/storage/make-webex-store.js +8 -30
- package/dist/lib/storage/make-webex-store.js.map +1 -1
- package/dist/lib/storage/memory-store-adapter.js +1 -19
- package/dist/lib/storage/memory-store-adapter.js.map +1 -1
- package/dist/lib/webex-core-plugin-mixin.js +9 -29
- package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-http-error.js +1 -31
- package/dist/lib/webex-http-error.js.map +1 -1
- package/dist/lib/webex-internal-core-plugin-mixin.js +9 -29
- package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-plugin.js +6 -40
- package/dist/lib/webex-plugin.js.map +1 -1
- package/dist/plugins/logger.js +3 -17
- package/dist/plugins/logger.js.map +1 -1
- package/dist/webex-core.js +79 -203
- package/dist/webex-core.js.map +1 -1
- package/dist/webex-internal-core.js +0 -10
- package/dist/webex-internal-core.js.map +1 -1
- package/package.json +14 -14
- package/src/config.js +9 -11
- package/src/credentials-config.js +110 -72
- package/src/index.js +4 -14
- package/src/interceptors/auth.js +36 -37
- package/src/interceptors/default-options.js +0 -1
- package/src/interceptors/embargo.js +1 -1
- package/src/interceptors/payload-transformer.js +1 -2
- package/src/interceptors/rate-limit.js +8 -5
- package/src/interceptors/redirect.js +14 -8
- package/src/interceptors/request-event.js +4 -8
- package/src/interceptors/request-logger.js +8 -5
- package/src/interceptors/response-logger.js +11 -8
- package/src/interceptors/user-agent.js +1 -2
- package/src/interceptors/webex-user-agent.js +3 -9
- package/src/lib/batcher.js +70 -69
- package/src/lib/credentials/credentials.js +112 -122
- package/src/lib/credentials/grant-errors.js +6 -7
- package/src/lib/credentials/index.js +1 -4
- package/src/lib/credentials/scope.js +1 -4
- package/src/lib/credentials/token-collection.js +1 -1
- package/src/lib/credentials/token.js +86 -80
- package/src/lib/page.js +10 -11
- package/src/lib/services/constants.js +3 -13
- package/src/lib/services/index.js +2 -2
- package/src/lib/services/interceptors/server-error.js +12 -7
- package/src/lib/services/interceptors/service.js +6 -5
- package/src/lib/services/metrics.js +1 -1
- package/src/lib/services/service-catalog.js +110 -100
- package/src/lib/services/service-fed-ramp.js +1 -2
- package/src/lib/services/service-host.js +10 -17
- package/src/lib/services/service-registry.js +69 -96
- package/src/lib/services/service-state.js +4 -6
- package/src/lib/services/service-url.js +24 -23
- package/src/lib/services/services.js +260 -251
- package/src/lib/stateless-webex-plugin.js +4 -2
- package/src/lib/storage/decorators.js +68 -66
- package/src/lib/storage/index.js +4 -6
- package/src/lib/storage/make-webex-plugin-store.js +34 -21
- package/src/lib/storage/make-webex-store.js +6 -7
- package/src/lib/storage/memory-store-adapter.js +3 -3
- package/src/lib/webex-core-plugin-mixin.js +10 -7
- package/src/lib/webex-http-error.js +7 -8
- package/src/lib/webex-internal-core-plugin-mixin.js +9 -6
- package/src/lib/webex-plugin.js +41 -34
- package/src/plugins/logger.js +8 -3
- package/src/webex-core.js +185 -116
- package/src/webex-internal-core.js +15 -9
- package/test/integration/spec/credentials/credentials.js +26 -30
- package/test/integration/spec/credentials/token.js +36 -33
- package/test/integration/spec/services/service-catalog.js +177 -156
- package/test/integration/spec/services/services.js +313 -304
- package/test/integration/spec/webex-core.js +98 -86
- package/test/unit/spec/_setup.js +26 -18
- package/test/unit/spec/credentials/credentials.js +189 -154
- package/test/unit/spec/credentials/token.js +94 -76
- package/test/unit/spec/interceptors/auth.js +291 -243
- package/test/unit/spec/interceptors/default-options.js +36 -24
- package/test/unit/spec/interceptors/embargo.js +32 -27
- package/test/unit/spec/interceptors/network-timing.js +2 -2
- package/test/unit/spec/interceptors/payload-transformer.js +61 -52
- package/test/unit/spec/interceptors/rate-limit.js +104 -75
- package/test/unit/spec/interceptors/redirect.js +22 -20
- package/test/unit/spec/interceptors/request-timing.js +18 -22
- package/test/unit/spec/interceptors/user-agent.js +28 -16
- package/test/unit/spec/interceptors/webex-tracking-id.js +14 -8
- package/test/unit/spec/interceptors/webex-user-agent.js +83 -37
- package/test/unit/spec/lib/batcher.js +36 -32
- package/test/unit/spec/lib/page.js +36 -32
- package/test/unit/spec/lib/webex-plugin.js +1 -1
- package/test/unit/spec/services/interceptors/server-error.js +67 -90
- package/test/unit/spec/services/interceptors/service.js +17 -28
- package/test/unit/spec/services/service-catalog.js +19 -27
- package/test/unit/spec/services/service-host.js +29 -26
- package/test/unit/spec/services/service-registry.js +128 -170
- package/test/unit/spec/services/service-state.js +13 -22
- package/test/unit/spec/services/service-url.js +24 -43
- package/test/unit/spec/services/services.js +85 -41
- package/test/unit/spec/storage/persist.js +6 -9
- package/test/unit/spec/storage/wait-for-value.js +22 -21
- package/test/unit/spec/webex-core.js +78 -57
- package/test/unit/spec/webex-internal-core.js +56 -31
|
@@ -12,99 +12,145 @@ describe('webex-core', () => {
|
|
|
12
12
|
describe('WebexUserAgentInterceptor', () => {
|
|
13
13
|
describe('#onRequest', () => {
|
|
14
14
|
it('adds a basic spark-user-agent header', () => {
|
|
15
|
-
const interceptor = Reflect.apply(
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const interceptor = Reflect.apply(
|
|
16
|
+
WebexUserAgentInterceptor.create,
|
|
17
|
+
{
|
|
18
|
+
version: pkg.version,
|
|
19
|
+
},
|
|
20
|
+
[]
|
|
21
|
+
);
|
|
18
22
|
const options = {headers: {}};
|
|
19
23
|
|
|
20
24
|
interceptor.onRequest(options);
|
|
21
25
|
|
|
22
26
|
assert.property(options, 'headers');
|
|
23
27
|
assert.property(options.headers, 'spark-user-agent');
|
|
24
|
-
assert.equal(
|
|
28
|
+
assert.equal(
|
|
29
|
+
options.headers['spark-user-agent'],
|
|
30
|
+
`webex-js-sdk/${pkg.version} (${typeof window === 'undefined' ? 'node' : 'web'})`
|
|
31
|
+
);
|
|
25
32
|
});
|
|
26
33
|
|
|
27
34
|
it('adds a complex spark-user-agent header', () => {
|
|
28
|
-
const interceptor = Reflect.apply(
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
const interceptor = Reflect.apply(
|
|
36
|
+
WebexUserAgentInterceptor.create,
|
|
37
|
+
{
|
|
38
|
+
version: pkg.version,
|
|
39
|
+
},
|
|
40
|
+
[]
|
|
41
|
+
);
|
|
31
42
|
const options = {headers: {}};
|
|
32
43
|
|
|
33
44
|
interceptor.onRequest(options);
|
|
34
45
|
|
|
35
46
|
assert.property(options, 'headers');
|
|
36
47
|
assert.property(options.headers, 'spark-user-agent');
|
|
37
|
-
assert.equal(
|
|
48
|
+
assert.equal(
|
|
49
|
+
options.headers['spark-user-agent'],
|
|
50
|
+
`webex-js-sdk/${pkg.version} (${typeof window === 'undefined' ? 'node' : 'web'})`
|
|
51
|
+
);
|
|
38
52
|
});
|
|
39
53
|
|
|
40
54
|
it('adds a spark-user-agent header using appName/appVersion from config', () => {
|
|
41
|
-
const interceptor = Reflect.apply(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
55
|
+
const interceptor = Reflect.apply(
|
|
56
|
+
WebexUserAgentInterceptor.create,
|
|
57
|
+
{
|
|
58
|
+
version: pkg.version,
|
|
59
|
+
config: {
|
|
60
|
+
appName: 'sample',
|
|
61
|
+
appVersion: '1.0.0',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
[]
|
|
65
|
+
);
|
|
48
66
|
|
|
49
67
|
const options = {
|
|
50
|
-
headers: {}
|
|
68
|
+
headers: {},
|
|
51
69
|
};
|
|
52
70
|
|
|
53
71
|
interceptor.onRequest(options);
|
|
54
72
|
|
|
55
73
|
assert.property(options, 'headers');
|
|
56
74
|
assert.property(options.headers, 'spark-user-agent');
|
|
57
|
-
assert.equal(
|
|
75
|
+
assert.equal(
|
|
76
|
+
options.headers['spark-user-agent'],
|
|
77
|
+
`webex-js-sdk/${pkg.version} (${
|
|
78
|
+
typeof window === 'undefined' ? 'node' : 'web'
|
|
79
|
+
}) sample/1.0.0`
|
|
80
|
+
);
|
|
58
81
|
});
|
|
59
82
|
|
|
60
83
|
it('adds a spark-user-agent header using appName/appVersion + appPlatform from config', () => {
|
|
61
|
-
const interceptor = Reflect.apply(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
84
|
+
const interceptor = Reflect.apply(
|
|
85
|
+
WebexUserAgentInterceptor.create,
|
|
86
|
+
{
|
|
87
|
+
version: pkg.version,
|
|
88
|
+
config: {
|
|
89
|
+
appName: 'sample',
|
|
90
|
+
appVersion: '1.0.0',
|
|
91
|
+
appPlatform: 'custom-label/1.0.0',
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
[]
|
|
95
|
+
);
|
|
69
96
|
|
|
70
97
|
const options = {
|
|
71
|
-
headers: {}
|
|
98
|
+
headers: {},
|
|
72
99
|
};
|
|
73
100
|
|
|
74
101
|
interceptor.onRequest(options);
|
|
75
102
|
|
|
76
103
|
assert.property(options, 'headers');
|
|
77
104
|
assert.property(options.headers, 'spark-user-agent');
|
|
78
|
-
assert.equal(
|
|
105
|
+
assert.equal(
|
|
106
|
+
options.headers['spark-user-agent'],
|
|
107
|
+
`webex-js-sdk/${pkg.version} (${
|
|
108
|
+
typeof window === 'undefined' ? 'node' : 'web'
|
|
109
|
+
}) sample/1.0.0 custom-label/1.0.0`
|
|
110
|
+
);
|
|
79
111
|
});
|
|
80
112
|
|
|
81
113
|
describe('when consumed by the webex package', () => {
|
|
82
114
|
it('adds a basic spark-user-agent header using "webex" instead of "webex-js-sdk"', () => {
|
|
83
|
-
const interceptor = Reflect.apply(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
115
|
+
const interceptor = Reflect.apply(
|
|
116
|
+
WebexUserAgentInterceptor.create,
|
|
117
|
+
{
|
|
118
|
+
webex: true,
|
|
119
|
+
version: pkg.version,
|
|
120
|
+
},
|
|
121
|
+
[]
|
|
122
|
+
);
|
|
87
123
|
const options = {headers: {}};
|
|
88
124
|
|
|
89
125
|
interceptor.onRequest(options);
|
|
90
126
|
|
|
91
127
|
assert.property(options, 'headers');
|
|
92
128
|
assert.property(options.headers, 'spark-user-agent');
|
|
93
|
-
assert.equal(
|
|
129
|
+
assert.equal(
|
|
130
|
+
options.headers['spark-user-agent'],
|
|
131
|
+
`webex/${pkg.version} (${typeof window === 'undefined' ? 'node' : 'web'})`
|
|
132
|
+
);
|
|
94
133
|
});
|
|
95
134
|
|
|
96
135
|
it('adds a complex spark-user-agent header using "webex" instead of "webex-js-sdk"', () => {
|
|
97
|
-
const interceptor = Reflect.apply(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
136
|
+
const interceptor = Reflect.apply(
|
|
137
|
+
WebexUserAgentInterceptor.create,
|
|
138
|
+
{
|
|
139
|
+
webex: true,
|
|
140
|
+
version: pkg.version,
|
|
141
|
+
},
|
|
142
|
+
[]
|
|
143
|
+
);
|
|
101
144
|
const options = {headers: {}};
|
|
102
145
|
|
|
103
146
|
interceptor.onRequest(options);
|
|
104
147
|
|
|
105
148
|
assert.property(options, 'headers');
|
|
106
149
|
assert.property(options.headers, 'spark-user-agent');
|
|
107
|
-
assert.equal(
|
|
150
|
+
assert.equal(
|
|
151
|
+
options.headers['spark-user-agent'],
|
|
152
|
+
`webex/${pkg.version} (${typeof window === 'undefined' ? 'node' : 'web'})`
|
|
153
|
+
);
|
|
108
154
|
});
|
|
109
155
|
});
|
|
110
156
|
});
|
|
@@ -28,7 +28,7 @@ describe('webex-core', () => {
|
|
|
28
28
|
return webex.request({
|
|
29
29
|
service: 'mock',
|
|
30
30
|
resource: '/batch',
|
|
31
|
-
body: payload
|
|
31
|
+
body: payload,
|
|
32
32
|
});
|
|
33
33
|
},
|
|
34
34
|
fingerprintRequest(req) {
|
|
@@ -36,7 +36,7 @@ describe('webex-core', () => {
|
|
|
36
36
|
},
|
|
37
37
|
fingerprintResponse(res) {
|
|
38
38
|
return Promise.resolve(res);
|
|
39
|
-
}
|
|
39
|
+
},
|
|
40
40
|
});
|
|
41
41
|
|
|
42
42
|
const OutOfBandBatcher = MockBatcher.extend({
|
|
@@ -49,7 +49,7 @@ describe('webex-core', () => {
|
|
|
49
49
|
},
|
|
50
50
|
fingerprintResponse(res) {
|
|
51
51
|
return Promise.resolve(res.id);
|
|
52
|
-
}
|
|
52
|
+
},
|
|
53
53
|
});
|
|
54
54
|
|
|
55
55
|
const BATCHER_MAX_CALLS = 10;
|
|
@@ -60,14 +60,14 @@ describe('webex-core', () => {
|
|
|
60
60
|
webex = new MockWebex({
|
|
61
61
|
children: {
|
|
62
62
|
batcher: MockBatcher,
|
|
63
|
-
outOfBandBatcher: OutOfBandBatcher
|
|
64
|
-
}
|
|
63
|
+
outOfBandBatcher: OutOfBandBatcher,
|
|
64
|
+
},
|
|
65
65
|
});
|
|
66
66
|
|
|
67
67
|
webex.config.mock = {
|
|
68
68
|
batcherMaxCalls: BATCHER_MAX_CALLS,
|
|
69
69
|
batcherWait: BATCHER_WAIT,
|
|
70
|
-
batcherMaxWait: BATCHER_MAX_WAIT
|
|
70
|
+
batcherMaxWait: BATCHER_MAX_WAIT,
|
|
71
71
|
};
|
|
72
72
|
});
|
|
73
73
|
|
|
@@ -96,7 +96,6 @@ describe('webex-core', () => {
|
|
|
96
96
|
promises.push(webex.internal.batcher.request(2));
|
|
97
97
|
assert.notCalled(webex.request);
|
|
98
98
|
|
|
99
|
-
|
|
100
99
|
return promiseTick(50)
|
|
101
100
|
.then(() => {
|
|
102
101
|
clock.tick(1);
|
|
@@ -130,7 +129,9 @@ describe('webex-core', () => {
|
|
|
130
129
|
it('propagates error from inside the call chain', () => {
|
|
131
130
|
// This is way easier to prove if we don't need to control the clock
|
|
132
131
|
clock.uninstall();
|
|
133
|
-
sinon
|
|
132
|
+
sinon
|
|
133
|
+
.stub(webex.internal.batcher, 'fingerprintResponse')
|
|
134
|
+
.throws(new Error('simulated failure'));
|
|
134
135
|
webex.request.returns(Promise.resolve({body: [{id: 1}]}));
|
|
135
136
|
|
|
136
137
|
return assert.isRejected(webex.internal.batcher.request({id: 1}), /simulated failure/);
|
|
@@ -150,10 +151,7 @@ describe('webex-core', () => {
|
|
|
150
151
|
.then(() => {
|
|
151
152
|
assert.calledOnce(webex.request);
|
|
152
153
|
|
|
153
|
-
return Promise.all([
|
|
154
|
-
assert.isRejected(p1),
|
|
155
|
-
assert.isRejected(p2)
|
|
156
|
-
]);
|
|
154
|
+
return Promise.all([assert.isRejected(p1), assert.isRejected(p2)]);
|
|
157
155
|
});
|
|
158
156
|
});
|
|
159
157
|
});
|
|
@@ -208,12 +206,17 @@ describe('webex-core', () => {
|
|
|
208
206
|
webex.request.returns(Promise.resolve({body: result}));
|
|
209
207
|
webex.request.onCall(1).returns(Promise.resolve({body: []}));
|
|
210
208
|
|
|
211
|
-
return result
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
209
|
+
return result
|
|
210
|
+
.reduce(
|
|
211
|
+
(promise, i) =>
|
|
212
|
+
promise.then(() => {
|
|
213
|
+
promises.push(webex.internal.batcher.request(i));
|
|
214
|
+
clock.tick(1);
|
|
215
|
+
|
|
216
|
+
return promiseTick(50);
|
|
217
|
+
}),
|
|
218
|
+
Promise.resolve()
|
|
219
|
+
)
|
|
217
220
|
.then(() => {
|
|
218
221
|
assert.calledOnce(webex.request);
|
|
219
222
|
|
|
@@ -253,13 +256,12 @@ describe('webex-core', () => {
|
|
|
253
256
|
promises.push(webex.internal.batcher.request(i));
|
|
254
257
|
}
|
|
255
258
|
|
|
256
|
-
return Promise.all(promises)
|
|
257
|
-
.
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
});
|
|
259
|
+
return Promise.all(promises).then((results) => {
|
|
260
|
+
assert.calledTwice(webex.request);
|
|
261
|
+
assert.lengthOf(webex.request.args[0][0].body, BATCHER_MAX_CALLS);
|
|
262
|
+
assert.lengthOf(webex.request.args[1][0].body, BATCHER_MAX_CALLS);
|
|
263
|
+
assert.lengthOf(results, BATCHER_MAX_CALLS * 2);
|
|
264
|
+
});
|
|
263
265
|
});
|
|
264
266
|
});
|
|
265
267
|
});
|
|
@@ -268,7 +270,6 @@ describe('webex-core', () => {
|
|
|
268
270
|
it('returns the same result', () => {
|
|
269
271
|
webex.request.returns(Promise.resolve({body: [1]}));
|
|
270
272
|
|
|
271
|
-
|
|
272
273
|
const p1 = webex.internal.batcher.request(1);
|
|
273
274
|
const p2 = webex.internal.batcher.request(1);
|
|
274
275
|
|
|
@@ -285,16 +286,15 @@ describe('webex-core', () => {
|
|
|
285
286
|
assert.deepEqual(webex.request.args[0][0], {
|
|
286
287
|
service: 'mock',
|
|
287
288
|
resource: '/batch',
|
|
288
|
-
body: [1]
|
|
289
|
+
body: [1],
|
|
289
290
|
});
|
|
290
291
|
|
|
291
|
-
return promise
|
|
292
|
-
.then((result) => assert.deepEqual(result, [1, 1]));
|
|
292
|
+
return promise.then((result) => assert.deepEqual(result, [1, 1]));
|
|
293
293
|
});
|
|
294
294
|
});
|
|
295
295
|
});
|
|
296
296
|
|
|
297
|
-
describe(
|
|
297
|
+
describe("when it's overridden to handle out-of-band responses", () => {
|
|
298
298
|
it('resolves as expected', () => {
|
|
299
299
|
sinon.spy(webex.internal.outOfBandBatcher, 'fingerprintResponse');
|
|
300
300
|
const promise = webex.internal.outOfBandBatcher.request({id: 1});
|
|
@@ -312,7 +312,7 @@ describe('webex-core', () => {
|
|
|
312
312
|
.then((res) => {
|
|
313
313
|
assert.deepEqual(res, {
|
|
314
314
|
id: 1,
|
|
315
|
-
data: 2
|
|
315
|
+
data: 2,
|
|
316
316
|
});
|
|
317
317
|
});
|
|
318
318
|
});
|
|
@@ -320,7 +320,11 @@ describe('webex-core', () => {
|
|
|
320
320
|
});
|
|
321
321
|
|
|
322
322
|
describe('#handleHttpError()', () => {
|
|
323
|
-
it('handles a non WebexHttpError object passed', () =>
|
|
323
|
+
it('handles a non WebexHttpError object passed', () =>
|
|
324
|
+
assert.isRejected(
|
|
325
|
+
webex.internal.batcher.handleHttpError('simulated failure'),
|
|
326
|
+
/simulated failure/
|
|
327
|
+
));
|
|
324
328
|
});
|
|
325
329
|
});
|
|
326
330
|
});
|
|
@@ -15,11 +15,11 @@ describe('webex-core', () => {
|
|
|
15
15
|
sinon.stub(Page, 'parseLinkHeaders');
|
|
16
16
|
const response = {
|
|
17
17
|
body: {
|
|
18
|
-
items: [1, 2, 3]
|
|
18
|
+
items: [1, 2, 3],
|
|
19
19
|
},
|
|
20
20
|
headers: {
|
|
21
|
-
link: 'FakeHeaderLinks'
|
|
22
|
-
}
|
|
21
|
+
link: 'FakeHeaderLinks',
|
|
22
|
+
},
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
page = new Page(response, 'FakeWebex');
|
|
@@ -47,22 +47,24 @@ describe('webex-core', () => {
|
|
|
47
47
|
|
|
48
48
|
before(() => {
|
|
49
49
|
webex = {
|
|
50
|
-
request: sinon.stub().returns(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
50
|
+
request: sinon.stub().returns(
|
|
51
|
+
Promise.resolve({
|
|
52
|
+
body: {
|
|
53
|
+
items: [4, 5, 6],
|
|
54
|
+
},
|
|
55
|
+
headers: {
|
|
56
|
+
link: '<https://www.cisco.com>; rel=previous',
|
|
57
|
+
},
|
|
58
|
+
})
|
|
59
|
+
),
|
|
58
60
|
};
|
|
59
61
|
const response = {
|
|
60
62
|
body: {
|
|
61
|
-
items: [1, 2, 3]
|
|
63
|
+
items: [1, 2, 3],
|
|
62
64
|
},
|
|
63
65
|
headers: {
|
|
64
|
-
link: '<https://www.cisco.com>; rel=next'
|
|
65
|
-
}
|
|
66
|
+
link: '<https://www.cisco.com>; rel=next',
|
|
67
|
+
},
|
|
66
68
|
};
|
|
67
69
|
|
|
68
70
|
page = new Page(response, webex);
|
|
@@ -72,8 +74,8 @@ describe('webex-core', () => {
|
|
|
72
74
|
assert(page.hasNext());
|
|
73
75
|
});
|
|
74
76
|
|
|
75
|
-
it('retrieves previous link', () =>
|
|
76
|
-
.then((nextPage) => {
|
|
77
|
+
it('retrieves previous link', () =>
|
|
78
|
+
page.next().then((nextPage) => {
|
|
77
79
|
assert.deepEqual(nextPage.items, [4, 5, 6]);
|
|
78
80
|
assert.calledWith(webex.request, {uri: 'https://www.cisco.com'});
|
|
79
81
|
}));
|
|
@@ -84,22 +86,24 @@ describe('webex-core', () => {
|
|
|
84
86
|
|
|
85
87
|
before(() => {
|
|
86
88
|
webex = {
|
|
87
|
-
request: sinon.stub().returns(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
89
|
+
request: sinon.stub().returns(
|
|
90
|
+
Promise.resolve({
|
|
91
|
+
body: {
|
|
92
|
+
items: [4, 5, 6],
|
|
93
|
+
},
|
|
94
|
+
headers: {
|
|
95
|
+
link: '<https://www.cisco.com>; rel=previous',
|
|
96
|
+
},
|
|
97
|
+
})
|
|
98
|
+
),
|
|
95
99
|
};
|
|
96
100
|
const response = {
|
|
97
101
|
body: {
|
|
98
|
-
items: [1, 2, 3]
|
|
102
|
+
items: [1, 2, 3],
|
|
99
103
|
},
|
|
100
104
|
headers: {
|
|
101
|
-
link: '<https://www.cisco.com>; rel=previous'
|
|
102
|
-
}
|
|
105
|
+
link: '<https://www.cisco.com>; rel=previous',
|
|
106
|
+
},
|
|
103
107
|
};
|
|
104
108
|
|
|
105
109
|
page = new Page(response, webex);
|
|
@@ -109,8 +113,8 @@ describe('webex-core', () => {
|
|
|
109
113
|
assert(page.hasPrevious());
|
|
110
114
|
});
|
|
111
115
|
|
|
112
|
-
it('retrieves previous link', () =>
|
|
113
|
-
.then((prevPage) => {
|
|
116
|
+
it('retrieves previous link', () =>
|
|
117
|
+
page.previous().then((prevPage) => {
|
|
114
118
|
assert.deepEqual(prevPage.items, [4, 5, 6]);
|
|
115
119
|
assert.calledWith(webex.request, {uri: 'https://www.cisco.com'});
|
|
116
120
|
}));
|
|
@@ -120,7 +124,7 @@ describe('webex-core', () => {
|
|
|
120
124
|
const singleLinkHeader = '<https://www.cisco.com>; rel=cisco';
|
|
121
125
|
const multipleLinkHeader = [
|
|
122
126
|
'<https://www.ciscospark.com>; rel=webex',
|
|
123
|
-
'<https://www.cisco.com>; rel=cisco'
|
|
127
|
+
'<https://www.cisco.com>; rel=cisco',
|
|
124
128
|
];
|
|
125
129
|
|
|
126
130
|
it('returns empty object if there are not any link headers', () => {
|
|
@@ -129,14 +133,14 @@ describe('webex-core', () => {
|
|
|
129
133
|
|
|
130
134
|
it('returns object containing one link if only one link header passed as a string', () => {
|
|
131
135
|
assert.deepEqual(Page.parseLinkHeaders(singleLinkHeader), {
|
|
132
|
-
cisco: 'https://www.cisco.com'
|
|
136
|
+
cisco: 'https://www.cisco.com',
|
|
133
137
|
});
|
|
134
138
|
});
|
|
135
139
|
|
|
136
140
|
it('returns object containing multiple links when multiple headers passed as an array', () => {
|
|
137
141
|
assert.deepEqual(Page.parseLinkHeaders(multipleLinkHeader), {
|
|
138
142
|
webex: 'https://www.ciscospark.com',
|
|
139
|
-
cisco: 'https://www.cisco.com'
|
|
143
|
+
cisco: 'https://www.cisco.com',
|
|
140
144
|
});
|
|
141
145
|
});
|
|
142
146
|
});
|