@webex/plugin-meetings 3.0.0-beta.27 → 3.0.0-beta.270

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 (362) 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 +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +763 -31
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/no-meeting-info.js +51 -0
  21. package/dist/common/errors/no-meeting-info.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +28 -7
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/common/queue.js +24 -9
  27. package/dist/common/queue.js.map +1 -1
  28. package/dist/config.js +5 -10
  29. package/dist/config.js.map +1 -1
  30. package/dist/constants.js +203 -28
  31. package/dist/constants.js.map +1 -1
  32. package/dist/controls-options-manager/enums.js +14 -2
  33. package/dist/controls-options-manager/enums.js.map +1 -1
  34. package/dist/controls-options-manager/index.js +109 -15
  35. package/dist/controls-options-manager/index.js.map +1 -1
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +309 -18
  39. package/dist/controls-options-manager/util.js.map +1 -1
  40. package/dist/index.js +112 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +366 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +91 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +381 -62
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/infoUtils.js +7 -1
  53. package/dist/locus-info/infoUtils.js.map +1 -1
  54. package/dist/locus-info/mediaSharesUtils.js +57 -1
  55. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  56. package/dist/locus-info/parser.js +224 -63
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.js +89 -14
  59. package/dist/locus-info/selfUtils.js.map +1 -1
  60. package/dist/media/index.js +58 -116
  61. package/dist/media/index.js.map +1 -1
  62. package/dist/media/properties.js +72 -123
  63. package/dist/media/properties.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +82 -2
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +3096 -2823
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +292 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +230 -124
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +256 -196
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/util.js +601 -417
  75. package/dist/meeting/util.js.map +1 -1
  76. package/dist/meeting-info/index.js +70 -7
  77. package/dist/meeting-info/index.js.map +1 -1
  78. package/dist/meeting-info/meeting-info-v2.js +189 -51
  79. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  80. package/dist/meeting-info/util.js +1 -1
  81. package/dist/meeting-info/util.js.map +1 -1
  82. package/dist/meeting-info/utilv2.js +36 -36
  83. package/dist/meeting-info/utilv2.js.map +1 -1
  84. package/dist/meetings/collection.js +22 -0
  85. package/dist/meetings/collection.js.map +1 -1
  86. package/dist/meetings/index.js +394 -94
  87. package/dist/meetings/index.js.map +1 -1
  88. package/dist/meetings/meetings.types.js +7 -0
  89. package/dist/meetings/meetings.types.js.map +1 -0
  90. package/dist/meetings/request.js +2 -0
  91. package/dist/meetings/request.js.map +1 -1
  92. package/dist/meetings/util.js +71 -1
  93. package/dist/meetings/util.js.map +1 -1
  94. package/dist/member/index.js +49 -0
  95. package/dist/member/index.js.map +1 -1
  96. package/dist/member/types.js +25 -0
  97. package/dist/member/types.js.map +1 -0
  98. package/dist/member/util.js +121 -25
  99. package/dist/member/util.js.map +1 -1
  100. package/dist/members/collection.js +10 -0
  101. package/dist/members/collection.js.map +1 -1
  102. package/dist/members/index.js +86 -5
  103. package/dist/members/index.js.map +1 -1
  104. package/dist/members/request.js +106 -38
  105. package/dist/members/request.js.map +1 -1
  106. package/dist/members/types.js +15 -0
  107. package/dist/members/types.js.map +1 -0
  108. package/dist/members/util.js +316 -233
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/constants.js +10 -5
  111. package/dist/metrics/constants.js.map +1 -1
  112. package/dist/metrics/index.js +1 -468
  113. package/dist/metrics/index.js.map +1 -1
  114. package/dist/multistream/mediaRequestManager.js +238 -49
  115. package/dist/multistream/mediaRequestManager.js.map +1 -1
  116. package/dist/multistream/receiveSlot.js +49 -16
  117. package/dist/multistream/receiveSlot.js.map +1 -1
  118. package/dist/multistream/receiveSlotManager.js +52 -34
  119. package/dist/multistream/receiveSlotManager.js.map +1 -1
  120. package/dist/multistream/remoteMedia.js +44 -18
  121. package/dist/multistream/remoteMedia.js.map +1 -1
  122. package/dist/multistream/remoteMediaGroup.js +60 -3
  123. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  124. package/dist/multistream/remoteMediaManager.js +209 -59
  125. package/dist/multistream/remoteMediaManager.js.map +1 -1
  126. package/dist/multistream/sendSlotManager.js +233 -0
  127. package/dist/multistream/sendSlotManager.js.map +1 -0
  128. package/dist/reachability/index.js +225 -59
  129. package/dist/reachability/index.js.map +1 -1
  130. package/dist/reachability/request.js +17 -8
  131. package/dist/reachability/request.js.map +1 -1
  132. package/dist/reconnection-manager/index.js +199 -154
  133. package/dist/reconnection-manager/index.js.map +1 -1
  134. package/dist/recording-controller/index.js +21 -2
  135. package/dist/recording-controller/index.js.map +1 -1
  136. package/dist/recording-controller/util.js +9 -8
  137. package/dist/recording-controller/util.js.map +1 -1
  138. package/dist/roap/index.js +23 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +112 -97
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +96 -36
  143. package/dist/roap/turnDiscovery.js.map +1 -1
  144. package/dist/rtcMetrics/constants.js +12 -0
  145. package/dist/rtcMetrics/constants.js.map +1 -0
  146. package/dist/rtcMetrics/index.js +117 -0
  147. package/dist/rtcMetrics/index.js.map +1 -0
  148. package/dist/statsAnalyzer/index.js +51 -34
  149. package/dist/statsAnalyzer/index.js.map +1 -1
  150. package/dist/statsAnalyzer/mqaUtil.js +6 -6
  151. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  152. package/dist/types/annotation/annotation.types.d.ts +42 -0
  153. package/dist/types/annotation/constants.d.ts +31 -0
  154. package/dist/types/annotation/index.d.ts +117 -0
  155. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  156. package/dist/types/breakouts/events.d.ts +8 -0
  157. package/dist/types/breakouts/request.d.ts +22 -0
  158. package/dist/types/breakouts/utils.d.ts +15 -0
  159. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  160. package/dist/types/common/errors/webex-errors.d.ts +13 -1
  161. package/dist/types/common/queue.d.ts +9 -7
  162. package/dist/types/config.d.ts +1 -6
  163. package/dist/types/constants.d.ts +161 -21
  164. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  165. package/dist/types/controls-options-manager/index.d.ts +17 -1
  166. package/dist/types/controls-options-manager/types.d.ts +43 -0
  167. package/dist/types/controls-options-manager/util.d.ts +1 -7
  168. package/dist/types/index.d.ts +6 -4
  169. package/dist/types/interpretation/collection.d.ts +5 -0
  170. package/dist/types/interpretation/index.d.ts +5 -0
  171. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  172. package/dist/types/locus-info/index.d.ts +57 -4
  173. package/dist/types/locus-info/parser.d.ts +65 -6
  174. package/dist/types/media/index.d.ts +2 -0
  175. package/dist/types/media/properties.d.ts +34 -48
  176. package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
  177. package/dist/types/meeting/index.d.ts +345 -507
  178. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  179. package/dist/types/meeting/muteState.d.ts +99 -23
  180. package/dist/types/meeting/request.d.ts +72 -43
  181. package/dist/types/meeting/util.d.ts +101 -1
  182. package/dist/types/meeting-info/index.d.ts +13 -1
  183. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  184. package/dist/types/meetings/collection.d.ts +8 -0
  185. package/dist/types/meetings/index.d.ts +88 -12
  186. package/dist/types/meetings/meetings.types.d.ts +4 -0
  187. package/dist/types/member/index.d.ts +13 -0
  188. package/dist/types/member/types.d.ts +32 -0
  189. package/dist/types/members/collection.d.ts +5 -0
  190. package/dist/types/members/index.d.ts +35 -2
  191. package/dist/types/members/request.d.ts +73 -9
  192. package/dist/types/members/types.d.ts +24 -0
  193. package/dist/types/members/util.d.ts +209 -1
  194. package/dist/types/metrics/constants.d.ts +9 -4
  195. package/dist/types/metrics/index.d.ts +4 -119
  196. package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
  197. package/dist/types/multistream/receiveSlot.d.ts +16 -12
  198. package/dist/types/multistream/receiveSlotManager.d.ts +19 -4
  199. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  200. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  201. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  202. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  203. package/dist/types/reachability/index.d.ts +61 -7
  204. package/dist/types/reachability/request.d.ts +7 -3
  205. package/dist/types/reconnection-manager/index.d.ts +9 -0
  206. package/dist/types/recording-controller/index.d.ts +15 -1
  207. package/dist/types/recording-controller/util.d.ts +5 -4
  208. package/dist/types/roap/request.d.ts +15 -11
  209. package/dist/types/roap/turnDiscovery.d.ts +18 -1
  210. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  211. package/dist/types/rtcMetrics/index.d.ts +47 -0
  212. package/dist/types/statsAnalyzer/index.d.ts +6 -1
  213. package/package.json +23 -20
  214. package/src/annotation/annotation.types.ts +50 -0
  215. package/src/annotation/constants.ts +36 -0
  216. package/src/annotation/index.ts +328 -0
  217. package/src/breakouts/README.md +44 -14
  218. package/src/breakouts/breakout.ts +87 -9
  219. package/src/breakouts/edit-lock-error.ts +25 -0
  220. package/src/breakouts/events.ts +56 -0
  221. package/src/breakouts/index.ts +646 -18
  222. package/src/breakouts/request.ts +55 -0
  223. package/src/breakouts/utils.ts +57 -0
  224. package/src/common/errors/no-meeting-info.ts +24 -0
  225. package/src/common/errors/webex-errors.ts +27 -2
  226. package/src/common/logs/logger-proxy.ts +1 -1
  227. package/src/common/queue.ts +22 -8
  228. package/src/config.ts +4 -9
  229. package/src/constants.ts +184 -18
  230. package/src/controls-options-manager/enums.ts +12 -0
  231. package/src/controls-options-manager/index.ts +116 -21
  232. package/src/controls-options-manager/types.ts +59 -0
  233. package/src/controls-options-manager/util.ts +294 -14
  234. package/src/index.ts +40 -0
  235. package/src/interpretation/README.md +60 -0
  236. package/src/interpretation/collection.ts +19 -0
  237. package/src/interpretation/index.ts +332 -0
  238. package/src/interpretation/siLanguage.ts +18 -0
  239. package/src/locus-info/controlsUtils.ts +108 -0
  240. package/src/locus-info/index.ts +412 -59
  241. package/src/locus-info/infoUtils.ts +10 -2
  242. package/src/locus-info/mediaSharesUtils.ts +64 -0
  243. package/src/locus-info/parser.ts +231 -39
  244. package/src/locus-info/selfUtils.ts +81 -5
  245. package/src/media/index.ts +100 -122
  246. package/src/media/properties.ts +85 -108
  247. package/src/meeting/in-meeting-actions.ts +163 -3
  248. package/src/meeting/index.ts +2495 -2314
  249. package/src/meeting/locusMediaRequest.ts +313 -0
  250. package/src/meeting/muteState.ts +229 -131
  251. package/src/meeting/request.ts +172 -121
  252. package/src/meeting/util.ts +588 -394
  253. package/src/meeting-info/index.ts +79 -8
  254. package/src/meeting-info/meeting-info-v2.ts +168 -14
  255. package/src/meeting-info/util.ts +1 -1
  256. package/src/meeting-info/utilv2.ts +23 -23
  257. package/src/meetings/collection.ts +20 -0
  258. package/src/meetings/index.ts +428 -108
  259. package/src/meetings/meetings.types.ts +12 -0
  260. package/src/meetings/request.ts +2 -0
  261. package/src/meetings/util.ts +79 -4
  262. package/src/member/index.ts +49 -0
  263. package/src/member/types.ts +38 -0
  264. package/src/member/util.ts +127 -25
  265. package/src/members/collection.ts +8 -0
  266. package/src/members/index.ts +107 -6
  267. package/src/members/request.ts +97 -17
  268. package/src/members/types.ts +28 -0
  269. package/src/members/util.ts +319 -240
  270. package/src/metrics/constants.ts +9 -4
  271. package/src/metrics/index.ts +1 -490
  272. package/src/multistream/mediaRequestManager.ts +289 -79
  273. package/src/multistream/receiveSlot.ts +55 -18
  274. package/src/multistream/receiveSlotManager.ts +46 -24
  275. package/src/multistream/remoteMedia.ts +27 -2
  276. package/src/multistream/remoteMediaGroup.ts +59 -0
  277. package/src/multistream/remoteMediaManager.ts +148 -30
  278. package/src/multistream/sendSlotManager.ts +170 -0
  279. package/src/reachability/index.ts +228 -37
  280. package/src/reachability/request.ts +17 -8
  281. package/src/reconnection-manager/index.ts +81 -54
  282. package/src/recording-controller/index.ts +20 -3
  283. package/src/recording-controller/util.ts +26 -9
  284. package/src/roap/index.ts +23 -30
  285. package/src/roap/request.ts +100 -104
  286. package/src/roap/turnDiscovery.ts +51 -25
  287. package/src/rtcMetrics/constants.ts +3 -0
  288. package/src/rtcMetrics/index.ts +100 -0
  289. package/src/statsAnalyzer/index.ts +73 -35
  290. package/src/statsAnalyzer/mqaUtil.ts +8 -10
  291. package/test/integration/spec/converged-space-meetings.js +60 -3
  292. package/test/integration/spec/journey.js +320 -261
  293. package/test/integration/spec/space-meeting.js +76 -3
  294. package/test/unit/spec/annotation/index.ts +418 -0
  295. package/test/unit/spec/breakouts/breakout.ts +142 -24
  296. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  297. package/test/unit/spec/breakouts/events.ts +89 -0
  298. package/test/unit/spec/breakouts/index.ts +1488 -67
  299. package/test/unit/spec/breakouts/request.ts +104 -0
  300. package/test/unit/spec/breakouts/utils.js +72 -0
  301. package/test/unit/spec/common/queue.js +31 -2
  302. package/test/unit/spec/controls-options-manager/index.js +163 -0
  303. package/test/unit/spec/controls-options-manager/util.js +576 -60
  304. package/test/unit/spec/fixture/locus.js +1 -0
  305. package/test/unit/spec/interpretation/collection.ts +15 -0
  306. package/test/unit/spec/interpretation/index.ts +589 -0
  307. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  308. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  309. package/test/unit/spec/locus-info/index.js +1283 -33
  310. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  311. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  312. package/test/unit/spec/locus-info/parser.js +62 -22
  313. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  314. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  315. package/test/unit/spec/media/index.ts +104 -37
  316. package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
  317. package/test/unit/spec/meeting/index.js +4172 -1947
  318. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  319. package/test/unit/spec/meeting/muteState.js +408 -208
  320. package/test/unit/spec/meeting/request.js +440 -45
  321. package/test/unit/spec/meeting/utils.js +679 -64
  322. package/test/unit/spec/meeting-info/index.js +293 -0
  323. package/test/unit/spec/meeting-info/meetinginfov2.js +517 -5
  324. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  325. package/test/unit/spec/meetings/collection.js +14 -0
  326. package/test/unit/spec/meetings/index.js +1007 -177
  327. package/test/unit/spec/meetings/utils.js +206 -2
  328. package/test/unit/spec/member/index.js +58 -4
  329. package/test/unit/spec/member/util.js +479 -35
  330. package/test/unit/spec/members/index.js +319 -1
  331. package/test/unit/spec/members/request.js +206 -27
  332. package/test/unit/spec/members/utils.js +184 -0
  333. package/test/unit/spec/metrics/index.js +1 -50
  334. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  335. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  336. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  337. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  338. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  339. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  340. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  341. package/test/unit/spec/reachability/index.ts +549 -9
  342. package/test/unit/spec/reachability/request.js +68 -0
  343. package/test/unit/spec/reconnection-manager/index.js +84 -9
  344. package/test/unit/spec/recording-controller/index.js +294 -218
  345. package/test/unit/spec/recording-controller/util.js +223 -96
  346. package/test/unit/spec/roap/index.ts +31 -51
  347. package/test/unit/spec/roap/request.ts +203 -85
  348. package/test/unit/spec/roap/turnDiscovery.ts +48 -13
  349. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  350. package/test/unit/spec/stats-analyzer/index.js +29 -2
  351. package/test/utils/integrationTestUtils.js +46 -0
  352. package/test/utils/testUtils.js +0 -52
  353. package/dist/meeting/effectsState.js +0 -262
  354. package/dist/meeting/effectsState.js.map +0 -1
  355. package/dist/metrics/config.js +0 -299
  356. package/dist/metrics/config.js.map +0 -1
  357. package/dist/types/meeting/effectsState.d.ts +0 -42
  358. package/dist/types/metrics/config.d.ts +0 -178
  359. package/src/index.js +0 -16
  360. package/src/meeting/effectsState.ts +0 -211
  361. package/src/metrics/config.ts +0 -495
  362. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -1,102 +1,229 @@
