@webex/plugin-meetings 3.8.0 → 3.8.1-next.10

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 (361) hide show
  1. package/README.md +26 -13
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +70 -6
  4. package/dist/breakouts/index.js.map +1 -1
  5. package/dist/common/errors/webex-errors.js +12 -2
  6. package/dist/common/errors/webex-errors.js.map +1 -1
  7. package/dist/config.js +5 -1
  8. package/dist/config.js.map +1 -1
  9. package/dist/constants.js +28 -123
  10. package/dist/constants.js.map +1 -1
  11. package/dist/controls-options-manager/enums.js +3 -0
  12. package/dist/controls-options-manager/enums.js.map +1 -1
  13. package/dist/controls-options-manager/types.js.map +1 -1
  14. package/dist/controls-options-manager/util.js +78 -0
  15. package/dist/controls-options-manager/util.js.map +1 -1
  16. package/dist/interpretation/index.js +4 -4
  17. package/dist/interpretation/index.js.map +1 -1
  18. package/dist/interpretation/siLanguage.js +1 -1
  19. package/dist/locus-info/controlsUtils.js +37 -11
  20. package/dist/locus-info/controlsUtils.js.map +1 -1
  21. package/dist/locus-info/index.js +92 -12
  22. package/dist/locus-info/index.js.map +1 -1
  23. package/dist/locus-info/selfUtils.js +432 -418
  24. package/dist/locus-info/selfUtils.js.map +1 -1
  25. package/dist/media/index.js +17 -17
  26. package/dist/media/index.js.map +1 -1
  27. package/dist/media/properties.js +94 -6
  28. package/dist/media/properties.js.map +1 -1
  29. package/dist/meeting/brbState.js +9 -2
  30. package/dist/meeting/brbState.js.map +1 -1
  31. package/dist/meeting/in-meeting-actions.js +21 -1
  32. package/dist/meeting/in-meeting-actions.js.map +1 -1
  33. package/dist/meeting/index.js +678 -344
  34. package/dist/meeting/index.js.map +1 -1
  35. package/dist/meeting/locusMediaRequest.js +21 -22
  36. package/dist/meeting/locusMediaRequest.js.map +1 -1
  37. package/dist/meeting/muteState.js +4 -4
  38. package/dist/meeting/muteState.js.map +1 -1
  39. package/dist/meeting/request.js +30 -0
  40. package/dist/meeting/request.js.map +1 -1
  41. package/dist/meeting/request.type.js.map +1 -1
  42. package/dist/meeting/util.js +13 -2
  43. package/dist/meeting/util.js.map +1 -1
  44. package/dist/meeting-info/meeting-info-v2.js +373 -68
  45. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  46. package/dist/meeting-info/utilv2.js +5 -1
  47. package/dist/meeting-info/utilv2.js.map +1 -1
  48. package/dist/meetings/index.js +136 -1
  49. package/dist/meetings/index.js.map +1 -1
  50. package/dist/meetings/util.js +14 -0
  51. package/dist/meetings/util.js.map +1 -1
  52. package/dist/member/index.js +55 -9
  53. package/dist/member/index.js.map +1 -1
  54. package/dist/member/types.js +3 -0
  55. package/dist/member/types.js.map +1 -1
  56. package/dist/member/util.js +335 -353
  57. package/dist/member/util.js.map +1 -1
  58. package/dist/members/collection.js.map +1 -1
  59. package/dist/members/index.js +137 -29
  60. package/dist/members/index.js.map +1 -1
  61. package/dist/members/request.js +38 -0
  62. package/dist/members/request.js.map +1 -1
  63. package/dist/members/util.js +36 -1
  64. package/dist/members/util.js.map +1 -1
  65. package/dist/metrics/constants.js +10 -0
  66. package/dist/metrics/constants.js.map +1 -1
  67. package/dist/multistream/remoteMediaManager.js +40 -8
  68. package/dist/multistream/remoteMediaManager.js.map +1 -1
  69. package/dist/reachability/clusterReachability.js +63 -27
  70. package/dist/reachability/clusterReachability.js.map +1 -1
  71. package/dist/reachability/index.js +107 -47
  72. package/dist/reachability/index.js.map +1 -1
  73. package/dist/reachability/reachability.types.js +14 -0
  74. package/dist/reachability/reachability.types.js.map +1 -1
  75. package/dist/reachability/request.js +19 -3
  76. package/dist/reachability/request.js.map +1 -1
  77. package/dist/reconnection-manager/index.js +2 -2
  78. package/dist/reconnection-manager/index.js.map +1 -1
  79. package/dist/recording-controller/util.js +5 -5
  80. package/dist/recording-controller/util.js.map +1 -1
  81. package/dist/roap/index.js.map +1 -1
  82. package/dist/roap/turnDiscovery.js +45 -27
  83. package/dist/roap/turnDiscovery.js.map +1 -1
  84. package/dist/roap/types.js +17 -0
  85. package/dist/roap/types.js.map +1 -0
  86. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  87. package/dist/types/config.d.ts +3 -0
  88. package/dist/types/constants.d.ts +20 -85
  89. package/dist/types/controls-options-manager/enums.d.ts +4 -1
  90. package/dist/types/controls-options-manager/types.d.ts +10 -1
  91. package/dist/types/locus-info/index.d.ts +3 -3
  92. package/dist/types/locus-info/selfUtils.d.ts +216 -1
  93. package/dist/types/media/properties.d.ts +15 -0
  94. package/dist/types/meeting/in-meeting-actions.d.ts +20 -0
  95. package/dist/types/meeting/index.d.ts +65 -1
  96. package/dist/types/meeting/muteState.d.ts +0 -1
  97. package/dist/types/meeting/request.d.ts +12 -1
  98. package/dist/types/meeting/request.type.d.ts +6 -0
  99. package/dist/types/meeting/util.d.ts +3 -1
  100. package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
  101. package/dist/types/meetings/index.d.ts +57 -0
  102. package/dist/types/member/index.d.ts +21 -6
  103. package/dist/types/member/types.d.ts +73 -14
  104. package/dist/types/member/util.d.ts +156 -1
  105. package/dist/types/members/collection.d.ts +6 -5
  106. package/dist/types/members/index.d.ts +32 -43
  107. package/dist/types/members/request.d.ts +26 -0
  108. package/dist/types/members/util.d.ts +27 -0
  109. package/dist/types/metrics/constants.d.ts +10 -0
  110. package/dist/types/multistream/remoteMediaManager.d.ts +10 -1
  111. package/dist/types/reachability/clusterReachability.d.ts +15 -7
  112. package/dist/types/reachability/index.d.ts +10 -1
  113. package/dist/types/reachability/reachability.types.d.ts +5 -0
  114. package/dist/types/roap/index.d.ts +3 -2
  115. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  116. package/dist/types/roap/types.d.ts +16 -0
  117. package/dist/webinar/index.js +2 -2
  118. package/dist/webinar/index.js.map +1 -1
  119. package/package.json +24 -23
  120. package/src/breakouts/index.ts +69 -0
  121. package/src/common/errors/webex-errors.ts +8 -1
  122. package/src/config.ts +3 -0
  123. package/src/constants.ts +30 -90
  124. package/src/controls-options-manager/enums.ts +3 -0
  125. package/src/controls-options-manager/types.ts +16 -1
  126. package/src/controls-options-manager/util.ts +93 -0
  127. package/src/interpretation/index.ts +3 -3
  128. package/src/locus-info/controlsUtils.ts +59 -14
  129. package/src/locus-info/index.ts +97 -13
  130. package/src/locus-info/selfUtils.ts +496 -442
  131. package/src/media/index.ts +23 -21
  132. package/src/media/properties.ts +96 -0
  133. package/src/meeting/brbState.ts +11 -2
  134. package/src/meeting/in-meeting-actions.ts +40 -0
  135. package/src/meeting/index.ts +470 -105
  136. package/src/meeting/locusMediaRequest.ts +27 -22
  137. package/src/meeting/muteState.ts +4 -4
  138. package/src/meeting/request.ts +36 -1
  139. package/src/meeting/request.type.ts +7 -0
  140. package/src/meeting/util.ts +11 -2
  141. package/src/meeting-info/meeting-info-v2.ts +254 -8
  142. package/src/meeting-info/utilv2.ts +5 -0
  143. package/src/meetings/index.ts +148 -1
  144. package/src/meetings/util.ts +18 -0
  145. package/src/member/index.ts +68 -22
  146. package/src/member/types.ts +82 -16
  147. package/src/member/util.ts +357 -350
  148. package/src/members/collection.ts +4 -3
  149. package/src/members/index.ts +137 -18
  150. package/src/members/request.ts +44 -0
  151. package/src/members/util.ts +43 -1
  152. package/src/metrics/constants.ts +10 -0
  153. package/src/multistream/remoteMediaManager.ts +32 -10
  154. package/src/reachability/clusterReachability.ts +73 -26
  155. package/src/reachability/index.ts +62 -1
  156. package/src/reachability/reachability.types.ts +6 -0
  157. package/src/reachability/request.ts +7 -0
  158. package/src/reconnection-manager/index.ts +2 -2
  159. package/src/recording-controller/util.ts +17 -13
  160. package/src/roap/index.ts +3 -7
  161. package/src/roap/turnDiscovery.ts +34 -39
  162. package/src/roap/types.ts +23 -0
  163. package/src/webinar/index.ts +1 -1
  164. package/test/unit/spec/breakouts/index.ts +167 -95
  165. package/test/unit/spec/controls-options-manager/util.js +178 -0
  166. package/test/unit/spec/interpretation/index.ts +39 -1
  167. package/test/unit/spec/locus-info/controlsUtils.js +155 -9
  168. package/test/unit/spec/locus-info/index.js +209 -73
  169. package/test/unit/spec/locus-info/selfUtils.js +98 -24
  170. package/test/unit/spec/media/index.ts +150 -18
  171. package/test/unit/spec/media/properties.ts +130 -0
  172. package/test/unit/spec/meeting/brbState.ts +40 -2
  173. package/test/unit/spec/meeting/in-meeting-actions.ts +23 -4
  174. package/test/unit/spec/meeting/index.js +804 -139
  175. package/test/unit/spec/meeting/locusMediaRequest.ts +95 -87
  176. package/test/unit/spec/meeting/muteState.js +73 -2
  177. package/test/unit/spec/meeting/request.js +32 -1
  178. package/test/unit/spec/meeting/utils.js +119 -18
  179. package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
  180. package/test/unit/spec/meeting-info/utilv2.js +19 -0
  181. package/test/unit/spec/meetings/index.js +146 -2
  182. package/test/unit/spec/member/index.js +7 -0
  183. package/test/unit/spec/member/util.js +24 -0
  184. package/test/unit/spec/members/index.js +304 -78
  185. package/test/unit/spec/members/request.js +68 -22
  186. package/test/unit/spec/members/utils.js +75 -0
  187. package/test/unit/spec/multistream/remoteMediaManager.ts +397 -118
  188. package/test/unit/spec/reachability/clusterReachability.ts +88 -56
  189. package/test/unit/spec/reachability/index.ts +97 -0
  190. package/test/unit/spec/reachability/request.js +47 -2
  191. package/test/unit/spec/reconnection-manager/index.js +4 -4
  192. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
  193. package/test/unit/spec/webinar/index.ts +5 -0
  194. package/dist/annotation/annotation.types.d.ts +0 -42
  195. package/dist/annotation/constants.d.ts +0 -31
  196. package/dist/annotation/index.d.ts +0 -117
  197. package/dist/breakouts/breakout.d.ts +0 -8
  198. package/dist/breakouts/collection.d.ts +0 -5
  199. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  200. package/dist/breakouts/events.d.ts +0 -8
  201. package/dist/breakouts/index.d.ts +0 -5
  202. package/dist/breakouts/request.d.ts +0 -22
  203. package/dist/breakouts/utils.d.ts +0 -15
  204. package/dist/common/browser-detection.d.ts +0 -9
  205. package/dist/common/collection.d.ts +0 -48
  206. package/dist/common/config.d.ts +0 -2
  207. package/dist/common/errors/captcha-error.d.ts +0 -15
  208. package/dist/common/errors/intent-to-join.d.ts +0 -16
  209. package/dist/common/errors/join-meeting.d.ts +0 -17
  210. package/dist/common/errors/media.d.ts +0 -15
  211. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  212. package/dist/common/errors/parameter.d.ts +0 -15
  213. package/dist/common/errors/password-error.d.ts +0 -15
  214. package/dist/common/errors/permission.d.ts +0 -14
  215. package/dist/common/errors/reclaim-host-role-error.js +0 -149
  216. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  217. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  218. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  219. package/dist/common/errors/reconnection-in-progress.js +0 -33
  220. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  221. package/dist/common/errors/reconnection.d.ts +0 -15
  222. package/dist/common/errors/stats.d.ts +0 -15
  223. package/dist/common/errors/webex-errors.d.ts +0 -93
  224. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  225. package/dist/common/events/events-scope.d.ts +0 -17
  226. package/dist/common/events/events.d.ts +0 -12
  227. package/dist/common/events/trigger-proxy.d.ts +0 -2
  228. package/dist/common/events/util.d.ts +0 -2
  229. package/dist/common/logs/logger-config.d.ts +0 -2
  230. package/dist/common/logs/logger-proxy.d.ts +0 -2
  231. package/dist/common/logs/request.d.ts +0 -36
  232. package/dist/common/queue.d.ts +0 -34
  233. package/dist/config.d.ts +0 -72
  234. package/dist/constants.d.ts +0 -1088
  235. package/dist/controls-options-manager/constants.d.ts +0 -4
  236. package/dist/controls-options-manager/enums.d.ts +0 -15
  237. package/dist/controls-options-manager/index.d.ts +0 -136
  238. package/dist/controls-options-manager/types.d.ts +0 -43
  239. package/dist/controls-options-manager/util.d.ts +0 -1
  240. package/dist/index.d.ts +0 -7
  241. package/dist/interceptors/index.d.ts +0 -2
  242. package/dist/interceptors/locusRetry.d.ts +0 -27
  243. package/dist/interpretation/collection.d.ts +0 -5
  244. package/dist/interpretation/index.d.ts +0 -5
  245. package/dist/interpretation/siLanguage.d.ts +0 -5
  246. package/dist/locus-info/controlsUtils.d.ts +0 -2
  247. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  248. package/dist/locus-info/fullState.d.ts +0 -2
  249. package/dist/locus-info/hostUtils.d.ts +0 -2
  250. package/dist/locus-info/index.d.ts +0 -322
  251. package/dist/locus-info/infoUtils.d.ts +0 -2
  252. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  253. package/dist/locus-info/parser.d.ts +0 -272
  254. package/dist/locus-info/selfUtils.d.ts +0 -2
  255. package/dist/media/index.d.ts +0 -34
  256. package/dist/media/properties.d.ts +0 -93
  257. package/dist/media/util.d.ts +0 -2
  258. package/dist/mediaQualityMetrics/config.d.ts +0 -241
  259. package/dist/mediaQualityMetrics/config.js +0 -502
  260. package/dist/mediaQualityMetrics/config.js.map +0 -1
  261. package/dist/meeting/effectsState.js +0 -260
  262. package/dist/meeting/effectsState.js.map +0 -1
  263. package/dist/meeting/in-meeting-actions.d.ts +0 -167
  264. package/dist/meeting/index.d.ts +0 -1825
  265. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  266. package/dist/meeting/muteState.d.ts +0 -178
  267. package/dist/meeting/request.d.ts +0 -295
  268. package/dist/meeting/request.type.d.ts +0 -11
  269. package/dist/meeting/state.d.ts +0 -9
  270. package/dist/meeting/util.d.ts +0 -119
  271. package/dist/meeting/voicea-meeting.d.ts +0 -16
  272. package/dist/meeting-info/collection.d.ts +0 -20
  273. package/dist/meeting-info/index.d.ts +0 -69
  274. package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
  275. package/dist/meeting-info/request.d.ts +0 -22
  276. package/dist/meeting-info/util.d.ts +0 -2
  277. package/dist/meeting-info/utilv2.d.ts +0 -2
  278. package/dist/meetings/collection.d.ts +0 -40
  279. package/dist/meetings/index.d.ts +0 -390
  280. package/dist/meetings/meetings.types.d.ts +0 -4
  281. package/dist/meetings/request.d.ts +0 -27
  282. package/dist/meetings/util.d.ts +0 -18
  283. package/dist/member/index.d.ts +0 -160
  284. package/dist/member/member.types.js +0 -17
  285. package/dist/member/member.types.js.map +0 -1
  286. package/dist/member/types.d.ts +0 -32
  287. package/dist/member/util.d.ts +0 -2
  288. package/dist/members/collection.d.ts +0 -29
  289. package/dist/members/index.d.ts +0 -353
  290. package/dist/members/request.d.ts +0 -114
  291. package/dist/members/types.d.ts +0 -25
  292. package/dist/members/util.d.ts +0 -215
  293. package/dist/metrics/config.js +0 -276
  294. package/dist/metrics/config.js.map +0 -1
  295. package/dist/metrics/constants.d.ts +0 -70
  296. package/dist/metrics/index.d.ts +0 -45
  297. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  298. package/dist/multistream/receiveSlot.d.ts +0 -68
  299. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  300. package/dist/multistream/remoteMedia.d.ts +0 -72
  301. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  302. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  303. package/dist/multistream/sendSlotManager.d.ts +0 -69
  304. package/dist/networkQualityMonitor/index.d.ts +0 -70
  305. package/dist/networkQualityMonitor/index.js +0 -221
  306. package/dist/networkQualityMonitor/index.js.map +0 -1
  307. package/dist/peer-connection-manager/index.js +0 -671
  308. package/dist/peer-connection-manager/index.js.map +0 -1
  309. package/dist/peer-connection-manager/util.js +0 -109
  310. package/dist/peer-connection-manager/util.js.map +0 -1
  311. package/dist/personal-meeting-room/index.d.ts +0 -47
  312. package/dist/personal-meeting-room/request.d.ts +0 -14
  313. package/dist/personal-meeting-room/util.d.ts +0 -2
  314. package/dist/reachability/clusterReachability.d.ts +0 -109
  315. package/dist/reachability/index.d.ts +0 -105
  316. package/dist/reachability/request.d.ts +0 -39
  317. package/dist/reachability/util.d.ts +0 -8
  318. package/dist/reactions/constants.d.ts +0 -3
  319. package/dist/reactions/reactions.d.ts +0 -4
  320. package/dist/reactions/reactions.type.d.ts +0 -52
  321. package/dist/reconnection-manager/index.d.ts +0 -136
  322. package/dist/recording-controller/enums.d.ts +0 -7
  323. package/dist/recording-controller/index.d.ts +0 -207
  324. package/dist/recording-controller/util.d.ts +0 -14
  325. package/dist/roap/collection.js +0 -62
  326. package/dist/roap/collection.js.map +0 -1
  327. package/dist/roap/handler.js +0 -275
  328. package/dist/roap/handler.js.map +0 -1
  329. package/dist/roap/index.d.ts +0 -86
  330. package/dist/roap/request.d.ts +0 -39
  331. package/dist/roap/state.js +0 -126
  332. package/dist/roap/state.js.map +0 -1
  333. package/dist/roap/turnDiscovery.d.ts +0 -155
  334. package/dist/roap/util.js +0 -75
  335. package/dist/roap/util.js.map +0 -1
  336. package/dist/rtcMetrics/constants.d.ts +0 -4
  337. package/dist/rtcMetrics/constants.js +0 -11
  338. package/dist/rtcMetrics/constants.js.map +0 -1
  339. package/dist/rtcMetrics/index.d.ts +0 -61
  340. package/dist/rtcMetrics/index.js +0 -197
  341. package/dist/rtcMetrics/index.js.map +0 -1
  342. package/dist/statsAnalyzer/global.d.ts +0 -36
  343. package/dist/statsAnalyzer/global.js +0 -126
  344. package/dist/statsAnalyzer/global.js.map +0 -1
  345. package/dist/statsAnalyzer/index.d.ts +0 -217
  346. package/dist/statsAnalyzer/index.js +0 -1013
  347. package/dist/statsAnalyzer/index.js.map +0 -1
  348. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
  349. package/dist/statsAnalyzer/mqaUtil.js +0 -179
  350. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  351. package/dist/transcription/index.d.ts +0 -64
  352. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  353. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  354. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  355. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  356. package/dist/types/rtcMetrics/index.d.ts +0 -71
  357. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  358. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  359. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  360. package/dist/webinar/collection.d.ts +0 -16
  361. package/dist/webinar/index.d.ts +0 -5
