@webex/plugin-meetings 3.10.0-next.6 → 3.10.0-wxc-disconnect.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.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/webex-errors.js +1 -21
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/constants.js +0 -7
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/index.js +5 -22
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/index.js +0 -7
- package/dist/index.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +2 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +3 -17
- package/dist/locus-info/index.js.map +1 -1
- package/dist/media/index.js +0 -5
- package/dist/media/index.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +0 -6
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +33 -103
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +14 -152
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +0 -9
- package/dist/meeting/util.js.map +1 -1
- package/dist/member/index.js +0 -9
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +0 -10
- package/dist/member/util.js.map +1 -1
- package/dist/types/common/errors/webex-errors.d.ts +0 -12
- package/dist/types/constants.d.ts +0 -5
- package/dist/types/controls-options-manager/index.d.ts +1 -9
- package/dist/types/index.d.ts +1 -2
- package/dist/types/locus-info/index.d.ts +1 -2
- package/dist/types/meeting/in-meeting-actions.d.ts +0 -6
- package/dist/types/meeting/index.d.ts +0 -30
- package/dist/types/meeting/request.d.ts +0 -33
- package/dist/types/meeting/util.d.ts +0 -3
- package/dist/types/member/index.d.ts +0 -1
- package/dist/types/member/util.d.ts +0 -5
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/common/errors/webex-errors.ts +0 -19
- package/src/constants.ts +1 -9
- package/src/controls-options-manager/index.ts +5 -26
- package/src/index.ts +0 -2
- package/src/locus-info/controlsUtils.ts +0 -18
- package/src/locus-info/index.ts +4 -14
- package/src/media/index.ts +0 -6
- package/src/meeting/in-meeting-actions.ts +0 -12
- package/src/meeting/index.ts +21 -99
- package/src/meeting/request.ts +0 -118
- package/src/meeting/util.ts +0 -9
- package/src/member/index.ts +0 -10
- package/src/member/util.ts +0 -14
- package/test/unit/spec/controls-options-manager/index.js +0 -47
- package/test/unit/spec/fixture/locus.js +0 -1
- package/test/unit/spec/locus-info/index.js +0 -39
- package/test/unit/spec/media/index.ts +9 -140
- package/test/unit/spec/meeting/in-meeting-actions.ts +0 -6
- package/test/unit/spec/meeting/index.js +70 -171
- package/test/unit/spec/meeting/utils.js +0 -3
- package/test/unit/spec/meetings/index.js +2 -0
- package/test/unit/spec/member/util.js +0 -24
|
@@ -141,12 +141,12 @@ describe('createMediaConnection', () => {
|
|
|
141
141
|
const roapMediaConnectionConstructorStub = sinon
|
|
142
142
|
.stub(InternalMediaCoreModule, 'RoapMediaConnection')
|
|
143
143
|
.returns(fakeRoapMediaConnection);
|
|
144
|
-
|
|
144
|
+
|
|
145
145
|
StaticConfig.set({bandwidth: {audio: 123, video: 456, startBitrate: 999}});
|
|
146
|
-
|
|
146
|
+
|
|
147
147
|
const ENABLE_EXTMAP = false;
|
|
148
148
|
const ENABLE_RTX = true;
|
|
149
|
-
|
|
149
|
+
|
|
150
150
|
Media.createMediaConnection(false, 'sendonly-debug-id', 'meetingId', {
|
|
151
151
|
mediaProperties: {
|
|
152
152
|
mediaDirection: {
|
|
@@ -168,7 +168,7 @@ describe('createMediaConnection', () => {
|
|
|
168
168
|
turnServerInfo: undefined,
|
|
169
169
|
iceCandidatesTimeout: undefined,
|
|
170
170
|
});
|
|
171
|
-
|
|
171
|
+
|
|
172
172
|
assert.calledWith(
|
|
173
173
|
roapMediaConnectionConstructorStub,
|
|
174
174
|
sinon.match.any,
|
|
@@ -194,12 +194,12 @@ describe('createMediaConnection', () => {
|
|
|
194
194
|
const roapMediaConnectionConstructorStub = sinon
|
|
195
195
|
.stub(InternalMediaCoreModule, 'RoapMediaConnection')
|
|
196
196
|
.returns(fakeRoapMediaConnection);
|
|
197
|
-
|
|
197
|
+
|
|
198
198
|
StaticConfig.set({bandwidth: {audio: 123, video: 456, startBitrate: 999}});
|
|
199
|
-
|
|
199
|
+
|
|
200
200
|
const ENABLE_EXTMAP = true;
|
|
201
201
|
const ENABLE_RTX = false;
|
|
202
|
-
|
|
202
|
+
|
|
203
203
|
Media.createMediaConnection(false, 'recvonly-debug-id', 'meetingId', {
|
|
204
204
|
mediaProperties: {
|
|
205
205
|
mediaDirection: {
|
|
@@ -221,7 +221,7 @@ describe('createMediaConnection', () => {
|
|
|
221
221
|
turnServerInfo: undefined,
|
|
222
222
|
iceCandidatesTimeout: undefined,
|
|
223
223
|
});
|
|
224
|
-
|
|
224
|
+
|
|
225
225
|
assert.calledWith(
|
|
226
226
|
roapMediaConnectionConstructorStub,
|
|
227
227
|
sinon.match.any,
|
|
@@ -242,6 +242,7 @@ describe('createMediaConnection', () => {
|
|
|
242
242
|
'recvonly-debug-id'
|
|
243
243
|
);
|
|
244
244
|
});
|
|
245
|
+
|
|
245
246
|
|
|
246
247
|
it('creates a MultistreamRoapMediaConnection when multistream is enabled', () => {
|
|
247
248
|
const multistreamRoapMediaConnectionConstructorStub = sinon
|
|
@@ -510,138 +511,6 @@ describe('createMediaConnection', () => {
|
|
|
510
511
|
);
|
|
511
512
|
});
|
|
512
513
|
|
|
513
|
-
const testEnableInboundAudioLevelMonitoring = (
|
|
514
|
-
testName: string,
|
|
515
|
-
browserStubs: {isChrome?: boolean; isEdge?: boolean; isFirefox?: boolean},
|
|
516
|
-
isMultistream: boolean,
|
|
517
|
-
expectedConfig: object,
|
|
518
|
-
additionalOptions = {}
|
|
519
|
-
) => {
|
|
520
|
-
it(testName, () => {
|
|
521
|
-
const connectionConstructorStub = isMultistream
|
|
522
|
-
? sinon.stub(InternalMediaCoreModule, 'MultistreamRoapMediaConnection')
|
|
523
|
-
: sinon.stub(InternalMediaCoreModule, 'RoapMediaConnection');
|
|
524
|
-
|
|
525
|
-
connectionConstructorStub.returns(fakeRoapMediaConnection);
|
|
526
|
-
|
|
527
|
-
// Set up browser stubs
|
|
528
|
-
sinon.stub(BrowserInfo, 'isChrome').returns(browserStubs.isChrome || false);
|
|
529
|
-
sinon.stub(BrowserInfo, 'isEdge').returns(browserStubs.isEdge || false);
|
|
530
|
-
sinon.stub(BrowserInfo, 'isFirefox').returns(browserStubs.isFirefox || false);
|
|
531
|
-
|
|
532
|
-
const baseOptions = {
|
|
533
|
-
mediaProperties: {
|
|
534
|
-
mediaDirection: {
|
|
535
|
-
sendAudio: true,
|
|
536
|
-
sendVideo: true,
|
|
537
|
-
sendShare: false,
|
|
538
|
-
receiveAudio: true,
|
|
539
|
-
receiveVideo: true,
|
|
540
|
-
receiveShare: true,
|
|
541
|
-
},
|
|
542
|
-
...(isMultistream
|
|
543
|
-
? {}
|
|
544
|
-
: {
|
|
545
|
-
audioStream: fakeAudioStream,
|
|
546
|
-
videoStream: fakeVideoStream,
|
|
547
|
-
shareVideoTrack: null,
|
|
548
|
-
shareAudioTrack: null,
|
|
549
|
-
}),
|
|
550
|
-
},
|
|
551
|
-
...(isMultistream
|
|
552
|
-
? {}
|
|
553
|
-
: {
|
|
554
|
-
remoteQualityLevel: 'HIGH',
|
|
555
|
-
enableRtx: true,
|
|
556
|
-
enableExtmap: true,
|
|
557
|
-
}),
|
|
558
|
-
...additionalOptions,
|
|
559
|
-
};
|
|
560
|
-
|
|
561
|
-
if (!isMultistream) {
|
|
562
|
-
StaticConfig.set({bandwidth: {audio: 123, video: 456, startBitrate: 999}});
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
Media.createMediaConnection(isMultistream, 'debug string', 'meeting id', baseOptions);
|
|
566
|
-
|
|
567
|
-
if (isMultistream) {
|
|
568
|
-
assert.calledOnceWithExactly(
|
|
569
|
-
connectionConstructorStub,
|
|
570
|
-
expectedConfig,
|
|
571
|
-
'meeting id',
|
|
572
|
-
sinon.match.func,
|
|
573
|
-
sinon.match.func,
|
|
574
|
-
sinon.match.func
|
|
575
|
-
);
|
|
576
|
-
} else {
|
|
577
|
-
assert.calledOnceWithExactly(
|
|
578
|
-
connectionConstructorStub,
|
|
579
|
-
expectedConfig,
|
|
580
|
-
sinon.match.object,
|
|
581
|
-
'debug string'
|
|
582
|
-
);
|
|
583
|
-
}
|
|
584
|
-
});
|
|
585
|
-
};
|
|
586
|
-
|
|
587
|
-
testEnableInboundAudioLevelMonitoring(
|
|
588
|
-
'enables enableInboundAudioLevelMonitoring for multistream when browser is Chrome',
|
|
589
|
-
{isChrome: true},
|
|
590
|
-
true,
|
|
591
|
-
{
|
|
592
|
-
iceServers: [],
|
|
593
|
-
disableAudioTwcc: true,
|
|
594
|
-
enableInboundAudioLevelMonitoring: true,
|
|
595
|
-
}
|
|
596
|
-
);
|
|
597
|
-
|
|
598
|
-
testEnableInboundAudioLevelMonitoring(
|
|
599
|
-
'enables enableInboundAudioLevelMonitoring for multistream when browser is Edge',
|
|
600
|
-
{isEdge: true},
|
|
601
|
-
true,
|
|
602
|
-
{
|
|
603
|
-
iceServers: [],
|
|
604
|
-
disableAudioTwcc: true,
|
|
605
|
-
enableInboundAudioLevelMonitoring: true,
|
|
606
|
-
}
|
|
607
|
-
);
|
|
608
|
-
|
|
609
|
-
testEnableInboundAudioLevelMonitoring(
|
|
610
|
-
'does not enable enableInboundAudioLevelMonitoring for multistream when browser is Firefox',
|
|
611
|
-
{isFirefox: true},
|
|
612
|
-
true,
|
|
613
|
-
{
|
|
614
|
-
iceServers: [],
|
|
615
|
-
disableAudioTwcc: true,
|
|
616
|
-
doFullIce: true,
|
|
617
|
-
stopIceGatheringAfterFirstRelayCandidate: undefined,
|
|
618
|
-
}
|
|
619
|
-
);
|
|
620
|
-
|
|
621
|
-
testEnableInboundAudioLevelMonitoring(
|
|
622
|
-
'does not enable enableInboundAudioLevelMonitoring for non-multistream connections even when browser is Chrome',
|
|
623
|
-
{isChrome: true},
|
|
624
|
-
false,
|
|
625
|
-
{
|
|
626
|
-
iceServers: [],
|
|
627
|
-
iceCandidatesTimeout: undefined,
|
|
628
|
-
skipInactiveTransceivers: false,
|
|
629
|
-
requireH264: true,
|
|
630
|
-
sdpMunging: {
|
|
631
|
-
convertPort9to0: false,
|
|
632
|
-
addContentSlides: true,
|
|
633
|
-
bandwidthLimits: {
|
|
634
|
-
audio: 123,
|
|
635
|
-
video: 456,
|
|
636
|
-
},
|
|
637
|
-
startBitrate: 999,
|
|
638
|
-
periodicKeyframes: 20,
|
|
639
|
-
disableExtmap: false,
|
|
640
|
-
disableRtx: false,
|
|
641
|
-
},
|
|
642
|
-
}
|
|
643
|
-
);
|
|
644
|
-
|
|
645
514
|
[
|
|
646
515
|
{testCase: 'turnServerInfo is undefined', turnServerInfo: undefined},
|
|
647
516
|
{
|
|
@@ -35,8 +35,6 @@ describe('plugin-meetings', () => {
|
|
|
35
35
|
isLocalRecordingStarted: null,
|
|
36
36
|
isLocalRecordingStopped: null,
|
|
37
37
|
isLocalRecordingPaused: null,
|
|
38
|
-
isLocalStreamingStarted:null,
|
|
39
|
-
isLocalStreamingStopped:null,
|
|
40
38
|
isManualCaptionActive: null,
|
|
41
39
|
isPremiseRecordingEnabled: null,
|
|
42
40
|
isSaveTranscriptsEnabled: null,
|
|
@@ -88,7 +86,6 @@ describe('plugin-meetings', () => {
|
|
|
88
86
|
canDoVideo: null,
|
|
89
87
|
canAnnotate: null,
|
|
90
88
|
canUseVoip: null,
|
|
91
|
-
showAutoEndMeetingWarning: null,
|
|
92
89
|
supportHQV: null,
|
|
93
90
|
supportHDV: null,
|
|
94
91
|
canShareWhiteBoard: null,
|
|
@@ -139,8 +136,6 @@ describe('plugin-meetings', () => {
|
|
|
139
136
|
'isLocalRecordingStarted',
|
|
140
137
|
'isLocalRecordingStopped',
|
|
141
138
|
'isLocalRecordingPaused',
|
|
142
|
-
'isLocalStreamingStarted',
|
|
143
|
-
'isLocalStreamingStopped',
|
|
144
139
|
'canSetMuteOnEntry',
|
|
145
140
|
'canUnsetMuteOnEntry',
|
|
146
141
|
'canSetDisallowUnmute',
|
|
@@ -202,7 +197,6 @@ describe('plugin-meetings', () => {
|
|
|
202
197
|
'canRealtimeCloseCaption',
|
|
203
198
|
'canRealtimeCloseCaptionManual',
|
|
204
199
|
'canChat',
|
|
205
|
-
'showAutoEndMeetingWarning',
|
|
206
200
|
'canDoVideo',
|
|
207
201
|
'canAnnotate',
|
|
208
202
|
'canUseVoip',
|
|
@@ -97,7 +97,6 @@ import PermissionError from '../../../../src/common/errors/permission';
|
|
|
97
97
|
import JoinWebinarError from '../../../../src/common/errors/join-webinar-error';
|
|
98
98
|
import IntentToJoinError from '../../../../src/common/errors/intent-to-join';
|
|
99
99
|
import MultistreamNotSupportedError from '../../../../src/common/errors/multistream-not-supported-error';
|
|
100
|
-
import {SdpResponseTimeoutError} from '@webex/plugin-meetings/src/common/errors/webex-errors';
|
|
101
100
|
import testUtils from '../../../utils/testUtils';
|
|
102
101
|
import {
|
|
103
102
|
MeetingInfoV2CaptchaError,
|
|
@@ -2000,15 +1999,18 @@ describe('plugin-meetings', () => {
|
|
|
2000
1999
|
|
|
2001
2000
|
// Assert that client.locus.join.response error event is not sent from this function, it is now emitted from MeetingUtil.joinMeeting
|
|
2002
2001
|
assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
|
|
2003
|
-
assert.calledWithMatch(
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2002
|
+
assert.calledWithMatch(
|
|
2003
|
+
webex.internal.newMetrics.submitClientEvent,
|
|
2004
|
+
{
|
|
2005
|
+
name: 'client.call.initiated',
|
|
2006
|
+
payload: {
|
|
2007
|
+
trigger: 'user-interaction',
|
|
2008
|
+
isRoapCallEnabled: true,
|
|
2009
|
+
pstnAudioType: undefined
|
|
2010
|
+
},
|
|
2011
|
+
options: {meetingId: meeting.id},
|
|
2012
|
+
}
|
|
2013
|
+
);
|
|
2012
2014
|
});
|
|
2013
2015
|
});
|
|
2014
2016
|
it('should fail if password is required', async () => {
|
|
@@ -2677,11 +2679,7 @@ describe('plugin-meetings', () => {
|
|
|
2677
2679
|
// simulate timeout waiting for the SDP answer that never comes
|
|
2678
2680
|
await clock.tickAsync(ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
|
|
2679
2681
|
|
|
2680
|
-
await assert.isRejected(
|
|
2681
|
-
result,
|
|
2682
|
-
SdpResponseTimeoutError,
|
|
2683
|
-
'Timed out waiting for REMOTE SDP ANSWER'
|
|
2684
|
-
);
|
|
2682
|
+
await assert.isRejected(result);
|
|
2685
2683
|
|
|
2686
2684
|
assert.calledOnceWithExactly(getErrorPayloadForClientErrorCodeStub, {
|
|
2687
2685
|
clientErrorCode: 2007,
|
|
@@ -4089,7 +4087,7 @@ describe('plugin-meetings', () => {
|
|
|
4089
4087
|
member2: {isInMeeting: false, isInLobby: true},
|
|
4090
4088
|
member3: {isInMeeting: false, isInLobby: false},
|
|
4091
4089
|
member4: {isInMeeting: true, isInLobby: false},
|
|
4092
|
-
}
|
|
4090
|
+
}
|
|
4093
4091
|
};
|
|
4094
4092
|
sinon.stub(meeting, 'getMembers').returns({membersCollection: fakeMembersCollection});
|
|
4095
4093
|
const fakeData = {intervalMetadata: {}};
|
|
@@ -6741,7 +6739,7 @@ describe('plugin-meetings', () => {
|
|
|
6741
6739
|
// Verify pstnCorrelationId was set
|
|
6742
6740
|
assert.exists(meeting.pstnCorrelationId);
|
|
6743
6741
|
assert.notEqual(meeting.pstnCorrelationId, meeting.correlationId);
|
|
6744
|
-
const firstPstnCorrelationId = meeting.pstnCorrelationId
|
|
6742
|
+
const firstPstnCorrelationId = meeting.pstnCorrelationId
|
|
6745
6743
|
|
|
6746
6744
|
meeting.meetingRequest.dialIn.resetHistory();
|
|
6747
6745
|
|
|
@@ -6816,19 +6814,15 @@ describe('plugin-meetings', () => {
|
|
|
6816
6814
|
assert.equal(e, error);
|
|
6817
6815
|
|
|
6818
6816
|
// Verify behavioral metric was sent with dial_in_correlation_id
|
|
6819
|
-
assert.calledWith(
|
|
6820
|
-
|
|
6821
|
-
|
|
6822
|
-
|
|
6823
|
-
|
|
6824
|
-
|
|
6825
|
-
|
|
6826
|
-
|
|
6827
|
-
|
|
6828
|
-
reason: error.error.message,
|
|
6829
|
-
stack: error.stack,
|
|
6830
|
-
}
|
|
6831
|
-
);
|
|
6817
|
+
assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADD_DIAL_IN_FAILURE, {
|
|
6818
|
+
correlation_id: meeting.correlationId,
|
|
6819
|
+
dial_in_url: meeting.dialInUrl,
|
|
6820
|
+
dial_in_correlation_id: sinon.match.string,
|
|
6821
|
+
locus_id: meeting.locusUrl.split('/').pop(),
|
|
6822
|
+
client_url: meeting.deviceUrl,
|
|
6823
|
+
reason: error.error.message,
|
|
6824
|
+
stack: error.stack,
|
|
6825
|
+
});
|
|
6832
6826
|
|
|
6833
6827
|
// Verify pstnCorrelationId was cleared after error
|
|
6834
6828
|
assert.equal(meeting.pstnCorrelationId, undefined);
|
|
@@ -6847,19 +6841,15 @@ describe('plugin-meetings', () => {
|
|
|
6847
6841
|
assert.equal(e, error);
|
|
6848
6842
|
|
|
6849
6843
|
// Verify behavioral metric was sent with dial_out_correlation_id
|
|
6850
|
-
assert.calledWith(
|
|
6851
|
-
|
|
6852
|
-
|
|
6853
|
-
|
|
6854
|
-
|
|
6855
|
-
|
|
6856
|
-
|
|
6857
|
-
|
|
6858
|
-
|
|
6859
|
-
reason: error.error.message,
|
|
6860
|
-
stack: error.stack,
|
|
6861
|
-
}
|
|
6862
|
-
);
|
|
6844
|
+
assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADD_DIAL_OUT_FAILURE, {
|
|
6845
|
+
correlation_id: meeting.correlationId,
|
|
6846
|
+
dial_out_url: meeting.dialOutUrl,
|
|
6847
|
+
dial_out_correlation_id: sinon.match.string,
|
|
6848
|
+
locus_id: meeting.locusUrl.split('/').pop(),
|
|
6849
|
+
client_url: meeting.deviceUrl,
|
|
6850
|
+
reason: error.error.message,
|
|
6851
|
+
stack: error.stack,
|
|
6852
|
+
});
|
|
6863
6853
|
|
|
6864
6854
|
// Verify pstnCorrelationId was cleared after error
|
|
6865
6855
|
assert.equal(meeting.pstnCorrelationId, undefined);
|
|
@@ -6904,7 +6894,7 @@ describe('plugin-meetings', () => {
|
|
|
6904
6894
|
|
|
6905
6895
|
// Verify that pstnCorrelationId is still cleared even when no phone connection is active
|
|
6906
6896
|
assert.equal(meeting.pstnCorrelationId, undefined);
|
|
6907
|
-
|
|
6897
|
+
// And verify no disconnect was attempted
|
|
6908
6898
|
assert.notCalled(MeetingUtil.disconnectPhoneAudio);
|
|
6909
6899
|
});
|
|
6910
6900
|
});
|
|
@@ -10481,24 +10471,6 @@ describe('plugin-meetings', () => {
|
|
|
10481
10471
|
);
|
|
10482
10472
|
});
|
|
10483
10473
|
|
|
10484
|
-
it('listens to CONTROLS_AUTO_END_MEETING_WARNING_CHANGED', async () => {
|
|
10485
|
-
const state = {example: 'value'};
|
|
10486
|
-
|
|
10487
|
-
await meeting.locusInfo.emitScoped(
|
|
10488
|
-
{function: 'test', file: 'test'},
|
|
10489
|
-
LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED,
|
|
10490
|
-
{state}
|
|
10491
|
-
);
|
|
10492
|
-
|
|
10493
|
-
assert.calledWith(
|
|
10494
|
-
TriggerProxy.trigger,
|
|
10495
|
-
meeting,
|
|
10496
|
-
{file: 'meeting/index', function: 'setupLocusControlsListener'},
|
|
10497
|
-
EVENT_TRIGGERS.MEETING_CONTROLS_AUTO_END_MEETING_WARNING_UPDATED,
|
|
10498
|
-
{state}
|
|
10499
|
-
);
|
|
10500
|
-
});
|
|
10501
|
-
|
|
10502
10474
|
it('listens to CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED', async () => {
|
|
10503
10475
|
const state = {example: 'value'};
|
|
10504
10476
|
|
|
@@ -10578,7 +10550,6 @@ describe('plugin-meetings', () => {
|
|
|
10578
10550
|
describe('#setUpLocusUrlListener', () => {
|
|
10579
10551
|
it('listens to the locus url update event', (done) => {
|
|
10580
10552
|
const newLocusUrl = 'newLocusUrl/12345';
|
|
10581
|
-
const payload = {url: newLocusUrl};
|
|
10582
10553
|
|
|
10583
10554
|
meeting.members = {locusUrlUpdate: sinon.stub().returns(Promise.resolve(test1))};
|
|
10584
10555
|
meeting.recordingController = {setLocusUrl: sinon.stub().returns(undefined)};
|
|
@@ -10592,14 +10563,14 @@ describe('plugin-meetings', () => {
|
|
|
10592
10563
|
meeting.locusInfo.emit(
|
|
10593
10564
|
{function: 'test', file: 'test'},
|
|
10594
10565
|
'LOCUS_INFO_UPDATE_URL',
|
|
10595
|
-
|
|
10566
|
+
newLocusUrl
|
|
10596
10567
|
);
|
|
10597
10568
|
assert.calledWith(meeting.members.locusUrlUpdate, newLocusUrl);
|
|
10598
10569
|
assert.calledOnceWithExactly(meeting.breakouts.locusUrlUpdate, newLocusUrl);
|
|
10599
10570
|
assert.calledOnceWithExactly(meeting.annotation.locusUrlUpdate, newLocusUrl);
|
|
10600
10571
|
assert.calledWith(meeting.members.locusUrlUpdate, newLocusUrl);
|
|
10601
10572
|
assert.calledWith(meeting.recordingController.setLocusUrl, newLocusUrl);
|
|
10602
|
-
assert.calledWith(meeting.controlsOptionsManager.setLocusUrl, newLocusUrl
|
|
10573
|
+
assert.calledWith(meeting.controlsOptionsManager.setLocusUrl, newLocusUrl);
|
|
10603
10574
|
assert.calledWith(meeting.simultaneousInterpretation.locusUrlUpdate, newLocusUrl);
|
|
10604
10575
|
assert.calledWith(meeting.webinar.locusUrlUpdate, newLocusUrl);
|
|
10605
10576
|
assert.equal(meeting.locusUrl, newLocusUrl);
|
|
@@ -10617,22 +10588,6 @@ describe('plugin-meetings', () => {
|
|
|
10617
10588
|
{locusUrl: 'newLocusUrl/12345'}
|
|
10618
10589
|
);
|
|
10619
10590
|
|
|
10620
|
-
done();
|
|
10621
|
-
});
|
|
10622
|
-
it('update mainLocusUrl for controlsOptionManager if payload.isMainLocus as true', (done) => {
|
|
10623
|
-
const newLocusUrl = 'newLocusUrl/12345';
|
|
10624
|
-
const payload = {url: newLocusUrl, isMainLocus: true};
|
|
10625
|
-
|
|
10626
|
-
meeting.controlsOptionsManager = {setLocusUrl: sinon.stub().returns(undefined)};
|
|
10627
|
-
|
|
10628
|
-
meeting.locusInfo.emit(
|
|
10629
|
-
{function: 'test', file: 'test'},
|
|
10630
|
-
'LOCUS_INFO_UPDATE_URL',
|
|
10631
|
-
payload
|
|
10632
|
-
);
|
|
10633
|
-
|
|
10634
|
-
assert.calledWith(meeting.controlsOptionsManager.setLocusUrl, newLocusUrl, true);
|
|
10635
|
-
|
|
10636
10591
|
done();
|
|
10637
10592
|
});
|
|
10638
10593
|
});
|
|
@@ -10853,9 +10808,7 @@ describe('plugin-meetings', () => {
|
|
|
10853
10808
|
meeting.meetingRequest.changeMeetingFloor = sinon.stub().returns(Promise.resolve());
|
|
10854
10809
|
(meeting.deviceUrl = 'deviceUrl.com'), (meeting.localShareInstanceId = '1234-5678');
|
|
10855
10810
|
webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp = sinon.stub();
|
|
10856
|
-
webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon
|
|
10857
|
-
.stub()
|
|
10858
|
-
.returns(1000);
|
|
10811
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon.stub().returns(1000);
|
|
10859
10812
|
});
|
|
10860
10813
|
it('should call changeMeetingFloor()', async () => {
|
|
10861
10814
|
meeting.screenShareFloorState = 'GRANTED';
|
|
@@ -11473,7 +11426,6 @@ describe('plugin-meetings', () => {
|
|
|
11473
11426
|
let canShareWhiteBoardSpy;
|
|
11474
11427
|
let canMoveToLobbySpy;
|
|
11475
11428
|
let isSpokenLanguageAutoDetectionEnabledSpy;
|
|
11476
|
-
let showAutoEndMeetingWarningSpy;
|
|
11477
11429
|
// Due to import tree issues, hasHints must be stubed within the scope of the `it`.
|
|
11478
11430
|
|
|
11479
11431
|
beforeEach(() => {
|
|
@@ -11505,17 +11457,13 @@ describe('plugin-meetings', () => {
|
|
|
11505
11457
|
canUserRenameOthersSpy = sinon.spy(MeetingUtil, 'canUserRenameOthers');
|
|
11506
11458
|
canShareWhiteBoardSpy = sinon.spy(MeetingUtil, 'canShareWhiteBoard');
|
|
11507
11459
|
canMoveToLobbySpy = sinon.spy(MeetingUtil, 'canMoveToLobby');
|
|
11508
|
-
|
|
11509
|
-
|
|
11510
|
-
MeetingUtil,
|
|
11511
|
-
'isSpokenLanguageAutoDetectionEnabled'
|
|
11512
|
-
);
|
|
11460
|
+
isSpokenLanguageAutoDetectionEnabledSpy = sinon.spy(MeetingUtil, 'isSpokenLanguageAutoDetectionEnabled');
|
|
11461
|
+
|
|
11513
11462
|
});
|
|
11514
11463
|
|
|
11515
11464
|
afterEach(() => {
|
|
11516
11465
|
inMeetingActionsSetSpy.restore();
|
|
11517
11466
|
waitingForOthersToJoinSpy.restore();
|
|
11518
|
-
showAutoEndMeetingWarningSpy.restore();
|
|
11519
11467
|
});
|
|
11520
11468
|
|
|
11521
11469
|
forEach(
|
|
@@ -12063,7 +12011,6 @@ describe('plugin-meetings', () => {
|
|
|
12063
12011
|
assert.calledWith(canUserRenameOthersSpy, userDisplayHints);
|
|
12064
12012
|
assert.calledWith(canShareWhiteBoardSpy, userDisplayHints, selfUserPolicies);
|
|
12065
12013
|
assert.calledWith(canMoveToLobbySpy, userDisplayHints);
|
|
12066
|
-
assert.calledWith(showAutoEndMeetingWarningSpy, userDisplayHints);
|
|
12067
12014
|
assert.calledWith(isSpokenLanguageAutoDetectionEnabledSpy, userDisplayHints);
|
|
12068
12015
|
|
|
12069
12016
|
assert.calledWith(ControlsOptionsUtil.hasHints, {
|
|
@@ -12516,9 +12463,7 @@ describe('plugin-meetings', () => {
|
|
|
12516
12463
|
meeting.meetingRequest.changeMeetingFloor = sinon.stub().returns(Promise.resolve());
|
|
12517
12464
|
meeting.deviceUrl = 'deviceUrl.com';
|
|
12518
12465
|
webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp = sinon.stub();
|
|
12519
|
-
webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon
|
|
12520
|
-
.stub()
|
|
12521
|
-
.returns(1000);
|
|
12466
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon.stub().returns(1000);
|
|
12522
12467
|
webex.internal.newMetrics.submitClientEvent = sinon.stub();
|
|
12523
12468
|
});
|
|
12524
12469
|
it('should stop the whiteboard share', async () => {
|
|
@@ -12622,9 +12567,7 @@ describe('plugin-meetings', () => {
|
|
|
12622
12567
|
meeting.deviceUrl = 'my-web-url';
|
|
12623
12568
|
meeting.locusInfo.info = {isWebinar: false};
|
|
12624
12569
|
webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp = sinon.stub();
|
|
12625
|
-
webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon
|
|
12626
|
-
.stub()
|
|
12627
|
-
.returns(1500);
|
|
12570
|
+
webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon.stub().returns(1500);
|
|
12628
12571
|
webex.internal.newMetrics.submitClientEvent = sinon.stub();
|
|
12629
12572
|
});
|
|
12630
12573
|
|
|
@@ -12873,8 +12816,8 @@ describe('plugin-meetings', () => {
|
|
|
12873
12816
|
|
|
12874
12817
|
shareStatus =
|
|
12875
12818
|
meeting.webinar.selfIsAttendee || meeting.guest
|
|
12876
|
-
|
|
12877
|
-
|
|
12819
|
+
? SHARE_STATUS.REMOTE_SHARE_ACTIVE
|
|
12820
|
+
: SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
|
|
12878
12821
|
}
|
|
12879
12822
|
|
|
12880
12823
|
if (eventTrigger.member) {
|
|
@@ -13820,32 +13763,32 @@ describe('plugin-meetings', () => {
|
|
|
13820
13763
|
});
|
|
13821
13764
|
});
|
|
13822
13765
|
|
|
13823
|
-
|
|
13824
|
-
|
|
13825
|
-
|
|
13826
|
-
|
|
13827
|
-
|
|
13828
|
-
|
|
13829
|
-
|
|
13766
|
+
describe('handleShareVideoStreamMuteStateChange', () => {
|
|
13767
|
+
it('should emit MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE event with correct fields', () => {
|
|
13768
|
+
meeting.isMultistream = true;
|
|
13769
|
+
meeting.statsAnalyzer = {shareVideoEncoderImplementation: 'OpenH264'};
|
|
13770
|
+
meeting.mediaProperties.shareVideoStream = {
|
|
13771
|
+
getSettings: sinon.stub().returns({displaySurface: 'monitor', frameRate: 30}),
|
|
13772
|
+
};
|
|
13830
13773
|
|
|
13831
|
-
|
|
13774
|
+
meeting.handleShareVideoStreamMuteStateChange(true);
|
|
13832
13775
|
|
|
13833
|
-
|
|
13834
|
-
|
|
13835
|
-
|
|
13836
|
-
|
|
13837
|
-
|
|
13838
|
-
|
|
13839
|
-
|
|
13840
|
-
|
|
13841
|
-
|
|
13842
|
-
|
|
13843
|
-
|
|
13844
|
-
|
|
13845
|
-
});
|
|
13776
|
+
assert.calledOnceWithExactly(
|
|
13777
|
+
Metrics.sendBehavioralMetric,
|
|
13778
|
+
BEHAVIORAL_METRICS.MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE,
|
|
13779
|
+
{
|
|
13780
|
+
correlationId: meeting.correlationId,
|
|
13781
|
+
muted: true,
|
|
13782
|
+
encoderImplementation: 'OpenH264',
|
|
13783
|
+
displaySurface: 'monitor',
|
|
13784
|
+
isMultistream: true,
|
|
13785
|
+
frameRate: 30,
|
|
13786
|
+
}
|
|
13787
|
+
);
|
|
13846
13788
|
});
|
|
13847
13789
|
});
|
|
13848
13790
|
});
|
|
13791
|
+
});
|
|
13849
13792
|
|
|
13850
13793
|
describe('#startKeepAlive', () => {
|
|
13851
13794
|
let clock;
|
|
@@ -15044,9 +14987,11 @@ describe('plugin-meetings', () => {
|
|
|
15044
14987
|
assert.exists(unsetStagePromise.then);
|
|
15045
14988
|
await unsetStagePromise;
|
|
15046
14989
|
|
|
15047
|
-
assert.calledOnceWithExactly(
|
|
15048
|
-
|
|
15049
|
-
|
|
14990
|
+
assert.calledOnceWithExactly(
|
|
14991
|
+
meeting.meetingRequest.synchronizeStage,
|
|
14992
|
+
locusUrl,
|
|
14993
|
+
{overrideDefault: false}
|
|
14994
|
+
);
|
|
15050
14995
|
});
|
|
15051
14996
|
});
|
|
15052
14997
|
|
|
@@ -15071,54 +15016,8 @@ describe('plugin-meetings', () => {
|
|
|
15071
15016
|
meeting.meetingInfo.siteFullUrl,
|
|
15072
15017
|
meeting.locusId,
|
|
15073
15018
|
meetingUuid,
|
|
15074
|
-
displayName
|
|
15075
|
-
);
|
|
15076
|
-
});
|
|
15077
|
-
});
|
|
15078
|
-
|
|
15079
|
-
describe('#sipCallOut', () => {
|
|
15080
|
-
beforeEach(() => {
|
|
15081
|
-
meeting.meetingRequest.sipCallOut = sinon.stub().returns(Promise.resolve({body: {}}));
|
|
15082
|
-
});
|
|
15083
|
-
|
|
15084
|
-
it('sends the expected request', async () => {
|
|
15085
|
-
const address = 'sip:user@example.com';
|
|
15086
|
-
const displayName = 'John Doe';
|
|
15087
|
-
const meetingId = 'a643beaa47f04eedac08f1310ca12366';
|
|
15088
|
-
|
|
15089
|
-
meeting.meetingInfo = {
|
|
15090
|
-
meetingId,
|
|
15091
|
-
};
|
|
15092
|
-
|
|
15093
|
-
const sipCallOutPromise = meeting.sipCallOut(address, displayName);
|
|
15094
|
-
|
|
15095
|
-
assert.exists(sipCallOutPromise.then);
|
|
15096
|
-
await sipCallOutPromise;
|
|
15097
|
-
|
|
15098
|
-
assert.calledOnceWithExactly(
|
|
15099
|
-
meeting.meetingRequest.sipCallOut,
|
|
15100
|
-
meetingId,
|
|
15101
|
-
meetingId,
|
|
15102
|
-
address,
|
|
15103
|
-
displayName
|
|
15019
|
+
displayName,
|
|
15104
15020
|
);
|
|
15105
15021
|
});
|
|
15106
15022
|
});
|
|
15107
|
-
|
|
15108
|
-
describe('#cancelSipCallOut', () => {
|
|
15109
|
-
beforeEach(() => {
|
|
15110
|
-
meeting.meetingRequest.cancelSipCallOut = sinon.stub().returns(Promise.resolve({body: {}}));
|
|
15111
|
-
});
|
|
15112
|
-
|
|
15113
|
-
it('sends the expected request', async () => {
|
|
15114
|
-
const participantId = '12345-abcde';
|
|
15115
|
-
|
|
15116
|
-
const cancelSipCallOutPromise = meeting.cancelSipCallOut(participantId);
|
|
15117
|
-
|
|
15118
|
-
assert.exists(cancelSipCallOutPromise.then);
|
|
15119
|
-
await cancelSipCallOutPromise;
|
|
15120
|
-
|
|
15121
|
-
assert.calledOnceWithExactly(meeting.meetingRequest.cancelSipCallOut, participantId);
|
|
15122
|
-
});
|
|
15123
|
-
});
|
|
15124
15023
|
});
|
|
@@ -975,8 +975,6 @@ describe('plugin-meetings', () => {
|
|
|
975
975
|
{functionName: 'isLocalRecordingStarted',displayHint:'LOCAL_RECORDING_STATUS_STARTED'},
|
|
976
976
|
{functionName: 'isLocalRecordingStopped', displayHint: 'LOCAL_RECORDING_STATUS_STOPPED'},
|
|
977
977
|
{functionName: 'isLocalRecordingPaused', displayHint: 'LOCAL_RECORDING_STATUS_PAUSED'},
|
|
978
|
-
{functionName: 'isLocalStreamingStarted',displayHint:'STREAMING_STATUS_STARTED'},
|
|
979
|
-
{functionName: 'isLocalStreamingStopped', displayHint: 'STREAMING_STATUS_STOPPED'},
|
|
980
978
|
|
|
981
979
|
{functionName: 'isManualCaptionActive', displayHint: 'MANUAL_CAPTION_STATUS_ACTIVE'},
|
|
982
980
|
|
|
@@ -987,7 +985,6 @@ describe('plugin-meetings', () => {
|
|
|
987
985
|
{functionName: 'isRealTimeTranslationEnabled', displayHint: 'DISPLAY_REAL_TIME_TRANSLATION'},
|
|
988
986
|
{functionName: 'canSelectSpokenLanguages', displayHint: 'DISPLAY_NON_ENGLISH_ASR'},
|
|
989
987
|
{functionName: 'waitingForOthersToJoin', displayHint: 'WAITING_FOR_OTHERS'},
|
|
990
|
-
{functionName: 'showAutoEndMeetingWarning', displayHint: 'SHOW_AUTO_END_MEETING_WARNING'},
|
|
991
988
|
].forEach(({functionName, displayHint}) => {
|
|
992
989
|
describe(functionName, () => {
|
|
993
990
|
it('works as expected', () => {
|
|
@@ -690,9 +690,11 @@ describe('plugin-meetings', () => {
|
|
|
690
690
|
assert.deepEqual(result.options, {
|
|
691
691
|
mode: 'BLUR',
|
|
692
692
|
blurStrength: 'STRONG',
|
|
693
|
+
generator: 'worker',
|
|
693
694
|
quality: 'LOW',
|
|
694
695
|
authToken: 'fake_token',
|
|
695
696
|
mirror: false,
|
|
697
|
+
canvasResolutionScaling: 1,
|
|
696
698
|
});
|
|
697
699
|
assert.exists(result.enable);
|
|
698
700
|
assert.exists(result.disable);
|