1
1
  import RecordingUtil from '@webex/plugin-meetings/src/recording-controller/util';
2
2
  import RecordingAction from '@webex/plugin-meetings/src/recording-controller/enums';
3
- import { assert } from 'chai';
3
+ import {SELF_POLICY} from '@webex/plugin-meetings/src/constants';
4
+
5
+ import {assert} from 'chai';
4
6
 
5
7
  describe('plugin-meetings', () => {
6
- describe('recording-controller tests', () => {
7
- describe('recording util tests', () => {
8
-
9
- let locusInfo;
10
-
11
- beforeEach(() => {
12
- locusInfo = {
13
- parsedLocus: {
14
- info: {
15
- userDisplayHints: [],
16
- },
17
- },
18
- };
19
- });
20
-
21
- describe('canUserStart', () => {
22
- it('can start recording when the correct display hint is present', () => {
23
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_START');
24
-
25
- assert.equal(RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints), true);
26
- });
27
-
28
- it('rejects when correct display hint is not present', () => {
29
- assert.equal(RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints), false);
30
- });
31
- });
32
-
33
- describe('canUserPause', () => {
34
- it('can pause recording when the correct display hint is present', () => {
35
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_PAUSE');
36
-
37
- assert.equal(RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints), true);
38
- });
39
-
40
- it('rejects when correct display hint is not present', () => {
41
- assert.equal(RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints), false);
42
- });
43
- });
44
-
45
- describe('canUserStop', () => {
46
- it('can stop recording when the correct display hint is present', () => {
47
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_STOP');
48
-
49
- assert.equal(RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints), true);
50
- });
51
-
52
- it('rejects when correct display hint is not present', () => {
53
- assert.equal(RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints), false);
54
- });
55
- });
56
-
57
- describe('canUserResume', () => {
58
- it('can start recording when the correct display hint is present', () => {
59
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_RESUME');
60
-
61
- assert.equal(RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints), true);
62
- });
63
-
64
- it('rejects when correct display hint is not present', () => {
65
- assert.equal(RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints), false);
66
- });
67
- });
68
-
69
- describe('deriveRecordingStates', () => {
70
- it('gets the correct values for a start recording action', () => {
71
- assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Start), {recording: true, paused: false});
72
- });
73
-
74
- it('gets the correct values for a stop recording action', () => {
75
- assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Stop), {recording: false, paused: false});
76
- });
77
-
78
- it('gets the correct values for a resume recording action', () => {
79
- assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Resume), {recording: true, paused: false});
80
- });
81
-
82
- it('gets the correct values for a paused recording action', () => {
83
- assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Pause), {recording: true, paused: true});
84
- });
85
- });
86
-
87
- describe('extractLocusId', () => {
88
- it('gets the correct id from the url param', () => {
89
- assert.equal(RecordingUtil.extractLocusId('test/id'), 'id');
90
- });
91
-
92
- it('works with empty string parameters passed', () => {
93
- assert.equal(RecordingUtil.extractLocusId(''), '');
94
- });
95
-
96
- it('works with no parameters passed', () => {
97
- assert.isUndefined(RecordingUtil.extractLocusId(undefined));
98
- });
99
- });
8
+ describe('recording-controller tests', () => {
9
+ describe('recording util tests', () => {
10
+ let locusInfo;
11
+
12
+ beforeEach(() => {
13
+ locusInfo = {
14
+ parsedLocus: {
15
+ info: {
16
+ userDisplayHints: [],
17
+ },
18
+ },
19
+ };
20
+ });
21
+
22
+ describe('canUserStart', () => {
23
+ it('can start recording when the correct display hint is present', () => {
24
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_START');
25
+
26
+ assert.equal(
27
+ RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints),
28
+ true
29
+ );
30
+ });
31
+
32
+ it('can start recording when the correct display hint is present and the policy is true', () => {
33
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_START');
34
+
35
+ assert.equal(
36
+ RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints, {
37
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: true,
38
+ }),
39
+ true
40
+ );
41
+ });
42
+
43
+ it('rejects when correct display hint is not present', () => {
44
+ assert.equal(
45
+ RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints),
46
+ false
47
+ );
48
+ });
49
+
50
+ it('rejects when correct display hint is present but policy is false', () => {
51
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_START');
52
+
53
+ assert.equal(
54
+ RecordingUtil.canUserStart(locusInfo.parsedLocus.info.userDisplayHints, {
55
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: false,
56
+ }),
57
+ false
58
+ );
59
+ });
60
+ });
61
+
62
+ describe('canUserPause', () => {
63
+ it('can pause recording when the correct display hint is present', () => {
64
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_PAUSE');
65
+
66
+ assert.equal(
67
+ RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints),
68
+ true
69
+ );
70
+ });
71
+
72
+ it('can pause recording when the correct display hint is present and the policy is true', () => {
73
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_PAUSE');
74
+
75
+ assert.equal(
76
+ RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints, {
77
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: true,
78
+ }),
79
+ true
80
+ );
81
+ });
82
+
83
+ it('rejects when correct display hint is not present', () => {
84
+ assert.equal(
85
+ RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints),
86
+ false
87
+ );
88
+ });
89
+
90
+ it('rejects when correct display hint is present but the policy is false', () => {
91
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_PAUSE');
92
+
93
+ assert.equal(
94
+ RecordingUtil.canUserPause(locusInfo.parsedLocus.info.userDisplayHints, {
95
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: false,
96
+ }),
97
+ false
98
+ );
99
+ });
100
+ });
101
+
102
+ describe('canUserStop', () => {
103
+ it('can stop recording when the correct display hint is present', () => {
104
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_STOP');
105
+
106
+ assert.equal(
107
+ RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints),
108
+ true
109
+ );
110
+ });
111
+
112
+ it('can stop recording when the correct display hint is present and the policy is true', () => {
113
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_STOP', {
114
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: true,
115
+ });
116
+
117
+ assert.equal(
118
+ RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints),
119
+ true
120
+ );
121
+ });
122
+
123
+ it('rejects when correct display hint is not present', () => {
124
+ assert.equal(
125
+ RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints),
126
+ false
127
+ );
128
+ });
129
+
130
+ it('rejects when correct display hint is present but the policy is false', () => {
131
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_STOP', {
132
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: true,
133
+ });
134
+
135
+ assert.equal(
136
+ RecordingUtil.canUserStop(locusInfo.parsedLocus.info.userDisplayHints, {
137
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: false,
138
+ }),
139
+ false
140
+ );
141
+ });
142
+ });
143
+
144
+ describe('canUserResume', () => {
145
+ it('can start recording when the correct display hint is present', () => {
146
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_RESUME');
147
+
148
+ assert.equal(
149
+ RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints),
150
+ true
151
+ );
152
+ });
153
+
154
+ it('can start recording when the correct display hint is present and the policy is true', () => {
155
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_RESUME');
156
+
157
+ assert.equal(
158
+ RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints, {
159
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: true,
160
+ }),
161
+ true
162
+ );
163
+ });
164
+
165
+ it('rejects when correct display hint is not present', () => {
166
+ assert.equal(
167
+ RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints),
168
+ false
169
+ );
170
+ });
171
+
172
+ it('rejects when correct display hint is present but the policy is false', () => {
173
+ locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_RESUME');
174
+
175
+ assert.equal(
176
+ RecordingUtil.canUserResume(locusInfo.parsedLocus.info.userDisplayHints, {
177
+ [SELF_POLICY.SUPPORT_NETWORK_BASED_RECORD]: false,
178
+ }),
179
+ false
180
+ );
181
+ });
182
+ });
183
+
184
+ describe('deriveRecordingStates', () => {
185
+ it('gets the correct values for a start recording action', () => {
186
+ assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Start), {
187
+ recording: true,
188
+ paused: false,
189
+ });
190
+ });
191
+
192
+ it('gets the correct values for a stop recording action', () => {
193
+ assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Stop), {
194
+ recording: false,
195
+ paused: false,
196
+ });
197
+ });
198
+
199
+ it('gets the correct values for a resume recording action', () => {
200
+ assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Resume), {
201
+ recording: true,
202
+ paused: false,
203
+ });
204
+ });
205
+
206
+ it('gets the correct values for a paused recording action', () => {
207
+ assert.deepEqual(RecordingUtil.deriveRecordingStates(RecordingAction.Pause), {
208
+ recording: true,
209
+ paused: true,
210
+ });
211
+ });
212
+ });
213
+
214
+ describe('extractLocusId', () => {
215
+ it('gets the correct id from the url param', () => {
216
+ assert.equal(RecordingUtil.extractLocusId('test/id'), 'id');
217
+ });
218
+
219
+ it('works with empty string parameters passed', () => {
220
+ assert.equal(RecordingUtil.extractLocusId(''), '');
221
+ });
222
+
223
+ it('works with no parameters passed', () => {
224
+ assert.isUndefined(RecordingUtil.extractLocusId(undefined));
100
225
  });
226
+ });
101
227
  });
