@webex/webex-core 3.0.0-beta.13 → 3.0.0-beta.15
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.map +1 -1
- package/dist/credentials-config.js +44 -44
- package/dist/credentials-config.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptors/auth.js.map +1 -1
- package/dist/interceptors/default-options.js.map +1 -1
- package/dist/interceptors/embargo.js.map +1 -1
- package/dist/interceptors/payload-transformer.js.map +1 -1
- package/dist/interceptors/rate-limit.js +4 -4
- package/dist/interceptors/rate-limit.js.map +1 -1
- package/dist/interceptors/redirect.js.map +1 -1
- package/dist/interceptors/request-event.js.map +1 -1
- package/dist/interceptors/request-logger.js.map +1 -1
- package/dist/interceptors/response-logger.js.map +1 -1
- package/dist/interceptors/user-agent.js.map +1 -1
- package/dist/interceptors/webex-user-agent.js.map +1 -1
- package/dist/lib/batcher.js +1 -1
- package/dist/lib/batcher.js.map +1 -1
- package/dist/lib/credentials/credentials.js +21 -6
- package/dist/lib/credentials/credentials.js.map +1 -1
- package/dist/lib/credentials/grant-errors.js.map +1 -1
- package/dist/lib/credentials/index.js.map +1 -1
- package/dist/lib/credentials/scope.js.map +1 -1
- package/dist/lib/credentials/token-collection.js.map +1 -1
- package/dist/lib/credentials/token.js +19 -5
- package/dist/lib/credentials/token.js.map +1 -1
- package/dist/lib/page.js +2 -0
- package/dist/lib/page.js.map +1 -1
- package/dist/lib/services/constants.js.map +1 -1
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/interceptors/server-error.js +2 -2
- package/dist/lib/services/interceptors/server-error.js.map +1 -1
- package/dist/lib/services/interceptors/service.js +1 -1
- package/dist/lib/services/interceptors/service.js.map +1 -1
- package/dist/lib/services/metrics.js.map +1 -1
- package/dist/lib/services/service-catalog.js.map +1 -1
- package/dist/lib/services/service-fed-ramp.js.map +1 -1
- package/dist/lib/services/service-host.js +6 -6
- package/dist/lib/services/service-host.js.map +1 -1
- package/dist/lib/services/service-registry.js.map +1 -1
- package/dist/lib/services/service-state.js.map +1 -1
- package/dist/lib/services/service-url.js.map +1 -1
- package/dist/lib/services/services.js +9 -7
- package/dist/lib/services/services.js.map +1 -1
- package/dist/lib/stateless-webex-plugin.js.map +1 -1
- package/dist/lib/storage/decorators.js.map +1 -1
- package/dist/lib/storage/index.js +2 -2
- package/dist/lib/storage/index.js.map +1 -1
- package/dist/lib/storage/make-webex-plugin-store.js.map +1 -1
- package/dist/lib/storage/make-webex-store.js.map +1 -1
- package/dist/lib/storage/memory-store-adapter.js.map +1 -1
- package/dist/lib/webex-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-http-error.js.map +1 -1
- package/dist/lib/webex-internal-core-plugin-mixin.js.map +1 -1
- package/dist/lib/webex-plugin.js.map +1 -1
- package/dist/plugins/logger.js +1 -1
- package/dist/plugins/logger.js.map +1 -1
- package/dist/webex-core.js +2 -2
- package/dist/webex-core.js.map +1 -1
- 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
|
@@ -10,15 +10,19 @@ describe('webex-core', () => {
|
|
|
10
10
|
describe('DefaultOptionsInterceptor', () => {
|
|
11
11
|
describe('#onRequest()', () => {
|
|
12
12
|
it('interceptor ok when defaultRequestOptions is undefined', () => {
|
|
13
|
-
const interceptor = Reflect.apply(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
const interceptor = Reflect.apply(
|
|
14
|
+
DefaultOptionsInterceptor.create,
|
|
15
|
+
{
|
|
16
|
+
config: {
|
|
17
|
+
appVersion: '1.0.0',
|
|
18
|
+
// defaultRequestOptions omitted/undefined here
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
[]
|
|
22
|
+
);
|
|
19
23
|
|
|
20
24
|
const options = {
|
|
21
|
-
existingOption: 'bar'
|
|
25
|
+
existingOption: 'bar',
|
|
22
26
|
};
|
|
23
27
|
|
|
24
28
|
interceptor.onRequest(options);
|
|
@@ -27,17 +31,21 @@ describe('webex-core', () => {
|
|
|
27
31
|
});
|
|
28
32
|
|
|
29
33
|
it('add default options to existing options', () => {
|
|
30
|
-
const interceptor = Reflect.apply(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
const interceptor = Reflect.apply(
|
|
35
|
+
DefaultOptionsInterceptor.create,
|
|
36
|
+
{
|
|
37
|
+
config: {
|
|
38
|
+
defaultRequestOptions: {
|
|
39
|
+
myNewOption1: 'foo1',
|
|
40
|
+
myNewOption2: 'foo2',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
[]
|
|
45
|
+
);
|
|
38
46
|
|
|
39
47
|
const options = {
|
|
40
|
-
existingOption: 'bar'
|
|
48
|
+
existingOption: 'bar',
|
|
41
49
|
};
|
|
42
50
|
|
|
43
51
|
interceptor.onRequest(options);
|
|
@@ -50,16 +58,20 @@ describe('webex-core', () => {
|
|
|
50
58
|
});
|
|
51
59
|
|
|
52
60
|
it('default option does not override existing option', () => {
|
|
53
|
-
const interceptor = Reflect.apply(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
61
|
+
const interceptor = Reflect.apply(
|
|
62
|
+
DefaultOptionsInterceptor.create,
|
|
63
|
+
{
|
|
64
|
+
config: {
|
|
65
|
+
defaultRequestOptions: {
|
|
66
|
+
existingOption: 'foo',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
[]
|
|
71
|
+
);
|
|
60
72
|
|
|
61
73
|
const options = {
|
|
62
|
-
existingOption: 'bar'
|
|
74
|
+
existingOption: 'bar',
|
|
63
75
|
};
|
|
64
76
|
|
|
65
77
|
interceptor.onRequest(options);
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import chai from 'chai';
|
|
2
2
|
import chaiAsPromised from 'chai-as-promised';
|
|
3
3
|
import sinon from 'sinon';
|
|
4
|
-
import {
|
|
5
|
-
EmbargoInterceptor,
|
|
6
|
-
WebexHttpError
|
|
7
|
-
} from '@webex/webex-core';
|
|
4
|
+
import {EmbargoInterceptor, WebexHttpError} from '@webex/webex-core';
|
|
8
5
|
|
|
9
6
|
const {assert} = chai;
|
|
10
7
|
|
|
@@ -28,28 +25,28 @@ describe('webex-core', () => {
|
|
|
28
25
|
|
|
29
26
|
beforeEach('create options object', () => {
|
|
30
27
|
options = {
|
|
31
|
-
uri: 'http://not-a-url.com/embargoed'
|
|
28
|
+
uri: 'http://not-a-url.com/embargoed',
|
|
32
29
|
};
|
|
33
30
|
|
|
34
31
|
interceptor.webex = {
|
|
35
32
|
credentials: {
|
|
36
|
-
clear: sinon.spy()
|
|
33
|
+
clear: sinon.spy(),
|
|
37
34
|
},
|
|
38
35
|
internal: {},
|
|
39
36
|
logger: {
|
|
40
|
-
info: sinon.spy()
|
|
41
|
-
}
|
|
37
|
+
info: sinon.spy(),
|
|
38
|
+
},
|
|
42
39
|
};
|
|
43
40
|
|
|
44
41
|
credentialsClear = interceptor.webex.credentials.clear;
|
|
45
42
|
loggerInfo = interceptor.webex.logger.info;
|
|
46
43
|
loggerMessage = [
|
|
47
44
|
'Received `HTTP 451 Unavailable For Legal Reasons`, ',
|
|
48
|
-
'discarding credentials and device registration'
|
|
45
|
+
'discarding credentials and device registration',
|
|
49
46
|
].join('');
|
|
50
47
|
});
|
|
51
48
|
|
|
52
|
-
describe(
|
|
49
|
+
describe("when the reason does have a '451' status code", () => {
|
|
53
50
|
beforeEach('set appropriate status code and spys', () => {
|
|
54
51
|
reason = new WebexHttpError.InternalServerError({
|
|
55
52
|
message: 'test message',
|
|
@@ -57,22 +54,25 @@ describe('webex-core', () => {
|
|
|
57
54
|
options: {
|
|
58
55
|
url: 'http://not-a-url.com/',
|
|
59
56
|
headers: {
|
|
60
|
-
trackingId: 'tid'
|
|
61
|
-
}
|
|
62
|
-
}
|
|
57
|
+
trackingId: 'tid',
|
|
58
|
+
},
|
|
59
|
+
},
|
|
63
60
|
});
|
|
64
61
|
});
|
|
65
62
|
|
|
66
63
|
it('should return a rejected promise with the reason', () =>
|
|
67
|
-
assert
|
|
64
|
+
assert
|
|
65
|
+
.isRejected(interceptor.onResponseError(options, reason))
|
|
68
66
|
.then((error) => assert.equal(reason, error)));
|
|
69
67
|
|
|
70
68
|
it('should clear credentials', () =>
|
|
71
|
-
assert
|
|
69
|
+
assert
|
|
70
|
+
.isRejected(interceptor.onResponseError(options, reason))
|
|
72
71
|
.then(() => assert.called(credentialsClear)));
|
|
73
72
|
|
|
74
73
|
it('should present an appropriate logger message', () =>
|
|
75
|
-
assert
|
|
74
|
+
assert
|
|
75
|
+
.isRejected(interceptor.onResponseError(options, reason))
|
|
76
76
|
.then(() => assert.calledWith(loggerInfo, loggerMessage)));
|
|
77
77
|
|
|
78
78
|
describe('when the device plugin is mounted', () => {
|
|
@@ -80,19 +80,20 @@ describe('webex-core', () => {
|
|
|
80
80
|
|
|
81
81
|
beforeEach('set up the device plugin', () => {
|
|
82
82
|
interceptor.webex.internal.device = {
|
|
83
|
-
clear: sinon.spy()
|
|
83
|
+
clear: sinon.spy(),
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
deviceClear = interceptor.webex.internal.device.clear;
|
|
87
87
|
});
|
|
88
88
|
|
|
89
89
|
it('should clear the device', () =>
|
|
90
|
-
assert
|
|
90
|
+
assert
|
|
91
|
+
.isRejected(interceptor.onResponseError(options, reason))
|
|
91
92
|
.then(() => assert.called(deviceClear)));
|
|
92
93
|
});
|
|
93
94
|
});
|
|
94
95
|
|
|
95
|
-
describe(
|
|
96
|
+
describe("when the reason does not have a '451' status code", () => {
|
|
96
97
|
beforeEach('set appropriate status code and spys', () => {
|
|
97
98
|
reason = new WebexHttpError.InternalServerError({
|
|
98
99
|
message: 'test message',
|
|
@@ -100,22 +101,25 @@ describe('webex-core', () => {
|
|
|
100
101
|
options: {
|
|
101
102
|
url: 'http://not-a-url.com/',
|
|
102
103
|
headers: {
|
|
103
|
-
trackingId: 'tid'
|
|
104
|
-
}
|
|
105
|
-
}
|
|
104
|
+
trackingId: 'tid',
|
|
105
|
+
},
|
|
106
|
+
},
|
|
106
107
|
});
|
|
107
108
|
});
|
|
108
109
|
|
|
109
110
|
it('should return a rejected promise with the reason', () =>
|
|
110
|
-
assert
|
|
111
|
+
assert
|
|
112
|
+
.isRejected(interceptor.onResponseError(options, reason))
|
|
111
113
|
.then((error) => assert.equal(reason, error)));
|
|
112
114
|
|
|
113
115
|
it('should not clear credentials', () =>
|
|
114
|
-
assert
|
|
116
|
+
assert
|
|
117
|
+
.isRejected(interceptor.onResponseError(options, reason))
|
|
115
118
|
.then(() => assert.notCalled(credentialsClear)));
|
|
116
119
|
|
|
117
120
|
it('should not present any logger message', () =>
|
|
118
|
-
assert
|
|
121
|
+
assert
|
|
122
|
+
.isRejected(interceptor.onResponseError(options, reason))
|
|
119
123
|
.then(() => assert.notCalled(loggerInfo)));
|
|
120
124
|
|
|
121
125
|
describe('when the device plugin is mounted', () => {
|
|
@@ -123,14 +127,15 @@ describe('webex-core', () => {
|
|
|
123
127
|
|
|
124
128
|
beforeEach('set up the device plugin', () => {
|
|
125
129
|
interceptor.webex.internal.device = {
|
|
126
|
-
clear: sinon.spy()
|
|
130
|
+
clear: sinon.spy(),
|
|
127
131
|
};
|
|
128
132
|
|
|
129
133
|
deviceClear = interceptor.webex.internal.device.clear;
|
|
130
134
|
});
|
|
131
135
|
|
|
132
136
|
it('should not clear the device', () =>
|
|
133
|
-
assert
|
|
137
|
+
assert
|
|
138
|
+
.isRejected(interceptor.onResponseError(options, reason))
|
|
134
139
|
.then(() => assert.notCalled(deviceClear)));
|
|
135
140
|
});
|
|
136
141
|
});
|
|
@@ -15,23 +15,28 @@ describe('webex-core', () => {
|
|
|
15
15
|
webex = new WebexCore({
|
|
16
16
|
config: {
|
|
17
17
|
payloadTransformer: {
|
|
18
|
-
predicates: [
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
predicates: [
|
|
19
|
+
{
|
|
20
|
+
name: 'transformObject',
|
|
21
|
+
direction: 'outbound',
|
|
22
|
+
test(ctx, options) {
|
|
23
|
+
return Promise.resolve(
|
|
24
|
+
Boolean(options && options.body && options.body.objectType)
|
|
25
|
+
);
|
|
26
|
+
},
|
|
27
|
+
extract(options) {
|
|
28
|
+
return Promise.resolve(options.body);
|
|
29
|
+
},
|
|
23
30
|
},
|
|
24
|
-
|
|
25
|
-
return Promise.resolve(options.body);
|
|
26
|
-
}
|
|
27
|
-
}],
|
|
31
|
+
],
|
|
28
32
|
transforms: [
|
|
29
33
|
{
|
|
30
34
|
name: 'transformObject',
|
|
31
35
|
fn(ctx, object) {
|
|
32
|
-
return ctx
|
|
36
|
+
return ctx
|
|
37
|
+
.transform('normalizeObject', object)
|
|
33
38
|
.then((object) => ctx.transform('encryptObject', object));
|
|
34
|
-
}
|
|
39
|
+
},
|
|
35
40
|
},
|
|
36
41
|
{
|
|
37
42
|
name: 'normalizeObject',
|
|
@@ -43,9 +48,9 @@ describe('webex-core', () => {
|
|
|
43
48
|
return Promise.all([
|
|
44
49
|
ctx.transform(`normalize${capitalize(object.objectType)}`, object),
|
|
45
50
|
ctx.transform('normalizePropDisplayName', object),
|
|
46
|
-
ctx.transform('normalizePropContent', object)
|
|
51
|
+
ctx.transform('normalizePropContent', object),
|
|
47
52
|
]);
|
|
48
|
-
}
|
|
53
|
+
},
|
|
49
54
|
},
|
|
50
55
|
{
|
|
51
56
|
name: 'normalizeActivity',
|
|
@@ -53,9 +58,9 @@ describe('webex-core', () => {
|
|
|
53
58
|
return Promise.all([
|
|
54
59
|
ctx.transform('normalizeObject', activity.actor),
|
|
55
60
|
ctx.transform('normalizeObject', activity.object),
|
|
56
|
-
ctx.transform('normalizeObject', activity.target)
|
|
61
|
+
ctx.transform('normalizeObject', activity.target),
|
|
57
62
|
]);
|
|
58
|
-
}
|
|
63
|
+
},
|
|
59
64
|
},
|
|
60
65
|
{
|
|
61
66
|
name: 'normalizePerson',
|
|
@@ -63,7 +68,7 @@ describe('webex-core', () => {
|
|
|
63
68
|
actor.id = 'uuid';
|
|
64
69
|
|
|
65
70
|
return Promise.resolve();
|
|
66
|
-
}
|
|
71
|
+
},
|
|
67
72
|
},
|
|
68
73
|
{
|
|
69
74
|
name: 'normalizeComment',
|
|
@@ -71,7 +76,7 @@ describe('webex-core', () => {
|
|
|
71
76
|
comment.content = 'richtext';
|
|
72
77
|
|
|
73
78
|
return Promise.resolve();
|
|
74
|
-
}
|
|
79
|
+
},
|
|
75
80
|
},
|
|
76
81
|
{
|
|
77
82
|
name: 'encryptObject',
|
|
@@ -87,13 +92,13 @@ describe('webex-core', () => {
|
|
|
87
92
|
}
|
|
88
93
|
|
|
89
94
|
return ctx.transform(`encrypt${capitalize(object.objectType)}`, key, object);
|
|
90
|
-
}
|
|
95
|
+
},
|
|
91
96
|
},
|
|
92
97
|
{
|
|
93
98
|
name: 'encryptActivity',
|
|
94
99
|
fn(ctx, key, activity) {
|
|
95
100
|
return ctx.transform('encryptComment', key, activity.object);
|
|
96
|
-
}
|
|
101
|
+
},
|
|
97
102
|
},
|
|
98
103
|
{
|
|
99
104
|
name: 'encryptComment',
|
|
@@ -102,44 +107,48 @@ describe('webex-core', () => {
|
|
|
102
107
|
object.content = 'ciphertextCONTENT';
|
|
103
108
|
|
|
104
109
|
return Promise.resolve();
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
]
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
},
|
|
110
115
|
});
|
|
111
116
|
});
|
|
112
117
|
|
|
113
118
|
describe('#transform()', () => {
|
|
114
|
-
it('transforms request objects', () =>
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
.then((result) => assert.deepEqual(result, {
|
|
129
|
-
body: {
|
|
130
|
-
actor: {
|
|
131
|
-
id: 'uuid',
|
|
132
|
-
objectType: 'person'
|
|
133
|
-
},
|
|
134
|
-
encryptionKeyUrl: 'kms://example.com/uuid',
|
|
135
|
-
object: {
|
|
136
|
-
content: 'ciphertextCONTENT',
|
|
137
|
-
displayName: 'ciphertextDISPLAYNAME',
|
|
138
|
-
objectType: 'comment'
|
|
119
|
+
it('transforms request objects', () =>
|
|
120
|
+
webex
|
|
121
|
+
.transform('outbound', {
|
|
122
|
+
body: {
|
|
123
|
+
actor: {
|
|
124
|
+
id: 'me@wx2.example.com',
|
|
125
|
+
objectType: 'person',
|
|
126
|
+
},
|
|
127
|
+
object: {
|
|
128
|
+
content: '<invalidtag>richtext</invalidtag>',
|
|
129
|
+
displayName: 'plaintext',
|
|
130
|
+
objectType: 'comment',
|
|
131
|
+
},
|
|
132
|
+
objectType: 'activity',
|
|
139
133
|
},
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
134
|
+
})
|
|
135
|
+
.then((result) =>
|
|
136
|
+
assert.deepEqual(result, {
|
|
137
|
+
body: {
|
|
138
|
+
actor: {
|
|
139
|
+
id: 'uuid',
|
|
140
|
+
objectType: 'person',
|
|
141
|
+
},
|
|
142
|
+
encryptionKeyUrl: 'kms://example.com/uuid',
|
|
143
|
+
object: {
|
|
144
|
+
content: 'ciphertextCONTENT',
|
|
145
|
+
displayName: 'ciphertextDISPLAYNAME',
|
|
146
|
+
objectType: 'comment',
|
|
147
|
+
},
|
|
148
|
+
objectType: 'activity',
|
|
149
|
+
},
|
|
150
|
+
})
|
|
151
|
+
));
|
|
143
152
|
});
|
|
144
153
|
});
|
|
145
154
|
});
|