@webex/plugin-meetings 3.5.0 → 3.6.0-next.2
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/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/config.js +4 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/media/index.js +3 -1
- package/dist/media/index.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +3 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +133 -87
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +8 -10
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +100 -26
- package/dist/meetings/index.js.map +1 -1
- package/dist/roap/request.js +1 -1
- package/dist/roap/request.js.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/constants.d.ts +2 -1
- package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
- package/dist/types/meeting/index.d.ts +11 -0
- package/dist/types/meetings/index.d.ts +43 -2
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/config.ts +3 -0
- package/src/constants.ts +1 -0
- package/src/media/index.ts +4 -1
- package/src/meeting/in-meeting-actions.ts +3 -0
- package/src/meeting/index.ts +57 -2
- package/src/meeting/util.ts +27 -31
- package/src/meetings/index.ts +126 -37
- package/src/roap/request.ts +3 -1
- package/test/unit/spec/media/index.ts +4 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
- package/test/unit/spec/meeting/index.js +58 -17
- package/test/unit/spec/meeting/utils.js +50 -85
- package/test/unit/spec/meetings/index.js +128 -13
- package/dist/networkQualityMonitor/index.js +0 -227
- package/dist/networkQualityMonitor/index.js.map +0 -1
- package/dist/rtcMetrics/constants.js +0 -11
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.js +0 -197
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/types/networkQualityMonitor/index.d.ts +0 -70
- package/dist/types/rtcMetrics/constants.d.ts +0 -4
- package/dist/types/rtcMetrics/index.d.ts +0 -71
- package/src/rtcMetrics/constants.ts +0 -3
- package/src/rtcMetrics/index.ts +0 -186
- package/test/unit/spec/rtcMetrics/index.ts +0 -154
|
@@ -378,24 +378,36 @@ describe('plugin-meetings', () => {
|
|
|
378
378
|
});
|
|
379
379
|
|
|
380
380
|
describe('joinMeeting', () => {
|
|
381
|
-
|
|
382
|
-
|
|
381
|
+
const joinMeetingResponse = {
|
|
382
|
+
body: {
|
|
383
|
+
mediaConnections: [],
|
|
384
|
+
locus: {
|
|
385
|
+
url: 'differentLocusUrl',
|
|
386
|
+
self: {
|
|
387
|
+
id: 'selfId',
|
|
388
|
+
},
|
|
389
|
+
},
|
|
390
|
+
},
|
|
391
|
+
headers: {
|
|
392
|
+
trackingid: 'trackingId',
|
|
393
|
+
},
|
|
394
|
+
};
|
|
395
|
+
let meeting;
|
|
396
|
+
|
|
397
|
+
beforeEach(() => {
|
|
398
|
+
meeting = {
|
|
383
399
|
meetingJoinUrl: 'meetingJoinUrl',
|
|
384
400
|
locusUrl: 'locusUrl',
|
|
385
401
|
meetingRequest: {
|
|
386
402
|
joinMeeting: sinon.stub().returns(
|
|
387
|
-
Promise.resolve(
|
|
388
|
-
body: {mediaConnections: 'mediaConnections'},
|
|
389
|
-
headers: {
|
|
390
|
-
trackingid: 'trackingId',
|
|
391
|
-
},
|
|
392
|
-
})
|
|
393
|
-
),
|
|
403
|
+
Promise.resolve(joinMeetingResponse)),
|
|
394
404
|
},
|
|
395
405
|
getWebexObject: sinon.stub().returns(webex),
|
|
406
|
+
setLocus: sinon.stub(),
|
|
396
407
|
};
|
|
408
|
+
});
|
|
397
409
|
|
|
398
|
-
|
|
410
|
+
it('#Should call `meetingRequest.joinMeeting', async () => {
|
|
399
411
|
await MeetingUtil.joinMeeting(meeting, {
|
|
400
412
|
reachability: 'reachability',
|
|
401
413
|
roapMessage: 'roapMessage',
|
|
@@ -409,6 +421,10 @@ describe('plugin-meetings', () => {
|
|
|
409
421
|
assert.equal(parameter.reachability, 'reachability');
|
|
410
422
|
assert.equal(parameter.roapMessage, 'roapMessage');
|
|
411
423
|
|
|
424
|
+
assert.calledOnce(meeting.setLocus)
|
|
425
|
+
const setLocusParameter = meeting.setLocus.getCall(0).args[0];
|
|
426
|
+
assert.deepEqual(setLocusParameter, MeetingUtil.parseLocusJoin(joinMeetingResponse))
|
|
427
|
+
|
|
412
428
|
assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
|
|
413
429
|
name: 'client.locus.join.request',
|
|
414
430
|
options: {meetingId: meeting.id},
|
|
@@ -424,21 +440,12 @@ describe('plugin-meetings', () => {
|
|
|
424
440
|
},
|
|
425
441
|
options: {
|
|
426
442
|
meetingId: meeting.id,
|
|
427
|
-
mediaConnections:
|
|
443
|
+
mediaConnections: [],
|
|
428
444
|
},
|
|
429
445
|
});
|
|
430
|
-
parseLocusJoinSpy.restore();
|
|
431
446
|
});
|
|
432
447
|
|
|
433
448
|
it('#Should call meetingRequest.joinMeeting with breakoutsSupported=true when passed in as true', async () => {
|
|
434
|
-
const meeting = {
|
|
435
|
-
meetingRequest: {
|
|
436
|
-
joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
|
|
437
|
-
},
|
|
438
|
-
getWebexObject: sinon.stub().returns(webex),
|
|
439
|
-
};
|
|
440
|
-
|
|
441
|
-
const parseLocusJoinSpy = sinon.stub(MeetingUtil, 'parseLocusJoin');
|
|
442
449
|
await MeetingUtil.joinMeeting(meeting, {
|
|
443
450
|
breakoutsSupported: true,
|
|
444
451
|
});
|
|
@@ -447,18 +454,9 @@ describe('plugin-meetings', () => {
|
|
|
447
454
|
const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
|
|
448
455
|
|
|
449
456
|
assert.equal(parameter.breakoutsSupported, true);
|
|
450
|
-
parseLocusJoinSpy.restore();
|
|
451
457
|
});
|
|
452
458
|
|
|
453
459
|
it('#Should call meetingRequest.joinMeeting with liveAnnotationSupported=true when passed in as true', async () => {
|
|
454
|
-
const meeting = {
|
|
455
|
-
meetingRequest: {
|
|
456
|
-
joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
|
|
457
|
-
},
|
|
458
|
-
getWebexObject: sinon.stub().returns(webex),
|
|
459
|
-
};
|
|
460
|
-
|
|
461
|
-
const parseLocusJoinSpy = sinon.stub(MeetingUtil, 'parseLocusJoin');
|
|
462
460
|
await MeetingUtil.joinMeeting(meeting, {
|
|
463
461
|
liveAnnotationSupported: true,
|
|
464
462
|
});
|
|
@@ -467,18 +465,9 @@ describe('plugin-meetings', () => {
|
|
|
467
465
|
const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
|
|
468
466
|
|
|
469
467
|
assert.equal(parameter.liveAnnotationSupported, true);
|
|
470
|
-
parseLocusJoinSpy.restore();
|
|
471
468
|
});
|
|
472
469
|
|
|
473
470
|
it('#Should call meetingRequest.joinMeeting with locale=en_UK, deviceCapabilities=["TEST"] when they are passed in as those values', async () => {
|
|
474
|
-
const meeting = {
|
|
475
|
-
meetingRequest: {
|
|
476
|
-
joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
|
|
477
|
-
},
|
|
478
|
-
getWebexObject: sinon.stub().returns(webex),
|
|
479
|
-
};
|
|
480
|
-
|
|
481
|
-
const parseLocusJoinSpy = sinon.stub(MeetingUtil, 'parseLocusJoin');
|
|
482
471
|
await MeetingUtil.joinMeeting(meeting, {
|
|
483
472
|
locale: 'en_UK',
|
|
484
473
|
deviceCapabilities: ['TEST'],
|
|
@@ -489,21 +478,10 @@ describe('plugin-meetings', () => {
|
|
|
489
478
|
|
|
490
479
|
assert.equal(parameter.locale, 'en_UK');
|
|
491
480
|
assert.deepEqual(parameter.deviceCapabilities, ['TEST']);
|
|
492
|
-
parseLocusJoinSpy.restore();
|
|
493
481
|
});
|
|
494
482
|
|
|
495
483
|
it('#Should call meetingRequest.joinMeeting with preferTranscoding=false when multistream is enabled', async () => {
|
|
496
|
-
|
|
497
|
-
isMultistream: true,
|
|
498
|
-
meetingJoinUrl: 'meetingJoinUrl',
|
|
499
|
-
locusUrl: 'locusUrl',
|
|
500
|
-
meetingRequest: {
|
|
501
|
-
joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
|
|
502
|
-
},
|
|
503
|
-
getWebexObject: sinon.stub().returns(webex),
|
|
504
|
-
};
|
|
505
|
-
|
|
506
|
-
const parseLocusJoinSpy = sinon.stub(MeetingUtil, 'parseLocusJoin');
|
|
484
|
+
meeting.isMultistream = true;
|
|
507
485
|
await MeetingUtil.joinMeeting(meeting, {});
|
|
508
486
|
|
|
509
487
|
assert.calledOnce(meeting.meetingRequest.joinMeeting);
|
|
@@ -511,40 +489,22 @@ describe('plugin-meetings', () => {
|
|
|
511
489
|
|
|
512
490
|
assert.equal(parameter.inviteeAddress, 'meetingJoinUrl');
|
|
513
491
|
assert.equal(parameter.preferTranscoding, false);
|
|
514
|
-
parseLocusJoinSpy.restore();
|
|
515
492
|
});
|
|
516
493
|
|
|
517
494
|
it('#Should fallback sipUrl if meetingJoinUrl does not exists', async () => {
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
locusUrl: 'locusUrl',
|
|
521
|
-
meetingRequest: {
|
|
522
|
-
joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
|
|
523
|
-
},
|
|
524
|
-
getWebexObject: sinon.stub().returns(webex),
|
|
525
|
-
};
|
|
526
|
-
|
|
527
|
-
const parseLocusJoinSpy = sinon.stub(MeetingUtil, 'parseLocusJoin');
|
|
495
|
+
meeting.meetingJoinUrl = undefined;
|
|
496
|
+
meeting.sipUri = 'sipUri';
|
|
528
497
|
await MeetingUtil.joinMeeting(meeting, {});
|
|
529
498
|
|
|
530
499
|
assert.calledOnce(meeting.meetingRequest.joinMeeting);
|
|
531
500
|
const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
|
|
532
501
|
|
|
533
502
|
assert.equal(parameter.inviteeAddress, 'sipUri');
|
|
534
|
-
parseLocusJoinSpy.restore();
|
|
535
503
|
});
|
|
536
504
|
|
|
537
505
|
it('#Should fallback to meetingNumber if meetingJoinUrl/sipUrl does not exists', async () => {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
locusUrl: 'locusUrl',
|
|
541
|
-
meetingRequest: {
|
|
542
|
-
joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
|
|
543
|
-
},
|
|
544
|
-
getWebexObject: sinon.stub().returns(webex),
|
|
545
|
-
};
|
|
546
|
-
|
|
547
|
-
const parseLocusJoinSpy = sinon.stub(MeetingUtil, 'parseLocusJoin');
|
|
506
|
+
meeting.meetingJoinUrl = undefined;
|
|
507
|
+
meeting.meetingNumber = 'meetingNumber';
|
|
548
508
|
await MeetingUtil.joinMeeting(meeting, {});
|
|
549
509
|
|
|
550
510
|
assert.calledOnce(meeting.meetingRequest.joinMeeting);
|
|
@@ -552,28 +512,18 @@ describe('plugin-meetings', () => {
|
|
|
552
512
|
|
|
553
513
|
assert.isUndefined(parameter.inviteeAddress);
|
|
554
514
|
assert.equal(parameter.meetingNumber, 'meetingNumber');
|
|
555
|
-
parseLocusJoinSpy.restore();
|
|
556
515
|
});
|
|
557
516
|
|
|
558
517
|
it('should pass in the locusClusterUrl from meetingInfo', async () => {
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
locusClusterUrl: 'locusClusterUrl',
|
|
562
|
-
},
|
|
563
|
-
meetingRequest: {
|
|
564
|
-
joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
|
|
565
|
-
},
|
|
566
|
-
getWebexObject: sinon.stub().returns(webex),
|
|
518
|
+
meeting.meetingInfo = {
|
|
519
|
+
locusClusterUrl: 'locusClusterUrl',
|
|
567
520
|
};
|
|
568
|
-
|
|
569
|
-
const parseLocusJoinSpy = sinon.stub(MeetingUtil, 'parseLocusJoin');
|
|
570
521
|
await MeetingUtil.joinMeeting(meeting, {});
|
|
571
522
|
|
|
572
523
|
assert.calledOnce(meeting.meetingRequest.joinMeeting);
|
|
573
524
|
const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
|
|
574
525
|
|
|
575
526
|
assert.equal(parameter.locusClusterUrl, 'locusClusterUrl');
|
|
576
|
-
parseLocusJoinSpy.restore();
|
|
577
527
|
});
|
|
578
528
|
});
|
|
579
529
|
|
|
@@ -1063,7 +1013,21 @@ describe('plugin-meetings', () => {
|
|
|
1063
1013
|
assert.equal(MeetingUtil.getIpVersion(webex), expectedOutput);
|
|
1064
1014
|
});
|
|
1065
1015
|
|
|
1066
|
-
it(`returns
|
|
1016
|
+
it(`returns ${expectedOutput} when supportsIpV4=${supportsIpV4} and supportsIpV6=${supportsIpV6} for Firefox if config is enabled`, () => {
|
|
1017
|
+
sinon
|
|
1018
|
+
.stub(webex.internal.device.ipNetworkDetector, 'supportsIpV4')
|
|
1019
|
+
.get(() => supportsIpV4);
|
|
1020
|
+
sinon
|
|
1021
|
+
.stub(webex.internal.device.ipNetworkDetector, 'supportsIpV6')
|
|
1022
|
+
.get(() => supportsIpV6);
|
|
1023
|
+
|
|
1024
|
+
webex.config.meetings.backendIpv6NativeSupport = true;
|
|
1025
|
+
isBrowserStub.callsFake((name) => name === 'firefox');
|
|
1026
|
+
|
|
1027
|
+
assert.equal(MeetingUtil.getIpVersion(webex), expectedOutput);
|
|
1028
|
+
});
|
|
1029
|
+
|
|
1030
|
+
it(`returns undefined when supportsIpV4=${supportsIpV4} and supportsIpV6=${supportsIpV6}, config disabled and browser is firefox`, () => {
|
|
1067
1031
|
sinon
|
|
1068
1032
|
.stub(webex.internal.device.ipNetworkDetector, 'supportsIpV4')
|
|
1069
1033
|
.get(() => supportsIpV4);
|
|
@@ -1071,6 +1035,7 @@ describe('plugin-meetings', () => {
|
|
|
1071
1035
|
.stub(webex.internal.device.ipNetworkDetector, 'supportsIpV6')
|
|
1072
1036
|
.get(() => supportsIpV6);
|
|
1073
1037
|
|
|
1038
|
+
webex.config.meetings.backendIpv6NativeSupport = false;
|
|
1074
1039
|
isBrowserStub.callsFake((name) => name === 'firefox');
|
|
1075
1040
|
|
|
1076
1041
|
assert.equal(MeetingUtil.getIpVersion(webex), undefined);
|
|
@@ -8,6 +8,7 @@ import {Crypto} from '@peculiar/webcrypto';
|
|
|
8
8
|
global.crypto = new Crypto();
|
|
9
9
|
|
|
10
10
|
import Device from '@webex/internal-plugin-device';
|
|
11
|
+
import {CatalogDetails} from '@webex/internal-plugin-device';
|
|
11
12
|
import Mercury from '@webex/internal-plugin-mercury';
|
|
12
13
|
import {assert} from '@webex/test-helper-chai';
|
|
13
14
|
import MockWebex from '@webex/test-helper-mock-webex';
|
|
@@ -128,6 +129,11 @@ describe('plugin-meetings', () => {
|
|
|
128
129
|
|
|
129
130
|
Object.assign(webex, {
|
|
130
131
|
logger,
|
|
132
|
+
people: {
|
|
133
|
+
_getMe: sinon.stub().resolves({
|
|
134
|
+
type: 'validuser',
|
|
135
|
+
}),
|
|
136
|
+
}
|
|
131
137
|
});
|
|
132
138
|
|
|
133
139
|
startReachabilityStub = sinon.stub(webex.meetings, 'startReachability').resolves();
|
|
@@ -196,6 +202,43 @@ describe('plugin-meetings', () => {
|
|
|
196
202
|
assert.calledOnce(MeetingsUtil.checkH264Support);
|
|
197
203
|
});
|
|
198
204
|
|
|
205
|
+
describe('#getBasicMeetingInformation', () => {
|
|
206
|
+
beforeEach(() => {
|
|
207
|
+
sinon.stub(MeetingUtil, 'cleanUp');
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
it('returns correct meeting information', async () => {
|
|
211
|
+
const meeting = await webex.meetings.createMeeting('test', 'test');
|
|
212
|
+
|
|
213
|
+
const meetingIds = {
|
|
214
|
+
meetingId: meeting.id,
|
|
215
|
+
correlationId: meeting.correlationId,
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
// before meeting is destroyed - it should return information from the meetingCollection
|
|
219
|
+
assert.equal(
|
|
220
|
+
webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).id,
|
|
221
|
+
meetingIds.meetingId
|
|
222
|
+
);
|
|
223
|
+
assert.equal(
|
|
224
|
+
webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).correlationId,
|
|
225
|
+
meetingIds.correlationId
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
webex.meetings.destroy(meeting, test1);
|
|
229
|
+
|
|
230
|
+
// and it should still return the information after the meeting is destroyed
|
|
231
|
+
assert.equal(
|
|
232
|
+
webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).id,
|
|
233
|
+
meetingIds.meetingId
|
|
234
|
+
);
|
|
235
|
+
assert.equal(
|
|
236
|
+
webex.meetings.getBasicMeetingInformation(meetingIds.meetingId).correlationId,
|
|
237
|
+
meetingIds.correlationId
|
|
238
|
+
);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
|
|
199
242
|
describe('#startReachability', () => {
|
|
200
243
|
let gatherReachabilitySpy;
|
|
201
244
|
let fakeResult = {id: 'fake-result'};
|
|
@@ -302,6 +345,22 @@ describe('plugin-meetings', () => {
|
|
|
302
345
|
});
|
|
303
346
|
});
|
|
304
347
|
|
|
348
|
+
describe('#_toggleIpv6BackendNativeSupport', () => {
|
|
349
|
+
it('should have _toggleIpv6BackendNativeSupport', () => {
|
|
350
|
+
assert.equal(typeof webex.meetings._toggleIpv6BackendNativeSupport, 'function');
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
describe('success', () => {
|
|
354
|
+
it('should update meetings config accordingly', () => {
|
|
355
|
+
webex.meetings._toggleIpv6BackendNativeSupport(true);
|
|
356
|
+
assert.equal(webex.meetings.config.backendIpv6NativeSupport, true);
|
|
357
|
+
|
|
358
|
+
webex.meetings._toggleIpv6BackendNativeSupport(false);
|
|
359
|
+
assert.equal(webex.meetings.config.backendIpv6NativeSupport, false);
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
});
|
|
363
|
+
|
|
305
364
|
describe('Public API Contracts', () => {
|
|
306
365
|
describe('#register', () => {
|
|
307
366
|
it('emits an event and resolves when register succeeds', async () => {
|
|
@@ -346,12 +405,21 @@ describe('plugin-meetings', () => {
|
|
|
346
405
|
webex.canAuthorize = true;
|
|
347
406
|
webex.meetings.registered = false;
|
|
348
407
|
await webex.meetings.register();
|
|
349
|
-
assert.
|
|
408
|
+
assert.calledOnceWithExactly(webex.internal.device.register, undefined);
|
|
350
409
|
assert.called(webex.internal.services.getMeetingPreferences);
|
|
351
410
|
assert.called(webex.internal.services.fetchClientRegionInfo);
|
|
352
411
|
assert.called(webex.internal.mercury.connect);
|
|
353
412
|
assert.isTrue(webex.meetings.registered);
|
|
354
413
|
});
|
|
414
|
+
|
|
415
|
+
it('passes on the device registration options', async () => {
|
|
416
|
+
webex.canAuthorize = true;
|
|
417
|
+
webex.meetings.registered = false;
|
|
418
|
+
await webex.meetings.register({includeDetails: CatalogDetails.features});
|
|
419
|
+
assert.calledOnceWithExactly(webex.internal.device.register, {
|
|
420
|
+
includeDetails: CatalogDetails.features,
|
|
421
|
+
});
|
|
422
|
+
});
|
|
355
423
|
});
|
|
356
424
|
|
|
357
425
|
describe('#unregister', () => {
|
|
@@ -753,14 +821,16 @@ describe('plugin-meetings', () => {
|
|
|
753
821
|
|
|
754
822
|
const FAKE_USE_RANDOM_DELAY = true;
|
|
755
823
|
const correlationId = 'my-correlationId';
|
|
824
|
+
const sessionCorrelationId = 'my-session-correlationId';
|
|
756
825
|
const callStateForMetrics = {
|
|
826
|
+
sessionCorrelationId: 'my-session-correlationId2',
|
|
757
827
|
correlationId: 'my-correlationId2',
|
|
758
828
|
joinTrigger: 'my-join-trigger',
|
|
759
829
|
loginType: 'my-login-type',
|
|
760
830
|
};
|
|
761
831
|
|
|
762
|
-
it('should call
|
|
763
|
-
const fakeMeeting = {
|
|
832
|
+
it('should call updateCallStateForMetrics on any pre-existing meeting', async () => {
|
|
833
|
+
const fakeMeeting = {updateCallStateForMetrics: sinon.mock()};
|
|
764
834
|
webex.meetings.meetingCollection.getByKey = sinon.stub().returns(fakeMeeting);
|
|
765
835
|
await webex.meetings.create(
|
|
766
836
|
test1,
|
|
@@ -769,11 +839,15 @@ describe('plugin-meetings', () => {
|
|
|
769
839
|
{},
|
|
770
840
|
correlationId,
|
|
771
841
|
true,
|
|
772
|
-
callStateForMetrics
|
|
842
|
+
callStateForMetrics,
|
|
843
|
+
undefined,
|
|
844
|
+
undefined,
|
|
845
|
+
sessionCorrelationId
|
|
773
846
|
);
|
|
774
|
-
assert.calledOnceWithExactly(fakeMeeting.
|
|
847
|
+
assert.calledOnceWithExactly(fakeMeeting.updateCallStateForMetrics, {
|
|
775
848
|
...callStateForMetrics,
|
|
776
849
|
correlationId,
|
|
850
|
+
sessionCorrelationId,
|
|
777
851
|
});
|
|
778
852
|
});
|
|
779
853
|
|
|
@@ -814,13 +888,14 @@ describe('plugin-meetings', () => {
|
|
|
814
888
|
undefined,
|
|
815
889
|
meetingInfo,
|
|
816
890
|
'meetingLookupURL',
|
|
891
|
+
sessionCorrelationId,
|
|
817
892
|
],
|
|
818
893
|
[
|
|
819
894
|
test1,
|
|
820
895
|
test2,
|
|
821
896
|
FAKE_USE_RANDOM_DELAY,
|
|
822
897
|
{},
|
|
823
|
-
{correlationId},
|
|
898
|
+
{correlationId, sessionCorrelationId},
|
|
824
899
|
true,
|
|
825
900
|
meetingInfo,
|
|
826
901
|
'meetingLookupURL',
|
|
@@ -1719,6 +1794,7 @@ describe('plugin-meetings', () => {
|
|
|
1719
1794
|
const expectedMeetingData = {
|
|
1720
1795
|
correlationId: 'my-correlationId',
|
|
1721
1796
|
callStateForMetrics: {
|
|
1797
|
+
sessionCorrelationId: '',
|
|
1722
1798
|
correlationId: 'my-correlationId',
|
|
1723
1799
|
joinTrigger: 'my-join-trigger',
|
|
1724
1800
|
loginType: 'my-login-type',
|
|
@@ -1812,7 +1888,10 @@ describe('plugin-meetings', () => {
|
|
|
1812
1888
|
});
|
|
1813
1889
|
|
|
1814
1890
|
it('creates the meeting avoiding meeting info fetch by passing type as DESTINATION_TYPE.ONE_ON_ONE_CALL', async () => {
|
|
1815
|
-
const meeting = await webex.meetings.createMeeting(
|
|
1891
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1892
|
+
'test destination',
|
|
1893
|
+
DESTINATION_TYPE.ONE_ON_ONE_CALL
|
|
1894
|
+
);
|
|
1816
1895
|
|
|
1817
1896
|
assert.instanceOf(
|
|
1818
1897
|
meeting,
|
|
@@ -1822,7 +1901,6 @@ describe('plugin-meetings', () => {
|
|
|
1822
1901
|
|
|
1823
1902
|
assert.notCalled(webex.meetings.meetingInfo.fetchMeetingInfo);
|
|
1824
1903
|
});
|
|
1825
|
-
|
|
1826
1904
|
});
|
|
1827
1905
|
|
|
1828
1906
|
describe('rejected MeetingInfo.#fetchMeetingInfo - does not log for known Error types', () => {
|
|
@@ -1896,17 +1974,23 @@ describe('plugin-meetings', () => {
|
|
|
1896
1974
|
assert.exists(webex.meetings.destroy);
|
|
1897
1975
|
});
|
|
1898
1976
|
describe('correctly established meeting', () => {
|
|
1977
|
+
let deleteSpy;
|
|
1899
1978
|
beforeEach(() => {
|
|
1900
|
-
|
|
1979
|
+
deleteSpy = sinon.spy(webex.meetings.meetingCollection, 'delete');
|
|
1901
1980
|
});
|
|
1902
1981
|
|
|
1903
|
-
it('tests the destroy removal from the collection', async () => {
|
|
1982
|
+
it('tests the destroy removal from the collection and storing basic info in deletedMeetings', async () => {
|
|
1904
1983
|
const meeting = await webex.meetings.createMeeting('test', 'test');
|
|
1905
1984
|
|
|
1985
|
+
const meetingIds = {
|
|
1986
|
+
meetingId: meeting.id,
|
|
1987
|
+
correlationId: meeting.correlationId,
|
|
1988
|
+
};
|
|
1989
|
+
|
|
1906
1990
|
webex.meetings.destroy(meeting, test1);
|
|
1907
1991
|
|
|
1908
|
-
assert.calledOnce(
|
|
1909
|
-
assert.calledWith(
|
|
1992
|
+
assert.calledOnce(deleteSpy);
|
|
1993
|
+
assert.calledWith(deleteSpy, meeting.id);
|
|
1910
1994
|
assert.calledWith(
|
|
1911
1995
|
TriggerProxy.trigger,
|
|
1912
1996
|
sinon.match.instanceOf(Meetings),
|
|
@@ -1920,6 +2004,23 @@ describe('plugin-meetings', () => {
|
|
|
1920
2004
|
reason: test1,
|
|
1921
2005
|
}
|
|
1922
2006
|
);
|
|
2007
|
+
|
|
2008
|
+
// check that the meeting is stored in deletedMeetings and removed from meetingCollection
|
|
2009
|
+
assert.equal(webex.meetings.deletedMeetings.get(meeting.id).id, meetingIds.meetingId);
|
|
2010
|
+
assert.equal(
|
|
2011
|
+
webex.meetings.deletedMeetings.get(meeting.id).correlationId,
|
|
2012
|
+
meetingIds.correlationId
|
|
2013
|
+
);
|
|
2014
|
+
|
|
2015
|
+
assert.equal(webex.meetings.meetingCollection.get(meeting.id), undefined);
|
|
2016
|
+
|
|
2017
|
+
// and that getBasicMeetingInformation() still returns the meeting info
|
|
2018
|
+
const deletedMeetingInfo = webex.meetings.getBasicMeetingInformation(
|
|
2019
|
+
meetingIds.meetingId
|
|
2020
|
+
);
|
|
2021
|
+
|
|
2022
|
+
assert.equal(deletedMeetingInfo.id, meetingIds.meetingId);
|
|
2023
|
+
assert.equal(deletedMeetingInfo.correlationId, meetingIds.correlationId);
|
|
1923
2024
|
});
|
|
1924
2025
|
});
|
|
1925
2026
|
|
|
@@ -1976,7 +2077,7 @@ describe('plugin-meetings', () => {
|
|
|
1976
2077
|
]);
|
|
1977
2078
|
});
|
|
1978
2079
|
|
|
1979
|
-
const setup = ({user} = {}) => {
|
|
2080
|
+
const setup = ({me = { type: 'validuser'}, user} = {}) => {
|
|
1980
2081
|
loggerProxySpy = sinon.spy(LoggerProxy.logger, 'error');
|
|
1981
2082
|
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
|
|
1982
2083
|
|
|
@@ -1989,8 +2090,22 @@ describe('plugin-meetings', () => {
|
|
|
1989
2090
|
Object.assign(webex.internal.services, {
|
|
1990
2091
|
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1991
2092
|
});
|
|
2093
|
+
|
|
2094
|
+
Object.assign(webex.people, {
|
|
2095
|
+
_getMe: sinon.stub().returns(Promise.resolve(me)),
|
|
2096
|
+
});
|
|
1992
2097
|
};
|
|
1993
2098
|
|
|
2099
|
+
it('should not call request.getMeetingPreferences if user is a guest', async () => {
|
|
2100
|
+
setup({me: {type: 'appuser'}});
|
|
2101
|
+
|
|
2102
|
+
await webex.meetings.fetchUserPreferredWebexSite();
|
|
2103
|
+
|
|
2104
|
+
assert.equal(webex.meetings.preferredWebexSite, '');
|
|
2105
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
|
|
2106
|
+
assert.notCalled(webex.internal.services.getMeetingPreferences);
|
|
2107
|
+
});
|
|
2108
|
+
|
|
1994
2109
|
it('should not fail if UserPreferred info is not fetched ', async () => {
|
|
1995
2110
|
setup();
|
|
1996
2111
|
|