@webex/plugin-meetings 3.6.0 → 3.7.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/README.md +2 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/webinar-registration-error.js +50 -0
- package/dist/common/errors/webinar-registration-error.js.map +1 -0
- package/dist/config.js +3 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +31 -2
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +1 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +10 -3
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +12 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +7 -0
- 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 +28 -4
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +2 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/index.js +61 -3
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/parser.js +5 -1
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +19 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +664 -490
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +5 -2
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/util.js +3 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +68 -17
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meetings/index.js +25 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/members/index.js +3 -2
- package/dist/members/index.js.map +1 -1
- package/dist/members/util.js +9 -5
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/remoteMedia.js +4 -0
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +19 -13
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/reachability/index.js +3 -3
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +2 -1
- package/dist/reachability/request.js.map +1 -1
- package/dist/roap/request.js +1 -1
- package/dist/roap/request.js.map +1 -1
- package/dist/{common/errors/parameter.d.ts → types/common/errors/webinar-registration-error.d.ts} +4 -5
- package/dist/types/config.d.ts +2 -0
- package/dist/types/constants.d.ts +25 -0
- package/dist/types/controls-options-manager/enums.d.ts +2 -1
- package/dist/types/controls-options-manager/index.d.ts +2 -1
- package/dist/types/controls-options-manager/types.d.ts +2 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/locus-info/index.d.ts +9 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +18 -0
- package/dist/types/meeting/index.d.ts +12 -1
- package/dist/types/meeting/muteState.d.ts +2 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
- package/dist/types/meetings/index.d.ts +9 -0
- package/dist/types/members/index.d.ts +2 -1
- package/dist/types/members/util.d.ts +3 -1
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/types/multistream/remoteMedia.d.ts +1 -0
- package/dist/webinar/index.js +32 -19
- package/dist/webinar/index.js.map +1 -1
- package/package.json +22 -22
- package/src/common/errors/webinar-registration-error.ts +27 -0
- package/src/config.ts +2 -0
- package/src/constants.ts +31 -0
- package/src/controls-options-manager/enums.ts +1 -0
- package/src/controls-options-manager/index.ts +19 -2
- package/src/controls-options-manager/types.ts +2 -0
- package/src/controls-options-manager/util.ts +12 -0
- package/src/index.ts +2 -0
- package/src/locus-info/controlsUtils.ts +46 -2
- package/src/locus-info/fullState.ts +1 -0
- package/src/locus-info/index.ts +60 -0
- package/src/locus-info/parser.ts +8 -1
- package/src/meeting/in-meeting-actions.ts +37 -0
- package/src/meeting/index.ts +154 -20
- package/src/meeting/muteState.ts +6 -2
- package/src/meeting/util.ts +6 -2
- package/src/meeting-info/meeting-info-v2.ts +51 -0
- package/src/meetings/index.ts +68 -40
- package/src/members/index.ts +4 -2
- package/src/members/util.ts +3 -1
- package/src/metrics/constants.ts +1 -0
- package/src/multistream/remoteMedia.ts +5 -0
- package/src/reachability/index.ts +3 -3
- package/src/reachability/request.ts +1 -0
- package/src/roap/request.ts +3 -1
- package/src/webinar/index.ts +31 -17
- package/test/unit/spec/controls-options-manager/index.js +56 -32
- package/test/unit/spec/controls-options-manager/util.js +44 -0
- package/test/unit/spec/locus-info/controlsUtils.js +80 -4
- package/test/unit/spec/locus-info/index.js +88 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +18 -0
- package/test/unit/spec/meeting/index.js +263 -64
- package/test/unit/spec/meeting/muteState.js +8 -4
- package/test/unit/spec/meeting/utils.js +16 -1
- package/test/unit/spec/meeting-info/meetinginfov2.js +37 -0
- package/test/unit/spec/meetings/index.js +32 -1
- package/test/unit/spec/members/index.js +25 -2
- package/test/unit/spec/members/request.js +37 -3
- package/test/unit/spec/members/utils.js +15 -1
- package/test/unit/spec/multistream/remoteMedia.ts +16 -2
- package/test/unit/spec/reachability/index.ts +1 -1
- package/test/unit/spec/reachability/request.js +13 -8
- package/test/unit/spec/webinar/index.ts +82 -16
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/index.d.ts +0 -117
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/common/browser-detection.d.ts +0 -9
- package/dist/common/collection.d.ts +0 -48
- package/dist/common/config.d.ts +0 -2
- package/dist/common/errors/captcha-error.d.ts +0 -15
- package/dist/common/errors/intent-to-join.d.ts +0 -16
- package/dist/common/errors/join-meeting.d.ts +0 -17
- package/dist/common/errors/media.d.ts +0 -15
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/password-error.d.ts +0 -15
- package/dist/common/errors/permission.d.ts +0 -14
- package/dist/common/errors/reclaim-host-role-error.js +0 -149
- package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
- package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/common/errors/reconnection-in-progress.js +0 -33
- package/dist/common/errors/reconnection-in-progress.js.map +0 -1
- package/dist/common/errors/reconnection.d.ts +0 -15
- package/dist/common/errors/stats.d.ts +0 -15
- package/dist/common/errors/webex-errors.d.ts +0 -93
- package/dist/common/errors/webex-meetings-error.d.ts +0 -20
- package/dist/common/events/events-scope.d.ts +0 -17
- package/dist/common/events/events.d.ts +0 -12
- package/dist/common/events/trigger-proxy.d.ts +0 -2
- package/dist/common/events/util.d.ts +0 -2
- package/dist/common/logs/logger-config.d.ts +0 -2
- package/dist/common/logs/logger-proxy.d.ts +0 -2
- package/dist/common/logs/request.d.ts +0 -36
- package/dist/common/queue.d.ts +0 -34
- package/dist/config.d.ts +0 -72
- package/dist/constants.d.ts +0 -1088
- package/dist/controls-options-manager/constants.d.ts +0 -4
- package/dist/controls-options-manager/enums.d.ts +0 -15
- package/dist/controls-options-manager/index.d.ts +0 -136
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/util.d.ts +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/locus-info/controlsUtils.d.ts +0 -2
- package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
- package/dist/locus-info/fullState.d.ts +0 -2
- package/dist/locus-info/hostUtils.d.ts +0 -2
- package/dist/locus-info/index.d.ts +0 -322
- package/dist/locus-info/infoUtils.d.ts +0 -2
- package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
- package/dist/locus-info/parser.d.ts +0 -272
- package/dist/locus-info/selfUtils.d.ts +0 -2
- package/dist/media/index.d.ts +0 -34
- package/dist/media/properties.d.ts +0 -93
- package/dist/media/util.d.ts +0 -2
- package/dist/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/mediaQualityMetrics/config.js +0 -502
- package/dist/mediaQualityMetrics/config.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/meeting/in-meeting-actions.d.ts +0 -167
- package/dist/meeting/index.d.ts +0 -1825
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/muteState.d.ts +0 -178
- package/dist/meeting/request.d.ts +0 -295
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/state.d.ts +0 -9
- package/dist/meeting/util.d.ts +0 -119
- package/dist/meeting/voicea-meeting.d.ts +0 -16
- package/dist/meeting-info/collection.d.ts +0 -20
- package/dist/meeting-info/index.d.ts +0 -69
- package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
- package/dist/meeting-info/request.d.ts +0 -22
- package/dist/meeting-info/util.d.ts +0 -2
- package/dist/meeting-info/utilv2.d.ts +0 -2
- package/dist/meetings/collection.d.ts +0 -40
- package/dist/meetings/index.d.ts +0 -390
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/request.d.ts +0 -27
- package/dist/meetings/util.d.ts +0 -18
- package/dist/member/index.d.ts +0 -160
- package/dist/member/member.types.js +0 -17
- package/dist/member/member.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/util.d.ts +0 -2
- package/dist/members/collection.d.ts +0 -29
- package/dist/members/index.d.ts +0 -353
- package/dist/members/request.d.ts +0 -114
- package/dist/members/types.d.ts +0 -25
- package/dist/members/util.d.ts +0 -215
- package/dist/metrics/config.js +0 -276
- package/dist/metrics/config.js.map +0 -1
- package/dist/metrics/constants.d.ts +0 -70
- package/dist/metrics/index.d.ts +0 -45
- package/dist/multistream/mediaRequestManager.d.ts +0 -119
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMediaGroup.d.ts +0 -49
- package/dist/multistream/remoteMediaManager.d.ts +0 -300
- package/dist/multistream/sendSlotManager.d.ts +0 -69
- package/dist/networkQualityMonitor/index.d.ts +0 -70
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -109
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/personal-meeting-room/index.d.ts +0 -47
- package/dist/personal-meeting-room/request.d.ts +0 -14
- package/dist/personal-meeting-room/util.d.ts +0 -2
- package/dist/reachability/clusterReachability.d.ts +0 -109
- package/dist/reachability/index.d.ts +0 -105
- package/dist/reachability/request.d.ts +0 -39
- package/dist/reachability/util.d.ts +0 -8
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/reactions.d.ts +0 -4
- package/dist/reactions/reactions.type.d.ts +0 -52
- package/dist/reconnection-manager/index.d.ts +0 -136
- package/dist/recording-controller/enums.d.ts +0 -7
- package/dist/recording-controller/index.d.ts +0 -207
- package/dist/recording-controller/util.d.ts +0 -14
- package/dist/roap/collection.js +0 -62
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.js +0 -275
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/index.d.ts +0 -86
- package/dist/roap/request.d.ts +0 -39
- package/dist/roap/state.js +0 -126
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/turnDiscovery.d.ts +0 -155
- package/dist/roap/util.js +0 -75
- package/dist/roap/util.js.map +0 -1
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/index.d.ts +0 -61
- package/dist/statsAnalyzer/global.d.ts +0 -36
- package/dist/statsAnalyzer/global.js +0 -126
- package/dist/statsAnalyzer/global.js.map +0 -1
- package/dist/statsAnalyzer/index.d.ts +0 -217
- package/dist/statsAnalyzer/index.js +0 -1013
- package/dist/statsAnalyzer/index.js.map +0 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/statsAnalyzer/mqaUtil.js +0 -179
- package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
- package/dist/transcription/index.d.ts +0 -64
- package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/types/statsAnalyzer/global.d.ts +0 -36
- package/dist/types/statsAnalyzer/index.d.ts +0 -217
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/index.d.ts +0 -5
|
@@ -154,10 +154,10 @@ export default class Reachability extends EventsScope {
|
|
|
154
154
|
try {
|
|
155
155
|
this.lastTrigger = trigger;
|
|
156
156
|
|
|
157
|
-
// kick off ip version detection.
|
|
158
|
-
//
|
|
157
|
+
// kick off ip version detection. We don't await it, as we don't want to waste time
|
|
158
|
+
// and if it fails, that's ok we can still carry on
|
|
159
159
|
// @ts-ignore
|
|
160
|
-
this.webex.internal.device.ipNetworkDetector.detect();
|
|
160
|
+
this.webex.internal.device.ipNetworkDetector.detect(true);
|
|
161
161
|
|
|
162
162
|
const {clusters, joinCookie} = await this.getClusters();
|
|
163
163
|
|
package/src/roap/request.ts
CHANGED
|
@@ -79,7 +79,9 @@ export default class RoapRequest extends StatelessWebexPlugin {
|
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
LoggerProxy.logger.info(
|
|
82
|
-
`Roap:request#sendRoap --> ${
|
|
82
|
+
`Roap:request#sendRoap --> ${roapMessage.messageType} seq:${roapMessage.seq} ${
|
|
83
|
+
ipVersion ? `ipver=${ipVersion} ` : ''
|
|
84
|
+
} ${locusSelfUrl}`
|
|
83
85
|
);
|
|
84
86
|
|
|
85
87
|
return locusMediaRequest
|
package/src/webinar/index.ts
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
* Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
|
|
3
3
|
*/
|
|
4
4
|
import {WebexPlugin} from '@webex/webex-core';
|
|
5
|
-
import {
|
|
5
|
+
import {get} from 'lodash';
|
|
6
|
+
import {MEETINGS, SELF_ROLES} from '../constants';
|
|
6
7
|
|
|
7
8
|
import WebinarCollection from './collection';
|
|
8
9
|
|
|
@@ -17,14 +18,15 @@ const Webinar = WebexPlugin.extend({
|
|
|
17
18
|
|
|
18
19
|
props: {
|
|
19
20
|
locusUrl: 'string', // appears current webinar's locus url
|
|
20
|
-
|
|
21
|
-
webinarAttendeesSearchingUrl: 'string', // current webinarAttendeesSearching url
|
|
21
|
+
webcastInstanceUrl: 'string', // current webinar's webcast instance url
|
|
22
22
|
canManageWebcast: 'boolean', // appears the ability to manage webcast
|
|
23
|
+
selfIsPanelist: 'boolean', // self is panelist
|
|
24
|
+
selfIsAttendee: 'boolean', // self is attendee
|
|
23
25
|
},
|
|
24
26
|
|
|
25
27
|
/**
|
|
26
28
|
* Update the current locus url of the webinar
|
|
27
|
-
* @param {string} locusUrl
|
|
29
|
+
* @param {string} locusUrl
|
|
28
30
|
* @returns {void}
|
|
29
31
|
*/
|
|
30
32
|
locusUrlUpdate(locusUrl) {
|
|
@@ -32,21 +34,12 @@ const Webinar = WebexPlugin.extend({
|
|
|
32
34
|
},
|
|
33
35
|
|
|
34
36
|
/**
|
|
35
|
-
* Update the current webcast url of the meeting
|
|
36
|
-
* @param {
|
|
37
|
+
* Update the current webcast instance url of the meeting
|
|
38
|
+
* @param {object} payload
|
|
37
39
|
* @returns {void}
|
|
38
40
|
*/
|
|
39
|
-
|
|
40
|
-
this.set('
|
|
41
|
-
},
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Update the current webinarAttendeesSearching url of the meeting
|
|
45
|
-
* @param {string} webinarAttendeesSearchingUrl // webinarAttendeesSearching url
|
|
46
|
-
* @returns {void}
|
|
47
|
-
*/
|
|
48
|
-
webinarAttendeesSearchingUrlUpdate(webinarAttendeesSearchingUrl) {
|
|
49
|
-
this.set('webinarAttendeesSearchingUrl', webinarAttendeesSearchingUrl);
|
|
41
|
+
updateWebcastUrl(payload) {
|
|
42
|
+
this.set('webcastInstanceUrl', get(payload, 'resources.webcastInstance.url'));
|
|
50
43
|
},
|
|
51
44
|
|
|
52
45
|
/**
|
|
@@ -57,6 +50,27 @@ const Webinar = WebexPlugin.extend({
|
|
|
57
50
|
updateCanManageWebcast(canManageWebcast) {
|
|
58
51
|
this.set('canManageWebcast', canManageWebcast);
|
|
59
52
|
},
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Updates user roles and manages associated state transitions
|
|
56
|
+
* @param {object} payload
|
|
57
|
+
* @param {string[]} payload.oldRoles - Previous roles of the user
|
|
58
|
+
* @param {string[]} payload.newRoles - New roles of the user
|
|
59
|
+
* @returns {{isPromoted: boolean, isDemoted: boolean}} Role transition states
|
|
60
|
+
*/
|
|
61
|
+
updateRoleChanged(payload) {
|
|
62
|
+
const isPromoted =
|
|
63
|
+
get(payload, 'oldRoles', []).includes(SELF_ROLES.ATTENDEE) &&
|
|
64
|
+
get(payload, 'newRoles', []).includes(SELF_ROLES.PANELIST);
|
|
65
|
+
const isDemoted =
|
|
66
|
+
get(payload, 'oldRoles', []).includes(SELF_ROLES.PANELIST) &&
|
|
67
|
+
get(payload, 'newRoles', []).includes(SELF_ROLES.ATTENDEE);
|
|
68
|
+
this.set('selfIsPanelist', get(payload, 'newRoles', []).includes(SELF_ROLES.PANELIST));
|
|
69
|
+
this.set('selfIsAttendee', get(payload, 'newRoles', []).includes(SELF_ROLES.ATTENDEE));
|
|
70
|
+
this.updateCanManageWebcast(get(payload, 'newRoles', []).includes(SELF_ROLES.MODERATOR));
|
|
71
|
+
|
|
72
|
+
return {isPromoted, isDemoted};
|
|
73
|
+
},
|
|
60
74
|
});
|
|
61
75
|
|
|
62
76
|
export default Webinar;
|
|
@@ -22,7 +22,7 @@ describe('plugin-meetings', () => {
|
|
|
22
22
|
|
|
23
23
|
describe('Mute On Entry', () => {
|
|
24
24
|
let manager;
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
beforeEach(() => {
|
|
27
27
|
request = {
|
|
28
28
|
request: sinon.stub().returns(Promise.resolve()),
|
|
@@ -37,85 +37,85 @@ describe('plugin-meetings', () => {
|
|
|
37
37
|
});
|
|
38
38
|
|
|
39
39
|
describe('setMuteOnEntry', () => {
|
|
40
|
-
it('rejects when correct display hint is not present enabled=false', () => {
|
|
40
|
+
it('rejects when correct display hint is not present enabled=false', () => {
|
|
41
41
|
const result = manager.setMuteOnEntry(false);
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
assert.notCalled(request.request);
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
assert.isRejected(result);
|
|
46
46
|
});
|
|
47
47
|
|
|
48
|
-
it('rejects when correct display hint is not present enabled=true', () => {
|
|
48
|
+
it('rejects when correct display hint is not present enabled=true', () => {
|
|
49
49
|
const result = manager.setMuteOnEntry(true);
|
|
50
|
-
|
|
50
|
+
|
|
51
51
|
assert.notCalled(request.request);
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
assert.isRejected(result);
|
|
54
54
|
});
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
it('can set mute on entry when the display hint is available enabled=true', () => {
|
|
57
57
|
manager.setDisplayHints(['ENABLE_MUTE_ON_ENTRY']);
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
const result = manager.setMuteOnEntry(true);
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
assert.calledWith(request.request, { uri: 'test/id/controls',
|
|
62
62
|
body: { muteOnEntry: { enabled: true } },
|
|
63
63
|
method: HTTP_VERBS.PATCH});
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
assert.deepEqual(result, request.request.firstCall.returnValue);
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
it('can set mute on entry when the display hint is available enabled=false', () => {
|
|
69
69
|
manager.setDisplayHints(['DISABLE_MUTE_ON_ENTRY']);
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
const result = manager.setMuteOnEntry(false);
|
|
72
|
-
|
|
72
|
+
|
|
73
73
|
assert.calledWith(request.request, { uri: 'test/id/controls',
|
|
74
74
|
body: { muteOnEntry: { enabled: false } },
|
|
75
75
|
method: HTTP_VERBS.PATCH});
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
assert.deepEqual(result, request.request.firstCall.returnValue);
|
|
78
78
|
});
|
|
79
79
|
});
|
|
80
80
|
|
|
81
81
|
describe('setDisallowUnmute', () => {
|
|
82
|
-
it('rejects when correct display hint is not present enabled=false', () => {
|
|
82
|
+
it('rejects when correct display hint is not present enabled=false', () => {
|
|
83
83
|
const result = manager.setDisallowUnmute(false);
|
|
84
|
-
|
|
84
|
+
|
|
85
85
|
assert.notCalled(request.request);
|
|
86
|
-
|
|
86
|
+
|
|
87
87
|
assert.isRejected(result);
|
|
88
88
|
});
|
|
89
89
|
|
|
90
|
-
it('rejects when correct display hint is not present enabled=true', () => {
|
|
90
|
+
it('rejects when correct display hint is not present enabled=true', () => {
|
|
91
91
|
const result = manager.setDisallowUnmute(true);
|
|
92
|
-
|
|
92
|
+
|
|
93
93
|
assert.notCalled(request.request);
|
|
94
|
-
|
|
94
|
+
|
|
95
95
|
assert.isRejected(result);
|
|
96
96
|
});
|
|
97
|
-
|
|
98
|
-
it('can set
|
|
97
|
+
|
|
98
|
+
it('can set disallow unmute when ENABLE_HARD_MUTE display hint is available', () => {
|
|
99
99
|
manager.setDisplayHints(['ENABLE_HARD_MUTE']);
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
const result = manager.setDisallowUnmute(true);
|
|
102
|
-
|
|
102
|
+
|
|
103
103
|
assert.calledWith(request.request, { uri: 'test/id/controls',
|
|
104
104
|
body: { disallowUnmute: { enabled: true } },
|
|
105
105
|
method: HTTP_VERBS.PATCH});
|
|
106
|
-
|
|
106
|
+
|
|
107
107
|
assert.deepEqual(result, request.request.firstCall.returnValue);
|
|
108
108
|
});
|
|
109
109
|
|
|
110
|
-
it('can set
|
|
110
|
+
it('can set allow unmute when DISABLE_HARD_MUTE display hint is available', () => {
|
|
111
111
|
manager.setDisplayHints(['DISABLE_HARD_MUTE']);
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
const result = manager.setDisallowUnmute(false);
|
|
114
|
-
|
|
114
|
+
|
|
115
115
|
assert.calledWith(request.request, { uri: 'test/id/controls',
|
|
116
116
|
body: { disallowUnmute: { enabled: false } },
|
|
117
117
|
method: HTTP_VERBS.PATCH});
|
|
118
|
-
|
|
118
|
+
|
|
119
119
|
assert.deepEqual(result, request.request.firstCall.returnValue);
|
|
120
120
|
});
|
|
121
121
|
});
|
|
@@ -218,7 +218,7 @@ describe('plugin-meetings', () => {
|
|
|
218
218
|
})
|
|
219
219
|
});
|
|
220
220
|
|
|
221
|
-
it('rejects when correct display hint is not present mutedEnabled=false', () => {
|
|
221
|
+
it('rejects when correct display hint is not present mutedEnabled=false', () => {
|
|
222
222
|
const result = manager.setMuteAll(false, false, false);
|
|
223
223
|
|
|
224
224
|
assert.notCalled(request.request);
|
|
@@ -226,7 +226,7 @@ describe('plugin-meetings', () => {
|
|
|
226
226
|
assert.isRejected(result);
|
|
227
227
|
});
|
|
228
228
|
|
|
229
|
-
it('rejects when correct display hint is not present mutedEnabled=true', () => {
|
|
229
|
+
it('rejects when correct display hint is not present mutedEnabled=true', () => {
|
|
230
230
|
const result = manager.setMuteAll(true, false, false);
|
|
231
231
|
|
|
232
232
|
assert.notCalled(request.request);
|
|
@@ -281,7 +281,31 @@ describe('plugin-meetings', () => {
|
|
|
281
281
|
|
|
282
282
|
assert.deepEqual(result, request.request.firstCall.returnValue);
|
|
283
283
|
});
|
|
284
|
+
|
|
285
|
+
it('can set mute all panelists when the display hint is available mutedEnabled=true', () => {
|
|
286
|
+
manager.setDisplayHints(['MUTE_ALL', 'DISABLE_HARD_MUTE', 'DISABLE_MUTE_ON_ENTRY']);
|
|
287
|
+
|
|
288
|
+
const result = manager.setMuteAll(true, true, true, ['panelist']);
|
|
289
|
+
|
|
290
|
+
assert.calledWith(request.request, { uri: 'test/id/controls',
|
|
291
|
+
body: { audio: { muted: true, disallowUnmute: true, muteOnEntry: true, roles: ['panelist'] } },
|
|
292
|
+
method: HTTP_VERBS.PATCH});
|
|
293
|
+
|
|
294
|
+
assert.deepEqual(result, request.request.firstCall.returnValue);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it('can set mute all attendees when the display hint is available mutedEnabled=true', () => {
|
|
298
|
+
manager.setDisplayHints(['MUTE_ALL', 'DISABLE_HARD_MUTE', 'DISABLE_MUTE_ON_ENTRY']);
|
|
299
|
+
|
|
300
|
+
const result = manager.setMuteAll(true, true, true, ['attendee']);
|
|
301
|
+
|
|
302
|
+
assert.calledWith(request.request, { uri: 'test/id/controls',
|
|
303
|
+
body: { audio: { muted: true, disallowUnmute: true, muteOnEntry: true, roles: ['attendee'] } },
|
|
304
|
+
method: HTTP_VERBS.PATCH});
|
|
305
|
+
|
|
306
|
+
assert.deepEqual(result, request.request.firstCall.returnValue);
|
|
307
|
+
});
|
|
284
308
|
});
|
|
285
309
|
});
|
|
286
310
|
});
|
|
287
|
-
});
|
|
311
|
+
});
|
|
@@ -348,6 +348,50 @@ describe('plugin-meetings', () => {
|
|
|
348
348
|
});
|
|
349
349
|
});
|
|
350
350
|
|
|
351
|
+
it('should call hasHints() with proper hints when `panelistEnabled` is true, attendeeCount is false', () => {
|
|
352
|
+
ControlsOptionsUtil.canUpdateViewTheParticipantsList({properties: {enabled: true, panelistEnabled: true, attendeeCount: false}}, []);
|
|
353
|
+
|
|
354
|
+
assert.calledWith(ControlsOptionsUtil.hasHints, {
|
|
355
|
+
requiredHints: [DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST,
|
|
356
|
+
DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST,
|
|
357
|
+
DISPLAY_HINTS.DISABLE_SHOW_ATTENDEE_COUNT],
|
|
358
|
+
displayHints: [],
|
|
359
|
+
});
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
it('should call hasHints() with proper hints when `panelistEnabled` is true, attendeeCount is true', () => {
|
|
363
|
+
ControlsOptionsUtil.canUpdateViewTheParticipantsList({properties: {enabled: true, panelistEnabled: true, attendeeCount: true}}, []);
|
|
364
|
+
|
|
365
|
+
assert.calledWith(ControlsOptionsUtil.hasHints, {
|
|
366
|
+
requiredHints: [DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST,
|
|
367
|
+
DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST,
|
|
368
|
+
DISPLAY_HINTS.ENABLE_SHOW_ATTENDEE_COUNT],
|
|
369
|
+
displayHints: [],
|
|
370
|
+
});
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
it('should call hasHints() with proper hints when `panelistEnabled` is false, attendeeCount is false', () => {
|
|
374
|
+
ControlsOptionsUtil.canUpdateViewTheParticipantsList({properties: {enabled: true, panelistEnabled: false, attendeeCount: false}}, []);
|
|
375
|
+
|
|
376
|
+
assert.calledWith(ControlsOptionsUtil.hasHints, {
|
|
377
|
+
requiredHints: [DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST,
|
|
378
|
+
DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST,
|
|
379
|
+
DISPLAY_HINTS.DISABLE_SHOW_ATTENDEE_COUNT],
|
|
380
|
+
displayHints: [],
|
|
381
|
+
});
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
it('should call hasHints() with proper hints when `panelistEnabled` is false, attendeeCount is true', () => {
|
|
385
|
+
ControlsOptionsUtil.canUpdateViewTheParticipantsList({properties: {enabled: true, panelistEnabled: false, attendeeCount: true}}, []);
|
|
386
|
+
|
|
387
|
+
assert.calledWith(ControlsOptionsUtil.hasHints, {
|
|
388
|
+
requiredHints: [DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST,
|
|
389
|
+
DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST,
|
|
390
|
+
DISPLAY_HINTS.ENABLE_SHOW_ATTENDEE_COUNT],
|
|
391
|
+
displayHints: [],
|
|
392
|
+
});
|
|
393
|
+
});
|
|
394
|
+
|
|
351
395
|
it('should return the resolution of hasHints()', () => {
|
|
352
396
|
const expected = 'example-return-value';
|
|
353
397
|
ControlsOptionsUtil.hasHints.returns(expected);
|
|
@@ -82,11 +82,13 @@ describe('plugin-meetings', () => {
|
|
|
82
82
|
});
|
|
83
83
|
|
|
84
84
|
it('should parse the viewTheParticipantList control', () => {
|
|
85
|
-
const newControls = {viewTheParticipantList: {enabled: true}};
|
|
85
|
+
const newControls = {viewTheParticipantList: {enabled: true, panelistEnabled: true, attendeeCount: false}};
|
|
86
86
|
|
|
87
87
|
const parsedControls = ControlsUtils.parse(newControls);
|
|
88
88
|
|
|
89
89
|
assert.equal(parsedControls.viewTheParticipantList.enabled, newControls.viewTheParticipantList.enabled);
|
|
90
|
+
assert.equal(parsedControls.viewTheParticipantList.panelistEnabled, newControls.viewTheParticipantList.panelistEnabled);
|
|
91
|
+
assert.equal(parsedControls.viewTheParticipantList.attendeeCount, newControls.viewTheParticipantList.attendeeCount);
|
|
90
92
|
});
|
|
91
93
|
|
|
92
94
|
it('should parse the raiseHand control', () => {
|
|
@@ -105,6 +107,42 @@ describe('plugin-meetings', () => {
|
|
|
105
107
|
assert.equal(parsedControls.video.enabled, newControls.video.enabled);
|
|
106
108
|
});
|
|
107
109
|
|
|
110
|
+
it('should parse the webcast control', () => {
|
|
111
|
+
const newControls = {webcastControl: {streaming: true}};
|
|
112
|
+
|
|
113
|
+
const parsedControls = ControlsUtils.parse(newControls);
|
|
114
|
+
|
|
115
|
+
assert.equal(parsedControls.webcastControl.streaming, newControls.webcastControl.streaming);
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('should parse the meeting full control', () => {
|
|
119
|
+
const newControls = {meetingFull: {meetingFull: true, meetingPanelistFull: false}};
|
|
120
|
+
|
|
121
|
+
const parsedControls = ControlsUtils.parse(newControls);
|
|
122
|
+
|
|
123
|
+
assert.equal(parsedControls.meetingFull.meetingFull, newControls.meetingFull.meetingFull);
|
|
124
|
+
assert.equal(parsedControls.meetingFull.meetingPanelistFull, newControls.meetingFull.meetingPanelistFull);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it('should parse the practiceSession control', () => {
|
|
128
|
+
const newControls = {practiceSession: {enabled: true}};
|
|
129
|
+
|
|
130
|
+
const parsedControls = ControlsUtils.parse(newControls);
|
|
131
|
+
|
|
132
|
+
assert.equal(parsedControls.practiceSession.enabled, newControls.practiceSession.enabled);
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it('should parse the videoLayout control', () => {
|
|
136
|
+
const newControls = {videoLayout: {overrideDefault: true, lockAttendeeViewOnStageOnly:false, stageParameters: {}}};
|
|
137
|
+
|
|
138
|
+
const parsedControls = ControlsUtils.parse(newControls);
|
|
139
|
+
|
|
140
|
+
assert.equal(parsedControls.videoLayout.overrideDefault, newControls.videoLayout.overrideDefault);
|
|
141
|
+
assert.equal(parsedControls.videoLayout.lockAttendeeViewOnStageOnly, newControls.videoLayout.lockAttendeeViewOnStageOnly);
|
|
142
|
+
assert.equal(parsedControls.videoLayout.stageParameters, newControls.videoLayout.stageParameters);
|
|
143
|
+
|
|
144
|
+
});
|
|
145
|
+
|
|
108
146
|
describe('videoEnabled', () => {
|
|
109
147
|
it('returns expected', () => {
|
|
110
148
|
const result = ControlsUtils.parse({video: {enabled: true}});
|
|
@@ -170,11 +208,21 @@ describe('plugin-meetings', () => {
|
|
|
170
208
|
});
|
|
171
209
|
|
|
172
210
|
it('returns hasViewTheParticipantListChanged = true when changed', () => {
|
|
173
|
-
const
|
|
211
|
+
const oldControls = {viewTheParticipantList: {enabled: true, panelistEnabled: true, attendeeCount: false}};
|
|
174
212
|
|
|
175
|
-
|
|
213
|
+
let result = ControlsUtils.getControls(oldControls, {viewTheParticipantList: {enabled: false, panelistEnabled: true, attendeeCount: false}});
|
|
214
|
+
|
|
215
|
+
assert.equal(result.updates.hasViewTheParticipantListChanged, true);
|
|
216
|
+
|
|
217
|
+
result = ControlsUtils.getControls(oldControls, {viewTheParticipantList: {enabled: true, panelistEnabled: false, attendeeCount: false}});
|
|
176
218
|
|
|
177
|
-
assert.equal(updates.hasViewTheParticipantListChanged, true);
|
|
219
|
+
assert.equal(result.updates.hasViewTheParticipantListChanged, true);
|
|
220
|
+
result = ControlsUtils.getControls(oldControls, {viewTheParticipantList: {enabled: true, panelistEnabled: true, attendeeCount: true}});
|
|
221
|
+
|
|
222
|
+
assert.equal(result.updates.hasViewTheParticipantListChanged, true);
|
|
223
|
+
result = ControlsUtils.getControls(oldControls, {viewTheParticipantList: {enabled: true, panelistEnabled: true, attendeeCount: false}});
|
|
224
|
+
|
|
225
|
+
assert.equal(result.updates.hasViewTheParticipantListChanged, false);
|
|
178
226
|
});
|
|
179
227
|
|
|
180
228
|
it('returns hasRaiseHandChanged = true when changed', () => {
|
|
@@ -193,6 +241,34 @@ describe('plugin-meetings', () => {
|
|
|
193
241
|
assert.equal(updates.hasVideoChanged, true);
|
|
194
242
|
});
|
|
195
243
|
|
|
244
|
+
it('returns hasWebcastChanged = true when changed', () => {
|
|
245
|
+
const newControls = {webcastControl: {streaming: true}};
|
|
246
|
+
|
|
247
|
+
const {updates} = ControlsUtils.getControls(defaultControls, newControls);
|
|
248
|
+
|
|
249
|
+
assert.equal(updates.hasWebcastChanged, true);
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
it('returns hasMeetingFullChanged = true when changed', () => {
|
|
253
|
+
const newControls = {meetingFull: {meetingFull: true, meetingPanelistFull: false}};
|
|
254
|
+
|
|
255
|
+
let result = ControlsUtils.getControls(defaultControls, newControls);
|
|
256
|
+
|
|
257
|
+
assert.equal(result.updates.hasMeetingFullChanged, true);
|
|
258
|
+
|
|
259
|
+
result = ControlsUtils.getControls(newControls, {meetingFull: {meetingFull: true, meetingPanelistFull: true}});
|
|
260
|
+
|
|
261
|
+
assert.equal(result.updates.hasMeetingFullChanged, true);
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
it('returns hasPracticeSessionEnabledChanged = true when changed', () => {
|
|
265
|
+
const newControls = {practiceSession: {enabled: true}};
|
|
266
|
+
|
|
267
|
+
const {updates} = ControlsUtils.getControls(defaultControls, newControls);
|
|
268
|
+
|
|
269
|
+
assert.equal(updates.hasPracticeSessionEnabledChanged, true);
|
|
270
|
+
});
|
|
271
|
+
|
|
196
272
|
it('returns hasEntryExitToneChanged = true when mode changed', () => {
|
|
197
273
|
const newControls = {
|
|
198
274
|
entryExitTone: {
|
|
@@ -81,7 +81,7 @@ describe('plugin-meetings', () => {
|
|
|
81
81
|
newControls = {
|
|
82
82
|
disallowUnmute: {enabled: true},
|
|
83
83
|
lock: {},
|
|
84
|
-
meetingFull: {},
|
|
84
|
+
meetingFull: {meetingFull: false, meetingPanelistFull: true},
|
|
85
85
|
muteOnEntry: {enabled: true},
|
|
86
86
|
raiseHand: {enabled: true},
|
|
87
87
|
reactions: {enabled: true, showDisplayNameWithReactions: true},
|
|
@@ -95,12 +95,15 @@ describe('plugin-meetings', () => {
|
|
|
95
95
|
},
|
|
96
96
|
shareControl: {control: 'example-value'},
|
|
97
97
|
transcribe: {},
|
|
98
|
-
viewTheParticipantList: {enabled: true},
|
|
98
|
+
viewTheParticipantList: {enabled: true, panelistEnabled: true, attendeeCount: false},
|
|
99
99
|
meetingContainer: {
|
|
100
100
|
meetingContainerUrl: 'http://new-url.com',
|
|
101
101
|
},
|
|
102
102
|
entryExitTone: {enabled: true, mode: 'foo'},
|
|
103
103
|
video: {enabled: true},
|
|
104
|
+
videoLayout: {overrideDefault: true, lockAttendeeViewOnStageOnly:false, stageParameters: {}},
|
|
105
|
+
webcastControl: {streaming: false},
|
|
106
|
+
practiceSession: {enabled: true},
|
|
104
107
|
};
|
|
105
108
|
});
|
|
106
109
|
|
|
@@ -205,6 +208,58 @@ describe('plugin-meetings', () => {
|
|
|
205
208
|
);
|
|
206
209
|
});
|
|
207
210
|
|
|
211
|
+
it('should trigger the CONTROLS_STAGE_VIEW_UPDATED event when necessary', () => {
|
|
212
|
+
locusInfo.controls = {};
|
|
213
|
+
locusInfo.emitScoped = sinon.stub();
|
|
214
|
+
locusInfo.updateControls(newControls);
|
|
215
|
+
|
|
216
|
+
assert.calledWith(
|
|
217
|
+
locusInfo.emitScoped,
|
|
218
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
219
|
+
LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED,
|
|
220
|
+
{state: newControls.videoLayout}
|
|
221
|
+
);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it('should trigger the CONTROLS_WEBCAST_CHANGED event when necessary', () => {
|
|
225
|
+
locusInfo.controls = {};
|
|
226
|
+
locusInfo.emitScoped = sinon.stub();
|
|
227
|
+
locusInfo.updateControls(newControls);
|
|
228
|
+
|
|
229
|
+
assert.calledWith(
|
|
230
|
+
locusInfo.emitScoped,
|
|
231
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
232
|
+
LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED,
|
|
233
|
+
{state: newControls.webcastControl}
|
|
234
|
+
);
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
it('should trigger the CONTROLS_MEETING_FULL_CHANGED event when necessary', () => {
|
|
238
|
+
locusInfo.controls = {};
|
|
239
|
+
locusInfo.emitScoped = sinon.stub();
|
|
240
|
+
locusInfo.updateControls(newControls);
|
|
241
|
+
|
|
242
|
+
assert.calledWith(
|
|
243
|
+
locusInfo.emitScoped,
|
|
244
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
245
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED,
|
|
246
|
+
{state: newControls.meetingFull}
|
|
247
|
+
);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it('should trigger the CONTROLS_PRACTICE_SESSION_STATUS_UPDATED event when necessary', () => {
|
|
251
|
+
locusInfo.controls = {};
|
|
252
|
+
locusInfo.emitScoped = sinon.stub();
|
|
253
|
+
locusInfo.updateControls(newControls);
|
|
254
|
+
|
|
255
|
+
assert.calledWith(
|
|
256
|
+
locusInfo.emitScoped,
|
|
257
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
258
|
+
LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED,
|
|
259
|
+
{state: newControls.practiceSession}
|
|
260
|
+
);
|
|
261
|
+
});
|
|
262
|
+
|
|
208
263
|
it('should not trigger the CONTROLS_RECORDING_UPDATED event', () => {
|
|
209
264
|
locusInfo.controls = {};
|
|
210
265
|
locusInfo.emitScoped = sinon.stub();
|
|
@@ -1729,6 +1784,7 @@ describe('plugin-meetings', () => {
|
|
|
1729
1784
|
locusInfo.updateMemberShip = sinon.stub();
|
|
1730
1785
|
locusInfo.updateIdentifiers = sinon.stub();
|
|
1731
1786
|
locusInfo.updateEmbeddedApps = sinon.stub();
|
|
1787
|
+
locusInfo.updateResources = sinon.stub();
|
|
1732
1788
|
locusInfo.compareAndUpdate = sinon.stub();
|
|
1733
1789
|
|
|
1734
1790
|
locusInfo.updateLocusInfo(newLocus);
|
|
@@ -1750,6 +1806,7 @@ describe('plugin-meetings', () => {
|
|
|
1750
1806
|
assert.notCalled(locusInfo.updateMemberShip);
|
|
1751
1807
|
assert.notCalled(locusInfo.updateIdentifiers);
|
|
1752
1808
|
assert.notCalled(locusInfo.updateEmbeddedApps);
|
|
1809
|
+
assert.notCalled(locusInfo.updateResources);
|
|
1753
1810
|
assert.notCalled(locusInfo.compareAndUpdate);
|
|
1754
1811
|
});
|
|
1755
1812
|
|
|
@@ -1807,6 +1864,35 @@ describe('plugin-meetings', () => {
|
|
|
1807
1864
|
assert.calledWith(locusInfo.applyLocusDeltaData, action, parsedLoci, fakeMeeting);
|
|
1808
1865
|
});
|
|
1809
1866
|
|
|
1867
|
+
it('catches errors thrown by onDeltaAction and is able to process next Locus delta', () => {
|
|
1868
|
+
const fakeLocusDelta = {
|
|
1869
|
+
sequence: {
|
|
1870
|
+
rangeStart: 0,
|
|
1871
|
+
rangeEnd: 0,
|
|
1872
|
+
},
|
|
1873
|
+
};
|
|
1874
|
+
locusInfo.locusParser.workingCopy = {
|
|
1875
|
+
sequence: {
|
|
1876
|
+
rangeStart: 0,
|
|
1877
|
+
rangeEnd: 0,
|
|
1878
|
+
},
|
|
1879
|
+
};
|
|
1880
|
+
const testMeeting = {locusInfo: {onDeltaLocus: sinon.stub()}};
|
|
1881
|
+
|
|
1882
|
+
locusParser.onDeltaAction = sandbox
|
|
1883
|
+
.stub()
|
|
1884
|
+
.onCall(0)
|
|
1885
|
+
.callsFake(() => {
|
|
1886
|
+
throw new Error('fake error');
|
|
1887
|
+
});
|
|
1888
|
+
|
|
1889
|
+
// simulate first locus delta coming - it will trigger an error thrown by onDeltaAction
|
|
1890
|
+
locusInfo.handleLocusDelta(fakeLocusDelta, testMeeting);
|
|
1891
|
+
|
|
1892
|
+
// simulate a second locus delta coming - it should be processed without errors
|
|
1893
|
+
locusInfo.handleLocusDelta(fakeLocusDelta, testMeeting);
|
|
1894
|
+
});
|
|
1895
|
+
|
|
1810
1896
|
it('applyLocusDeltaData handles USE_INCOMING action correctly', () => {
|
|
1811
1897
|
const {USE_INCOMING} = LocusDeltaParser.loci;
|
|
1812
1898
|
const meeting = {
|
|
@@ -60,6 +60,10 @@ describe('plugin-meetings', () => {
|
|
|
60
60
|
canUpdateShareControl: null,
|
|
61
61
|
canEnableViewTheParticipantsList: null,
|
|
62
62
|
canDisableViewTheParticipantsList: null,
|
|
63
|
+
canEnableViewTheParticipantsListPanelist: null,
|
|
64
|
+
canDisableViewTheParticipantsListPanelist: null,
|
|
65
|
+
canEnableShowAttendeeCount: null,
|
|
66
|
+
canDisableShowAttendeeCount: null,
|
|
63
67
|
canEnableRaiseHand: null,
|
|
64
68
|
canDisableRaiseHand: null,
|
|
65
69
|
canEnableVideo: null,
|
|
@@ -79,6 +83,11 @@ describe('plugin-meetings', () => {
|
|
|
79
83
|
canShareWhiteBoard: null,
|
|
80
84
|
enforceVirtualBackground: null,
|
|
81
85
|
canPollingAndQA: null,
|
|
86
|
+
canStartWebcast: null,
|
|
87
|
+
canStopWebcast: null,
|
|
88
|
+
canShowStageView: null,
|
|
89
|
+
canEnableStageView: null,
|
|
90
|
+
canDisableStageView: null,
|
|
82
91
|
...expected,
|
|
83
92
|
};
|
|
84
93
|
|
|
@@ -144,6 +153,10 @@ describe('plugin-meetings', () => {
|
|
|
144
153
|
'canUpdateShareControl',
|
|
145
154
|
'canEnableViewTheParticipantsList',
|
|
146
155
|
'canDisableViewTheParticipantsList',
|
|
156
|
+
'canEnableViewTheParticipantsListPanelist',
|
|
157
|
+
'canDisableViewTheParticipantsListPanelist',
|
|
158
|
+
'canEnableShowAttendeeCount',
|
|
159
|
+
'canDisableShowAttendeeCount',
|
|
147
160
|
'canEnableRaiseHand',
|
|
148
161
|
'canDisableRaiseHand',
|
|
149
162
|
'canEnableVideo',
|
|
@@ -163,6 +176,11 @@ describe('plugin-meetings', () => {
|
|
|
163
176
|
'canShareWhiteBoard',
|
|
164
177
|
'enforceVirtualBackground',
|
|
165
178
|
'canPollingAndQA',
|
|
179
|
+
'canStartWebcast',
|
|
180
|
+
'canStopWebcast',
|
|
181
|
+
'canShowStageView',
|
|
182
|
+
'canEnableStageView',
|
|
183
|
+
'canDisableStageView',
|
|
166
184
|
].forEach((key) => {
|
|
167
185
|
it(`get and set for ${key} work as expected`, () => {
|
|
168
186
|
const inMeetingActions = new InMeetingActions();
|