@webex/plugin-meetings 3.0.0-bnr.4 → 3.0.0-stream-classes.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 (303) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +70 -32
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +422 -217
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +12 -1
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/webex-errors.js +3 -2
  17. package/dist/common/errors/webex-errors.js.map +1 -1
  18. package/dist/common/logs/logger-proxy.js +1 -1
  19. package/dist/common/logs/logger-proxy.js.map +1 -1
  20. package/dist/common/logs/request.d.ts +1 -1
  21. package/dist/common/queue.js +24 -9
  22. package/dist/common/queue.js.map +1 -1
  23. package/dist/config.js +1 -7
  24. package/dist/config.js.map +1 -1
  25. package/dist/constants.js +118 -24
  26. package/dist/constants.js.map +1 -1
  27. package/dist/controls-options-manager/enums.js +2 -0
  28. package/dist/controls-options-manager/enums.js.map +1 -1
  29. package/dist/controls-options-manager/index.js +19 -14
  30. package/dist/controls-options-manager/index.js.map +1 -1
  31. package/dist/controls-options-manager/types.js.map +1 -1
  32. package/dist/controls-options-manager/util.js +80 -11
  33. package/dist/controls-options-manager/util.js.map +1 -1
  34. package/dist/index.js +62 -20
  35. package/dist/index.js.map +1 -1
  36. package/dist/interpretation/collection.js +23 -0
  37. package/dist/interpretation/collection.js.map +1 -0
  38. package/dist/interpretation/index.js +366 -0
  39. package/dist/interpretation/index.js.map +1 -0
  40. package/dist/interpretation/siLanguage.js +25 -0
  41. package/dist/interpretation/siLanguage.js.map +1 -0
  42. package/dist/locus-info/controlsUtils.js +71 -1
  43. package/dist/locus-info/controlsUtils.js.map +1 -1
  44. package/dist/locus-info/index.js +305 -57
  45. package/dist/locus-info/index.js.map +1 -1
  46. package/dist/locus-info/infoUtils.js +7 -1
  47. package/dist/locus-info/infoUtils.js.map +1 -1
  48. package/dist/locus-info/mediaSharesUtils.js +43 -1
  49. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  50. package/dist/locus-info/parser.js +219 -63
  51. package/dist/locus-info/parser.js.map +1 -1
  52. package/dist/locus-info/selfUtils.js +44 -22
  53. package/dist/locus-info/selfUtils.js.map +1 -1
  54. package/dist/media/index.js +57 -104
  55. package/dist/media/index.js.map +1 -1
  56. package/dist/media/properties.js +60 -121
  57. package/dist/media/properties.js.map +1 -1
  58. package/dist/meeting/in-meeting-actions.js +61 -3
  59. package/dist/meeting/in-meeting-actions.js.map +1 -1
  60. package/dist/meeting/index.js +2530 -2534
  61. package/dist/meeting/index.js.map +1 -1
  62. package/dist/meeting/locusMediaRequest.js +292 -0
  63. package/dist/meeting/locusMediaRequest.js.map +1 -0
  64. package/dist/meeting/muteState.js +125 -205
  65. package/dist/meeting/muteState.js.map +1 -1
  66. package/dist/meeting/request.js +150 -150
  67. package/dist/meeting/request.js.map +1 -1
  68. package/dist/meeting/util.js +568 -438
  69. package/dist/meeting/util.js.map +1 -1
  70. package/dist/meeting-info/index.js +48 -7
  71. package/dist/meeting-info/index.js.map +1 -1
  72. package/dist/meeting-info/meeting-info-v2.js +94 -38
  73. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  74. package/dist/meeting-info/utilv2.js +4 -2
  75. package/dist/meeting-info/utilv2.js.map +1 -1
  76. package/dist/meetings/index.d.ts +0 -2
  77. package/dist/meetings/index.js +260 -85
  78. package/dist/meetings/index.js.map +1 -1
  79. package/dist/meetings/meetings.types.js +7 -0
  80. package/dist/meetings/meetings.types.js.map +1 -0
  81. package/dist/meetings/util.js +42 -7
  82. package/dist/meetings/util.js.map +1 -1
  83. package/dist/member/index.d.ts +2 -0
  84. package/dist/member/index.js +26 -0
  85. package/dist/member/index.js.map +1 -1
  86. package/dist/member/member.types.d.ts +11 -0
  87. package/dist/member/member.types.js +18 -0
  88. package/dist/member/member.types.js.map +1 -0
  89. package/dist/member/types.js +11 -1
  90. package/dist/member/types.js.map +1 -1
  91. package/dist/member/util.js +60 -23
  92. package/dist/member/util.js.map +1 -1
  93. package/dist/members/index.js +4 -1
  94. package/dist/members/index.js.map +1 -1
  95. package/dist/members/request.js +75 -45
  96. package/dist/members/request.js.map +1 -1
  97. package/dist/members/util.js +308 -317
  98. package/dist/members/util.js.map +1 -1
  99. package/dist/metrics/config.js +1 -3
  100. package/dist/metrics/config.js.map +1 -1
  101. package/dist/metrics/constants.js +1 -0
  102. package/dist/metrics/constants.js.map +1 -1
  103. package/dist/metrics/index.d.ts +1 -1
  104. package/dist/metrics/index.js +1 -451
  105. package/dist/metrics/index.js.map +1 -1
  106. package/dist/multistream/mediaRequestManager.js +136 -40
  107. package/dist/multistream/mediaRequestManager.js.map +1 -1
  108. package/dist/multistream/receiveSlot.js.map +1 -1
  109. package/dist/multistream/receiveSlotManager.js +4 -4
  110. package/dist/multistream/receiveSlotManager.js.map +1 -1
  111. package/dist/multistream/remoteMedia.js.map +1 -1
  112. package/dist/multistream/remoteMediaGroup.js +60 -3
  113. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  114. package/dist/multistream/remoteMediaManager.js +36 -0
  115. package/dist/multistream/remoteMediaManager.js.map +1 -1
  116. package/dist/multistream/sendSlotManager.js +233 -0
  117. package/dist/multistream/sendSlotManager.js.map +1 -0
  118. package/dist/reachability/index.js +18 -3
  119. package/dist/reachability/index.js.map +1 -1
  120. package/dist/reachability/request.js +5 -3
  121. package/dist/reachability/request.js.map +1 -1
  122. package/dist/reconnection-manager/index.js +181 -153
  123. package/dist/reconnection-manager/index.js.map +1 -1
  124. package/dist/recording-controller/index.js +21 -2
  125. package/dist/recording-controller/index.js.map +1 -1
  126. package/dist/recording-controller/util.js +9 -8
  127. package/dist/recording-controller/util.js.map +1 -1
  128. package/dist/roap/index.js +25 -32
  129. package/dist/roap/index.js.map +1 -1
  130. package/dist/roap/request.js +42 -51
  131. package/dist/roap/request.js.map +1 -1
  132. package/dist/roap/turnDiscovery.js +97 -38
  133. package/dist/roap/turnDiscovery.js.map +1 -1
  134. package/dist/rtcMetrics/constants.js +12 -0
  135. package/dist/rtcMetrics/constants.js.map +1 -0
  136. package/dist/rtcMetrics/index.js +117 -0
  137. package/dist/rtcMetrics/index.js.map +1 -0
  138. package/dist/statsAnalyzer/index.js +0 -1
  139. package/dist/statsAnalyzer/index.js.map +1 -1
  140. package/dist/types/annotation/annotation.types.d.ts +43 -0
  141. package/dist/types/annotation/constants.d.ts +31 -0
  142. package/dist/types/annotation/index.d.ts +124 -0
  143. package/dist/types/breakouts/events.d.ts +2 -0
  144. package/dist/types/breakouts/utils.d.ts +7 -0
  145. package/dist/types/common/errors/webex-errors.d.ts +1 -1
  146. package/dist/types/config.d.ts +0 -6
  147. package/dist/types/constants.d.ts +51 -21
  148. package/dist/types/controls-options-manager/enums.d.ts +2 -0
  149. package/dist/types/controls-options-manager/index.d.ts +1 -1
  150. package/dist/types/controls-options-manager/types.d.ts +7 -1
  151. package/dist/types/index.d.ts +1 -1
  152. package/dist/types/interpretation/collection.d.ts +5 -0
  153. package/dist/types/interpretation/index.d.ts +5 -0
  154. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  155. package/dist/types/locus-info/index.d.ts +39 -1
  156. package/dist/types/media/index.d.ts +2 -0
  157. package/dist/types/media/properties.d.ts +16 -38
  158. package/dist/types/meeting/in-meeting-actions.d.ts +46 -2
  159. package/dist/types/meeting/index.d.ts +179 -379
  160. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  161. package/dist/types/meeting/muteState.d.ts +39 -40
  162. package/dist/types/meeting/request.d.ts +25 -26
  163. package/dist/types/meeting/util.d.ts +74 -1
  164. package/dist/types/meeting-info/meeting-info-v2.d.ts +14 -3
  165. package/dist/types/meetings/index.d.ts +49 -1
  166. package/dist/types/meetings/meetings.types.d.ts +4 -0
  167. package/dist/types/member/index.d.ts +2 -0
  168. package/dist/types/members/request.d.ts +56 -11
  169. package/dist/types/members/util.d.ts +209 -1
  170. package/dist/types/metrics/config.d.ts +26 -2
  171. package/dist/types/metrics/constants.d.ts +1 -0
  172. package/dist/types/metrics/index.d.ts +17 -0
  173. package/dist/types/multistream/mediaRequestManager.d.ts +27 -10
  174. package/dist/types/multistream/receiveSlot.d.ts +3 -3
  175. package/dist/types/multistream/remoteMedia.d.ts +2 -2
  176. package/dist/types/multistream/remoteMediaManager.d.ts +14 -0
  177. package/dist/types/roap/request.d.ts +6 -8
  178. package/dist/types/roap/turnDiscovery.d.ts +18 -1
  179. package/package.json +3 -2
  180. package/src/annotation/annotation.types.ts +50 -0
  181. package/src/annotation/constants.ts +36 -0
  182. package/src/annotation/index.ts +328 -0
  183. package/src/breakouts/README.md +3 -2
  184. package/src/breakouts/breakout.ts +62 -27
  185. package/src/breakouts/events.ts +56 -0
  186. package/src/breakouts/index.ts +244 -64
  187. package/src/breakouts/utils.ts +13 -0
  188. package/src/common/errors/webex-errors.ts +6 -2
  189. package/src/common/logs/logger-proxy.ts +1 -1
  190. package/src/common/queue.ts +22 -8
  191. package/src/config.ts +0 -6
  192. package/src/constants.ts +111 -19
  193. package/src/controls-options-manager/enums.ts +2 -0
  194. package/src/controls-options-manager/index.ts +13 -10
  195. package/src/controls-options-manager/types.ts +10 -0
  196. package/src/controls-options-manager/util.ts +82 -11
  197. package/src/index.ts +18 -11
  198. package/src/interpretation/README.md +60 -0
  199. package/src/interpretation/collection.ts +19 -0
  200. package/src/interpretation/index.ts +332 -0
  201. package/src/interpretation/siLanguage.ts +18 -0
  202. package/src/locus-info/controlsUtils.ts +81 -0
  203. package/src/locus-info/index.ts +318 -57
  204. package/src/locus-info/infoUtils.ts +10 -2
  205. package/src/locus-info/mediaSharesUtils.ts +48 -0
  206. package/src/locus-info/parser.ts +224 -39
  207. package/src/locus-info/selfUtils.ts +32 -20
  208. package/src/media/index.ts +94 -108
  209. package/src/media/properties.ts +69 -109
  210. package/src/meeting/in-meeting-actions.ts +120 -4
  211. package/src/meeting/index.ts +1967 -2120
  212. package/src/meeting/locusMediaRequest.ts +314 -0
  213. package/src/meeting/muteState.ts +119 -194
  214. package/src/meeting/request.ts +122 -115
  215. package/src/meeting/util.ts +549 -413
  216. package/src/meeting-info/index.ts +54 -8
  217. package/src/meeting-info/meeting-info-v2.ts +89 -24
  218. package/src/meeting-info/utilv2.ts +6 -2
  219. package/src/meetings/index.ts +247 -87
  220. package/src/meetings/meetings.types.ts +12 -0
  221. package/src/meetings/util.ts +47 -12
  222. package/src/member/index.ts +28 -1
  223. package/src/member/types.ts +14 -0
  224. package/src/member/util.ts +75 -26
  225. package/src/members/index.ts +7 -1
  226. package/src/members/request.ts +61 -21
  227. package/src/members/util.ts +316 -326
  228. package/src/metrics/constants.ts +1 -0
  229. package/src/metrics/index.ts +1 -474
  230. package/src/multistream/mediaRequestManager.ts +183 -67
  231. package/src/multistream/receiveSlot.ts +4 -4
  232. package/src/multistream/receiveSlotManager.ts +4 -4
  233. package/src/multistream/remoteMedia.ts +2 -2
  234. package/src/multistream/remoteMediaGroup.ts +59 -0
  235. package/src/multistream/remoteMediaManager.ts +33 -0
  236. package/src/multistream/sendSlotManager.ts +170 -0
  237. package/src/reachability/index.ts +15 -4
  238. package/src/reachability/request.ts +7 -3
  239. package/src/reconnection-manager/index.ts +36 -29
  240. package/src/recording-controller/index.ts +20 -3
  241. package/src/recording-controller/util.ts +26 -9
  242. package/src/roap/index.ts +25 -30
  243. package/src/roap/request.ts +44 -51
  244. package/src/roap/turnDiscovery.ts +51 -25
  245. package/src/rtcMetrics/constants.ts +3 -0
  246. package/src/rtcMetrics/index.ts +100 -0
  247. package/src/statsAnalyzer/index.ts +0 -1
  248. package/test/integration/spec/converged-space-meetings.js +60 -3
  249. package/test/integration/spec/journey.js +336 -259
  250. package/test/integration/spec/space-meeting.js +76 -3
  251. package/test/unit/spec/annotation/index.ts +418 -0
  252. package/test/unit/spec/breakouts/breakout.ts +85 -26
  253. package/test/unit/spec/breakouts/events.ts +89 -0
  254. package/test/unit/spec/breakouts/index.ts +636 -98
  255. package/test/unit/spec/breakouts/utils.js +19 -1
  256. package/test/unit/spec/common/queue.js +31 -2
  257. package/test/unit/spec/controls-options-manager/index.js +8 -1
  258. package/test/unit/spec/controls-options-manager/util.js +576 -397
  259. package/test/unit/spec/fixture/locus.js +1 -0
  260. package/test/unit/spec/interpretation/collection.ts +15 -0
  261. package/test/unit/spec/interpretation/index.ts +589 -0
  262. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  263. package/test/unit/spec/locus-info/controlsUtils.js +195 -1
  264. package/test/unit/spec/locus-info/index.js +950 -45
  265. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  266. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  267. package/test/unit/spec/locus-info/parser.js +62 -22
  268. package/test/unit/spec/locus-info/selfConstant.js +19 -0
  269. package/test/unit/spec/locus-info/selfUtils.js +131 -26
  270. package/test/unit/spec/media/index.ts +82 -79
  271. package/test/unit/spec/meeting/in-meeting-actions.ts +60 -2
  272. package/test/unit/spec/meeting/index.js +3208 -1734
  273. package/test/unit/spec/meeting/locusMediaRequest.ts +443 -0
  274. package/test/unit/spec/meeting/muteState.js +328 -417
  275. package/test/unit/spec/meeting/request.js +393 -48
  276. package/test/unit/spec/meeting/utils.js +552 -76
  277. package/test/unit/spec/meeting-info/index.js +181 -0
  278. package/test/unit/spec/meeting-info/meetinginfov2.js +258 -20
  279. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  280. package/test/unit/spec/meetings/index.js +631 -145
  281. package/test/unit/spec/meetings/utils.js +164 -9
  282. package/test/unit/spec/member/index.js +44 -14
  283. package/test/unit/spec/member/util.js +296 -155
  284. package/test/unit/spec/members/index.js +23 -3
  285. package/test/unit/spec/members/request.js +167 -35
  286. package/test/unit/spec/metrics/index.js +1 -50
  287. package/test/unit/spec/multistream/mediaRequestManager.ts +366 -8
  288. package/test/unit/spec/multistream/receiveSlot.ts +1 -1
  289. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  290. package/test/unit/spec/multistream/remoteMediaManager.ts +123 -0
  291. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  292. package/test/unit/spec/reachability/index.ts +66 -5
  293. package/test/unit/spec/reachability/request.js +3 -1
  294. package/test/unit/spec/reconnection-manager/index.js +55 -5
  295. package/test/unit/spec/recording-controller/index.js +294 -218
  296. package/test/unit/spec/recording-controller/util.js +223 -96
  297. package/test/unit/spec/roap/index.ts +21 -48
  298. package/test/unit/spec/roap/request.ts +74 -60
  299. package/test/unit/spec/roap/turnDiscovery.ts +30 -6
  300. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  301. package/test/utils/integrationTestUtils.js +46 -0
  302. package/test/utils/testUtils.js +0 -60
  303. package/src/metrics/config.ts +0 -487