@@ -406,6 +406,108 @@ 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
+
477
+ describe('canUpdatePollingQA()', () => {
478
+ beforeEach(() => {
479
+ sinon.stub(ControlsOptionsUtil, 'hasHints').returns(true);
480
+ });
481
+
482
+ it('should call hasHints() with proper hints when `enabled` is true', () => {
483
+ ControlsOptionsUtil.canUpdatePollingQA({properties: {enabled: true}}, []);
484
+
485
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
486
+ requiredHints: [DISPLAY_HINTS.ENABLE_ATTENDEE_START_POLLING_QA],
487
+ displayHints: [],
488
+ });
489
+ });
490
+
491
+ it('should call hasHints() with proper hints when `enabled` is false', () => {
492
+ ControlsOptionsUtil.canUpdatePollingQA({properties: {enabled: false}}, []);
493
+
494
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
495
+ requiredHints: [DISPLAY_HINTS.DISABLE_ATTENDEE_START_POLLING_QA],
496
+ displayHints: [],
497
+ });
498
+ });
499
+
500
+ it('should return the resolution of hasHints()', () => {
501
+ const expected = 'example-return-value';
502
+ ControlsOptionsUtil.hasHints.returns(expected);
503
+
504
+ const results = ControlsOptionsUtil.canUpdatePollingQA({properties: {}}, []);
505
+
506
+ assert.calledOnce(ControlsOptionsUtil.hasHints);
507
+ assert.equal(results, expected);
508
+ });
509
+ });
510
+
409
511
  describe('canUpdate()', () => {
410
512
  const displayHints = [];
411
513
 
@@ -416,6 +518,9 @@ describe('plugin-meetings', () => {
416
518
  ControlsOptionsUtil.canUpdateShareControl = sinon.stub().returns(true);
417
519
  ControlsOptionsUtil.canUpdateVideo = sinon.stub().returns(true);
418
520
  ControlsOptionsUtil.canUpdateViewTheParticipantsList = sinon.stub().returns(true);
521
+ ControlsOptionsUtil.canUpdateAnnotation = sinon.stub().returns(true);
522
+ ControlsOptionsUtil.canUpdateRemoteDesktopControl = sinon.stub().returns(true);
523
+ ControlsOptionsUtil.canUpdatePollingQA = sinon.stub().returns(true);
419
524
  });
420
525
 
421
526
  it('should only call canUpdateAudio() if the scope is audio', () => {
@@ -429,6 +534,8 @@ describe('plugin-meetings', () => {
429
534
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
430
535
  assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
431
536
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
537
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
538
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
432
539
  assert.isTrue(results);
433
540
  });
434
541
 
@@ -443,6 +550,8 @@ describe('plugin-meetings', () => {
443
550
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
444
551
  assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
445
552
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
553
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
554
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
446
555
  assert.isTrue(results);
447
556
  });
448
557
 
@@ -457,6 +566,8 @@ describe('plugin-meetings', () => {
457
566
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
458
567
  assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
459
568
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
569
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
570
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
460
571
  assert.isTrue(results);
461
572
  });
462
573
 
@@ -471,6 +582,8 @@ describe('plugin-meetings', () => {
471
582
  assert.calledWith(ControlsOptionsUtil.canUpdateShareControl, displayHints);
472
583
  assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
473
584
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
585
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
586
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
474
587
  assert.isTrue(results);
475
588
  });
476
589
 
@@ -485,6 +598,8 @@ describe('plugin-meetings', () => {
485
598
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
486
599
  assert.calledWith(ControlsOptionsUtil.canUpdateVideo, control, displayHints);
487
600
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
601
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
602
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
488
603
  assert.isTrue(results);
489
604
  });
490
605
 
@@ -503,6 +618,66 @@ describe('plugin-meetings', () => {
503
618
  control,
504
619
  displayHints
505
620
  );
621
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
622
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
623
+ assert.isTrue(results);
624
+ });
625
+
626
+ it('should only call canUpdateAnnotation() if the scope is annotation', () => {
627
+ const control = {scope: 'annotation'};
628
+
629
+ const results = ControlsOptionsUtil.canUpdate(control, displayHints);
630
+
631
+ assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
632
+ assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
633
+ assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
634
+ assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
635
+ assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
636
+ assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
637
+ assert.calledWith(ControlsOptionsUtil.canUpdateAnnotation, control, displayHints);
638
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
639
+ assert.isTrue(results);
640
+ });
641
+
642
+ it('should only call canUpdateRemoteDesktopControl() if the scope is rdc', () => {
643
+ const control = {scope: 'rdc'};
644
+
645
+ const results = ControlsOptionsUtil.canUpdate(control, displayHints);
646
+
647
+ assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
648
+ assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
649
+ assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
650
+ assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
651
+ assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
652
+ assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
653
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
654
+ assert.calledWith(
655
+ ControlsOptionsUtil.canUpdateRemoteDesktopControl,
656
+ control,
657
+ displayHints
658
+ );
659
+ assert.callCount(ControlsOptionsUtil.canUpdatePollingQA, 0);
660
+ assert.isTrue(results);
661
+ });
662
+
663
+ it('should only call canUpdatePollingQA() if the scope is pollingQA', () => {
664
+ const control = {scope: 'pollingQA'};
665
+
666
+ const results = ControlsOptionsUtil.canUpdate(control, displayHints);
667
+
668
+ assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
669
+ assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
670
+ assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
671
+ assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
672
+ assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
673
+ assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
674
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
675
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
676
+ assert.calledWith(
677
+ ControlsOptionsUtil.canUpdatePollingQA,
678
+ control,
679
+ displayHints
680
+ );
506
681
  assert.isTrue(results);
507
682
  });
508
683
 
@@ -517,6 +692,9 @@ describe('plugin-meetings', () => {
517
692
  assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
518
693
  assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
519
694
  assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
695
+ assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
696
+ assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
697
+ assert.callCount(ControlsOptionsUtil.canUpdatePollingQA, 0);
520
698
  assert.isFalse(results);
521
699
  });
522
700
  });
@@ -22,16 +22,54 @@ describe('plugin-meetings', () => {
22
22
  });
23
23
 
24
24
  describe('#initialize', () => {
25
+ beforeEach(() => {
26
+ interpretation.querySupportLanguages = sinon.stub();
27
+ interpretation.set({
28
+ canManageInterpreters: undefined,
29
+ hostSIEnabled: undefined,
30
+ locusUrl: undefined
31
+ });
32
+ });
33
+
34
+ afterEach(() => {
35
+ interpretation.querySupportLanguages.reset();
36
+ });
37
+
25
38
  it('creates SimultaneousInterpretation as expected', () => {
26
39
  assert.equal(interpretation.namespace, 'Meetings');
27
40
  });
28
41
  it('call querySupportLanguages correctly when meet the conditions', () => {
29
- interpretation.querySupportLanguages = sinon.stub();
30
42
  interpretation.set({
31
43
  canManageInterpreters: true,
44
+ hostSIEnabled: true,
45
+ locusUrl: "MOCK_LOCUS_URL"
32
46
  });
33
47
  assert.called(interpretation.querySupportLanguages);
34
48
  });
49
+
50
+ it('does not call querySupportLanguages when canManageInterpreters is not set', () => {
51
+ interpretation.set({
52
+ hostSIEnabled: true,
53
+ locusUrl: "MOCK_LOCUS_URL"
54
+ });
55
+ assert.notCalled(interpretation.querySupportLanguages);
56
+ });
57
+
58
+ it('does not call querySupportLanguages when hostSIEnabled is not set', () => {
59
+ interpretation.set({
60
+ canManageInterpreters: true,
61
+ locusUrl: "MOCK_LOCUS_URL"
62
+ });
63
+ assert.notCalled(interpretation.querySupportLanguages);
64
+ });
65
+
66
+ it('does not call querySupportLanguages when locusUrl is not set', () => {
67
+ interpretation.set({
68
+ canManageInterpreters: true,
69
+ hostSIEnabled: true,
70
+ });
71
+ assert.notCalled(interpretation.querySupportLanguages);
72
+ });
35
73
  });
36
74
 
37
75
  describe('#cleanUp', () => {
@@ -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,33 @@ 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}};
162
+
163
+ const parsedControls = ControlsUtils.parse(newControls);
143
164
 
165
+ assert.equal(parsedControls.rdcControl.enabled, newControls.rdcControl.enabled);
166
+ });
167
+
168
+ it('should parse the pollingQAControl control', () => {
169
+ const newControls = {pollingQAControl: {enabled: true}};
170
+
171
+ const parsedControls = ControlsUtils.parse(newControls);
172
+
173
+ assert.equal(parsedControls.pollingQAControl.enabled, newControls.pollingQAControl.enabled);
144
174
  });
