@webex/plugin-meetings 3.0.0-beta.108 → 3.0.0-beta.109

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.
Files changed (35) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/constants.js +21 -2
  4. package/dist/constants.js.map +1 -1
  5. package/dist/controls-options-manager/enums.js +2 -0
  6. package/dist/controls-options-manager/enums.js.map +1 -1
  7. package/dist/controls-options-manager/types.js.map +1 -1
  8. package/dist/controls-options-manager/util.js +36 -0
  9. package/dist/controls-options-manager/util.js.map +1 -1
  10. package/dist/locus-info/controlsUtils.js +39 -1
  11. package/dist/locus-info/controlsUtils.js.map +1 -1
  12. package/dist/locus-info/index.js +55 -0
  13. package/dist/locus-info/index.js.map +1 -1
  14. package/dist/meeting/in-meeting-actions.js +9 -1
  15. package/dist/meeting/in-meeting-actions.js.map +1 -1
  16. package/dist/meeting/index.js +84 -14
  17. package/dist/meeting/index.js.map +1 -1
  18. package/dist/types/constants.d.ts +16 -0
  19. package/dist/types/controls-options-manager/enums.d.ts +2 -0
  20. package/dist/types/controls-options-manager/types.d.ts +7 -1
  21. package/dist/types/meeting/in-meeting-actions.d.ts +8 -0
  22. package/package.json +19 -19
  23. package/src/constants.ts +22 -0
  24. package/src/controls-options-manager/enums.ts +2 -0
  25. package/src/controls-options-manager/types.ts +10 -0
  26. package/src/controls-options-manager/util.ts +45 -0
  27. package/src/locus-info/controlsUtils.ts +54 -0
  28. package/src/locus-info/index.ts +55 -0
  29. package/src/meeting/in-meeting-actions.ts +16 -0
  30. package/src/meeting/index.ts +70 -0
  31. package/test/unit/spec/controls-options-manager/util.js +108 -7
  32. package/test/unit/spec/locus-info/controlsUtils.js +112 -0
  33. package/test/unit/spec/locus-info/index.js +84 -1
  34. package/test/unit/spec/meeting/in-meeting-actions.ts +8 -0
  35. package/test/unit/spec/meeting/index.js +108 -0
@@ -128,6 +128,40 @@ describe('plugin-meetings', () => {
128
128
  });
129
129
  });
130
130
 
