@webex/plugin-meetings 3.5.0-wxcc.1 → 3.6.0
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/annotation/annotation.types.d.ts +42 -0
- package/dist/annotation/constants.d.ts +31 -0
- package/dist/annotation/index.d.ts +117 -0
- package/dist/breakouts/breakout.d.ts +8 -0
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/collection.d.ts +5 -0
- package/dist/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/breakouts/events.d.ts +8 -0
- package/dist/breakouts/index.d.ts +5 -0
- package/dist/breakouts/index.js +1 -1
- package/dist/breakouts/request.d.ts +22 -0
- package/dist/breakouts/utils.d.ts +15 -0
- package/dist/common/browser-detection.d.ts +9 -0
- package/dist/common/collection.d.ts +48 -0
- package/dist/common/config.d.ts +2 -0
- package/dist/common/errors/captcha-error.d.ts +15 -0
- package/dist/common/errors/intent-to-join.d.ts +16 -0
- package/dist/common/errors/join-meeting.d.ts +17 -0
- package/dist/common/errors/media.d.ts +15 -0
- package/dist/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/common/errors/parameter.d.ts +15 -0
- package/dist/common/errors/password-error.d.ts +15 -0
- package/dist/common/errors/permission.d.ts +14 -0
- package/dist/common/errors/reclaim-host-role-error.js +149 -0
- package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/common/errors/reconnection-in-progress.js +33 -0
- package/dist/common/errors/reconnection-in-progress.js.map +1 -0
- package/dist/common/errors/reconnection.d.ts +15 -0
- package/dist/common/errors/stats.d.ts +15 -0
- package/dist/common/errors/webex-errors.d.ts +93 -0
- package/dist/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/common/events/events-scope.d.ts +17 -0
- package/dist/common/events/events.d.ts +12 -0
- package/dist/common/events/trigger-proxy.d.ts +2 -0
- package/dist/common/events/util.d.ts +2 -0
- package/dist/common/logs/logger-config.d.ts +2 -0
- package/dist/common/logs/logger-proxy.d.ts +2 -0
- package/dist/common/logs/request.d.ts +36 -0
- package/dist/common/queue.d.ts +34 -0
- package/dist/config.d.ts +72 -0
- package/dist/config.js +3 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +1088 -0
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.d.ts +4 -0
- package/dist/controls-options-manager/enums.d.ts +15 -0
- package/dist/controls-options-manager/index.d.ts +136 -0
- package/dist/controls-options-manager/types.d.ts +43 -0
- package/dist/controls-options-manager/util.d.ts +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interpretation/collection.d.ts +5 -0
- package/dist/interpretation/index.d.ts +5 -0
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.d.ts +5 -0
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.d.ts +2 -0
- package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/locus-info/fullState.d.ts +2 -0
- package/dist/locus-info/hostUtils.d.ts +2 -0
- package/dist/locus-info/index.d.ts +322 -0
- package/dist/locus-info/infoUtils.d.ts +2 -0
- package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/locus-info/parser.d.ts +272 -0
- package/dist/locus-info/selfUtils.d.ts +2 -0
- package/dist/media/index.d.ts +34 -0
- package/dist/media/index.js +3 -1
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.d.ts +93 -0
- package/dist/media/util.d.ts +2 -0
- package/dist/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/mediaQualityMetrics/config.js +502 -0
- package/dist/mediaQualityMetrics/config.js.map +1 -0
- package/dist/meeting/effectsState.js +260 -0
- package/dist/meeting/effectsState.js.map +1 -0
- package/dist/meeting/in-meeting-actions.d.ts +167 -0
- package/dist/meeting/in-meeting-actions.js +3 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +1825 -0
- package/dist/meeting/index.js +39 -4
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/muteState.d.ts +178 -0
- package/dist/meeting/request.d.ts +295 -0
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/state.d.ts +9 -0
- package/dist/meeting/util.d.ts +119 -0
- package/dist/meeting/util.js +5 -8
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.d.ts +16 -0
- package/dist/meeting-info/collection.d.ts +20 -0
- package/dist/meeting-info/index.d.ts +69 -0
- package/dist/meeting-info/meeting-info-v2.d.ts +123 -0
- package/dist/meeting-info/request.d.ts +22 -0
- package/dist/meeting-info/util.d.ts +2 -0
- package/dist/meeting-info/utilv2.d.ts +2 -0
- package/dist/meetings/collection.d.ts +40 -0
- package/dist/meetings/index.d.ts +390 -0
- package/dist/meetings/index.js +79 -26
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.d.ts +4 -0
- package/dist/meetings/request.d.ts +27 -0
- package/dist/meetings/util.d.ts +18 -0
- package/dist/member/index.d.ts +160 -0
- package/dist/member/member.types.js +17 -0
- package/dist/member/member.types.js.map +1 -0
- package/dist/member/types.d.ts +32 -0
- package/dist/member/util.d.ts +2 -0
- package/dist/members/collection.d.ts +29 -0
- package/dist/members/index.d.ts +353 -0
- package/dist/members/request.d.ts +114 -0
- package/dist/members/types.d.ts +25 -0
- package/dist/members/util.d.ts +215 -0
- package/dist/metrics/config.js +276 -0
- package/dist/metrics/config.js.map +1 -0
- package/dist/metrics/constants.d.ts +70 -0
- package/dist/metrics/index.d.ts +45 -0
- package/dist/multistream/mediaRequestManager.d.ts +119 -0
- package/dist/multistream/receiveSlot.d.ts +68 -0
- package/dist/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/multistream/remoteMedia.d.ts +72 -0
- package/dist/multistream/remoteMediaGroup.d.ts +49 -0
- package/dist/multistream/remoteMediaManager.d.ts +300 -0
- package/dist/multistream/sendSlotManager.d.ts +69 -0
- package/dist/networkQualityMonitor/index.d.ts +70 -0
- package/dist/networkQualityMonitor/index.js +13 -19
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.js +671 -0
- package/dist/peer-connection-manager/index.js.map +1 -0
- package/dist/peer-connection-manager/util.js +109 -0
- package/dist/peer-connection-manager/util.js.map +1 -0
- package/dist/personal-meeting-room/index.d.ts +47 -0
- package/dist/personal-meeting-room/request.d.ts +14 -0
- package/dist/personal-meeting-room/util.d.ts +2 -0
- package/dist/reachability/clusterReachability.d.ts +109 -0
- package/dist/reachability/index.d.ts +105 -0
- package/dist/reachability/request.d.ts +39 -0
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reactions/constants.d.ts +3 -0
- package/dist/reactions/reactions.d.ts +4 -0
- package/dist/reactions/reactions.type.d.ts +52 -0
- package/dist/reconnection-manager/index.d.ts +136 -0
- package/dist/recording-controller/enums.d.ts +7 -0
- package/dist/recording-controller/index.d.ts +207 -0
- package/dist/recording-controller/util.d.ts +14 -0
- package/dist/roap/collection.js +62 -0
- package/dist/roap/collection.js.map +1 -0
- package/dist/roap/handler.js +275 -0
- package/dist/roap/handler.js.map +1 -0
- package/dist/roap/index.d.ts +86 -0
- package/dist/roap/request.d.ts +39 -0
- package/dist/roap/state.js +126 -0
- package/dist/roap/state.js.map +1 -0
- package/dist/roap/turnDiscovery.d.ts +155 -0
- package/dist/roap/util.js +75 -0
- package/dist/roap/util.js.map +1 -0
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/index.d.ts +61 -0
- package/dist/statsAnalyzer/global.d.ts +36 -0
- package/dist/statsAnalyzer/global.js +126 -0
- package/dist/statsAnalyzer/global.js.map +1 -0
- package/dist/statsAnalyzer/index.d.ts +217 -0
- package/dist/statsAnalyzer/index.js +1013 -0
- package/dist/statsAnalyzer/index.js.map +1 -0
- package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/statsAnalyzer/mqaUtil.js +179 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -0
- package/dist/transcription/index.d.ts +64 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/config.d.ts +1 -0
- package/dist/types/constants.d.ts +2 -1
- package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
- 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 +34 -2
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +217 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/webinar/collection.d.ts +16 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/config.ts +2 -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 +42 -2
- package/src/meeting/util.ts +21 -29
- package/src/meetings/index.ts +107 -37
- 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 +34 -84
- package/test/unit/spec/meetings/index.js +112 -13
- package/src/rtcMetrics/constants.ts +0 -3
- package/src/rtcMetrics/index.ts +0 -186
- package/test/unit/spec/rtcMetrics/index.ts +0 -154
|
@@ -5,7 +5,6 @@ import 'jsdom-global/register';
|
|
|
5
5
|
import {cloneDeep, forEach, isEqual, isUndefined} from 'lodash';
|
|
6
6
|
import sinon from 'sinon';
|
|
7
7
|
import * as InternalMediaCoreModule from '@webex/internal-media-core';
|
|
8
|
-
import * as RtcMetricsModule from '@webex/plugin-meetings/src/rtcMetrics';
|
|
9
8
|
import * as RemoteMediaManagerModule from '@webex/plugin-meetings/src/multistream/remoteMediaManager';
|
|
10
9
|
import StateMachine from 'javascript-state-machine';
|
|
11
10
|
import uuid from 'uuid';
|
|
@@ -307,7 +306,7 @@ describe('plugin-meetings', () => {
|
|
|
307
306
|
assert.equal(meeting.resource, uuid2);
|
|
308
307
|
assert.equal(meeting.deviceUrl, uuid3);
|
|
309
308
|
assert.equal(meeting.correlationId, correlationId);
|
|
310
|
-
assert.deepEqual(meeting.callStateForMetrics, {correlationId});
|
|
309
|
+
assert.deepEqual(meeting.callStateForMetrics, {correlationId, sessionCorrelationId: ''});
|
|
311
310
|
assert.deepEqual(meeting.meetingInfo, {});
|
|
312
311
|
assert.instanceOf(meeting.members, Members);
|
|
313
312
|
assert.calledOnceWithExactly(
|
|
@@ -376,7 +375,7 @@ describe('plugin-meetings', () => {
|
|
|
376
375
|
}
|
|
377
376
|
);
|
|
378
377
|
assert.equal(newMeeting.correlationId, newMeeting.id);
|
|
379
|
-
assert.deepEqual(newMeeting.callStateForMetrics, {correlationId: newMeeting.id});
|
|
378
|
+
assert.deepEqual(newMeeting.callStateForMetrics, {correlationId: newMeeting.id, sessionCorrelationId: ''});
|
|
380
379
|
});
|
|
381
380
|
|
|
382
381
|
it('correlationId can be provided in callStateForMetrics', () => {
|
|
@@ -403,6 +402,37 @@ describe('plugin-meetings', () => {
|
|
|
403
402
|
correlationId: uuid4,
|
|
404
403
|
joinTrigger: 'fake-join-trigger',
|
|
405
404
|
loginType: 'fake-login-type',
|
|
405
|
+
sessionCorrelationId: '',
|
|
406
|
+
});
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
it('sessionCorrelationId can be provided in callStateForMetrics', () => {
|
|
410
|
+
const newMeeting = new Meeting(
|
|
411
|
+
{
|
|
412
|
+
userId: uuid1,
|
|
413
|
+
resource: uuid2,
|
|
414
|
+
deviceUrl: uuid3,
|
|
415
|
+
locus: {url: url1},
|
|
416
|
+
destination: testDestination,
|
|
417
|
+
destinationType: DESTINATION_TYPE.MEETING_ID,
|
|
418
|
+
callStateForMetrics: {
|
|
419
|
+
correlationId: uuid4,
|
|
420
|
+
sessionCorrelationId: uuid1,
|
|
421
|
+
joinTrigger: 'fake-join-trigger',
|
|
422
|
+
loginType: 'fake-login-type',
|
|
423
|
+
},
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
parent: webex,
|
|
427
|
+
}
|
|
428
|
+
);
|
|
429
|
+
assert.exists(newMeeting.sessionCorrelationId);
|
|
430
|
+
assert.equal(newMeeting.sessionCorrelationId, uuid1);
|
|
431
|
+
assert.deepEqual(newMeeting.callStateForMetrics, {
|
|
432
|
+
correlationId: uuid4,
|
|
433
|
+
sessionCorrelationId: uuid1,
|
|
434
|
+
joinTrigger: 'fake-join-trigger',
|
|
435
|
+
loginType: 'fake-login-type',
|
|
406
436
|
});
|
|
407
437
|
});
|
|
408
438
|
|
|
@@ -1611,7 +1641,6 @@ describe('plugin-meetings', () => {
|
|
|
1611
1641
|
|
|
1612
1642
|
assert.calledOnce(MeetingUtil.joinMeeting);
|
|
1613
1643
|
assert.calledOnce(webex.internal.device.meetingStarted);
|
|
1614
|
-
assert.calledOnce(meeting.setLocus);
|
|
1615
1644
|
assert.equal(result, joinMeetingResult);
|
|
1616
1645
|
assert.calledWith(webex.internal.llm.on, 'online', meeting.handleLLMOnline);
|
|
1617
1646
|
});
|
|
@@ -2456,8 +2485,8 @@ describe('plugin-meetings', () => {
|
|
|
2456
2485
|
});
|
|
2457
2486
|
|
|
2458
2487
|
it('should create rtcMetrics and pass them to Media.createMediaConnection()', async () => {
|
|
2459
|
-
const
|
|
2460
|
-
|
|
2488
|
+
const setIntervalOriginal = window.setInterval;
|
|
2489
|
+
window.setInterval = sinon.stub().returns(1);
|
|
2461
2490
|
|
|
2462
2491
|
// setup the minimum mocks required for multistream connection
|
|
2463
2492
|
fakeMediaConnection.createSendSlot = sinon.stub().returns({
|
|
@@ -2478,8 +2507,6 @@ describe('plugin-meetings', () => {
|
|
|
2478
2507
|
mediaSettings: {},
|
|
2479
2508
|
});
|
|
2480
2509
|
|
|
2481
|
-
assert.calledOnceWithExactly(rtcMetricsCtor, webex, meeting.id, meeting.correlationId);
|
|
2482
|
-
|
|
2483
2510
|
// check that rtcMetrics was passed to Media.createMediaConnection
|
|
2484
2511
|
assert.calledOnce(Media.createMediaConnection);
|
|
2485
2512
|
assert.calledWith(
|
|
@@ -2487,10 +2514,10 @@ describe('plugin-meetings', () => {
|
|
|
2487
2514
|
true,
|
|
2488
2515
|
meeting.getMediaConnectionDebugId(),
|
|
2489
2516
|
meeting.id,
|
|
2490
|
-
sinon.match(
|
|
2491
|
-
rtcMetrics: fakeRtcMetrics,
|
|
2492
|
-
})
|
|
2517
|
+
sinon.match.hasNested('rtcMetrics.webex', webex)
|
|
2493
2518
|
);
|
|
2519
|
+
|
|
2520
|
+
window.setInterval = setIntervalOriginal;
|
|
2494
2521
|
});
|
|
2495
2522
|
|
|
2496
2523
|
it('should pass the turn server info to the peer connection', async () => {
|
|
@@ -3677,6 +3704,7 @@ describe('plugin-meetings', () => {
|
|
|
3677
3704
|
credential: 'turn password',
|
|
3678
3705
|
},
|
|
3679
3706
|
],
|
|
3707
|
+
iceCandidatesTimeout: meeting.config.iceCandidatesGatheringTimeout,
|
|
3680
3708
|
skipInactiveTransceivers: false,
|
|
3681
3709
|
requireH264: true,
|
|
3682
3710
|
sdpMunging: {
|
|
@@ -3761,11 +3789,16 @@ describe('plugin-meetings', () => {
|
|
|
3761
3789
|
// that's being tested in these tests)
|
|
3762
3790
|
meeting.webex.meetings.registered = true;
|
|
3763
3791
|
meeting.webex.internal.device.config = {};
|
|
3764
|
-
sinon.stub(MeetingUtil, '
|
|
3792
|
+
sinon.stub(MeetingUtil, 'parseLocusJoin').returns({
|
|
3765
3793
|
id: 'fake locus from mocked join request',
|
|
3766
3794
|
locusUrl: 'fake locus url',
|
|
3767
3795
|
mediaId: 'fake media id',
|
|
3768
|
-
})
|
|
3796
|
+
})
|
|
3797
|
+
sinon.stub(meeting.meetingRequest, 'joinMeeting').resolves({
|
|
3798
|
+
headers: {
|
|
3799
|
+
trackingid: 'fake tracking id',
|
|
3800
|
+
}
|
|
3801
|
+
})
|
|
3769
3802
|
await meeting.join({enableMultistream: isMultistream});
|
|
3770
3803
|
});
|
|
3771
3804
|
|
|
@@ -6927,33 +6960,36 @@ describe('plugin-meetings', () => {
|
|
|
6927
6960
|
describe('#setCorrelationId', () => {
|
|
6928
6961
|
it('should set the correlationId and return undefined', () => {
|
|
6929
6962
|
assert.equal(meeting.correlationId, correlationId);
|
|
6930
|
-
assert.deepEqual(meeting.callStateForMetrics, {correlationId});
|
|
6963
|
+
assert.deepEqual(meeting.callStateForMetrics, {correlationId, sessionCorrelationId: ''});
|
|
6931
6964
|
meeting.setCorrelationId(uuid1);
|
|
6932
6965
|
assert.equal(meeting.correlationId, uuid1);
|
|
6933
|
-
assert.deepEqual(meeting.callStateForMetrics, {correlationId: uuid1});
|
|
6966
|
+
assert.deepEqual(meeting.callStateForMetrics, {correlationId: uuid1, sessionCorrelationId: ''});
|
|
6934
6967
|
});
|
|
6935
6968
|
});
|
|
6936
6969
|
|
|
6937
6970
|
describe('#updateCallStateForMetrics', () => {
|
|
6938
6971
|
it('should update the callState, overriding existing values', () => {
|
|
6939
|
-
assert.deepEqual(meeting.callStateForMetrics, {correlationId});
|
|
6972
|
+
assert.deepEqual(meeting.callStateForMetrics, {correlationId, sessionCorrelationId: ''});
|
|
6940
6973
|
meeting.updateCallStateForMetrics({
|
|
6941
6974
|
correlationId: uuid1,
|
|
6975
|
+
sessionCorrelationId: uuid3,
|
|
6942
6976
|
joinTrigger: 'jt',
|
|
6943
6977
|
loginType: 'lt',
|
|
6944
6978
|
});
|
|
6945
6979
|
assert.deepEqual(meeting.callStateForMetrics, {
|
|
6946
6980
|
correlationId: uuid1,
|
|
6981
|
+
sessionCorrelationId: uuid3,
|
|
6947
6982
|
joinTrigger: 'jt',
|
|
6948
6983
|
loginType: 'lt',
|
|
6949
6984
|
});
|
|
6950
6985
|
});
|
|
6951
6986
|
|
|
6952
6987
|
it('should update the callState, keeping non-supplied values', () => {
|
|
6953
|
-
assert.deepEqual(meeting.callStateForMetrics, {correlationId});
|
|
6988
|
+
assert.deepEqual(meeting.callStateForMetrics, {correlationId, sessionCorrelationId: ''});
|
|
6954
6989
|
meeting.updateCallStateForMetrics({joinTrigger: 'jt', loginType: 'lt'});
|
|
6955
6990
|
assert.deepEqual(meeting.callStateForMetrics, {
|
|
6956
6991
|
correlationId,
|
|
6992
|
+
sessionCorrelationId: '',
|
|
6957
6993
|
joinTrigger: 'jt',
|
|
6958
6994
|
loginType: 'lt',
|
|
6959
6995
|
});
|
|
@@ -9837,6 +9873,11 @@ describe('plugin-meetings', () => {
|
|
|
9837
9873
|
requiredDisplayHints: [],
|
|
9838
9874
|
requiredPolicies: [SELF_POLICY.SUPPORT_ANNOTATION],
|
|
9839
9875
|
},
|
|
9876
|
+
{
|
|
9877
|
+
actionName: 'canPollingAndQA',
|
|
9878
|
+
requiredDisplayHints: [],
|
|
9879
|
+
requiredPolicies: [SELF_POLICY.SUPPORT_POLLING_AND_QA],
|
|
9880
|
+
},
|
|
9840
9881
|
],
|
|
9841
9882
|
({
|
|
9842
9883
|
actionName,
|
|
@@ -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
|
|
|
@@ -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'};
|
|
@@ -346,12 +389,21 @@ describe('plugin-meetings', () => {
|
|
|
346
389
|
webex.canAuthorize = true;
|
|
347
390
|
webex.meetings.registered = false;
|
|
348
391
|
await webex.meetings.register();
|
|
349
|
-
assert.
|
|
392
|
+
assert.calledOnceWithExactly(webex.internal.device.register, undefined);
|
|
350
393
|
assert.called(webex.internal.services.getMeetingPreferences);
|
|
351
394
|
assert.called(webex.internal.services.fetchClientRegionInfo);
|
|
352
395
|
assert.called(webex.internal.mercury.connect);
|
|
353
396
|
assert.isTrue(webex.meetings.registered);
|
|
354
397
|
});
|
|
398
|
+
|
|
399
|
+
it('passes on the device registration options', async () => {
|
|
400
|
+
webex.canAuthorize = true;
|
|
401
|
+
webex.meetings.registered = false;
|
|
402
|
+
await webex.meetings.register({includeDetails: CatalogDetails.features});
|
|
403
|
+
assert.calledOnceWithExactly(webex.internal.device.register, {
|
|
404
|
+
includeDetails: CatalogDetails.features,
|
|
405
|
+
});
|
|
406
|
+
});
|
|
355
407
|
});
|
|
356
408
|
|
|
357
409
|
describe('#unregister', () => {
|
|
@@ -753,14 +805,16 @@ describe('plugin-meetings', () => {
|
|
|
753
805
|
|
|
754
806
|
const FAKE_USE_RANDOM_DELAY = true;
|
|
755
807
|
const correlationId = 'my-correlationId';
|
|
808
|
+
const sessionCorrelationId = 'my-session-correlationId';
|
|
756
809
|
const callStateForMetrics = {
|
|
810
|
+
sessionCorrelationId: 'my-session-correlationId2',
|
|
757
811
|
correlationId: 'my-correlationId2',
|
|
758
812
|
joinTrigger: 'my-join-trigger',
|
|
759
813
|
loginType: 'my-login-type',
|
|
760
814
|
};
|
|
761
815
|
|
|
762
|
-
it('should call
|
|
763
|
-
const fakeMeeting = {
|
|
816
|
+
it('should call updateCallStateForMetrics on any pre-existing meeting', async () => {
|
|
817
|
+
const fakeMeeting = {updateCallStateForMetrics: sinon.mock()};
|
|
764
818
|
webex.meetings.meetingCollection.getByKey = sinon.stub().returns(fakeMeeting);
|
|
765
819
|
await webex.meetings.create(
|
|
766
820
|
test1,
|
|
@@ -769,11 +823,15 @@ describe('plugin-meetings', () => {
|
|
|
769
823
|
{},
|
|
770
824
|
correlationId,
|
|
771
825
|
true,
|
|
772
|
-
callStateForMetrics
|
|
826
|
+
callStateForMetrics,
|
|
827
|
+
undefined,
|
|
828
|
+
undefined,
|
|
829
|
+
sessionCorrelationId
|
|
773
830
|
);
|
|
774
|
-
assert.calledOnceWithExactly(fakeMeeting.
|
|
831
|
+
assert.calledOnceWithExactly(fakeMeeting.updateCallStateForMetrics, {
|
|
775
832
|
...callStateForMetrics,
|
|
776
833
|
correlationId,
|
|
834
|
+
sessionCorrelationId,
|
|
777
835
|
});
|
|
778
836
|
});
|
|
779
837
|
|
|
@@ -814,13 +872,14 @@ describe('plugin-meetings', () => {
|
|
|
814
872
|
undefined,
|
|
815
873
|
meetingInfo,
|
|
816
874
|
'meetingLookupURL',
|
|
875
|
+
sessionCorrelationId,
|
|
817
876
|
],
|
|
818
877
|
[
|
|
819
878
|
test1,
|
|
820
879
|
test2,
|
|
821
880
|
FAKE_USE_RANDOM_DELAY,
|
|
822
881
|
{},
|
|
823
|
-
{correlationId},
|
|
882
|
+
{correlationId, sessionCorrelationId},
|
|
824
883
|
true,
|
|
825
884
|
meetingInfo,
|
|
826
885
|
'meetingLookupURL',
|
|
@@ -1719,6 +1778,7 @@ describe('plugin-meetings', () => {
|
|
|
1719
1778
|
const expectedMeetingData = {
|
|
1720
1779
|
correlationId: 'my-correlationId',
|
|
1721
1780
|
callStateForMetrics: {
|
|
1781
|
+
sessionCorrelationId: '',
|
|
1722
1782
|
correlationId: 'my-correlationId',
|
|
1723
1783
|
joinTrigger: 'my-join-trigger',
|
|
1724
1784
|
loginType: 'my-login-type',
|
|
@@ -1812,7 +1872,10 @@ describe('plugin-meetings', () => {
|
|
|
1812
1872
|
});
|
|
1813
1873
|
|
|
1814
1874
|
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(
|
|
1875
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1876
|
+
'test destination',
|
|
1877
|
+
DESTINATION_TYPE.ONE_ON_ONE_CALL
|
|
1878
|
+
);
|
|
1816
1879
|
|
|
1817
1880
|
assert.instanceOf(
|
|
1818
1881
|
meeting,
|
|
@@ -1822,7 +1885,6 @@ describe('plugin-meetings', () => {
|
|
|
1822
1885
|
|
|
1823
1886
|
assert.notCalled(webex.meetings.meetingInfo.fetchMeetingInfo);
|
|
1824
1887
|
});
|
|
1825
|
-
|
|
1826
1888
|
});
|
|
1827
1889
|
|
|
1828
1890
|
describe('rejected MeetingInfo.#fetchMeetingInfo - does not log for known Error types', () => {
|
|
@@ -1896,17 +1958,23 @@ describe('plugin-meetings', () => {
|
|
|
1896
1958
|
assert.exists(webex.meetings.destroy);
|
|
1897
1959
|
});
|
|
1898
1960
|
describe('correctly established meeting', () => {
|
|
1961
|
+
let deleteSpy;
|
|
1899
1962
|
beforeEach(() => {
|
|
1900
|
-
|
|
1963
|
+
deleteSpy = sinon.spy(webex.meetings.meetingCollection, 'delete');
|
|
1901
1964
|
});
|
|
1902
1965
|
|
|
1903
|
-
it('tests the destroy removal from the collection', async () => {
|
|
1966
|
+
it('tests the destroy removal from the collection and storing basic info in deletedMeetings', async () => {
|
|
1904
1967
|
const meeting = await webex.meetings.createMeeting('test', 'test');
|
|
1905
1968
|
|
|
1969
|
+
const meetingIds = {
|
|
1970
|
+
meetingId: meeting.id,
|
|
1971
|
+
correlationId: meeting.correlationId,
|
|
1972
|
+
};
|
|
1973
|
+
|
|
1906
1974
|
webex.meetings.destroy(meeting, test1);
|
|
1907
1975
|
|
|
1908
|
-
assert.calledOnce(
|
|
1909
|
-
assert.calledWith(
|
|
1976
|
+
assert.calledOnce(deleteSpy);
|
|
1977
|
+
assert.calledWith(deleteSpy, meeting.id);
|
|
1910
1978
|
assert.calledWith(
|
|
1911
1979
|
TriggerProxy.trigger,
|
|
1912
1980
|
sinon.match.instanceOf(Meetings),
|
|
@@ -1920,6 +1988,23 @@ describe('plugin-meetings', () => {
|
|
|
1920
1988
|
reason: test1,
|
|
1921
1989
|
}
|
|
1922
1990
|
);
|
|
1991
|
+
|
|
1992
|
+
// check that the meeting is stored in deletedMeetings and removed from meetingCollection
|
|
1993
|
+
assert.equal(webex.meetings.deletedMeetings.get(meeting.id).id, meetingIds.meetingId);
|
|
1994
|
+
assert.equal(
|
|
1995
|
+
webex.meetings.deletedMeetings.get(meeting.id).correlationId,
|
|
1996
|
+
meetingIds.correlationId
|
|
1997
|
+
);
|
|
1998
|
+
|
|
1999
|
+
assert.equal(webex.meetings.meetingCollection.get(meeting.id), undefined);
|
|
2000
|
+
|
|
2001
|
+
// and that getBasicMeetingInformation() still returns the meeting info
|
|
2002
|
+
const deletedMeetingInfo = webex.meetings.getBasicMeetingInformation(
|
|
2003
|
+
meetingIds.meetingId
|
|
2004
|
+
);
|
|
2005
|
+
|
|
2006
|
+
assert.equal(deletedMeetingInfo.id, meetingIds.meetingId);
|
|
2007
|
+
assert.equal(deletedMeetingInfo.correlationId, meetingIds.correlationId);
|
|
1923
2008
|
});
|
|
1924
2009
|
});
|
|
1925
2010
|
|
|
@@ -1976,7 +2061,7 @@ describe('plugin-meetings', () => {
|
|
|
1976
2061
|
]);
|
|
1977
2062
|
});
|
|
1978
2063
|
|
|
1979
|
-
const setup = ({user} = {}) => {
|
|
2064
|
+
const setup = ({me = { type: 'validuser'}, user} = {}) => {
|
|
1980
2065
|
loggerProxySpy = sinon.spy(LoggerProxy.logger, 'error');
|
|
1981
2066
|
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
|
|
1982
2067
|
|
|
@@ -1989,8 +2074,22 @@ describe('plugin-meetings', () => {
|
|
|
1989
2074
|
Object.assign(webex.internal.services, {
|
|
1990
2075
|
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1991
2076
|
});
|
|
2077
|
+
|
|
2078
|
+
Object.assign(webex.people, {
|
|
2079
|
+
_getMe: sinon.stub().returns(Promise.resolve(me)),
|
|
2080
|
+
});
|
|
1992
2081
|
};
|
|
1993
2082
|
|
|
2083
|
+
it('should not call request.getMeetingPreferences if user is a guest', async () => {
|
|
2084
|
+
setup({me: {type: 'appuser'}});
|
|
2085
|
+
|
|
2086
|
+
await webex.meetings.fetchUserPreferredWebexSite();
|
|
2087
|
+
|
|
2088
|
+
assert.equal(webex.meetings.preferredWebexSite, '');
|
|
2089
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
|
|
2090
|
+
assert.notCalled(webex.internal.services.getMeetingPreferences);
|
|
2091
|
+
});
|
|
2092
|
+
|
|
1994
2093
|
it('should not fail if UserPreferred info is not fetched ', async () => {
|
|
1995
2094
|
setup();
|
|
1996
2095
|
|