145
175
 
146
176
  describe('videoEnabled', () => {
@@ -269,6 +299,14 @@ describe('plugin-meetings', () => {
269
299
  assert.equal(updates.hasPracticeSessionEnabledChanged, true);
270
300
  });
271
301
 
302
+ it('returns hasPracticeSessionEnabledChanged = false when enabled is false and previous state is false', () => {
303
+ const newControls = {practiceSession: {enabled: false}};
304
+
305
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
306
+
307
+ assert.equal(updates.hasPracticeSessionEnabledChanged, false);
308
+ });
309
+
272
310
  it('returns hasEntryExitToneChanged = true when mode changed', () => {
273
311
  const newControls = {
274
312
  entryExitTone: {
@@ -365,6 +403,66 @@ describe('plugin-meetings', () => {
365
403
  assert.equal(updates.hasManualCaptionChanged, false);
366
404
  });
367
405
 
406
+ it('returns hasAnnotationControlChanged = true when changed', () => {
407
+ const newControls = {annotationControl: {enabled: true}};
408
+
409
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
410
+
411
+ assert.equal(updates.hasAnnotationControlChanged, true);
412
+ });
413
+
414
+ it('returns hasRemoteDesktopControlChanged = true when changed', () => {
415
+ const newControls = {rdcControl: {enabled: true}};
416
+
417
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
418
+
419
+ assert.equal(updates.hasRemoteDesktopControlChanged, true);
420
+ });
421
+
422
+ it('returns hasPollingQAControlChanged = true when changed', () => {
423
+ const newControls = {pollingQAControl: {enabled: true}};
424
+
425
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
426
+
427
+ assert.equal(updates.hasPollingQAControlChanged, true);
428
+ });
429
+
430
+ it('returns false when previous spoken language is undefined and current is a invalid value', () => {
431
+ const previous = { transcribe: undefined };
432
+ const current = { transcribe: { spokenLanguage: null } };
433
+
434
+ const {updates} = ControlsUtils.getControls(previous, current);
435
+
436
+ assert.equal(updates.hasTranscribeSpokenLanguageChanged, false);
437
+ });
438
+
439
+ it('detects spoken language change when previous is undefined and current is a valid value', () => {
440
+ const previous = { transcribe: undefined };
441
+ const current = { transcribe: { spokenLanguage: 'en-US' } };
442
+
443
+ const {updates} = ControlsUtils.getControls(previous, current);
444
+
445
+ assert.equal(updates.hasTranscribeSpokenLanguageChanged, true);
446
+ });
447
+
448
+ it('returns false when spoken language changes to a same value', () => {
449
+ const previous = { transcribe: {caption: true, spokenLanguage: 'en-US' } };
450
+ const current = { transcribe: {caption: true, spokenLanguage: 'en-US' } };
451
+
452
+ const {updates} = ControlsUtils.getControls(previous, current);
453
+
454
+ assert.equal(updates.hasTranscribeSpokenLanguageChanged, false);
455
+ });
456
+
457
+ it('returns true when spoken language changes to a different value', () => {
458
+ const previous = { transcribe: {caption: true, spokenLanguage: 'en-US' } };
459
+ const current = { transcribe: {caption: true, spokenLanguage: 'fr-FR' } };
460
+
461
+ const {updates} = ControlsUtils.getControls(previous, current);
462
+
463
+ assert.equal(updates.hasTranscribeSpokenLanguageChanged, true);
464
+ });
465
+
368
466
  describe('videoEnabled', () => {
369
467
  const testVideoEnabled = (oldControls, newControls, updatedProperty) => {
370
468
  const result = ControlsUtils.getControls(oldControls, newControls);
@@ -424,28 +522,76 @@ describe('plugin-meetings', () => {
424
522
 
425
523
  describe('getSessionSwitchStatus', () => {
426
524
  it('if no breakout control, return switch status both false', () => {
427
- const oldControls = {};
428
- const newControls = {};
429
- assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldControls, newControls), {
525
+ const oldLocus = {};
526
+ const newLocus = {};
527
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldLocus, newLocus), {
430
528
  isReturnToMain: false, isJoinToBreakout: false
431
529
  });
432
530
  });
433
531
 
434
532
  it('if switch session from breakout to main, return isReturnToMain as true', () => {
435
- const oldControls = {breakout: {sessionType: 'BREAKOUT'}};
436
- const newControls = {breakout: {sessionType: 'MAIN'}};
437
- assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldControls, newControls), {
533
+ const oldLocus = {controls: {breakout: {sessionType: 'BREAKOUT'}}};
534
+ const newLocus = {controls: {breakout: {sessionType: 'MAIN'}}};
535
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldLocus, newLocus), {
438
536
  isReturnToMain: true, isJoinToBreakout: false
439
537
  });
440
538
  });
441
539
 
442
540
  it('if switch session from main to breakout, return isJoinToBreakout as true', () => {
443
- const oldControls = {breakout: {sessionType: 'MAIN'}};
444
- const newControls = {breakout: {sessionType: 'BREAKOUT'}};
445
- assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldControls, newControls), {
541
+ const oldLocus = {controls: {breakout: {sessionType: 'MAIN'}}};
542
+ const newLocus = {controls: {breakout: {sessionType: 'BREAKOUT'}}};
543
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldLocus, newLocus), {
446
544
  isReturnToMain: false, isJoinToBreakout: true
447
545
  });
448
546
  });
547
+
548
+ it('if needUseCache conditions are met, return isJoinToBreakout as true', () => {
549
+ const oldLocus = {
550
+ self: { isCreator: true },
551
+ controls: { breakout: { sessionType: BREAKOUTS.SESSION_TYPES.MAIN} },
552
+ };
553
+
554
+ const newLocus = {
555
+ participants: [
556
+ { isCreator: true, state: MEETING_STATE.STATES.JOINED },
557
+ ],
558
+ controls: {
559
+ breakout: {
560
+ sessionType: BREAKOUTS.SESSION_TYPES.MAIN,
561
+ groups: [{ id: 'group1' }]
562
+ },
563
+ },
564
+ };
565
+
566
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldLocus, newLocus), {
567
+ isReturnToMain: true,
568
+ isJoinToBreakout: false
569
+ });
570
+ });
571
+
572
+ it('if needUseCache conditions are not met, return newLocus and isReturnToMain as false', () => {
573
+ const oldLocus = {
574
+ self: { isCreator: false },
575
+ controls: { breakout: { sessionType: BREAKOUTS.SESSION_TYPES.BREAKOUT} },
576
+ };
577
+
578
+ const newLocus = {
579
+ participants: [
580
+ { isCreator: true, state: MEETING_STATE.STATES.JOINED },
581
+ ],
582
+ controls: {
583
+ breakout: {
584
+ sessionType: BREAKOUTS.SESSION_TYPES.BREAKOUT,
585
+ groups: []
586
+ },
587
+ },
588
+ };
589
+
590
+ assert.deepEqual(controlsUtils.getSessionSwitchStatus(oldLocus, newLocus), {
591
+ isReturnToMain: false,
592
+ isJoinToBreakout: false
593
+ });
594
+ });
449
595
  });
450
596
 
451
597
  describe('#isMainSessionDTO', () => {