102
- });
228
+ });
229
+ });
@@ -1,14 +1,20 @@
1
1
  import {assert} from '@webex/test-helper-chai';
2
2
  import sinon from 'sinon';
3
3
  import TurnDiscovery from '@webex/plugin-meetings/src/roap/turnDiscovery';
4
+ import MockWebex from '@webex/test-helper-mock-webex';
4
5
 
5
6
  import RoapRequest from '@webex/plugin-meetings/src/roap/request';
6
7
  import Roap from '@webex/plugin-meetings/src/roap/';
7
8
  import Meeting from '@webex/plugin-meetings/src/meeting';
9
+ import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
10
+
11
+ import { IP_VERSION } from '../../../../src/constants';
8
12
 
9
13
  describe('Roap', () => {
10
14
  describe('doTurnDiscovery', () => {
11
15
  it('calls this.turnDiscovery.doTurnDiscovery() and forwards all the arguments', async () => {
16
+ const webex = new MockWebex({});
17
+
12
18
  const RESULT = {something: 'some value'};
13
19
  const meeting = {id: 'some meeting id'} as Meeting;
14
20
 
@@ -16,7 +22,7 @@ describe('Roap', () => {
16
22
  .stub(TurnDiscovery.prototype, 'doTurnDiscovery')
17
23
  .resolves(RESULT);
18
24
 
19
- const roap = new Roap({}, {parent: 'fake'});
25
+ const roap = new Roap({}, {parent: webex});
20
26
 
21
27
  // call with isReconnecting: true
22
28
  const result = await roap.doTurnDiscovery(meeting, true);
@@ -40,19 +46,29 @@ describe('Roap', () => {
40
46
  let sendRoapStub;
41
47
  let meeting;
42
48
 
49
+ let webex;
50
+
43
51
  beforeEach(() => {
52
+ webex = new MockWebex({});
44
53
  meeting = {
45
54
  id: 'some meeting id',
46
55
  correlationId: 'correlation id',
47
56
  selfUrl: 'self url',
48
57
  mediaId: 'media id',
49
- isMultistream: false,
50
- isAudioMuted: () => true,
51
- isVideoMuted: () => false,
58
+ audio:{
59
+ isLocallyMuted: () => true,
60
+ },
61
+ video:{
62
+ isLocallyMuted: () => false,
63
+ },
52
64
  setRoapSeq: sinon.stub(),
53
65
  config: {experimental: {enableTurnDiscovery: false}},
66
+ locusMediaRequest: {fake: true},
67
+ webex: { meetings: { reachability: { isAnyPublicClusterReachable: () => true}}},
54
68
  };
55
69
 
70
+ sinon.stub(MeetingUtil, 'getIpVersion').returns(IP_VERSION.unknown);
71
+
56
72
  sendRoapStub = sinon.stub(RoapRequest.prototype, 'sendRoap').resolves({});
57
73
  meeting.setRoapSeq.resetHistory();
58
74
  });
@@ -62,19 +78,19 @@ describe('Roap', () => {
62
78
  });
63
79
 
64
80
  [
65
- {reconnect: true, enableTurnDiscovery: true, expectEmptyMediaId: false},
66
- {reconnect: true, enableTurnDiscovery: false, expectEmptyMediaId: true},
67
- {reconnect: false, enableTurnDiscovery: true, expectEmptyMediaId: false},
68
- {reconnect: false, enableTurnDiscovery: false, expectEmptyMediaId: false},
69
- ].forEach(({reconnect, enableTurnDiscovery, expectEmptyMediaId}) =>
81
+ {reconnect: true, turnDiscoverySkipped: false, expectEmptyMediaId: false},
82
+ {reconnect: true, turnDiscoverySkipped: true, expectEmptyMediaId: true},
83
+ {reconnect: false, turnDiscoverySkipped: false, expectEmptyMediaId: false},
84
+ {reconnect: false, turnDiscoverySkipped: true, expectEmptyMediaId: false},
85
+ ].forEach(({reconnect, turnDiscoverySkipped, expectEmptyMediaId}) =>
70
86
  it(`sends roap OFFER with ${expectEmptyMediaId ? 'empty ' : ''}mediaId when ${
71
87
  reconnect ? '' : 'not '
72
88
  }reconnecting and TURN discovery is ${
73
- enableTurnDiscovery ? 'enabled' : 'disabled'
89
+ turnDiscoverySkipped ? 'skipped' : 'not skipped'
74
90
  }`, async () => {
75
- meeting.config.experimental.enableTurnDiscovery = enableTurnDiscovery;
91
+ const roap = new Roap({}, {parent: webex});
76
92
 
77
- const roap = new Roap({}, {parent: 'fake'});
93
+ sinon.stub(roap.turnDiscovery, 'isSkipped').resolves(turnDiscoverySkipped);
78
94
 
79
95
  await roap.sendRoapMediaRequest({
80
96
  meeting,
@@ -93,50 +109,14 @@ describe('Roap', () => {
93
109
  };
94
110
 
95
111
  assert.calledOnce(sendRoapStub);
96
- assert.calledWith(sendRoapStub, {
112
+ assert.calledWith(sendRoapStub, sinon.match({
97
113
  roapMessage: expectedRoapMessage,
98
- correlationId: meeting.correlationId,
99
114
  locusSelfUrl: meeting.selfUrl,
100
115
  mediaId: expectEmptyMediaId ? '' : meeting.mediaId,
101
- audioMuted: meeting.isAudioMuted(),
102
- videoMuted: meeting.isVideoMuted(),
103
116
  meetingId: meeting.id,
104
- preferTranscoding: true,
105
- });
117
+ locusMediaRequest: meeting.locusMediaRequest,
118
+ }));
106
119
  })
107
120
  );
108
- it('sends roap request with preferTranscoding=false for multistream meetings', async () => {
109
- const roap = new Roap({}, {parent: 'fake'});
110
-
111
- meeting.isMultistream = true;
112
-
113
- await roap.sendRoapMediaRequest({
114
- meeting,
115
- sdp: 'sdp',
116
- reconnect: false,
117
- seq: 10,
118
- tieBreaker: 1,
119
- });
120
-
121
- const expectedRoapMessage = {
122
- messageType: 'OFFER',
123
- sdps: ['sdp'],
124
- version: '2',
125
- seq: 10,
126
- tieBreaker: 1,
127
- };
128
-
129
- assert.calledOnce(sendRoapStub);
130
- assert.calledWith(sendRoapStub, {
131
- roapMessage: expectedRoapMessage,
132
- correlationId: meeting.correlationId,
133
- locusSelfUrl: meeting.selfUrl,
134
- mediaId: meeting.mediaId,
135
- audioMuted: meeting.isAudioMuted(),
136
- videoMuted: meeting.isVideoMuted(),
137
- meetingId: meeting.id,
138
- preferTranscoding: false,
139
- });
140
- });
141
121
  });
142
122
  });