@webex/plugin-meetings 3.8.0-web-workers-keepalive.1 → 3.8.1-next.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.
Files changed (168) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +70 -6
  3. package/dist/breakouts/index.js.map +1 -1
  4. package/dist/common/errors/webex-errors.js +12 -2
  5. package/dist/common/errors/webex-errors.js.map +1 -1
  6. package/dist/config.js +4 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.js +22 -123
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controls-options-manager/enums.js +2 -0
  11. package/dist/controls-options-manager/enums.js.map +1 -1
  12. package/dist/controls-options-manager/types.js.map +1 -1
  13. package/dist/controls-options-manager/util.js +52 -0
  14. package/dist/controls-options-manager/util.js.map +1 -1
  15. package/dist/interpretation/index.js +1 -1
  16. package/dist/interpretation/siLanguage.js +1 -1
  17. package/dist/locus-info/controlsUtils.js +30 -10
  18. package/dist/locus-info/controlsUtils.js.map +1 -1
  19. package/dist/locus-info/index.js +83 -12
  20. package/dist/locus-info/index.js.map +1 -1
  21. package/dist/locus-info/selfUtils.js +432 -418
  22. package/dist/locus-info/selfUtils.js.map +1 -1
  23. package/dist/media/index.js +17 -17
  24. package/dist/media/index.js.map +1 -1
  25. package/dist/media/properties.js +94 -6
  26. package/dist/media/properties.js.map +1 -1
  27. package/dist/meeting/brbState.js +9 -2
  28. package/dist/meeting/brbState.js.map +1 -1
  29. package/dist/meeting/in-meeting-actions.js +17 -1
  30. package/dist/meeting/in-meeting-actions.js.map +1 -1
  31. package/dist/meeting/index.js +568 -328
  32. package/dist/meeting/index.js.map +1 -1
  33. package/dist/meeting/locusMediaRequest.js +0 -17
  34. package/dist/meeting/locusMediaRequest.js.map +1 -1
  35. package/dist/meeting/muteState.js +4 -4
  36. package/dist/meeting/muteState.js.map +1 -1
  37. package/dist/meeting/request.js +30 -0
  38. package/dist/meeting/request.js.map +1 -1
  39. package/dist/meeting/request.type.js.map +1 -1
  40. package/dist/meeting/util.js +9 -1
  41. package/dist/meeting/util.js.map +1 -1
  42. package/dist/meeting-info/meeting-info-v2.js +19 -13
  43. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  44. package/dist/meeting-info/utilv2.js +5 -1
  45. package/dist/meeting-info/utilv2.js.map +1 -1
  46. package/dist/meetings/index.js +76 -0
  47. package/dist/meetings/index.js.map +1 -1
  48. package/dist/meetings/util.js +14 -0
  49. package/dist/meetings/util.js.map +1 -1
  50. package/dist/member/index.js +45 -9
  51. package/dist/member/index.js.map +1 -1
  52. package/dist/member/types.js +3 -0
  53. package/dist/member/types.js.map +1 -1
  54. package/dist/member/util.js +335 -356
  55. package/dist/member/util.js.map +1 -1
  56. package/dist/members/collection.js.map +1 -1
  57. package/dist/members/index.js +137 -29
  58. package/dist/members/index.js.map +1 -1
  59. package/dist/members/request.js +38 -0
  60. package/dist/members/request.js.map +1 -1
  61. package/dist/members/util.js +36 -1
  62. package/dist/members/util.js.map +1 -1
  63. package/dist/metrics/constants.js +1 -0
  64. package/dist/metrics/constants.js.map +1 -1
  65. package/dist/reachability/clusterReachability.js +23 -31
  66. package/dist/reachability/clusterReachability.js.map +1 -1
  67. package/dist/reachability/index.js +42 -2
  68. package/dist/reachability/index.js.map +1 -1
  69. package/dist/reconnection-manager/index.js +2 -2
  70. package/dist/reconnection-manager/index.js.map +1 -1
  71. package/dist/roap/index.js.map +1 -1
  72. package/dist/roap/turnDiscovery.js +45 -27
  73. package/dist/roap/turnDiscovery.js.map +1 -1
  74. package/dist/roap/types.js +17 -0
  75. package/dist/roap/types.js.map +1 -0
  76. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  77. package/dist/types/config.d.ts +2 -0
  78. package/dist/types/constants.d.ts +15 -85
  79. package/dist/types/controls-options-manager/enums.d.ts +3 -1
  80. package/dist/types/controls-options-manager/types.d.ts +7 -1
  81. package/dist/types/locus-info/index.d.ts +3 -3
  82. package/dist/types/locus-info/selfUtils.d.ts +216 -1
  83. package/dist/types/media/properties.d.ts +15 -0
  84. package/dist/types/meeting/in-meeting-actions.d.ts +16 -0
  85. package/dist/types/meeting/index.d.ts +35 -1
  86. package/dist/types/meeting/muteState.d.ts +0 -1
  87. package/dist/types/meeting/request.d.ts +12 -1
  88. package/dist/types/meeting/request.type.d.ts +6 -0
  89. package/dist/types/meeting/util.d.ts +3 -1
  90. package/dist/types/meeting-info/meeting-info-v2.d.ts +2 -1
  91. package/dist/types/meetings/index.d.ts +28 -0
  92. package/dist/types/member/index.d.ts +20 -6
  93. package/dist/types/member/types.d.ts +73 -14
  94. package/dist/types/member/util.d.ts +156 -1
  95. package/dist/types/members/collection.d.ts +6 -5
  96. package/dist/types/members/index.d.ts +32 -43
  97. package/dist/types/members/request.d.ts +26 -0
  98. package/dist/types/members/util.d.ts +27 -0
  99. package/dist/types/metrics/constants.d.ts +1 -0
  100. package/dist/types/reachability/clusterReachability.d.ts +2 -6
  101. package/dist/types/reachability/index.d.ts +8 -0
  102. package/dist/types/roap/index.d.ts +3 -2
  103. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  104. package/dist/types/roap/types.d.ts +16 -0
  105. package/dist/webinar/index.js +1 -1
  106. package/package.json +24 -23
  107. package/src/breakouts/index.ts +69 -0
  108. package/src/common/errors/webex-errors.ts +8 -1
  109. package/src/config.ts +2 -0
  110. package/src/constants.ts +23 -90
  111. package/src/controls-options-manager/enums.ts +2 -0
  112. package/src/controls-options-manager/types.ts +11 -1
  113. package/src/controls-options-manager/util.ts +62 -0
  114. package/src/locus-info/controlsUtils.ts +48 -12
  115. package/src/locus-info/index.ts +88 -13
  116. package/src/locus-info/selfUtils.ts +496 -442
  117. package/src/media/index.ts +23 -21
  118. package/src/media/properties.ts +96 -0
  119. package/src/meeting/brbState.ts +11 -2
  120. package/src/meeting/in-meeting-actions.ts +32 -0
  121. package/src/meeting/index.ts +356 -87
  122. package/src/meeting/locusMediaRequest.ts +0 -18
  123. package/src/meeting/muteState.ts +4 -4
  124. package/src/meeting/request.ts +36 -1
  125. package/src/meeting/request.type.ts +7 -0
  126. package/src/meeting/util.ts +9 -1
  127. package/src/meeting-info/meeting-info-v2.ts +7 -2
  128. package/src/meeting-info/utilv2.ts +5 -0
  129. package/src/meetings/index.ts +76 -0
  130. package/src/meetings/util.ts +18 -0
  131. package/src/member/index.ts +57 -22
  132. package/src/member/types.ts +82 -16
  133. package/src/member/util.ts +357 -353
  134. package/src/members/collection.ts +4 -3
  135. package/src/members/index.ts +137 -18
  136. package/src/members/request.ts +44 -0
  137. package/src/members/util.ts +43 -1
  138. package/src/metrics/constants.ts +1 -0
  139. package/src/reachability/clusterReachability.ts +26 -25
  140. package/src/reachability/index.ts +55 -1
  141. package/src/reconnection-manager/index.ts +2 -2
  142. package/src/roap/index.ts +3 -7
  143. package/src/roap/turnDiscovery.ts +34 -39
  144. package/src/roap/types.ts +23 -0
  145. package/test/unit/spec/breakouts/index.ts +167 -95
  146. package/test/unit/spec/controls-options-manager/util.js +120 -0
  147. package/test/unit/spec/locus-info/controlsUtils.js +131 -9
  148. package/test/unit/spec/locus-info/index.js +195 -73
  149. package/test/unit/spec/locus-info/selfUtils.js +98 -24
  150. package/test/unit/spec/media/index.ts +150 -18
  151. package/test/unit/spec/media/properties.ts +130 -0
  152. package/test/unit/spec/meeting/brbState.ts +40 -2
  153. package/test/unit/spec/meeting/in-meeting-actions.ts +19 -4
  154. package/test/unit/spec/meeting/index.js +553 -36
  155. package/test/unit/spec/meeting/locusMediaRequest.ts +0 -30
  156. package/test/unit/spec/meeting/muteState.js +73 -2
  157. package/test/unit/spec/meeting/request.js +32 -1
  158. package/test/unit/spec/meeting/utils.js +79 -33
  159. package/test/unit/spec/meeting-info/meetinginfov2.js +41 -0
  160. package/test/unit/spec/meeting-info/utilv2.js +19 -0
  161. package/test/unit/spec/meetings/index.js +68 -1
  162. package/test/unit/spec/members/index.js +304 -78
  163. package/test/unit/spec/members/request.js +68 -22
  164. package/test/unit/spec/members/utils.js +75 -0
  165. package/test/unit/spec/reachability/clusterReachability.ts +41 -55
  166. package/test/unit/spec/reachability/index.ts +89 -0
  167. package/test/unit/spec/reconnection-manager/index.js +4 -4
  168. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
