@webex/plugin-meetings 3.8.0-next.34 → 3.8.0-next.36
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/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.js +96 -54
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +2 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/types/meeting/index.d.ts +6 -0
- package/dist/types/meeting/util.d.ts +1 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +3 -3
- package/src/meeting/index.ts +111 -55
- package/src/meeting/util.ts +3 -1
- package/test/unit/spec/meeting/index.js +181 -15
- package/test/unit/spec/meeting/utils.js +59 -33
package/src/meeting/util.ts
CHANGED
@@ -575,7 +575,9 @@ const MeetingUtil = {
|
|
575
575
|
|
576
576
|
canUserRenameOthers: (displayHints) => displayHints.includes(DISPLAY_HINTS.CAN_RENAME_OTHERS),
|
577
577
|
|
578
|
-
canShareWhiteBoard: (displayHints) =>
|
578
|
+
canShareWhiteBoard: (displayHints, policies) =>
|
579
|
+
displayHints.includes(DISPLAY_HINTS.SHARE_WHITEBOARD) &&
|
580
|
+
!!policies[SELF_POLICY.SUPPORT_WHITEBOARD],
|
579
581
|
|
580
582
|
/**
|
581
583
|
* Adds the current locus sequence information to a request body
|
@@ -115,9 +115,9 @@ import {ERROR_DESCRIPTIONS} from '@webex/internal-plugin-metrics/src/call-diagno
|
|
115
115
|
import MeetingCollection from '@webex/plugin-meetings/src/meetings/collection';
|
116
116
|
|
117
117
|
import {EVENT_TRIGGERS as VOICEAEVENTS} from '@webex/internal-plugin-voicea';
|
118
|
-
import {
|
118
|
+
import {createBrbState} from '@webex/plugin-meetings/src/meeting/brbState';
|
119
119
|
import JoinForbiddenError from '../../../../src/common/errors/join-forbidden-error';
|
120
|
-
import {
|
120
|
+
import {EventEmitter} from 'stream';
|
121
121
|
|
122
122
|
describe('plugin-meetings', () => {
|
123
123
|
const logger = {
|
@@ -282,7 +282,7 @@ describe('plugin-meetings', () => {
|
|
282
282
|
testDestination = `testDestination-${uuid.v4()}`;
|
283
283
|
correlationId = uuid.v4();
|
284
284
|
uploadEvent = new EventEmitter();
|
285
|
-
uploadEvent.addListener('progress', () => {})
|
285
|
+
uploadEvent.addListener('progress', () => {});
|
286
286
|
|
287
287
|
meeting = new Meeting(
|
288
288
|
{
|
@@ -3436,6 +3436,40 @@ describe('plugin-meetings', () => {
|
|
3436
3436
|
});
|
3437
3437
|
});
|
3438
3438
|
|
3439
|
+
it('LOCAL_MEDIA_STARTED triggers "meeting:media:local:start" event and does not send metric because we already have', async () => {
|
3440
|
+
meeting.shareCAEventSentStatus = {
|
3441
|
+
transmitStart: true,
|
3442
|
+
transmitStop: false,
|
3443
|
+
receiveStart: false,
|
3444
|
+
receiveStop: false,
|
3445
|
+
};
|
3446
|
+
statsAnalyzerStub.emit(
|
3447
|
+
{file: 'test', function: 'test'},
|
3448
|
+
StatsAnalyzerEventNames.LOCAL_MEDIA_STARTED,
|
3449
|
+
{mediaType: 'share'}
|
3450
|
+
);
|
3451
|
+
|
3452
|
+
assert.calledWith(
|
3453
|
+
TriggerProxy.trigger,
|
3454
|
+
sinon.match.instanceOf(Meeting),
|
3455
|
+
{
|
3456
|
+
file: 'meeting/index',
|
3457
|
+
function: 'addMedia',
|
3458
|
+
},
|
3459
|
+
EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,
|
3460
|
+
{
|
3461
|
+
mediaType: 'share',
|
3462
|
+
}
|
3463
|
+
);
|
3464
|
+
assert.neverCalledWith(webex.internal.newMetrics.submitClientEvent, {
|
3465
|
+
name: 'client.media.tx.start',
|
3466
|
+
payload: {mediaType: 'share', shareInstanceId: meeting.remoteShareInstanceId},
|
3467
|
+
options: {
|
3468
|
+
meetingId: meeting.id,
|
3469
|
+
},
|
3470
|
+
});
|
3471
|
+
});
|
3472
|
+
|
3439
3473
|
it('LOCAL_MEDIA_STOPPED triggers the right metrics', async () => {
|
3440
3474
|
statsAnalyzerStub.emit(
|
3441
3475
|
{file: 'test', function: 'test'},
|
@@ -3452,6 +3486,28 @@ describe('plugin-meetings', () => {
|
|
3452
3486
|
});
|
3453
3487
|
});
|
3454
3488
|
|
3489
|
+
it('LOCAL_MEDIA_STOPPED does not send metric because we already have', async () => {
|
3490
|
+
meeting.shareCAEventSentStatus = {
|
3491
|
+
transmitStart: false,
|
3492
|
+
transmitStop: true,
|
3493
|
+
receiveStart: false,
|
3494
|
+
receiveStop: false,
|
3495
|
+
};
|
3496
|
+
statsAnalyzerStub.emit(
|
3497
|
+
{file: 'test', function: 'test'},
|
3498
|
+
StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED,
|
3499
|
+
{mediaType: 'share'}
|
3500
|
+
);
|
3501
|
+
|
3502
|
+
assert.neverCalledWith(webex.internal.newMetrics.submitClientEvent, {
|
3503
|
+
name: 'client.media.tx.stop',
|
3504
|
+
payload: {mediaType: 'share', shareInstanceId: meeting.remoteShareInstanceId},
|
3505
|
+
options: {
|
3506
|
+
meetingId: meeting.id,
|
3507
|
+
},
|
3508
|
+
});
|
3509
|
+
});
|
3510
|
+
|
3455
3511
|
it('REMOTE_MEDIA_STARTED triggers "meeting:media:remote:start" event and sends metrics', async () => {
|
3456
3512
|
statsAnalyzerStub.emit(
|
3457
3513
|
{file: 'test', function: 'test'},
|
@@ -3532,6 +3588,47 @@ describe('plugin-meetings', () => {
|
|
3532
3588
|
});
|
3533
3589
|
});
|
3534
3590
|
|
3591
|
+
it('REMOTE_MEDIA_STARTED triggers "meeting:media:remote:start" event and does not send metric because we already have', async () => {
|
3592
|
+
meeting.shareCAEventSentStatus = {
|
3593
|
+
transmitStart: false,
|
3594
|
+
transmitStop: false,
|
3595
|
+
receiveStart: true,
|
3596
|
+
receiveStop: false,
|
3597
|
+
};
|
3598
|
+
statsAnalyzerStub.emit(
|
3599
|
+
{file: 'test', function: 'test'},
|
3600
|
+
StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED,
|
3601
|
+
{mediaType: 'share'}
|
3602
|
+
);
|
3603
|
+
|
3604
|
+
assert.calledWith(
|
3605
|
+
TriggerProxy.trigger,
|
3606
|
+
sinon.match.instanceOf(Meeting),
|
3607
|
+
{
|
3608
|
+
file: 'meeting/index',
|
3609
|
+
function: 'addMedia',
|
3610
|
+
},
|
3611
|
+
EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED,
|
3612
|
+
{
|
3613
|
+
mediaType: 'share',
|
3614
|
+
}
|
3615
|
+
);
|
3616
|
+
assert.neverCalledWith(webex.internal.newMetrics.submitClientEvent, {
|
3617
|
+
name: 'client.media.render.start',
|
3618
|
+
payload: {mediaType: 'share', shareInstanceId: meeting.remoteShareInstanceId},
|
3619
|
+
options: {
|
3620
|
+
meetingId: meeting.id,
|
3621
|
+
},
|
3622
|
+
});
|
3623
|
+
assert.neverCalledWith(webex.internal.newMetrics.submitClientEvent, {
|
3624
|
+
name: 'client.media.rx.start',
|
3625
|
+
payload: {mediaType: 'share', shareInstanceId: meeting.remoteShareInstanceId},
|
3626
|
+
options: {
|
3627
|
+
meetingId: meeting.id,
|
3628
|
+
},
|
3629
|
+
});
|
3630
|
+
});
|
3631
|
+
|
3535
3632
|
it('REMOTE_MEDIA_STOPPED triggers the right metrics for share', async () => {
|
3536
3633
|
statsAnalyzerStub.emit(
|
3537
3634
|
{file: 'test', function: 'test'},
|
@@ -3556,6 +3653,34 @@ describe('plugin-meetings', () => {
|
|
3556
3653
|
});
|
3557
3654
|
});
|
3558
3655
|
|
3656
|
+
it('REMOTE_MEDIA_STOPPED does not send metric because we already have', async () => {
|
3657
|
+
meeting.shareCAEventSentStatus = {
|
3658
|
+
transmitStart: false,
|
3659
|
+
transmitStop: false,
|
3660
|
+
receiveStart: true,
|
3661
|
+
receiveStop: true,
|
3662
|
+
};
|
3663
|
+
statsAnalyzerStub.emit(
|
3664
|
+
{file: 'test', function: 'test'},
|
3665
|
+
StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED,
|
3666
|
+
{mediaType: 'share'}
|
3667
|
+
);
|
3668
|
+
assert.neverCalledWith(webex.internal.newMetrics.submitClientEvent, {
|
3669
|
+
name: 'client.media.render.stop',
|
3670
|
+
payload: {mediaType: 'share', shareInstanceId: meeting.remoteShareInstanceId},
|
3671
|
+
options: {
|
3672
|
+
meetingId: meeting.id,
|
3673
|
+
},
|
3674
|
+
});
|
3675
|
+
assert.neverCalledWith(webex.internal.newMetrics.submitClientEvent, {
|
3676
|
+
name: 'client.media.rx.stop',
|
3677
|
+
payload: {mediaType: 'share', shareInstanceId: meeting.remoteShareInstanceId},
|
3678
|
+
options: {
|
3679
|
+
meetingId: meeting.id,
|
3680
|
+
},
|
3681
|
+
});
|
3682
|
+
});
|
3683
|
+
|
3559
3684
|
it('counts the number of members that are in the meeting for MEDIA_QUALITY event', async () => {
|
3560
3685
|
let fakeMembersCollection = {
|
3561
3686
|
members: {
|
@@ -3884,20 +4009,24 @@ describe('plugin-meetings', () => {
|
|
3884
4009
|
} catch (err) {
|
3885
4010
|
assert.instanceOf(err, Error);
|
3886
4011
|
assert.equal(err.message, 'setBrb failed');
|
3887
|
-
assert.isRejected(
|
4012
|
+
assert.isRejected(Promise.reject());
|
3888
4013
|
}
|
3889
4014
|
});
|
3890
4015
|
|
3891
4016
|
it('updates remote mute state when brb is enabled', async () => {
|
3892
|
-
meeting.audio = {
|
4017
|
+
meeting.audio = {handleServerRemoteMuteUpdate: sinon.stub()};
|
3893
4018
|
|
3894
4019
|
await meeting.beRightBack(true);
|
3895
4020
|
|
3896
|
-
sinon.assert.calledOnceWithExactly(
|
4021
|
+
sinon.assert.calledOnceWithExactly(
|
4022
|
+
meeting.audio.handleServerRemoteMuteUpdate,
|
4023
|
+
meeting,
|
4024
|
+
true
|
4025
|
+
);
|
3897
4026
|
});
|
3898
4027
|
|
3899
4028
|
it('does not update remote mute state when brb is disabled', async () => {
|
3900
|
-
meeting.audio = {
|
4029
|
+
meeting.audio = {handleServerRemoteMuteUpdate: sinon.stub()};
|
3901
4030
|
|
3902
4031
|
await meeting.beRightBack(false);
|
3903
4032
|
|
@@ -3956,7 +4085,10 @@ describe('plugin-meetings', () => {
|
|
3956
4085
|
.resolves({id: 'fake clientMediaPreferences'});
|
3957
4086
|
meeting.roap.doTurnDiscovery = sinon.stub().resolves({
|
3958
4087
|
turnServerInfo: {
|
3959
|
-
urls: [
|
4088
|
+
urls: [
|
4089
|
+
'turns:turn-server-url1:443?transport=tcp',
|
4090
|
+
'turns:turn-server-url2:443?transport=tcp',
|
4091
|
+
],
|
3960
4092
|
username: 'turn user',
|
3961
4093
|
password: 'turn password',
|
3962
4094
|
},
|
@@ -3974,7 +4106,10 @@ describe('plugin-meetings', () => {
|
|
3974
4106
|
expectedMediaConnectionConfig = {
|
3975
4107
|
iceServers: [
|
3976
4108
|
{
|
3977
|
-
urls: [
|
4109
|
+
urls: [
|
4110
|
+
'turns:turn-server-url1:443?transport=tcp',
|
4111
|
+
'turns:turn-server-url2:443?transport=tcp',
|
4112
|
+
],
|
3978
4113
|
username: 'turn user',
|
3979
4114
|
credential: 'turn password',
|
3980
4115
|
},
|
@@ -4056,9 +4191,11 @@ describe('plugin-meetings', () => {
|
|
4056
4191
|
.stub(InternalMediaCoreModule, 'MultistreamRoapMediaConnection')
|
4057
4192
|
.returns(fakeMultistreamRoapMediaConnection);
|
4058
4193
|
|
4059
|
-
locusMediaRequestStub = sinon
|
4060
|
-
|
4061
|
-
|
4194
|
+
locusMediaRequestStub = sinon.stub(WebexPlugin.prototype, 'request').resolves({
|
4195
|
+
body: {locus: {fullState: {}}},
|
4196
|
+
upload: sinon.match.instanceOf(EventEmitter),
|
4197
|
+
download: sinon.match.instanceOf(EventEmitter),
|
4198
|
+
});
|
4062
4199
|
|
4063
4200
|
// setup some things and mocks so that the call to join() works
|
4064
4201
|
// (we need to call join() because it creates the LocusMediaRequest instance
|
@@ -5242,7 +5379,10 @@ describe('plugin-meetings', () => {
|
|
5242
5379
|
// and check that when we fallback to transcoded we still do another TURN discovery
|
5243
5380
|
await runCheck(
|
5244
5381
|
{
|
5245
|
-
urls: [
|
5382
|
+
urls: [
|
5383
|
+
'turns:turn-server-url1:443?transport=tcp',
|
5384
|
+
'turns:turn-server-url2:443?transport=tcp',
|
5385
|
+
],
|
5246
5386
|
username: 'turn user',
|
5247
5387
|
password: 'turn password',
|
5248
5388
|
},
|
@@ -5256,7 +5396,10 @@ describe('plugin-meetings', () => {
|
|
5256
5396
|
// but doing it just for completeness
|
5257
5397
|
await runCheck(
|
5258
5398
|
{
|
5259
|
-
urls: [
|
5399
|
+
urls: [
|
5400
|
+
'turns:turn-server-url1:443?transport=tcp',
|
5401
|
+
'turns:turn-server-url2:443?transport=tcp',
|
5402
|
+
],
|
5260
5403
|
username: 'turn user',
|
5261
5404
|
password: 'turn password',
|
5262
5405
|
},
|
@@ -7640,6 +7783,12 @@ describe('plugin-meetings', () => {
|
|
7640
7783
|
meeting.audio = {handleLocalStreamChange: sinon.stub()};
|
7641
7784
|
meeting.video = {handleLocalStreamChange: sinon.stub()};
|
7642
7785
|
meeting.statsAnalyzer = {updateMediaStatus: sinon.stub()};
|
7786
|
+
meeting.shareCAEventSentStatus = {
|
7787
|
+
transmitStart: false,
|
7788
|
+
transmitStop: false,
|
7789
|
+
receiveStart: false,
|
7790
|
+
receiveStop: false,
|
7791
|
+
};
|
7643
7792
|
fakeMultistreamRoapMediaConnection = {
|
7644
7793
|
createSendSlot: () => {
|
7645
7794
|
return {
|
@@ -7707,6 +7856,9 @@ describe('plugin-meetings', () => {
|
|
7707
7856
|
});
|
7708
7857
|
assert.equal(meeting.mediaProperties.mediaDirection.sendShare, true);
|
7709
7858
|
|
7859
|
+
assert.equal(meeting.shareCAEventSentStatus.transmitStart, false);
|
7860
|
+
assert.equal(meeting.shareCAEventSentStatus.transmitStop, false);
|
7861
|
+
|
7710
7862
|
assert.calledWith(meeting.statsAnalyzer.updateMediaStatus, {
|
7711
7863
|
expected: {sendShare: true},
|
7712
7864
|
});
|
@@ -7727,18 +7879,23 @@ describe('plugin-meetings', () => {
|
|
7727
7879
|
assert.equal(meeting.mediaProperties.shareAudioStream, stream);
|
7728
7880
|
assert.equal(meeting.mediaProperties.mediaDirection.sendShare, true);
|
7729
7881
|
|
7882
|
+
assert.equal(meeting.shareCAEventSentStatus.transmitStart, false);
|
7883
|
+
assert.equal(meeting.shareCAEventSentStatus.transmitStop, false);
|
7884
|
+
|
7730
7885
|
assert.calledWith(meeting.statsAnalyzer.updateMediaStatus, {
|
7731
7886
|
expected: {sendShare: true},
|
7732
7887
|
});
|
7733
7888
|
};
|
7734
7889
|
|
7735
7890
|
it('requests screen share floor and publishes the screen share video stream', async () => {
|
7891
|
+
meeting.shareCAEventSentStatus.transmitStart = true;
|
7736
7892
|
await meeting.publishStreams({screenShare: {video: videoShareStream}});
|
7737
7893
|
|
7738
7894
|
checkScreenShareVideoPublished(videoShareStream);
|
7739
7895
|
});
|
7740
7896
|
|
7741
7897
|
it('requests screen share floor and publishes the screen share audio stream', async () => {
|
7898
|
+
meeting.shareCAEventSentStatus.transmitStart = true;
|
7742
7899
|
await meeting.publishStreams({screenShare: {audio: audioShareStream}});
|
7743
7900
|
|
7744
7901
|
checkScreenShareAudioPublished(audioShareStream);
|
@@ -10684,6 +10841,11 @@ describe('plugin-meetings', () => {
|
|
10684
10841
|
requiredDisplayHints: [],
|
10685
10842
|
requiredPolicies: [SELF_POLICY.SUPPORT_POLLING_AND_QA],
|
10686
10843
|
},
|
10844
|
+
{
|
10845
|
+
actionName: 'canShareWhiteBoard',
|
10846
|
+
requiredDisplayHints: [DISPLAY_HINTS.SHARE_WHITEBOARD],
|
10847
|
+
requiredPolicies: [SELF_POLICY.SUPPORT_WHITEBOARD],
|
10848
|
+
},
|
10687
10849
|
],
|
10688
10850
|
({
|
10689
10851
|
actionName,
|
@@ -11092,7 +11254,7 @@ describe('plugin-meetings', () => {
|
|
11092
11254
|
assert.calledWith(canSendReactionsSpy, null, userDisplayHints);
|
11093
11255
|
assert.calledWith(canUserRenameSelfAndObservedSpy, userDisplayHints);
|
11094
11256
|
assert.calledWith(canUserRenameOthersSpy, userDisplayHints);
|
11095
|
-
assert.calledWith(canShareWhiteBoardSpy, userDisplayHints);
|
11257
|
+
assert.calledWith(canShareWhiteBoardSpy, userDisplayHints, selfUserPolicies);
|
11096
11258
|
|
11097
11259
|
assert.calledWith(ControlsOptionsUtil.hasHints, {
|
11098
11260
|
requiredHints: [DISPLAY_HINTS.MUTE_ALL],
|
@@ -12032,6 +12194,8 @@ describe('plugin-meetings', () => {
|
|
12032
12194
|
// Set the webinar attendee flag
|
12033
12195
|
meeting.webinar = {selfIsAttendee: true};
|
12034
12196
|
meeting.locusInfo.info.isWebinar = true;
|
12197
|
+
meeting.shareCAEventSentStatus.receiveStart = true;
|
12198
|
+
meeting.shareCAEventSentStatus.receiveStop = true;
|
12035
12199
|
|
12036
12200
|
// Step 1: Start sharing whiteboard A
|
12037
12201
|
const data1 = generateData(
|
@@ -12055,6 +12219,8 @@ describe('plugin-meetings', () => {
|
|
12055
12219
|
|
12056
12220
|
// Specific assertions for webinar attendee status
|
12057
12221
|
assert.equal(meeting.shareStatus, SHARE_STATUS.REMOTE_SHARE_ACTIVE);
|
12222
|
+
assert.equal(meeting.shareCAEventSentStatus.receiveStart, false);
|
12223
|
+
assert.equal(meeting.shareCAEventSentStatus.receiveStop, false);
|
12058
12224
|
});
|
12059
12225
|
});
|
12060
12226
|
|
@@ -66,7 +66,7 @@ describe('plugin-meetings', () => {
|
|
66
66
|
|
67
67
|
describe('#cleanup', () => {
|
68
68
|
it('do clean up on meeting object with LLM enabled', async () => {
|
69
|
-
meeting.config = {enableAutomaticLLM
|
69
|
+
meeting.config = {enableAutomaticLLM: true};
|
70
70
|
await MeetingUtil.cleanUp(meeting);
|
71
71
|
assert.calledOnce(meeting.cleanupLocalStreams);
|
72
72
|
assert.calledOnce(meeting.closeRemoteStreams);
|
@@ -84,7 +84,7 @@ describe('plugin-meetings', () => {
|
|
84
84
|
});
|
85
85
|
|
86
86
|
it('do clean up on meeting object with LLM disabled', async () => {
|
87
|
-
meeting.config = {enableAutomaticLLM
|
87
|
+
meeting.config = {enableAutomaticLLM: false};
|
88
88
|
await MeetingUtil.cleanUp(meeting);
|
89
89
|
assert.calledOnce(meeting.cleanupLocalStreams);
|
90
90
|
assert.calledOnce(meeting.closeRemoteStreams);
|
@@ -392,8 +392,7 @@ describe('plugin-meetings', () => {
|
|
392
392
|
meetingJoinUrl: 'meetingJoinUrl',
|
393
393
|
locusUrl: 'locusUrl',
|
394
394
|
meetingRequest: {
|
395
|
-
joinMeeting: sinon.stub().returns(
|
396
|
-
Promise.resolve(joinMeetingResponse)),
|
395
|
+
joinMeeting: sinon.stub().returns(Promise.resolve(joinMeetingResponse)),
|
397
396
|
},
|
398
397
|
getWebexObject: sinon.stub().returns(webex),
|
399
398
|
setLocus: sinon.stub(),
|
@@ -410,23 +409,29 @@ describe('plugin-meetings', () => {
|
|
410
409
|
id: 'fake client media preferences',
|
411
410
|
};
|
412
411
|
|
413
|
-
webex.meetings.reachability.getReachabilityReportToAttachToRoap.resolves(
|
414
|
-
|
412
|
+
webex.meetings.reachability.getReachabilityReportToAttachToRoap.resolves(
|
413
|
+
FAKE_REACHABILITY_REPORT
|
414
|
+
);
|
415
|
+
webex.meetings.reachability.getClientMediaPreferences.resolves(
|
416
|
+
FAKE_CLIENT_MEDIA_PREFERENCES
|
417
|
+
);
|
415
418
|
|
416
|
-
sinon
|
417
|
-
|
418
|
-
.get(() => true);
|
419
|
-
sinon
|
420
|
-
.stub(webex.internal.device.ipNetworkDetector, 'supportsIpV6')
|
421
|
-
.get(() => true);
|
419
|
+
sinon.stub(webex.internal.device.ipNetworkDetector, 'supportsIpV4').get(() => true);
|
420
|
+
sinon.stub(webex.internal.device.ipNetworkDetector, 'supportsIpV6').get(() => true);
|
422
421
|
|
423
422
|
await MeetingUtil.joinMeeting(meeting, {
|
424
423
|
reachability: 'reachability',
|
425
424
|
roapMessage: 'roapMessage',
|
426
425
|
});
|
427
426
|
|
428
|
-
assert.calledOnceWithExactly(
|
429
|
-
|
427
|
+
assert.calledOnceWithExactly(
|
428
|
+
webex.meetings.reachability.getReachabilityReportToAttachToRoap
|
429
|
+
);
|
430
|
+
assert.calledOnceWithExactly(
|
431
|
+
webex.meetings.reachability.getClientMediaPreferences,
|
432
|
+
meeting.isMultistream,
|
433
|
+
IP_VERSION.ipv4_and_ipv6
|
434
|
+
);
|
430
435
|
|
431
436
|
assert.calledOnce(meeting.meetingRequest.joinMeeting);
|
432
437
|
const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
|
@@ -436,9 +441,9 @@ describe('plugin-meetings', () => {
|
|
436
441
|
assert.equal(parameter.clientMediaPreferences, FAKE_CLIENT_MEDIA_PREFERENCES);
|
437
442
|
assert.equal(parameter.roapMessage, 'roapMessage');
|
438
443
|
|
439
|
-
assert.calledOnce(meeting.setLocus)
|
444
|
+
assert.calledOnce(meeting.setLocus);
|
440
445
|
const setLocusParameter = meeting.setLocus.getCall(0).args[0];
|
441
|
-
assert.deepEqual(setLocusParameter, MeetingUtil.parseLocusJoin(joinMeetingResponse))
|
446
|
+
assert.deepEqual(setLocusParameter, MeetingUtil.parseLocusJoin(joinMeetingResponse));
|
442
447
|
|
443
448
|
assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
|
444
449
|
name: 'client.locus.join.request',
|
@@ -460,7 +465,6 @@ describe('plugin-meetings', () => {
|
|
460
465
|
});
|
461
466
|
});
|
462
467
|
|
463
|
-
|
464
468
|
it('#Should call `meetingRequest.joinMeeting and handle a date header in the response : isoLocalClientMeetingJoinedTime', async () => {
|
465
469
|
meeting.isMultistream = true;
|
466
470
|
|
@@ -471,30 +475,30 @@ describe('plugin-meetings', () => {
|
|
471
475
|
id: 'fake client media preferences',
|
472
476
|
};
|
473
477
|
|
474
|
-
webex.meetings.reachability.getReachabilityReportToAttachToRoap.resolves(
|
475
|
-
|
478
|
+
webex.meetings.reachability.getReachabilityReportToAttachToRoap.resolves(
|
479
|
+
FAKE_REACHABILITY_REPORT
|
480
|
+
);
|
481
|
+
webex.meetings.reachability.getClientMediaPreferences.resolves(
|
482
|
+
FAKE_CLIENT_MEDIA_PREFERENCES
|
483
|
+
);
|
476
484
|
|
477
|
-
sinon
|
478
|
-
|
479
|
-
.get(() => true);
|
480
|
-
sinon
|
481
|
-
.stub(webex.internal.device.ipNetworkDetector, 'supportsIpV6')
|
482
|
-
.get(() => true);
|
485
|
+
sinon.stub(webex.internal.device.ipNetworkDetector, 'supportsIpV4').get(() => true);
|
486
|
+
sinon.stub(webex.internal.device.ipNetworkDetector, 'supportsIpV6').get(() => true);
|
483
487
|
|
484
488
|
meeting.meetingRequest.joinMeeting.resolves({
|
485
489
|
headers: {
|
486
|
-
date: 'test'
|
490
|
+
date: 'test',
|
487
491
|
},
|
488
492
|
body: {
|
489
493
|
mediaConnections: [{mediaId: 'test'}],
|
490
494
|
locus: {
|
491
495
|
url: 'test',
|
492
496
|
self: {
|
493
|
-
id: 'test'
|
494
|
-
}
|
495
|
-
}
|
496
|
-
}
|
497
|
-
})
|
497
|
+
id: 'test',
|
498
|
+
},
|
499
|
+
},
|
500
|
+
},
|
501
|
+
});
|
498
502
|
|
499
503
|
await MeetingUtil.joinMeeting(meeting, {
|
500
504
|
reachability: 'reachability',
|
@@ -749,8 +753,30 @@ describe('plugin-meetings', () => {
|
|
749
753
|
|
750
754
|
describe('canShareWhiteBoard', () => {
|
751
755
|
it('works as expected', () => {
|
752
|
-
assert.deepEqual(
|
753
|
-
|
756
|
+
assert.deepEqual(
|
757
|
+
MeetingUtil.canShareWhiteBoard(['SHARE_WHITEBOARD'], {
|
758
|
+
[SELF_POLICY.SUPPORT_WHITEBOARD]: true,
|
759
|
+
}),
|
760
|
+
true
|
761
|
+
);
|
762
|
+
assert.deepEqual(
|
763
|
+
MeetingUtil.canShareWhiteBoard([], {
|
764
|
+
[SELF_POLICY.SUPPORT_WHITEBOARD]: true,
|
765
|
+
}),
|
766
|
+
false
|
767
|
+
);
|
768
|
+
assert.deepEqual(
|
769
|
+
MeetingUtil.canShareWhiteBoard(['SHARE_WHITEBOARD'], {
|
770
|
+
[SELF_POLICY.SUPPORT_WHITEBOARD]: false,
|
771
|
+
}),
|
772
|
+
false
|
773
|
+
);
|
774
|
+
assert.deepEqual(
|
775
|
+
MeetingUtil.canShareWhiteBoard([], {
|
776
|
+
[SELF_POLICY.SUPPORT_WHITEBOARD]: false,
|
777
|
+
}),
|
778
|
+
false
|
779
|
+
);
|
754
780
|
});
|
755
781
|
});
|
756
782
|
|