@webex/internal-plugin-dss 2.59.2 → 2.59.3-next.1

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.
@@ -1,403 +1,403 @@
1
- /*!
2
- * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.
3
- */
4
-
5
- import {assert} from '@webex/test-helper-chai';
6
- import DSS from '@webex/internal-plugin-dss';
7
- import MockWebex from '@webex/test-helper-mock-webex';
8
- import sinon from 'sinon';
9
- import {expect} from 'chai';
10
- import {set} from 'lodash';
11
- import uuid from 'uuid';
12
-
13
- describe('plugin-dss', () => {
14
- describe('DSS', () => {
15
- let webex;
16
- let uuidStub;
17
- let mercuryCallbacks;
18
-
19
- beforeEach(() => {
20
- webex = new MockWebex({
21
- canAuthorize: false,
22
- children: {
23
- dss: DSS,
24
- },
25
- });
26
-
27
- uuidStub = sinon.stub(uuid, 'v4').returns('randomid');
28
-
29
- webex.canAuthorize = true;
30
- webex.internal.device.orgId = 'userOrgId';
31
-
32
- mercuryCallbacks = {};
33
-
34
- webex.internal.mercury = {
35
- connect: sinon.stub().returns(Promise.resolve()),
36
- disconnect: sinon.stub().returns(Promise.resolve()),
37
- on: sinon.stub().callsFake((event, callback) => {
38
- mercuryCallbacks[event] = callback;
39
- }),
40
- off: sinon.spy(),
41
- };
42
- });
43
-
44
- afterEach(() => {
45
- uuidStub.restore();
46
- });
47
-
48
- describe('#register()', () => {
49
- it('registers correctly', async () => {
50
- await webex.internal.dss.register();
51
-
52
- assert.callCount(webex.internal.mercury.on, 2);
53
-
54
- const firstCallArgs = webex.internal.mercury.on.getCall(0).args;
55
- expect(firstCallArgs[0]).to.equal('event:directory.lookup');
56
- expect(firstCallArgs[1]).to.be.a('function');
57
-
58
- const secondCallArgs = webex.internal.mercury.on.getCall(1).args;
59
- expect(secondCallArgs[0]).to.equal('event:directory.search');
60
- expect(secondCallArgs[1]).to.be.a('function');
61
-
62
- assert.equal(webex.internal.dss.registered, true);
63
- });
64
-
65
- it('rejects when it cannot authorize', async () => {
66
- webex.canAuthorize = false;
67
- // @ts-ignore
68
- await expect(webex.internal.dss.register()).to.be.rejectedWith(
69
- Error,
70
- 'SDK cannot authorize'
71
- );
72
- assert.equal(webex.internal.dss.registered, false);
73
- });
74
- });
75
-
76
- describe('#unregister()', () => {
77
- it('unregisters correctly', async () => {
78
- webex.internal.dss.registered = true;
79
- await webex.internal.dss.unregister();
80
-
81
- assert.callCount(webex.internal.mercury.off, 2);
82
-
83
- const firstCallArgs = webex.internal.mercury.off.getCall(0).args;
84
- expect(firstCallArgs[0]).to.equal('event:directory.lookup');
85
-
86
- const secondCallArgs = webex.internal.mercury.off.getCall(1).args;
87
- expect(secondCallArgs[0]).to.equal('event:directory.search');
88
-
89
- assert.equal(webex.internal.dss.registered, false);
90
- });
91
-
92
- it('handles unregister when it is not registered', async () => {
93
- const result = await webex.internal.dss.unregister();
94
- await expect(result).equal(undefined);
95
- assert.equal(webex.internal.dss.registered, false);
96
- });
97
- });
98
-
99
- const createData = (requestId, sequence, finished, dataPath) => {
100
- const data = {
101
- requestId,
102
- sequence,
103
- };
104
- if (finished) {
105
- (data as any).finished = finished;
106
- }
107
- set(data, dataPath, [`data${sequence}`]);
108
- return {data};
109
- };
110
-
111
- const testRequest = async ({method, resource, params, bodyParams, dataPath, event}) => {
112
- webex.request = sinon.stub();
113
-
114
- await webex.internal.dss.register();
115
-
116
- const promise = webex.internal.dss[method](params);
117
-
118
- const requestId = 'randomid';
119
-
120
- expect(webex.request.getCall(0).args).to.deep.equal([
121
- {
122
- service: 'directorySearch',
123
- body: {
124
- requestId,
125
- ...bodyParams,
126
- },
127
- contentType: 'application/json',
128
- method: 'POST',
129
- resource,
130
- },
131
- ]);
132
-
133
- mercuryCallbacks[event](createData(requestId, 1, false, dataPath));
134
- mercuryCallbacks[event](createData(requestId, 2, true, dataPath));
135
- mercuryCallbacks[event](createData(requestId, 0, false, dataPath));
136
-
137
- const result = await promise;
138
- expect(result).to.deep.equal(['data0', 'data1', 'data2']);
139
- };
140
-
141
- describe('#lookupDetail', () => {
142
- it('calls _request correctly', async () => {
143
- webex.internal.device.orgId = 'userOrgId';
144
- webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
145
-
146
- const result = await webex.internal.dss.lookupDetail({id: 'test id'});
147
- expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
148
- {
149
- dataPath: 'lookupResult.entities',
150
- resource: '/lookup/orgid/userOrgId/identity/test id/detail',
151
- },
152
- ]);
153
- expect(result).to.equal('some return value');
154
- });
155
-
156
- it('works correctly', async () => {
157
- await testRequest({
158
- method: 'lookupDetail',
159
- dataPath: 'lookupResult.entities',
160
- event: 'event:directory.lookup',
161
- resource: '/lookup/orgid/userOrgId/identity/test id/detail',
162
- params: {
163
- id: 'test id',
164
- },
165
- bodyParams: {},
166
- });
167
- });
168
- });
169
-
170
- describe('#lookup', () => {
171
- it('calls _request correctly', async () => {
172
- webex.internal.device.orgId = 'userOrgId';
173
- webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
174
-
175
- const result = await webex.internal.dss.lookup({ids: ['id1', 'id2']});
176
- expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
177
- {
178
- dataPath: 'lookupResult.entities',
179
- resource: '/lookup/orgid/userOrgId/identities',
180
- params: {
181
- lookupValues: ['id1', 'id2'],
182
- },
183
- },
184
- ]);
185
- expect(result).to.equal('some return value');
186
- });
187
-
188
- it('calls _request correctly with entityProviderType', async () => {
189
- webex.internal.device.orgId = 'userOrgId';
190
- webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
191
-
192
- const result = await webex.internal.dss.lookup({
193
- ids: ['id1', 'id2'],
194
- entityProviderType: 'CI_USER',
195
- });
196
- expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
197
- {
198
- dataPath: 'lookupResult.entities',
199
- resource: '/lookup/orgid/userOrgId/entityprovidertype/CI_USER',
200
- params: {
201
- lookupValues: ['id1', 'id2'],
202
- },
203
- },
204
- ]);
205
- expect(result).to.equal('some return value');
206
- });
207
-
208
- it('works correctly', async () => {
209
- await testRequest({
210
- method: 'lookup',
211
- dataPath: 'lookupResult.entities',
212
- event: 'event:directory.lookup',
213
- resource: '/lookup/orgid/userOrgId/identities',
214
- params: {
215
- ids: ['id1', 'id2'],
216
- },
217
- bodyParams: {
218
- lookupValues: ['id1', 'id2'],
219
- },
220
- });
221
- });
222
- });
223
-
224
- describe('#lookupByEmail', () => {
225
- it('calls _request correctly', async () => {
226
- webex.internal.device.orgId = 'userOrgId';
227
- webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
228
-
229
- const result = await webex.internal.dss.lookupByEmail({
230
- emails: ['email1', 'email2'],
231
- });
232
- expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
233
- {
234
- dataPath: 'lookupResult.entities',
235
- resource: '/lookup/orgid/userOrgId/emails',
236
- params: {
237
- lookupValues: ['email1', 'email2'],
238
- },
239
- },
240
- ]);
241
- expect(result).to.equal('some return value');
242
- });
243
-
244
- it('works correctly', async () => {
245
- await testRequest({
246
- method: 'lookupByEmail',
247
- dataPath: 'lookupResult.entities',
248
- event: 'event:directory.lookup',
249
- resource: '/lookup/orgid/userOrgId/emails',
250
- params: {
251
- emails: ['email1', 'email2'],
252
- },
253
- bodyParams: {
254
- lookupValues: ['email1', 'email2'],
255
- },
256
- });
257
- });
258
- });
259
-
260
- describe('#search', () => {
261
- it('calls _request correctly', async () => {
262
- webex.internal.device.orgId = 'userOrgId';
263
- webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
264
-
265
- const result = await webex.internal.dss.search({
266
- requestedTypes: ['PERSON', 'ROBOT'],
267
- resultSize: 100,
268
- queryString: 'query',
269
- });
270
- expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
271
- {
272
- dataPath: 'directoryEntities',
273
- resource: '/search/orgid/userOrgId/entities',
274
- params: {
275
- queryString: 'query',
276
- resultSize: 100,
277
- requestedTypes: ['PERSON', 'ROBOT'],
278
- },
279
- },
280
- ]);
281
- expect(result).to.equal('some return value');
282
- });
283
-
284
- it('works correctly', async () => {
285
- await testRequest({
286
- method: 'search',
287
- event: 'event:directory.search',
288
- dataPath: 'directoryEntities',
289
- resource: '/search/orgid/userOrgId/entities',
290
- params: {
291
- requestedTypes: ['PERSON', 'ROBOT'],
292
- resultSize: 100,
293
- queryString: 'query',
294
- },
295
- bodyParams: {
296
- requestedTypes: ['PERSON', 'ROBOT'],
297
- resultSize: 100,
298
- queryString: 'query',
299
- },
300
- });
301
- });
302
- });
303
-
304
- describe('#_request', () => {
305
- it('handles a request correctly', async () => {
306
- webex.request = sinon.stub();
307
- uuid.v4.returns('randomid');
308
- const promise = webex.internal.dss._request({
309
- resource: '/search/orgid/userOrgId/entities',
310
- params: {some: 'param'},
311
- dataPath: 'a.b.c',
312
- });
313
-
314
- expect(webex.request.getCall(0).args).to.deep.equal([
315
- {
316
- service: 'directorySearch',
317
- body: {
318
- requestId: 'randomid',
319
- some: 'param',
320
- },
321
- contentType: 'application/json',
322
- method: 'POST',
323
- resource: '/search/orgid/userOrgId/entities',
324
- },
325
- ]);
326
-
327
- webex.internal.dss.trigger(webex.internal.dss._getResultEventName('randomid'), {
328
- sequence: 1,
329
- a: {
330
- b: {
331
- c: ['data1'],
332
- },
333
- },
334
- });
335
-
336
- webex.internal.dss.trigger(webex.internal.dss._getResultEventName('randomid'), {
337
- sequence: 2,
338
- finished: true,
339
- a: {
340
- b: {
341
- c: ['data2'],
342
- },
343
- },
344
- });
345
-
346
- webex.internal.dss.trigger(webex.internal.dss._getResultEventName('randomid'), {
347
- sequence: 0,
348
- a: {
349
- b: {
350
- c: ['data0'],
351
- },
352
- },
353
- });
354
-
355
- const result = await promise;
356
- expect(result).to.deep.equal(['data0', 'data1', 'data2']);
357
- });
358
- });
359
- describe('#searchPlaces', () => {
360
- it('calls _request correctly', async () => {
361
- webex.internal.device.orgId = 'userOrgId';
362
- webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
363
-
364
- const result = await webex.internal.dss.searchPlaces({
365
- resultSize: 100,
366
- queryString: 'query',
367
- isOnlySchedulableRooms: true,
368
- });
369
- expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
370
- {
371
- dataPath: 'directoryEntities',
372
- resource: '/search/orgid/userOrgId/places',
373
- params: {
374
- queryString: 'query',
375
- resultSize: 100,
376
- isOnlySchedulableRooms: true,
377
- },
378
- },
379
- ]);
380
- expect(result).to.equal('some return value');
381
- });
382
-
383
- it('works correctly', async () => {
384
- await testRequest({
385
- method: 'searchPlaces',
386
- event: 'event:directory.search',
387
- dataPath: 'directoryEntities',
388
- resource: '/search/orgid/userOrgId/places',
389
- params: {
390
- isOnlySchedulableRooms: true,
391
- resultSize: 100,
392
- queryString: 'query',
393
- },
394
- bodyParams: {
395
- isOnlySchedulableRooms: true,
396
- resultSize: 100,
397
- queryString: 'query',
398
- },
399
- });
400
- });
401
- });
402
- });
403
- });
1
+ /*!
2
+ * Copyright (c) 2015-2022 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {assert} from '@webex/test-helper-chai';
6
+ import DSS from '@webex/internal-plugin-dss';
7
+ import MockWebex from '@webex/test-helper-mock-webex';
8
+ import sinon from 'sinon';
9
+ import {expect} from 'chai';
10
+ import {set} from 'lodash';
11
+ import uuid from 'uuid';
12
+
13
+ describe('plugin-dss', () => {
14
+ describe('DSS', () => {
15
+ let webex;
16
+ let uuidStub;
17
+ let mercuryCallbacks;
18
+
19
+ beforeEach(() => {
20
+ webex = new MockWebex({
21
+ canAuthorize: false,
22
+ children: {
23
+ dss: DSS,
24
+ },
25
+ });
26
+
27
+ uuidStub = sinon.stub(uuid, 'v4').returns('randomid');
28
+
29
+ webex.canAuthorize = true;
30
+ webex.internal.device.orgId = 'userOrgId';
31
+
32
+ mercuryCallbacks = {};
33
+
34
+ webex.internal.mercury = {
35
+ connect: sinon.stub().returns(Promise.resolve()),
36
+ disconnect: sinon.stub().returns(Promise.resolve()),
37
+ on: sinon.stub().callsFake((event, callback) => {
38
+ mercuryCallbacks[event] = callback;
39
+ }),
40
+ off: sinon.spy(),
41
+ };
42
+ });
43
+
44
+ afterEach(() => {
45
+ uuidStub.restore();
46
+ });
47
+
48
+ describe('#register()', () => {
49
+ it('registers correctly', async () => {
50
+ await webex.internal.dss.register();
51
+
52
+ assert.callCount(webex.internal.mercury.on, 2);
53
+
54
+ const firstCallArgs = webex.internal.mercury.on.getCall(0).args;
55
+ expect(firstCallArgs[0]).to.equal('event:directory.lookup');
56
+ expect(firstCallArgs[1]).to.be.a('function');
57
+
58
+ const secondCallArgs = webex.internal.mercury.on.getCall(1).args;
59
+ expect(secondCallArgs[0]).to.equal('event:directory.search');
60
+ expect(secondCallArgs[1]).to.be.a('function');
61
+
62
+ assert.equal(webex.internal.dss.registered, true);
63
+ });
64
+
65
+ it('rejects when it cannot authorize', async () => {
66
+ webex.canAuthorize = false;
67
+ // @ts-ignore
68
+ await expect(webex.internal.dss.register()).to.be.rejectedWith(
69
+ Error,
70
+ 'SDK cannot authorize'
71
+ );
72
+ assert.equal(webex.internal.dss.registered, false);
73
+ });
74
+ });
75
+
76
+ describe('#unregister()', () => {
77
+ it('unregisters correctly', async () => {
78
+ webex.internal.dss.registered = true;
79
+ await webex.internal.dss.unregister();
80
+
81
+ assert.callCount(webex.internal.mercury.off, 2);
82
+
83
+ const firstCallArgs = webex.internal.mercury.off.getCall(0).args;
84
+ expect(firstCallArgs[0]).to.equal('event:directory.lookup');
85
+
86
+ const secondCallArgs = webex.internal.mercury.off.getCall(1).args;
87
+ expect(secondCallArgs[0]).to.equal('event:directory.search');
88
+
89
+ assert.equal(webex.internal.dss.registered, false);
90
+ });
91
+
92
+ it('handles unregister when it is not registered', async () => {
93
+ const result = await webex.internal.dss.unregister();
94
+ await expect(result).equal(undefined);
95
+ assert.equal(webex.internal.dss.registered, false);
96
+ });
97
+ });
98
+
99
+ const createData = (requestId, sequence, finished, dataPath) => {
100
+ const data = {
101
+ requestId,
102
+ sequence,
103
+ };
104
+ if (finished) {
105
+ (data as any).finished = finished;
106
+ }
107
+ set(data, dataPath, [`data${sequence}`]);
108
+ return {data};
109
+ };
110
+
111
+ const testRequest = async ({method, resource, params, bodyParams, dataPath, event}) => {
112
+ webex.request = sinon.stub();
113
+
114
+ await webex.internal.dss.register();
115
+
116
+ const promise = webex.internal.dss[method](params);
117
+
118
+ const requestId = 'randomid';
119
+
120
+ expect(webex.request.getCall(0).args).to.deep.equal([
121
+ {
122
+ service: 'directorySearch',
123
+ body: {
124
+ requestId,
125
+ ...bodyParams,
126
+ },
127
+ contentType: 'application/json',
128
+ method: 'POST',
129
+ resource,
130
+ },
131
+ ]);
132
+
133
+ mercuryCallbacks[event](createData(requestId, 1, false, dataPath));
134
+ mercuryCallbacks[event](createData(requestId, 2, true, dataPath));
135
+ mercuryCallbacks[event](createData(requestId, 0, false, dataPath));
136
+
137
+ const result = await promise;
138
+ expect(result).to.deep.equal(['data0', 'data1', 'data2']);
139
+ };
140
+
141
+ describe('#lookupDetail', () => {
142
+ it('calls _request correctly', async () => {
143
+ webex.internal.device.orgId = 'userOrgId';
144
+ webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
145
+
146
+ const result = await webex.internal.dss.lookupDetail({id: 'test id'});
147
+ expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
148
+ {
149
+ dataPath: 'lookupResult.entities',
150
+ resource: '/lookup/orgid/userOrgId/identity/test id/detail',
151
+ },
152
+ ]);
153
+ expect(result).to.equal('some return value');
154
+ });
155
+
156
+ it('works correctly', async () => {
157
+ await testRequest({
158
+ method: 'lookupDetail',
159
+ dataPath: 'lookupResult.entities',
160
+ event: 'event:directory.lookup',
161
+ resource: '/lookup/orgid/userOrgId/identity/test id/detail',
162
+ params: {
163
+ id: 'test id',
164
+ },
165
+ bodyParams: {},
166
+ });
167
+ });
168
+ });
169
+
170
+ describe('#lookup', () => {
171
+ it('calls _request correctly', async () => {
172
+ webex.internal.device.orgId = 'userOrgId';
173
+ webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
174
+
175
+ const result = await webex.internal.dss.lookup({ids: ['id1', 'id2']});
176
+ expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
177
+ {
178
+ dataPath: 'lookupResult.entities',
179
+ resource: '/lookup/orgid/userOrgId/identities',
180
+ params: {
181
+ lookupValues: ['id1', 'id2'],
182
+ },
183
+ },
184
+ ]);
185
+ expect(result).to.equal('some return value');
186
+ });
187
+
188
+ it('calls _request correctly with entityProviderType', async () => {
189
+ webex.internal.device.orgId = 'userOrgId';
190
+ webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
191
+
192
+ const result = await webex.internal.dss.lookup({
193
+ ids: ['id1', 'id2'],
194
+ entityProviderType: 'CI_USER',
195
+ });
196
+ expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
197
+ {
198
+ dataPath: 'lookupResult.entities',
199
+ resource: '/lookup/orgid/userOrgId/entityprovidertype/CI_USER',
200
+ params: {
201
+ lookupValues: ['id1', 'id2'],
202
+ },
203
+ },
204
+ ]);
205
+ expect(result).to.equal('some return value');
206
+ });
207
+
208
+ it('works correctly', async () => {
209
+ await testRequest({
210
+ method: 'lookup',
211
+ dataPath: 'lookupResult.entities',
212
+ event: 'event:directory.lookup',
213
+ resource: '/lookup/orgid/userOrgId/identities',
214
+ params: {
215
+ ids: ['id1', 'id2'],
216
+ },
217
+ bodyParams: {
218
+ lookupValues: ['id1', 'id2'],
219
+ },
220
+ });
221
+ });
222
+ });
223
+
224
+ describe('#lookupByEmail', () => {
225
+ it('calls _request correctly', async () => {
226
+ webex.internal.device.orgId = 'userOrgId';
227
+ webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
228
+
229
+ const result = await webex.internal.dss.lookupByEmail({
230
+ emails: ['email1', 'email2'],
231
+ });
232
+ expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
233
+ {
234
+ dataPath: 'lookupResult.entities',
235
+ resource: '/lookup/orgid/userOrgId/emails',
236
+ params: {
237
+ lookupValues: ['email1', 'email2'],
238
+ },
239
+ },
240
+ ]);
241
+ expect(result).to.equal('some return value');
242
+ });
243
+
244
+ it('works correctly', async () => {
245
+ await testRequest({
246
+ method: 'lookupByEmail',
247
+ dataPath: 'lookupResult.entities',
248
+ event: 'event:directory.lookup',
249
+ resource: '/lookup/orgid/userOrgId/emails',
250
+ params: {
251
+ emails: ['email1', 'email2'],
252
+ },
253
+ bodyParams: {
254
+ lookupValues: ['email1', 'email2'],
255
+ },
256
+ });
257
+ });
258
+ });
259
+
260
+ describe('#search', () => {
261
+ it('calls _request correctly', async () => {
262
+ webex.internal.device.orgId = 'userOrgId';
263
+ webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
264
+
265
+ const result = await webex.internal.dss.search({
266
+ requestedTypes: ['PERSON', 'ROBOT'],
267
+ resultSize: 100,
268
+ queryString: 'query',
269
+ });
270
+ expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
271
+ {
272
+ dataPath: 'directoryEntities',
273
+ resource: '/search/orgid/userOrgId/entities',
274
+ params: {
275
+ queryString: 'query',
276
+ resultSize: 100,
277
+ requestedTypes: ['PERSON', 'ROBOT'],
278
+ },
279
+ },
280
+ ]);
281
+ expect(result).to.equal('some return value');
282
+ });
283
+
284
+ it('works correctly', async () => {
285
+ await testRequest({
286
+ method: 'search',
287
+ event: 'event:directory.search',
288
+ dataPath: 'directoryEntities',
289
+ resource: '/search/orgid/userOrgId/entities',
290
+ params: {
291
+ requestedTypes: ['PERSON', 'ROBOT'],
292
+ resultSize: 100,
293
+ queryString: 'query',
294
+ },
295
+ bodyParams: {
296
+ requestedTypes: ['PERSON', 'ROBOT'],
297
+ resultSize: 100,
298
+ queryString: 'query',
299
+ },
300
+ });
301
+ });
302
+ });
303
+
304
+ describe('#_request', () => {
305
+ it('handles a request correctly', async () => {
306
+ webex.request = sinon.stub();
307
+ uuid.v4();
308
+ const promise = webex.internal.dss._request({
309
+ resource: '/search/orgid/userOrgId/entities',
310
+ params: {some: 'param'},
311
+ dataPath: 'a.b.c',
312
+ });
313
+
314
+ expect(webex.request.getCall(0).args).to.deep.equal([
315
+ {
316
+ service: 'directorySearch',
317
+ body: {
318
+ requestId: 'randomid',
319
+ some: 'param',
320
+ },
321
+ contentType: 'application/json',
322
+ method: 'POST',
323
+ resource: '/search/orgid/userOrgId/entities',
324
+ },
325
+ ]);
326
+
327
+ webex.internal.dss.trigger(webex.internal.dss._getResultEventName('randomid'), {
328
+ sequence: 1,
329
+ a: {
330
+ b: {
331
+ c: ['data1'],
332
+ },
333
+ },
334
+ });
335
+
336
+ webex.internal.dss.trigger(webex.internal.dss._getResultEventName('randomid'), {
337
+ sequence: 2,
338
+ finished: true,
339
+ a: {
340
+ b: {
341
+ c: ['data2'],
342
+ },
343
+ },
344
+ });
345
+
346
+ webex.internal.dss.trigger(webex.internal.dss._getResultEventName('randomid'), {
347
+ sequence: 0,
348
+ a: {
349
+ b: {
350
+ c: ['data0'],
351
+ },
352
+ },
353
+ });
354
+
355
+ const result = await promise;
356
+ expect(result).to.deep.equal(['data0', 'data1', 'data2']);
357
+ });
358
+ });
359
+ describe('#searchPlaces', () => {
360
+ it('calls _request correctly', async () => {
361
+ webex.internal.device.orgId = 'userOrgId';
362
+ webex.internal.dss._request = sinon.stub().returns(Promise.resolve('some return value'));
363
+
364
+ const result = await webex.internal.dss.searchPlaces({
365
+ resultSize: 100,
366
+ queryString: 'query',
367
+ isOnlySchedulableRooms: true,
368
+ });
369
+ expect(webex.internal.dss._request.getCall(0).args).to.deep.equal([
370
+ {
371
+ dataPath: 'directoryEntities',
372
+ resource: '/search/orgid/userOrgId/places',
373
+ params: {
374
+ queryString: 'query',
375
+ resultSize: 100,
376
+ isOnlySchedulableRooms: true,
377
+ },
378
+ },
379
+ ]);
380
+ expect(result).to.equal('some return value');
381
+ });
382
+
383
+ it('works correctly', async () => {
384
+ await testRequest({
385
+ method: 'searchPlaces',
386
+ event: 'event:directory.search',
387
+ dataPath: 'directoryEntities',
388
+ resource: '/search/orgid/userOrgId/places',
389
+ params: {
390
+ isOnlySchedulableRooms: true,
391
+ resultSize: 100,
392
+ queryString: 'query',
393
+ },
394
+ bodyParams: {
395
+ isOnlySchedulableRooms: true,
396
+ resultSize: 100,
397
+ queryString: 'query',
398
+ },
399
+ });
400
+ });
401
+ });
402
+ });
403
+ });