@@ -41,6 +41,70 @@ 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
+
100
+ it('should parse the video control', () => {
101
+ const newControls = {video: {enabled: true}};
102
+
103
+ const parsedControls = ControlsUtils.parse(newControls);
104
+
105
+ assert.equal(parsedControls.video.enabled, newControls.video.enabled);
106
+ });
107
+
44
108
  describe('videoEnabled', () => {
45
109
  it('returns expected', () => {
46
110
  const result = ControlsUtils.parse({video: {enabled: true}});
@@ -65,6 +129,70 @@ describe('plugin-meetings', () => {
65
129
  });
66
130
 
67
131
  describe('getControls', () => {
132
+ it('returns hasMuteOnEntryChanged = true when changed', () => {
133
+ const newControls = {muteOnEntry: {enabled: true}};
134
+
135
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
136
+
137
+ assert.equal(updates.hasMuteOnEntryChanged, true);
138
+ });
139
+
140
+ it('returns hasShareControlChanged = true when changed', () => {
141
+ const newControls = {shareControl: {control: 'example-value'}};
142
+
143
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
144
+
145
+ assert.equal(updates.hasShareControlChanged, true);
146
+ });
147
+
148
+ it('returns hasDisallowUnmuteChanged = true when changed', () => {
149
+ const newControls = {disallowUnmute: {enabled: true}};
150
+
151
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
152
+
153
+ assert.equal(updates.hasDisallowUnmuteChanged, true);
154
+ });
155
+
156
+ it('returns hasReactionsChanged = true when changed', () => {
157
+ const newControls = {reactions: {enabled: true}};
158
+
159
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
160
+
161
+ assert.equal(updates.hasReactionsChanged, true);
162
+ });
163
+
164
+ it('returns hasReactionDisplayNamesChanged = true when changed', () => {
165
+ const newControls = {reactions: {showDisplayNameWithReactions: true}};
166
+
167
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
168
+
169
+ assert.equal(updates.hasReactionDisplayNamesChanged, true);
170
+ });
171
+
172
+ it('returns hasViewTheParticipantListChanged = true when changed', () => {
173
+ const newControls = {viewTheParticipantList: {enabled: true}};
174
+
175
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
176
+
177
+ assert.equal(updates.hasViewTheParticipantListChanged, true);
178
+ });
179
+
180
+ it('returns hasRaiseHandChanged = true when changed', () => {
181
+ const newControls = {raiseHand: {enabled: true}};
182
+
183
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
184
+
185
+ assert.equal(updates.hasRaiseHandChanged, true);
186
+ });
187
+
188
+ it('returns hasVideoChanged = true when changed', () => {
189
+ const newControls = {video: {enabled: true}};
190
+
191
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
192
+
193
+ assert.equal(updates.hasVideoChanged, true);
194
+ });
195
+
68
196
  it('returns hasEntryExitToneChanged = true when mode changed', () => {
69
197
  const newControls = {
70
198
  entryExitTone: {
@@ -121,6 +249,26 @@ describe('plugin-meetings', () => {
121
249
  assert.equal(updates.hasBreakoutChanged, false);
122
250
  });
123
251
 
252
+ it('returns hasInterpretationChanged = true when it has changed', () => {
253
+ const newControls = {
254
+ interpretation: 'interpretation',
255
+ };
256
+
257
+ const {updates} = ControlsUtils.getControls({interpretation: 'old one'}, newControls);
258
+
259
+ assert.equal(updates.hasInterpretationChanged, true);
260
+ });
261
+
262
+ it('returns hasInterpretationChanged = false when it has not changed', () => {
263
+ const newControls = {
264
+ interpretation: 'interpretation',
265
+ };
266
+
267
+ const {updates} = ControlsUtils.getControls({interpretation: 'interpretation'}, newControls);
268
+
269
+ assert.equal(updates.hasInterpretationChanged, false);
270
+ });
271
+
124
272
  describe('videoEnabled', () => {
125
273
  const testVideoEnabled = (oldControls, newControls, updatedProperty) => {
126
274
  const result = ControlsUtils.getControls(oldControls, newControls);
@@ -176,6 +324,52 @@ describe('plugin-meetings', () => {
176
324
  const newControls = {breakout: {sessionId: 'sessionId1', groupId: 'groupId'}};
177
325
  assert.equal(controlsUtils.isNeedReplaceMembers(oldControls, newControls), false);
178
326
  });
179
- })
327
+ });
328
+
329
+ describe('getSessionSwitchStatus', () => {
330
+ it('if no breakout control, return switch status both false', () => {
331
+ const oldControls = {};
332
+ const newControls = {};
333
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldControls, newControls), {
334
+ isReturnToMain: false, isJoinToBreakout: false
335
+ });
336
+ });
337
+
338
+ it('if switch session from breakout to main, return isReturnToMain as true', () => {
339
+ const oldControls = {breakout: {sessionType: 'BREAKOUT'}};
340
+ const newControls = {breakout: {sessionType: 'MAIN'}};
341
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldControls, newControls), {
342
+ isReturnToMain: true, isJoinToBreakout: false
343
+ });
344
+ });
345
+
346
+ it('if switch session from main to breakout, return isJoinToBreakout as true', () => {
347
+ const oldControls = {breakout: {sessionType: 'MAIN'}};
348
+ const newControls = {breakout: {sessionType: 'BREAKOUT'}};
349
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldControls, newControls), {
350
+ isReturnToMain: false, isJoinToBreakout: true
351
+ });
352
+ });
353
+ });
354
+
355
+ describe('#isMainSessionDTO', () => {
356
+ it('return false is sessionType is BREAKOUT', () => {
357
+ const locus = {
358
+ controls: {breakout: {sessionType: 'BREAKOUT'}}
359
+ };
360
+
361
+ assert.equal(controlsUtils.isMainSessionDTO(locus), false);
362
+ });
363
+
364
+ it('return true is sessionType is not BREAKOUT', () => {
365
+ const locus = {
366
+ controls: {breakout: {sessionType: 'MAIN'}}
367
+ };
368
+
369
+ assert.equal(controlsUtils.isMainSessionDTO(locus), true);
370
+
371
+ assert.equal(controlsUtils.isMainSessionDTO({}), true);
372
+ });
373
+ });
180
374
  });
181
375
  });