131
+ describe('canUpdateRaiseHand()', () => {
132
+ beforeEach(() => {
133
+ ControlsOptionsUtil.hasHints = sinon.stub().returns(true);
134
+ });
135
+
136
+ it('should call hasHints() with proper hints when `enabled` is true', () => {
137
+ ControlsOptionsUtil.canUpdateRaiseHand({properties: {enabled: true}}, [])
138
+
139
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
140
+ requiredHints: [DISPLAY_HINTS.ENABLE_RAISE_HAND],
141
+ displayHints: [],
142
+ });
143
+ });
144
+
145
+ it('should call hasHints() with proper hints when `enabled` is false', () => {
146
+ ControlsOptionsUtil.canUpdateRaiseHand({properties: {enabled: false}}, [])
147
+
148
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
149
+ requiredHints: [DISPLAY_HINTS.DISABLE_RAISE_HAND],
150
+ displayHints: [],
151
+ });
152
+ });
153
+
154
+ it('should return the resolution of hasHints()', () => {
155
+ const expected = 'example-return-value'
156
+ ControlsOptionsUtil.hasHints = sinon.stub().returns(expected);
157
+
158
+ const results = ControlsOptionsUtil.canUpdateRaiseHand({properties: {}}, []);
159
+
160
+ assert.calledOnce(ControlsOptionsUtil.hasHints);
161
+ assert.equal(results, expected);
162
+ });
163
+ });
164
+
131
165
  describe('canUpdateReactions()', () => {
132
166
  beforeEach(() => {
133
167
  ControlsOptionsUtil.hasHints = sinon.stub().returns(true);
@@ -222,6 +256,40 @@ describe('plugin-meetings', () => {
222
256
  });
223
257
  });
224
258
 
259
+ describe('canUpdateVideo()', () => {
260
+ beforeEach(() => {
261
+ ControlsOptionsUtil.hasHints = sinon.stub().returns(true);
262
+ });
263
+
264
+ it('should call hasHints() with proper hints when `enabled` is true', () => {
265
+ ControlsOptionsUtil.canUpdateVideo({properties: {enabled: true}}, [])
266
+
267
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
268
+ requiredHints: [DISPLAY_HINTS.ENABLE_VIDEO],
269
+ displayHints: [],
270
+ });
271
+ });
272
+
273
+ it('should call hasHints() with proper hints when `enabled` is false', () => {
274
+ ControlsOptionsUtil.canUpdateVideo({properties: {enabled: false}}, [])
275
+
276
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
277
+ requiredHints: [DISPLAY_HINTS.DISABLE_VIDEO],
278
+ displayHints: [],
279
+ });
280
+ });
281
+
282
+ it('should return the resolution of hasHints()', () => {
283
+ const expected = 'example-return-value'
284
+ ControlsOptionsUtil.hasHints = sinon.stub().returns(expected);
285
+
286
+ const results = ControlsOptionsUtil.canUpdateVideo({properties: {}}, []);
287
+
288
+ assert.calledOnce(ControlsOptionsUtil.hasHints);
289
+ assert.equal(results, expected);
290
+ });
291
+ });
292
+
225
293
  describe('canUpdateViewTheParticipantsList()', () => {
226
294
  beforeEach(() => {
227
295
  ControlsOptionsUtil.hasHints = sinon.stub().returns(true);
@@ -258,18 +326,13 @@ describe('plugin-meetings', () => {
258
326
 
259
327
  describe('canUpdate()', () => {
260
328
  const displayHints = [];
261
- let spies;
262
329
 
263
330
  beforeEach(() => {
264
- // spies = {
265
- // canUpdateAudio: sinon.spy(ControlsOptionsUtil, 'canUpdateAudio'),
266
- // canUpdateReactions: sinon.spy(ControlsOptionsUtil, 'canUpdateReactions'),
267
- // canUpdateShareControl: sinon.spy(ControlsOptionsUtil, 'canUpdateShareControl'),
268
- // canUpdateViewTheParticipantsList: sinon.spy(ControlsOptionsUtil, 'canUpdateViewTheParticipantsList'),
269
- // }
270
331
  ControlsOptionsUtil.canUpdateAudio = sinon.stub().returns(true);
332
+ ControlsOptionsUtil.canUpdateRaiseHand = sinon.stub().returns(true);
271
333
  ControlsOptionsUtil.canUpdateReactions = sinon.stub().returns(true);
272
334
  ControlsOptionsUtil.canUpdateShareControl = sinon.stub().returns(true);
335
+ ControlsOptionsUtil.canUpdateVideo = sinon.stub().returns(true);
273
336
  ControlsOptionsUtil.canUpdateViewTheParticipantsList = sinon.stub().returns(true);
274
337
  });
275
338
 
@@ -279,20 +342,38 @@ describe('plugin-meetings', () => {
279
342
  const results = ControlsOptionsUtil.canUpdate(control, displayHints);
280
343
 
281
344
  assert.calledWith(ControlsOptionsUtil.canUpdateAudio, control, displayHints);
345
+ assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
282
346
  assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
283
347
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
348
+ assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
284
349
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
285
350
  assert.isTrue(results);
286
351
  });
287
352
 
353
+ it('should only call canUpdateRaiseHand() if the scope is raiseHand', () => {
354
+ const control = { scope: 'raiseHand' };
355
+
356
+ const results = ControlsOptionsUtil.canUpdate(control, displayHints);
357
+
358
+ assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
359
+ assert.calledWith(ControlsOptionsUtil.canUpdateRaiseHand, control, displayHints);
360
+ assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
361
+ assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
362
+ assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
363
+ assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
364
+ assert.isTrue(results);
365
+ })
366
+
288
367
  it('should only call canUpdateReactions() if the scope is reactions', () => {
289
368
  const control = { scope: 'reactions' };
290
369
 
291
370
  const results = ControlsOptionsUtil.canUpdate(control, displayHints);
292
371
 
293
372
  assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
373
+ assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
294
374
  assert.calledWith(ControlsOptionsUtil.canUpdateReactions, control, displayHints);
295
375
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
376
+ assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
296
377
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
297
378
  assert.isTrue(results);
298
379
  });
@@ -303,8 +384,24 @@ describe('plugin-meetings', () => {
303
384
  const results = ControlsOptionsUtil.canUpdate(control, displayHints);
304
385
 
305
386
  assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
387
+ assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
306
388
  assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
307
389
  assert.calledWith(ControlsOptionsUtil.canUpdateShareControl, displayHints);
390
+ assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
391
+ assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
392
+ assert.isTrue(results);
393
+ });
394
+
395
+ it('should only call canUpdateVideo() if the scope is video', () => {
396
+ const control = { scope: 'video' };
397
+
398
+ const results = ControlsOptionsUtil.canUpdate(control, displayHints);
399
+
400
+ assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
401
+ assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
402
+ assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
403
+ assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
404
+ assert.calledWith(ControlsOptionsUtil.canUpdateVideo, control, displayHints);
308
405
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
309
406
  assert.isTrue(results);
310
407
  });
@@ -315,8 +412,10 @@ describe('plugin-meetings', () => {
315
412
  const results = ControlsOptionsUtil.canUpdate(control, displayHints);
316
413
 
317
414
  assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
415
+ assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
318
416
  assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
319
417
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
418
+ assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
320
419
  assert.calledWith(ControlsOptionsUtil.canUpdateViewTheParticipantsList, control, displayHints);
321
420
  assert.isTrue(results);
322
421
  });
@@ -327,8 +426,10 @@ describe('plugin-meetings', () => {
327
426
  const results = ControlsOptionsUtil.canUpdate(control, displayHints);
328
427
 
329
428
  assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
429
+ assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
330
430
  assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
331
431
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
432
+ assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
332
433
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
333
434
  assert.isFalse(results);
334
435
  });
@@ -41,6 +41,62 @@ describe('plugin-meetings', () => {
41
41
  assert.equal(parsedControls.entryExitTone, null);
42
42
  });
43
43
 
44
+ it('should parse the muteOnEntry control', () => {
45
+ const newControls = {muteOnEntry: {enabled: true}};
46
+
47
+ const parsedControls = ControlsUtils.parse(newControls);
48
+
49
+ assert.equal(parsedControls.muteOnEntry.enabled, newControls.muteOnEntry.enabled);
50
+ });
51
+
52
+ it('should parse the shareControl control', () => {
53
+ const newControls = {shareControl: {control: 'example-value'}};
54
+
55
+ const parsedControls = ControlsUtils.parse(newControls);
56
+
57
+ assert.equal(parsedControls.shareControl.control, newControls.shareControl.control);
58
+ });
59
+
60
+ it('should parse the disallowUnmute control', () => {
61
+ const newControls = {disallowUnmute: {enabled: true}};
62
+
63
+ const parsedControls = ControlsUtils.parse(newControls);
64
+
65
+ assert.equal(parsedControls.disallowUnmute.enabled, newControls.disallowUnmute.enabled);
66
+ });
67
+
68
+ it('should parse the reactions control', () => {
69
+ const newControls = {reactions: {enabled: true}};
70
+
71
+ const parsedControls = ControlsUtils.parse(newControls);
72
+
73
+ assert.equal(parsedControls.reactions.enabled, newControls.reactions.enabled);
74
+ });
75
+
76
+ it('should parse the reactionDisplayNames control', () => {
77
+ const newControls = {reactions: {showDisplayNameWithReactions: true}};
78
+
79
+ const parsedControls = ControlsUtils.parse(newControls);
80
+
81
+ assert.equal(parsedControls.reactions.showDisplayNameWithReactions, newControls.reactions.showDisplayNameWithReactions);
82
+ });
83
+
84
+ it('should parse the viewTheParticipantList control', () => {
85
+ const newControls = {viewTheParticipantList: {enabled: true}};
86
+
87
+ const parsedControls = ControlsUtils.parse(newControls);
88
+
89
+ assert.equal(parsedControls.viewTheParticipantList.enabled, newControls.viewTheParticipantList.enabled);
90
+ });
91
+
92
+ it('should parse the raiseHand control', () => {
93
+ const newControls = {raiseHand: {enabled: true}};
94
+
95
+ const parsedControls = ControlsUtils.parse(newControls);
96
+
97
+ assert.equal(parsedControls.raiseHand.enabled, newControls.raiseHand.enabled);
98
+ });
99
+
44
100
  describe('videoEnabled', () => {
45
101
  it('returns expected', () => {
46
102
  const result = ControlsUtils.parse({video: {enabled: true}});
@@ -65,6 +121,62 @@ describe('plugin-meetings', () => {
65
121
  });
66
122
 
67
123
  describe('getControls', () => {
124
+ it('returns hasMuteOnEntryChanged = true when changed', () => {
125
+ const newControls = {muteOnEntry: {enabled: true}};
126
+
127
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
128
+
129
+ assert.equal(updates.hasMuteOnEntryChanged, true);
130
+ });
131
+
132
+ it('returns hasShareControlChanged = true when changed', () => {
133
+ const newControls = {shareControl: {control: 'example-value'}};
134
+
135
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
136
+
137
+ assert.equal(updates.hasShareControlChanged, true);
138
+ });
139
+
140
+ it('returns hasDisallowUnmuteChanged = true when changed', () => {
141
+ const newControls = {disallowUnmute: {enabled: true}};
142
+
143
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
144
+
145
+ assert.equal(updates.hasDisallowUnmuteChanged, true);
146
+ });
147
+
148
+ it('returns hasReactionsChanged = true when changed', () => {
149
+ const newControls = {reactions: {enabled: true}};
150
+
151
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
152
+
153
+ assert.equal(updates.hasReactionsChanged, true);
154
+ });
155
+
156
+ it('returns hasReactionDisplayNamesChanged = true when changed', () => {
157
+ const newControls = {reactions: {showDisplayNameWithReactions: true}};
158
+
159
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
160
+
161
+ assert.equal(updates.hasReactionDisplayNamesChanged, true);
162
+ });
163
+
164
+ it('returns hasViewTheParticipantListChanged = true when changed', () => {
165
+ const newControls = {viewTheParticipantList: {enabled: true}};
166
+
167
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
168
+
169
+ assert.equal(updates.hasViewTheParticipantListChanged, true);
170
+ });
171
+
172
+ it('returns hasRaiseHandChanged = true when changed', () => {
173
+ const newControls = {raiseHand: {enabled: true}};
174
+
175
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
176
+
177
+ assert.equal(updates.hasRaiseHandChanged, true);
178
+ });
179
+
68
180
  it('returns hasEntryExitToneChanged = true when mode changed', () => {
69
181
  const newControls = {
70
182
  entryExitTone: {
@@ -67,8 +67,12 @@ describe('plugin-meetings', () => {
67
67
 
68
68
  beforeEach('setup new controls', () => {
69
69
  newControls = {
70
+ disallowUnmute: {enabled: true},
70
71
  lock: {},
71
72
  meetingFull: {},
73
+ muteOnEntry: {enabled: true},
74
+ raiseHand: {enabled: true},
75
+ reactions: {enabled: true, showDisplayNameWithReactions: true},
72
76
  record: {
73
77
  recording: false,
74
78
  paused: false,
@@ -77,8 +81,9 @@ describe('plugin-meetings', () => {
77
81
  modifiedBy: 'George Kittle',
78
82
  },
79
83
  },
80
- shareControl: {},
84
+ shareControl: {control: 'example-value'},
81
85
  transcribe: {},
86
+ viewTheParticipantList: {enabled: true},
82
87
  meetingContainer: {
83
88
  meetingContainerUrl: 'http://new-url.com',
84
89
  },
@@ -97,6 +102,84 @@ describe('plugin-meetings', () => {
97
102
  assert.equal(locusInfo.controls, newControls);
98
103
  });
99
104
 
105
+ it('should trigger the CONTROLS_MUTE_ON_ENTRY_CHANGED event when necessary', () => {
106
+ locusInfo.controls = {};
107
+ locusInfo.emitScoped = sinon.stub();
108
+ locusInfo.updateControls(newControls);
109
+
110
+ assert.calledWith(
111
+ locusInfo.emitScoped,
112
+ {file: 'locus-info', function: 'updateControls'},
113
+ LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,
114
+ {state: newControls.muteOnEntry},
115
+ );
116
+ });
117
+
118
+ it('should trigger the CONTROLS_SHARE_CONTROL_CHANGED event when necessary', () => {
119
+ locusInfo.controls = {};
120
+ locusInfo.emitScoped = sinon.stub();
121
+ locusInfo.updateControls(newControls);
122
+
123
+ assert.calledWith(
124
+ locusInfo.emitScoped,
125
+ {file: 'locus-info', function: 'updateControls'},
126
+ LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,
127
+ {state: newControls.shareControl},
128
+ );
129
+ });
130
+
131
+ it('should trigger the CONTROLS_DISALLOW_UNMUTE_CHANGED event when necessary', () => {
132
+ locusInfo.controls = {};
133
+ locusInfo.emitScoped = sinon.stub();
134
+ locusInfo.updateControls(newControls);
135
+
136
+ assert.calledWith(
137
+ locusInfo.emitScoped,
138
+ {file: 'locus-info', function: 'updateControls'},
139
+ LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,
140
+ {state: newControls.disallowUnmute},
141
+ );
142
+ });
143
+
144
+ it('should trigger the CONTROLS_REACTIONS_CHANGED event when necessary', () => {
145
+ locusInfo.controls = {};
146
+ locusInfo.emitScoped = sinon.stub();
147
+ locusInfo.updateControls(newControls);
148
+
149
+ assert.calledWith(
150
+ locusInfo.emitScoped,
151
+ {file: 'locus-info', function: 'updateControls'},
152
+ LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,
153
+ {state: newControls.reactions},
154
+ );
155
+ });
156
+
157
+ it('should trigger the CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED event when necessary', () => {
158
+ locusInfo.controls = {};
159
+ locusInfo.emitScoped = sinon.stub();
160
+ locusInfo.updateControls(newControls);
161
+
162
+ assert.calledWith(
163
+ locusInfo.emitScoped,
164
+ {file: 'locus-info', function: 'updateControls'},
165
+ LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,
166
+ {state: newControls.viewTheParticipantList},
167
+ );
168
+ });
169
+
170
+ it('should trigger the CONTROLS_RAISE_HAND_CHANGED event when necessary', () => {
171
+ locusInfo.controls = {};
172
+ locusInfo.emitScoped = sinon.stub();
173
+ locusInfo.updateControls(newControls);
174
+
175
+ assert.calledWith(
176
+ locusInfo.emitScoped,
177
+ {file: 'locus-info', function: 'updateControls'},
178
+ LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,
179
+ {state: newControls.raiseHand},
180
+ );
181
+ });
182
+
100
183
  it('should not trigger the CONTROLS_RECORDING_UPDATED event', () => {
101
184
  locusInfo.controls = {};
102
185
  locusInfo.emitScoped = sinon.stub();
@@ -56,6 +56,10 @@ describe('plugin-meetings', () => {
56
56
  canUpdateShareControl: null,
57
57
  canEnableViewTheParticipantsList: null,
58
58
  canDisableViewTheParticipantsList: null,
59
+ canEnableRaiseHand: null,
60
+ canDisableRaiseHand: null,
61
+ canEnableVideo: null,
62
+ canDisableVideo: null,
59
63
  ...expected,
60
64
  };
61
65
 
@@ -117,6 +121,10 @@ describe('plugin-meetings', () => {
117
121
  'canUpdateShareControl',
118
122
  'canEnableViewTheParticipantsList',
119
123
  'canDisableViewTheParticipantsList',
124
+ 'canEnableRaiseHand',
125
+ 'canDisableRaiseHand',
126
+ 'canEnableVideo',
127
+ 'canDisableVideo',
120
128
  ].forEach((key) => {
121
129
  it(`get and set for ${key} work as expected`, () => {
122
130
  const inMeetingActions = new InMeetingActions();
@@ -4839,6 +4839,114 @@ describe('plugin-meetings', () => {
4839
4839
  );
4840
4840
  });
4841
4841
 
4842
+ it('listens to CONTROLS_MUTE_ON_ENTRY_CHANGED', async () => {
4843
+ const state = {example: 'value'}
4844
+
4845
+ await meeting.locusInfo.emitScoped(
4846
+ {function: 'test', file: 'test'},
4847
+ LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,
4848
+ {state}
4849
+ );
4850
+
4851
+ assert.calledWith(
4852
+ TriggerProxy.trigger,
4853
+ meeting,
4854
+ {file: 'meeting/index', function: 'setupLocusControlsListener'},
4855
+ EVENT_TRIGGERS.MEETING_CONTROLS_MUTE_ON_ENTRY_UPDATED,
4856
+ {state},
4857
+ );
4858
+ });
4859
+
4860
+ it('listens to MEETING_CONTROLS_SHARE_CONTROL_UPDATED', async () => {
4861
+ const state = {example: 'value'}
4862
+
4863
+ await meeting.locusInfo.emitScoped(
4864
+ {function: 'test', file: 'test'},
4865
+ LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,
4866
+ {state}
4867
+ );
4868
+
4869
+ assert.calledWith(
4870
+ TriggerProxy.trigger,
4871
+ meeting,
4872
+ {file: 'meeting/index', function: 'setupLocusControlsListener'},
4873
+ EVENT_TRIGGERS.MEETING_CONTROLS_SHARE_CONTROL_UPDATED,
4874
+ {state},
4875
+ );
4876
+ });
4877
+
4878
+ it('listens to MEETING_CONTROLS_DISALLOW_UNMUTE_UPDATED', async () => {
4879
+ const state = {example: 'value'}
4880
+
4881
+ await meeting.locusInfo.emitScoped(
4882
+ {function: 'test', file: 'test'},
4883
+ LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,
4884
+ {state}
4885
+ );
4886
+
4887
+ assert.calledWith(
4888
+ TriggerProxy.trigger,
4889
+ meeting,
4890
+ {file: 'meeting/index', function: 'setupLocusControlsListener'},
4891
+ EVENT_TRIGGERS.MEETING_CONTROLS_DISALLOW_UNMUTE_UPDATED,
4892
+ {state},
4893
+ );
4894
+ });
4895
+
4896
+ it('listens to MEETING_CONTROLS_REACTIONS_UPDATED', async () => {
4897
+ const state = {example: 'value'}
4898
+
4899
+ await meeting.locusInfo.emitScoped(
4900
+ {function: 'test', file: 'test'},
4901
+ LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,
4902
+ {state}
4903
+ );
4904
+
4905
+ assert.calledWith(
4906
+ TriggerProxy.trigger,
4907
+ meeting,
4908
+ {file: 'meeting/index', function: 'setupLocusControlsListener'},
4909
+ EVENT_TRIGGERS.MEETING_CONTROLS_REACTIONS_UPDATED,
4910
+ {state},
4911
+ );
4912
+ });
4913
+
4914
+ it('listens to MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED', async () => {
4915
+ const state = {example: 'value'}
4916
+
4917
+ await meeting.locusInfo.emitScoped(
4918
+ {function: 'test', file: 'test'},
4919
+ LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,
4920
+ {state}
4921
+ );
4922
+
4923
+ assert.calledWith(
4924
+ TriggerProxy.trigger,
4925
+ meeting,
4926
+ {file: 'meeting/index', function: 'setupLocusControlsListener'},
4927
+ EVENT_TRIGGERS.MEETING_CONTROLS_VIEW_THE_PARTICIPANTS_LIST_UPDATED,
4928
+ {state},
4929
+ );
4930
+ });
4931
+
4932
+ it('listens to MEETING_CONTROLS_RAISE_HAND_UPDATED', async () => {
4933
+ const state = {example: 'value'}
4934
+
4935
+ await meeting.locusInfo.emitScoped(
4936
+ {function: 'test', file: 'test'},
4937
+ LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,
4938
+ {state}
4939
+ );
4940
+
4941
+ assert.calledWith(
4942
+ TriggerProxy.trigger,
4943
+ meeting,
4944
+ {file: 'meeting/index', function: 'setupLocusControlsListener'},
4945
+ EVENT_TRIGGERS.MEETING_CONTROLS_RAISE_HAND_UPDATED,
4946
+ {state},
4947
+ );
4948
+ });
4949
+
4842
4950
  it('listens to the timing that user joined into breakout', async () => {
4843
4951
  const mainLocusUrl = 'mainLocusUrl123';
4844
4952