@@ -406,6 +406,74 @@ describe('plugin-meetings', () => {
406
406
  });
407
407
  });
408
408
 
409
+ describe('canUpdateAnnotation()', () => {
410
+ beforeEach(() => {
411
+ sinon.stub(ControlsOptionsUtil, 'hasHints').returns(true);
412
+ });
413
+
414
+ it('should call hasHints() with proper hints when `enabled` is true', () => {
415
+ ControlsOptionsUtil.canUpdateAnnotation({properties: {enabled: true}}, []);
416
+
417
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
418
+ requiredHints: [DISPLAY_HINTS.ENABLE_ANNOTATION_MEETING_OPTION],
419
+ displayHints: [],
420
+ });
421
+ });
422
+
423
+ it('should call hasHints() with proper hints when `enabled` is false', () => {
424
+ ControlsOptionsUtil.canUpdateAnnotation({properties: {enabled: false}}, []);
425
+
426
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
427
+ requiredHints: [DISPLAY_HINTS.DISABLE_ANNOTATION_MEETING_OPTION],
428
+ displayHints: [],
429
+ });
430
+ });
431
+
432
+ it('should return the resolution of hasHints()', () => {
433
+ const expected = 'example-return-value';
434
+ ControlsOptionsUtil.hasHints.returns(expected);
435
+
436
+ const results = ControlsOptionsUtil.canUpdateAnnotation({properties: {}}, []);
437
+
438
+ assert.calledOnce(ControlsOptionsUtil.hasHints);
439
+ assert.equal(results, expected);
440
+ });
441
+ });
442
+
443
+ describe('canUpdateRemoteDesktopControl()', () => {
444
+ beforeEach(() => {
445
+ sinon.stub(ControlsOptionsUtil, 'hasHints').returns(true);
446
+ });
447
+
448
+ it('should call hasHints() with proper hints when `enabled` is true', () => {
449
+ ControlsOptionsUtil.canUpdateRemoteDesktopControl({properties: {enabled: true}}, []);
450
+
451
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
452
+ requiredHints: [DISPLAY_HINTS.ENABLE_RDC_MEETING_OPTION],
453
+ displayHints: [],
454
+ });
455
+ });
456
+
457
+ it('should call hasHints() with proper hints when `enabled` is false', () => {
458
+ ControlsOptionsUtil.canUpdateRemoteDesktopControl({properties: {enabled: false}}, []);
459
+
460
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
461
+ requiredHints: [DISPLAY_HINTS.DISABLE_RDC_MEETING_OPTION],
462
+ displayHints: [],
463
+ });
464
+ });
465
+
466
+ it('should return the resolution of hasHints()', () => {
467
+ const expected = 'example-return-value';
468
+ ControlsOptionsUtil.hasHints.returns(expected);
469
+
470
+ const results = ControlsOptionsUtil.canUpdateRemoteDesktopControl({properties: {}}, []);
471
+
472
+ assert.calledOnce(ControlsOptionsUtil.hasHints);
473
+ assert.equal(results, expected);
474
+ });
475
+ });
476
+
409
477
  describe('canUpdate()', () => {
410
478
  const displayHints = [];
411
479
 
@@ -416,6 +484,8 @@ describe('plugin-meetings', () => {
416
484
  ControlsOptionsUtil.canUpdateShareControl = sinon.stub().returns(true);
417
485
  ControlsOptionsUtil.canUpdateVideo = sinon.stub().returns(true);
418
486
  ControlsOptionsUtil.canUpdateViewTheParticipantsList = sinon.stub().returns(true);
487
+ ControlsOptionsUtil.canUpdateAnnotation = sinon.stub().returns(true);
488
+ ControlsOptionsUtil.canUpdateRemoteDesktopControl = sinon.stub().returns(true);
419
489
  });
420
490
 
421
491
  it('should only call canUpdateAudio() if the scope is audio', () => {
@@ -429,6 +499,8 @@ describe('plugin-meetings', () => {
429
499
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
430
500
  assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
431
501
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
502
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
503
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
432
504
  assert.isTrue(results);
433
505
  });
434
506
 
@@ -443,6 +515,8 @@ describe('plugin-meetings', () => {
443
515
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
444
516
  assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
445
517
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
518
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
519
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
446
520
  assert.isTrue(results);
447
521
  });
448
522
 
@@ -457,6 +531,8 @@ describe('plugin-meetings', () => {
457
531
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
458
532
  assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
459
533
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
534
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
535
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
460
536
  assert.isTrue(results);
461
537
  });
462
538
 
@@ -471,6 +547,8 @@ describe('plugin-meetings', () => {
471
547
  assert.calledWith(ControlsOptionsUtil.canUpdateShareControl, displayHints);
472
548
  assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
473
549
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
550
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
551
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
474
552
  assert.isTrue(results);
475
553
  });
476
554
 
@@ -485,6 +563,8 @@ describe('plugin-meetings', () => {
485
563
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
486
564
  assert.calledWith(ControlsOptionsUtil.canUpdateVideo, control, displayHints);
487
565
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
566
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
567
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
488
568
  assert.isTrue(results);
489
569
  });
490
570
 
@@ -503,6 +583,44 @@ describe('plugin-meetings', () => {
503
583
  control,
504
584
  displayHints
505
585
  );
586
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
587
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
588
+ assert.isTrue(results);
589
+ });
590
+
591
+ it('should only call canUpdateAnnotation() if the scope is annotation', () => {
592
+ const control = {scope: 'annotation'};
593
+
594
+ const results = ControlsOptionsUtil.canUpdate(control, displayHints);
595
+
596
+ assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
597
+ assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
598
+ assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
599
+ assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
600
+ assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
601
+ assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
602
+ assert.calledWith(ControlsOptionsUtil.canUpdateAnnotation, control, displayHints);
603
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
604
+ assert.isTrue(results);
605
+ });
606
+
607
+ it('should only call canUpdateRemoteDesktopControl() if the scope is rdc', () => {
608
+ const control = {scope: 'rdc'};
609
+
610
+ const results = ControlsOptionsUtil.canUpdate(control, displayHints);
611
+
612
+ assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
613
+ assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
614
+ assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
615
+ assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
616
+ assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
617
+ assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
618
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
619
+ assert.calledWith(
620
+ ControlsOptionsUtil.canUpdateRemoteDesktopControl,
621
+ control,
622
+ displayHints
623
+ );
506
624
  assert.isTrue(results);
507
625
  });
508
626
 
@@ -517,6 +635,8 @@ describe('plugin-meetings', () => {
517
635
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
518
636
  assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
519
637
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
638
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
639
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
520
640
  assert.isFalse(results);
521
641
  });
522
642
  });
@@ -1,6 +1,10 @@
1
1
  import {assert} from '@webex/test-helper-chai';
2
2
  import ControlsUtils from '@webex/plugin-meetings/src/locus-info/controlsUtils';
3
3
  import controlsUtils from "@webex/plugin-meetings/src/locus-info/controlsUtils";
4
+ import {
5
+ MEETING_STATE,
6
+ BREAKOUTS,
7
+ } from '../../../../src/constants';
4
8
 
5
9
  const defaultControls = {
6
10
  entryExitTone: {
@@ -140,7 +144,25 @@ describe('plugin-meetings', () => {
140
144
  assert.equal(parsedControls.videoLayout.overrideDefault, newControls.videoLayout.overrideDefault);
141
145
  assert.equal(parsedControls.videoLayout.lockAttendeeViewOnStageOnly, newControls.videoLayout.lockAttendeeViewOnStageOnly);
142
146
  assert.equal(parsedControls.videoLayout.stageParameters, newControls.videoLayout.stageParameters);
147
+ });
148
+
149
+ it('should parse the annotationControl control', () => {
150
+ const newControls = {annotationControl: {enabled: true}};
151
+
152
+ const parsedControls = ControlsUtils.parse(newControls);
153
+
154
+ assert.equal(
155
+ parsedControls.annotationControl.enabled,
156
+ newControls.annotationControl.enabled
157
+ );
158
+ });
159
+
160
+ it('should parse the rdcControl control', () => {
161
+ const newControls = {rdcControl: {enabled: true}};
143
162
 
163
+ const parsedControls = ControlsUtils.parse(newControls);
164
+
165
+ assert.equal(parsedControls.rdcControl.enabled, newControls.rdcControl.enabled);
144
166
  });
145
167
 
146
168
  describe('videoEnabled', () => {
@@ -373,6 +395,58 @@ describe('plugin-meetings', () => {
373
395
  assert.equal(updates.hasManualCaptionChanged, false);
374
396
  });
375
397
 
398
+ it('returns hasAnnotationControlChanged = true when changed', () => {
399
+ const newControls = {annotationControl: {enabled: true}};
400
+
401
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
402
+
403
+ assert.equal(updates.hasAnnotationControlChanged, true);
404
+ });
405
+
406
+ it('returns hasRemoteDesktopControlChanged = true when changed', () => {
407
+ const newControls = {rdcControl: {enabled: true}};
408
+
409
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
410
+
411
+ assert.equal(updates.hasRemoteDesktopControlChanged, true);
412
+ });
413
+
414
+ it('returns false when previous spoken language is undefined and current is a invalid value', () => {
415
+ const previous = { transcribe: undefined };
416
+ const current = { transcribe: { spokenLanguage: null } };
417
+
418
+ const {updates} = ControlsUtils.getControls(previous, current);
419
+
420
+ assert.equal(updates.hasTranscribeSpokenLanguageChanged, false);
421
+ });
422
+
423
+ it('detects spoken language change when previous is undefined and current is a valid value', () => {
424
+ const previous = { transcribe: undefined };
425
+ const current = { transcribe: { spokenLanguage: 'en-US' } };
426
+
427
+ const {updates} = ControlsUtils.getControls(previous, current);
428
+
429
+ assert.equal(updates.hasTranscribeSpokenLanguageChanged, true);
430
+ });
431
+
432
+ it('returns false when spoken language changes to a same value', () => {
433
+ const previous = { transcribe: {caption: true, spokenLanguage: 'en-US' } };
434
+ const current = { transcribe: {caption: true, spokenLanguage: 'en-US' } };
435
+
436
+ const {updates} = ControlsUtils.getControls(previous, current);
437
+
438
+ assert.equal(updates.hasTranscribeSpokenLanguageChanged, false);
439
+ });
440
+
441
+ it('returns true when spoken language changes to a different value', () => {
442
+ const previous = { transcribe: {caption: true, spokenLanguage: 'en-US' } };
443
+ const current = { transcribe: {caption: true, spokenLanguage: 'fr-FR' } };
444
+
445
+ const {updates} = ControlsUtils.getControls(previous, current);
446
+
447
+ assert.equal(updates.hasTranscribeSpokenLanguageChanged, true);
448
+ });
449
+
376
450
  describe('videoEnabled', () => {
377
451
  const testVideoEnabled = (oldControls, newControls, updatedProperty) => {
378
452
  const result = ControlsUtils.getControls(oldControls, newControls);
@@ -432,28 +506,76 @@ describe('plugin-meetings', () => {
432
506
 
433
507
  describe('getSessionSwitchStatus', () => {
434
508
  it('if no breakout control, return switch status both false', () => {
435
- const oldControls = {};
436
- const newControls = {};
437
- assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldControls, newControls), {
509
+ const oldLocus = {};
510
+ const newLocus = {};
511
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldLocus, newLocus), {
438
512
  isReturnToMain: false, isJoinToBreakout: false
439
513
  });
440
514
  });
441
515
 
442
516
  it('if switch session from breakout to main, return isReturnToMain as true', () => {
443
- const oldControls = {breakout: {sessionType: 'BREAKOUT'}};
444
- const newControls = {breakout: {sessionType: 'MAIN'}};
445
- assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldControls, newControls), {
517
+ const oldLocus = {controls: {breakout: {sessionType: 'BREAKOUT'}}};
518
+ const newLocus = {controls: {breakout: {sessionType: 'MAIN'}}};
519
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldLocus, newLocus), {
446
520
  isReturnToMain: true, isJoinToBreakout: false
447
521
  });
448
522
  });
449
523
 
450
524
  it('if switch session from main to breakout, return isJoinToBreakout as true', () => {
451
- const oldControls = {breakout: {sessionType: 'MAIN'}};
452
- const newControls = {breakout: {sessionType: 'BREAKOUT'}};
453
- assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldControls, newControls), {
525
+ const oldLocus = {controls: {breakout: {sessionType: 'MAIN'}}};
526
+ const newLocus = {controls: {breakout: {sessionType: 'BREAKOUT'}}};
527
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldLocus, newLocus), {
454
528
  isReturnToMain: false, isJoinToBreakout: true
455
529
  });
456
530
  });
531
+
532
+ it('if needUseCache conditions are met, return isJoinToBreakout as true', () => {
533
+ const oldLocus = {
534
+ self: { isCreator: true },
535
+ controls: { breakout: { sessionType: BREAKOUTS.SESSION_TYPES.MAIN} },
536
+ };
537
+
538
+ const newLocus = {
539
+ participants: [
540
+ { isCreator: true, state: MEETING_STATE.STATES.JOINED },
541
+ ],
542
+ controls: {
543
+ breakout: {
544
+ sessionType: BREAKOUTS.SESSION_TYPES.MAIN,
545
+ groups: [{ id: 'group1' }]
546
+ },
547
+ },
548
+ };
549
+
550
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldLocus, newLocus), {
551
+ isReturnToMain: true,
552
+ isJoinToBreakout: false
553
+ });
554
+ });
555
+
556
+ it('if needUseCache conditions are not met, return newLocus and isReturnToMain as false', () => {
557
+ const oldLocus = {
558
+ self: { isCreator: false },
559
+ controls: { breakout: { sessionType: BREAKOUTS.SESSION_TYPES.BREAKOUT} },
560
+ };
561
+
562
+ const newLocus = {
563
+ participants: [
564
+ { isCreator: true, state: MEETING_STATE.STATES.JOINED },
565
+ ],
566
+ controls: {
567
+ breakout: {
568
+ sessionType: BREAKOUTS.SESSION_TYPES.BREAKOUT,
569
+ groups: []
570
+ },
571
+ },
572
+ };
573
+
574
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldLocus, newLocus), {
575
+ isReturnToMain: false,
576
+ isJoinToBreakout: false
577
+ });
578
+ });
457
579
  });
458
580
 
459
581
  describe('#isMainSessionDTO', () => {