@webex/plugin-meetings 3.0.0-beta.7 → 3.0.0-beta.71
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.
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/breakouts/breakout.js +178 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/index.js +843 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +56 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +6 -41
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +4 -14
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +6 -6
- package/dist/config.js.map +1 -1
- package/dist/constants.js +143 -52
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +16 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +261 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/util.js +39 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +11 -18
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +31 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +237 -198
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +12 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +92 -118
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +80 -89
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +56 -146
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +83 -117
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +31 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2225 -2244
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +102 -100
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +308 -264
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +63 -217
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +14 -32
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +193 -268
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +137 -228
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +26 -19
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +565 -552
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +26 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +151 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +100 -85
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +15 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +90 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +13 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +152 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +35 -39
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +76 -46
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +4 -14
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -6
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +59 -156
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +116 -52
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +58 -93
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +55 -74
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +466 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +40 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +192 -191
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +15 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +342 -460
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +48 -70
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +143 -131
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +91 -98
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +372 -455
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +143 -87
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +8 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +69 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +34 -0
- package/dist/types/common/queue.d.ts +32 -0
- package/dist/types/config.d.ts +77 -0
- package/dist/types/constants.d.ts +944 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +6 -0
- package/dist/types/controls-options-manager/index.d.ts +128 -0
- package/dist/types/controls-options-manager/util.d.ts +9 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +276 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +212 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +32 -0
- package/dist/types/media/properties.d.ts +108 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +101 -0
- package/dist/types/meeting/index.d.ts +1720 -0
- package/dist/types/meeting/muteState.d.ts +132 -0
- package/dist/types/meeting/request.d.ts +271 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +2 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +57 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +315 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +156 -0
- package/dist/types/member/types.d.ts +21 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +343 -0
- package/dist/types/members/request.d.ts +58 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +171 -0
- package/dist/types/metrics/constants.d.ts +53 -0
- package/dist/types/metrics/index.d.ts +152 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +68 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +49 -0
- package/dist/types/multistream/remoteMedia.d.ts +100 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +193 -0
- package/dist/types/recording-controller/util.d.ts +13 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +38 -0
- package/dist/types/roap/turnDiscovery.d.ts +74 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +195 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/internal-README.md +7 -6
- package/package.json +27 -21
- package/src/breakouts/README.md +219 -0
- package/src/breakouts/breakout.ts +153 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/index.ts +745 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +44 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +22 -9
- package/src/common/queue.ts +1 -2
- package/src/{config.js → config.ts} +17 -12
- package/src/constants.ts +92 -5
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +7 -0
- package/src/controls-options-manager/index.ts +240 -0
- package/src/controls-options-manager/util.ts +30 -0
- package/src/index.js +4 -1
- package/src/locus-info/controlsUtils.ts +141 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +211 -71
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
- package/src/locus-info/{parser.js → parser.ts} +67 -79
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +183 -67
- package/src/media/{index.js → index.ts} +179 -176
- package/src/media/{properties.js → properties.ts} +60 -37
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +67 -3
- package/src/meeting/{index.js → index.ts} +2605 -1605
- package/src/meeting/{muteState.js → muteState.ts} +138 -73
- package/src/meeting/{request.js → request.ts} +326 -142
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/{util.js → util.ts} +131 -115
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/{index.js → index.ts} +42 -36
- package/src/meeting-info/meeting-info-v2.ts +273 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
- package/src/meetings/{collection.js → collection.ts} +26 -3
- package/src/meetings/index.ts +1275 -0
- package/src/meetings/{request.js → request.ts} +34 -25
- package/src/meetings/{util.js → util.ts} +99 -33
- package/src/member/{index.js → index.ts} +124 -56
- package/src/member/types.ts +24 -0
- package/src/member/{util.js → util.ts} +105 -25
- package/src/members/{collection.js → collection.ts} +10 -2
- package/src/members/{index.js → index.ts} +281 -144
- package/src/members/{request.js → request.ts} +80 -16
- package/src/members/types.ts +28 -0
- package/src/members/{util.js → util.ts} +108 -55
- package/src/metrics/{config.js → config.ts} +255 -92
- package/src/metrics/{constants.js → constants.ts} +0 -6
- package/src/metrics/{index.js → index.ts} +110 -94
- package/src/multistream/mediaRequestManager.ts +144 -40
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +50 -38
- package/src/multistream/remoteMedia.ts +30 -4
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +230 -66
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/{index.js → index.ts} +157 -94
- package/src/reachability/request.ts +46 -35
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/{index.js → index.ts} +228 -120
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/{index.js → index.ts} +77 -60
- package/src/roap/request.ts +172 -0
- package/src/roap/turnDiscovery.ts +81 -41
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1242 -0
- package/src/statsAnalyzer/mqaUtil.ts +291 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/converged-space-meetings.js +176 -0
- package/test/integration/spec/journey.js +665 -464
- package/test/integration/spec/space-meeting.js +320 -206
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/breakouts/breakout.ts +178 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/index.ts +1252 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +54 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +204 -0
- package/test/unit/spec/controls-options-manager/util.js +86 -0
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +133 -34
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +303 -2
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/parser.js +3 -9
- package/test/unit/spec/locus-info/selfConstant.js +101 -103
- package/test/unit/spec/locus-info/selfUtils.js +165 -12
- package/test/unit/spec/media/index.ts +72 -8
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +29 -2
- package/test/unit/spec/meeting/index.js +2503 -802
- package/test/unit/spec/meeting/muteState.js +146 -61
- package/test/unit/spec/meeting/request.js +141 -43
- package/test/unit/spec/meeting/utils.js +135 -164
- package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +110 -74
- package/test/unit/spec/meetings/collection.js +15 -1
- package/test/unit/spec/meetings/index.js +622 -263
- package/test/unit/spec/meetings/utils.js +65 -14
- package/test/unit/spec/member/index.js +24 -1
- package/test/unit/spec/member/util.js +359 -32
- package/test/unit/spec/members/index.js +294 -54
- package/test/unit/spec/members/request.js +50 -20
- package/test/unit/spec/members/utils.js +147 -4
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/multistream/mediaRequestManager.ts +369 -68
- package/test/unit/spec/multistream/receiveSlot.ts +76 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +60 -38
- package/test/unit/spec/multistream/remoteMedia.ts +32 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +176 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +58 -30
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +12 -8
- package/test/unit/spec/roap/request.ts +217 -0
- package/test/unit/spec/roap/turnDiscovery.ts +72 -49
- package/test/unit/spec/stats-analyzer/index.js +108 -57
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/testUtils.js +98 -77
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -11,6 +11,7 @@ import sinon from 'sinon';
|
|
|
11
11
|
import uuid from 'uuid';
|
|
12
12
|
import StaticConfig from '@webex/plugin-meetings/src/common/config';
|
|
13
13
|
import TriggerProxy from '@webex/plugin-meetings/src/common/events/trigger-proxy';
|
|
14
|
+
import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
|
|
14
15
|
import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
|
|
15
16
|
import Meeting from '@webex/plugin-meetings/src/meeting';
|
|
16
17
|
import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
|
|
@@ -27,7 +28,7 @@ import {
|
|
|
27
28
|
ONLINE,
|
|
28
29
|
ROAP,
|
|
29
30
|
LOCUSINFO,
|
|
30
|
-
EVENT_TRIGGERS
|
|
31
|
+
EVENT_TRIGGERS,
|
|
31
32
|
} from '../../../../src/constants';
|
|
32
33
|
|
|
33
34
|
describe('plugin-meetings', () => {
|
|
@@ -37,17 +38,19 @@ describe('plugin-meetings', () => {
|
|
|
37
38
|
error: () => {},
|
|
38
39
|
warn: () => {},
|
|
39
40
|
trace: () => {},
|
|
40
|
-
debug: () => {}
|
|
41
|
+
debug: () => {},
|
|
41
42
|
};
|
|
42
43
|
|
|
43
44
|
beforeEach(() => {
|
|
44
45
|
StaticConfig.set({
|
|
45
46
|
bandwidth: {
|
|
46
|
-
audio: 50,
|
|
47
|
-
|
|
47
|
+
audio: 50,
|
|
48
|
+
video: 500,
|
|
49
|
+
},
|
|
48
50
|
});
|
|
49
51
|
LoggerConfig.set({
|
|
50
|
-
verboseEvents: true,
|
|
52
|
+
verboseEvents: true,
|
|
53
|
+
enable: false,
|
|
51
54
|
});
|
|
52
55
|
TriggerProxy.trigger = sinon.stub().returns(true);
|
|
53
56
|
});
|
|
@@ -71,13 +74,12 @@ describe('plugin-meetings', () => {
|
|
|
71
74
|
children: {
|
|
72
75
|
device: Device,
|
|
73
76
|
mercury: Mercury,
|
|
74
|
-
meetings: Meetings
|
|
75
|
-
}
|
|
77
|
+
meetings: Meetings,
|
|
78
|
+
},
|
|
76
79
|
});
|
|
77
80
|
|
|
78
|
-
|
|
79
81
|
Object.assign(webex, {
|
|
80
|
-
logging: logger
|
|
82
|
+
logging: logger,
|
|
81
83
|
});
|
|
82
84
|
|
|
83
85
|
Object.assign(webex.meetings.config, {
|
|
@@ -86,64 +88,66 @@ describe('plugin-meetings', () => {
|
|
|
86
88
|
// the server supports, minimums have to be tested
|
|
87
89
|
audio: 64000,
|
|
88
90
|
video: 4000000,
|
|
89
|
-
startBitrate: 2000
|
|
91
|
+
startBitrate: 2000,
|
|
90
92
|
},
|
|
91
93
|
experimental: {
|
|
92
|
-
enableUnifiedMeetings: true
|
|
94
|
+
enableUnifiedMeetings: true,
|
|
93
95
|
},
|
|
94
96
|
logging: {
|
|
95
97
|
enable: true,
|
|
96
|
-
verboseEvents: true
|
|
97
|
-
}
|
|
98
|
+
verboseEvents: true,
|
|
99
|
+
},
|
|
98
100
|
});
|
|
99
101
|
|
|
100
102
|
Object.assign(webex, {
|
|
101
|
-
logger
|
|
103
|
+
logger,
|
|
102
104
|
});
|
|
103
105
|
|
|
104
106
|
Object.assign(webex.meetings, {
|
|
105
|
-
startReachability: sinon.stub().returns(Promise.resolve())
|
|
107
|
+
startReachability: sinon.stub().returns(Promise.resolve()),
|
|
106
108
|
});
|
|
107
109
|
|
|
108
110
|
Object.assign(webex.internal, {
|
|
111
|
+
llm: {on: sinon.stub()},
|
|
109
112
|
device: {
|
|
110
113
|
deviceType: 'FAKE_DEVICE',
|
|
111
114
|
register: sinon.stub().returns(Promise.resolve()),
|
|
112
|
-
unregister: sinon.stub().returns(Promise.resolve())
|
|
115
|
+
unregister: sinon.stub().returns(Promise.resolve()),
|
|
113
116
|
},
|
|
114
117
|
mercury: {
|
|
115
118
|
connect: sinon.stub().returns(Promise.resolve()),
|
|
116
119
|
disconnect: sinon.stub().returns(Promise.resolve()),
|
|
117
120
|
on: () => {},
|
|
118
|
-
off: () => {}
|
|
121
|
+
off: () => {},
|
|
119
122
|
},
|
|
120
123
|
services: {
|
|
121
|
-
getMeetingPreferences: sinon.stub().returns(
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
124
|
+
getMeetingPreferences: sinon.stub().returns(
|
|
125
|
+
Promise.resolve({
|
|
126
|
+
sites: [
|
|
127
|
+
{
|
|
128
|
+
siteUrl: 'site1-example.webex.com',
|
|
129
|
+
default: false,
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
siteUrl: 'site2-example.webex.com',
|
|
133
|
+
default: false,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
siteUrl: 'site3-example.webex.com',
|
|
137
|
+
default: false,
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
siteUrl: 'go.webex.com',
|
|
141
|
+
default: true,
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
})
|
|
145
|
+
),
|
|
146
|
+
fetchClientRegionInfo: sinon.stub().returns(Promise.resolve()),
|
|
142
147
|
},
|
|
143
148
|
metrics: {
|
|
144
|
-
submitClientMetrics: sinon.stub().returns(Promise.resolve())
|
|
145
|
-
}
|
|
146
|
-
|
|
149
|
+
submitClientMetrics: sinon.stub().returns(Promise.resolve()),
|
|
150
|
+
},
|
|
147
151
|
});
|
|
148
152
|
webex.emit('ready');
|
|
149
153
|
});
|
|
@@ -177,10 +181,14 @@ describe('plugin-meetings', () => {
|
|
|
177
181
|
|
|
178
182
|
describe('failure', () => {
|
|
179
183
|
it('should not accept non boolean input', () => {
|
|
180
|
-
const currentEnableUnifiedMeetings =
|
|
184
|
+
const currentEnableUnifiedMeetings =
|
|
185
|
+
webex.meetings.config.experimental.enableUnifiedMeetings;
|
|
181
186
|
|
|
182
187
|
webex.meetings._toggleUnifiedMeetings('test');
|
|
183
|
-
assert.equal(
|
|
188
|
+
assert.equal(
|
|
189
|
+
webex.meetings.config.experimental.enableUnifiedMeetings,
|
|
190
|
+
currentEnableUnifiedMeetings
|
|
191
|
+
);
|
|
184
192
|
});
|
|
185
193
|
});
|
|
186
194
|
});
|
|
@@ -202,7 +210,10 @@ describe('plugin-meetings', () => {
|
|
|
202
210
|
const currentEnableAdhocMeetings = webex.meetings.config.experimental.enableAdhocMeetings;
|
|
203
211
|
|
|
204
212
|
webex.meetings._toggleAdhocMeetings('test');
|
|
205
|
-
assert.equal(
|
|
213
|
+
assert.equal(
|
|
214
|
+
webex.meetings.config.experimental.enableAdhocMeetings,
|
|
215
|
+
currentEnableAdhocMeetings
|
|
216
|
+
);
|
|
206
217
|
});
|
|
207
218
|
});
|
|
208
219
|
});
|
|
@@ -227,18 +238,25 @@ describe('plugin-meetings', () => {
|
|
|
227
238
|
const currentEnableTurnDiscovery = webex.meetings.config.experimental.enableTurnDiscovery;
|
|
228
239
|
|
|
229
240
|
webex.meetings._toggleTurnDiscovery('test');
|
|
230
|
-
assert.equal(
|
|
241
|
+
assert.equal(
|
|
242
|
+
webex.meetings.config.experimental.enableAdhocMeetings,
|
|
243
|
+
currentEnableTurnDiscovery
|
|
244
|
+
);
|
|
231
245
|
});
|
|
232
246
|
});
|
|
233
247
|
});
|
|
234
248
|
|
|
235
|
-
|
|
236
249
|
describe('Public API Contracts', () => {
|
|
237
250
|
describe('#register', () => {
|
|
238
251
|
it('emits an event and resolves when register succeeds', async () => {
|
|
239
252
|
webex.canAuthorize = true;
|
|
240
253
|
await webex.meetings.register();
|
|
241
|
-
assert.calledWith(
|
|
254
|
+
assert.calledWith(
|
|
255
|
+
TriggerProxy.trigger,
|
|
256
|
+
sinon.match.instanceOf(Meetings),
|
|
257
|
+
{file: 'meetings', function: 'register'},
|
|
258
|
+
'meetings:registered'
|
|
259
|
+
);
|
|
242
260
|
assert.isTrue(webex.meetings.registered);
|
|
243
261
|
});
|
|
244
262
|
|
|
@@ -284,9 +302,15 @@ describe('plugin-meetings', () => {
|
|
|
284
302
|
it('emits an event and resolves when unregister succeeds', (done) => {
|
|
285
303
|
webex.meetings.registered = true;
|
|
286
304
|
webex.meetings.unregister().then(() => {
|
|
287
|
-
assert.calledWith(
|
|
288
|
-
|
|
289
|
-
|
|
305
|
+
assert.calledWith(
|
|
306
|
+
TriggerProxy.trigger,
|
|
307
|
+
sinon.match.instanceOf(Meetings),
|
|
308
|
+
{
|
|
309
|
+
file: 'meetings',
|
|
310
|
+
function: 'unregister',
|
|
311
|
+
},
|
|
312
|
+
'meetings:unregistered'
|
|
313
|
+
);
|
|
290
314
|
assert.isFalse(webex.meetings.registered);
|
|
291
315
|
done();
|
|
292
316
|
});
|
|
@@ -324,7 +348,10 @@ describe('plugin-meetings', () => {
|
|
|
324
348
|
it('does not get a reachability instance', () => {
|
|
325
349
|
const reachability = webex.meetings.getReachability();
|
|
326
350
|
|
|
327
|
-
assert.notExists(
|
|
351
|
+
assert.notExists(
|
|
352
|
+
reachability,
|
|
353
|
+
'reachability is undefined because #setReachability has not been called'
|
|
354
|
+
);
|
|
328
355
|
});
|
|
329
356
|
});
|
|
330
357
|
describe('after #setReachability', () => {
|
|
@@ -337,7 +364,10 @@ describe('plugin-meetings', () => {
|
|
|
337
364
|
it('gets the reachability data instance from webex.meetings', () => {
|
|
338
365
|
const reachability = webex.meetings.getReachability();
|
|
339
366
|
|
|
340
|
-
assert.exists(
|
|
367
|
+
assert.exists(
|
|
368
|
+
reachability,
|
|
369
|
+
'reachability is defined because #setReachability has been called'
|
|
370
|
+
);
|
|
341
371
|
assert.instanceOf(reachability, Reachability, 'should be a reachability instance');
|
|
342
372
|
});
|
|
343
373
|
});
|
|
@@ -349,8 +379,15 @@ describe('plugin-meetings', () => {
|
|
|
349
379
|
it('gets the personal meeting room instance from webex.meetings', () => {
|
|
350
380
|
const personalMeetingRoom = webex.meetings.getPersonalMeetingRoom();
|
|
351
381
|
|
|
352
|
-
assert.exists(
|
|
353
|
-
|
|
382
|
+
assert.exists(
|
|
383
|
+
personalMeetingRoom,
|
|
384
|
+
'personal meeting room instance is set up at object creation'
|
|
385
|
+
);
|
|
386
|
+
assert.instanceOf(
|
|
387
|
+
personalMeetingRoom,
|
|
388
|
+
PersonalMeetingRoom,
|
|
389
|
+
'should be a personal meeting room instance'
|
|
390
|
+
);
|
|
354
391
|
});
|
|
355
392
|
});
|
|
356
393
|
describe('Static shortcut proxy methods', () => {
|
|
@@ -379,11 +416,11 @@ describe('plugin-meetings', () => {
|
|
|
379
416
|
describe('#getAllMeetings', () => {
|
|
380
417
|
it('calls MeetingCollection to get all meetings with supplied options', () => {
|
|
381
418
|
webex.meetings.getAllMeetings({
|
|
382
|
-
test: test1
|
|
419
|
+
test: test1,
|
|
383
420
|
});
|
|
384
421
|
assert.calledOnce(webex.meetings.meetingCollection.getAll);
|
|
385
422
|
assert.calledWith(webex.meetings.meetingCollection.getAll, {
|
|
386
|
-
test: test1
|
|
423
|
+
test: test1,
|
|
387
424
|
});
|
|
388
425
|
});
|
|
389
426
|
});
|
|
@@ -396,11 +433,15 @@ describe('plugin-meetings', () => {
|
|
|
396
433
|
});
|
|
397
434
|
describe('succesful requests', () => {
|
|
398
435
|
beforeEach(() => {
|
|
399
|
-
webex.meetings.request.getActiveMeetings = sinon.stub().returns(
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
436
|
+
webex.meetings.request.getActiveMeetings = sinon.stub().returns(
|
|
437
|
+
Promise.resolve({
|
|
438
|
+
loci: [
|
|
439
|
+
{
|
|
440
|
+
url: url1,
|
|
441
|
+
},
|
|
442
|
+
],
|
|
443
|
+
})
|
|
444
|
+
);
|
|
404
445
|
});
|
|
405
446
|
describe('when meeting is returned', () => {
|
|
406
447
|
let parse;
|
|
@@ -409,8 +450,8 @@ describe('plugin-meetings', () => {
|
|
|
409
450
|
parse = sinon.stub().returns(true);
|
|
410
451
|
webex.meetings.meetingCollection.getByKey = sinon.stub().returns({
|
|
411
452
|
locusInfo: {
|
|
412
|
-
parse
|
|
413
|
-
}
|
|
453
|
+
parse,
|
|
454
|
+
},
|
|
414
455
|
});
|
|
415
456
|
});
|
|
416
457
|
it('tests the sync meeting calls for existing meeting', async () => {
|
|
@@ -427,25 +468,31 @@ describe('plugin-meetings', () => {
|
|
|
427
468
|
beforeEach(() => {
|
|
428
469
|
initialSetup = sinon.stub().returns(true);
|
|
429
470
|
webex.meetings.meetingCollection.getByKey = sinon.stub().returns(null);
|
|
430
|
-
webex.meetings.create = sinon.stub().returns(
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
471
|
+
webex.meetings.create = sinon.stub().returns(
|
|
472
|
+
Promise.resolve({
|
|
473
|
+
locusInfo: {
|
|
474
|
+
initialSetup,
|
|
475
|
+
},
|
|
476
|
+
})
|
|
477
|
+
);
|
|
435
478
|
});
|
|
436
479
|
it('tests the sync meeting calls for not existing meeting', async () => {
|
|
437
480
|
await webex.meetings.syncMeetings();
|
|
438
481
|
assert.calledOnce(webex.meetings.request.getActiveMeetings);
|
|
439
|
-
assert.callCount(webex.meetings.meetingCollection.getByKey,
|
|
482
|
+
assert.callCount(webex.meetings.meetingCollection.getByKey, 5);
|
|
440
483
|
assert.calledOnce(initialSetup);
|
|
441
484
|
assert.calledOnce(webex.meetings.create);
|
|
442
485
|
assert.calledWith(webex.meetings.request.getActiveMeetings);
|
|
443
486
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
444
|
-
assert.calledWith(
|
|
445
|
-
|
|
446
|
-
|
|
487
|
+
assert.calledWith(
|
|
488
|
+
webex.meetings.create,
|
|
489
|
+
{
|
|
490
|
+
url: url1,
|
|
491
|
+
},
|
|
492
|
+
'LOCUS_ID'
|
|
493
|
+
);
|
|
447
494
|
assert.calledWith(initialSetup, {
|
|
448
|
-
url: url1
|
|
495
|
+
url: url1,
|
|
449
496
|
});
|
|
450
497
|
});
|
|
451
498
|
});
|
|
@@ -460,24 +507,29 @@ describe('plugin-meetings', () => {
|
|
|
460
507
|
initialSetup = sinon.stub().returns(true);
|
|
461
508
|
webex.meetings.meetingCollection.getByKey = sinon.stub().returns({
|
|
462
509
|
locusInfo: {
|
|
463
|
-
parse
|
|
510
|
+
parse,
|
|
464
511
|
},
|
|
465
|
-
sendCallAnalyzerMetrics: sinon.stub()
|
|
512
|
+
sendCallAnalyzerMetrics: sinon.stub(),
|
|
466
513
|
});
|
|
467
514
|
webex.meetings.meetingCollection.getAll = sinon.stub().returns({
|
|
468
515
|
meetingutk: {
|
|
469
|
-
locusUrl: 'fdfdjfdhj',
|
|
470
|
-
|
|
471
|
-
});
|
|
472
|
-
webex.meetings.create = sinon.stub().returns(Promise.resolve({
|
|
473
|
-
locusInfo: {
|
|
474
|
-
initialSetup
|
|
516
|
+
locusUrl: 'fdfdjfdhj',
|
|
517
|
+
sendCallAnalyzerMetrics: sinon.stub(),
|
|
475
518
|
},
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
519
|
+
});
|
|
520
|
+
webex.meetings.create = sinon.stub().returns(
|
|
521
|
+
Promise.resolve({
|
|
522
|
+
locusInfo: {
|
|
523
|
+
initialSetup,
|
|
524
|
+
},
|
|
525
|
+
sendCallAnalyzerMetrics: sinon.stub(),
|
|
526
|
+
})
|
|
527
|
+
);
|
|
528
|
+
webex.meetings.request.getActiveMeetings = sinon.stub().returns(
|
|
529
|
+
Promise.resolve({
|
|
530
|
+
loci: [],
|
|
531
|
+
})
|
|
532
|
+
);
|
|
481
533
|
MeetingUtil.cleanUp = sinon.stub().returns(Promise.resolve());
|
|
482
534
|
});
|
|
483
535
|
it('destroy non active meetings', async () => {
|
|
@@ -499,34 +551,29 @@ describe('plugin-meetings', () => {
|
|
|
499
551
|
beforeEach(() => {
|
|
500
552
|
infoOptions = {
|
|
501
553
|
destination: 'dest-example',
|
|
502
|
-
type: 'CONVERSATION_URL'
|
|
554
|
+
type: 'CONVERSATION_URL',
|
|
503
555
|
};
|
|
504
556
|
webex.meetings.meetingCollection.getByKey = sinon.stub().returns();
|
|
505
|
-
webex.meetings.createMeeting = sinon.stub().returns(
|
|
506
|
-
|
|
507
|
-
|
|
557
|
+
webex.meetings.createMeeting = sinon.stub().returns(
|
|
558
|
+
Promise.resolve({
|
|
559
|
+
on: () => true,
|
|
560
|
+
})
|
|
561
|
+
);
|
|
508
562
|
});
|
|
509
563
|
|
|
510
|
-
it('should call MeetingInfo#fetchInfoOptions() with proper params',
|
|
511
|
-
()
|
|
512
|
-
webex.meetings.meetingInfo.fetchInfoOptions = sinon.stub().resolves(
|
|
513
|
-
infoOptions
|
|
514
|
-
);
|
|
564
|
+
it('should call MeetingInfo#fetchInfoOptions() with proper params', () => {
|
|
565
|
+
webex.meetings.meetingInfo.fetchInfoOptions = sinon.stub().resolves(infoOptions);
|
|
515
566
|
|
|
516
|
-
|
|
567
|
+
return webex.meetings.create(infoOptions.destination, infoOptions.type).then(() => {
|
|
568
|
+
assert.calledWith(
|
|
569
|
+
webex.meetings.meetingInfo.fetchInfoOptions,
|
|
517
570
|
infoOptions.destination,
|
|
518
571
|
infoOptions.type
|
|
519
|
-
)
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
webex.meetings.meetingInfo.fetchInfoOptions,
|
|
523
|
-
infoOptions.destination,
|
|
524
|
-
infoOptions.type
|
|
525
|
-
);
|
|
526
|
-
|
|
527
|
-
assert.calledTwice(webex.meetings.meetingCollection.getByKey);
|
|
528
|
-
});
|
|
572
|
+
);
|
|
573
|
+
|
|
574
|
+
assert.calledTwice(webex.meetings.meetingCollection.getByKey);
|
|
529
575
|
});
|
|
576
|
+
});
|
|
530
577
|
|
|
531
578
|
it('calls createMeeting and returns its promise', async () => {
|
|
532
579
|
const FAKE_USE_RANDOM_DELAY = true;
|
|
@@ -565,9 +612,9 @@ describe('plugin-meetings', () => {
|
|
|
565
612
|
return undefined;
|
|
566
613
|
});
|
|
567
614
|
|
|
568
|
-
webex.meetings.meetingInfo.fetchInfoOptions = sinon
|
|
569
|
-
|
|
570
|
-
|
|
615
|
+
webex.meetings.meetingInfo.fetchInfoOptions = sinon
|
|
616
|
+
.stub()
|
|
617
|
+
.resolves(scheduledMeetingFixture);
|
|
571
618
|
|
|
572
619
|
webex.meetings.meetingCollection.set(scheduledMeetingFixture);
|
|
573
620
|
|
|
@@ -602,28 +649,31 @@ describe('plugin-meetings', () => {
|
|
|
602
649
|
it('doesnt call handle locus mercury for a locus roap event', () => {
|
|
603
650
|
webex.meetings.handleLocusMercury({
|
|
604
651
|
data: {
|
|
605
|
-
eventType: 'locus.message.roap'
|
|
606
|
-
}
|
|
652
|
+
eventType: 'locus.message.roap',
|
|
653
|
+
},
|
|
607
654
|
});
|
|
608
655
|
assert.notCalled(webex.meetings.handleLocusEvent);
|
|
609
656
|
});
|
|
610
657
|
it('doesnt call handle locus mercury for an undefined eventType', () => {
|
|
611
658
|
webex.meetings.handleLocusMercury({
|
|
612
|
-
data: {
|
|
613
|
-
}
|
|
659
|
+
data: {},
|
|
614
660
|
});
|
|
615
661
|
assert.notCalled(webex.meetings.handleLocusEvent);
|
|
616
662
|
});
|
|
617
663
|
it('calls handle locus mercury for all locus events', () => {
|
|
618
664
|
webex.meetings.handleLocusMercury({
|
|
619
665
|
data: {
|
|
620
|
-
eventType: test1
|
|
621
|
-
}
|
|
666
|
+
eventType: test1,
|
|
667
|
+
},
|
|
622
668
|
});
|
|
623
669
|
assert.calledOnce(webex.meetings.handleLocusEvent);
|
|
624
|
-
assert.calledWith(
|
|
625
|
-
|
|
626
|
-
|
|
670
|
+
assert.calledWith(
|
|
671
|
+
webex.meetings.handleLocusEvent,
|
|
672
|
+
{
|
|
673
|
+
eventType: test1,
|
|
674
|
+
},
|
|
675
|
+
true
|
|
676
|
+
);
|
|
627
677
|
});
|
|
628
678
|
});
|
|
629
679
|
describe('#handleLocusEvent', () => {
|
|
@@ -634,67 +684,85 @@ describe('plugin-meetings', () => {
|
|
|
634
684
|
parse = sinon.stub().returns(true);
|
|
635
685
|
webex.meetings.meetingCollection.getByKey = sinon.stub().returns({
|
|
636
686
|
locusInfo: {
|
|
637
|
-
parse
|
|
638
|
-
}
|
|
687
|
+
parse,
|
|
688
|
+
},
|
|
639
689
|
});
|
|
640
690
|
});
|
|
641
691
|
it('should parse the meeting info', () => {
|
|
642
692
|
webex.meetings.handleLocusEvent({
|
|
643
|
-
locusUrl: url1
|
|
693
|
+
locusUrl: url1,
|
|
644
694
|
});
|
|
645
695
|
assert.calledOnce(webex.meetings.meetingCollection.getByKey);
|
|
646
696
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
647
697
|
assert.calledOnce(parse);
|
|
648
|
-
assert.calledWith(
|
|
649
|
-
|
|
650
|
-
|
|
698
|
+
assert.calledWith(
|
|
699
|
+
parse,
|
|
700
|
+
{
|
|
701
|
+
locusInfo: {
|
|
702
|
+
parse,
|
|
703
|
+
},
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
locusUrl: url1,
|
|
651
707
|
}
|
|
652
|
-
|
|
653
|
-
locusUrl: url1
|
|
654
|
-
});
|
|
708
|
+
);
|
|
655
709
|
});
|
|
656
710
|
});
|
|
657
711
|
describe('there was not a meeting', () => {
|
|
658
712
|
let initialSetup;
|
|
713
|
+
const webExMeetingId = '123456';
|
|
659
714
|
|
|
660
715
|
beforeEach(() => {
|
|
661
716
|
initialSetup = sinon.stub().returns(true);
|
|
662
717
|
webex.meetings.meetingCollection.getByKey = sinon.stub().returns(undefined);
|
|
663
|
-
webex.meetings.create = sinon.stub().returns(
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
718
|
+
webex.meetings.create = sinon.stub().returns(
|
|
719
|
+
Promise.resolve({
|
|
720
|
+
locusInfo: {
|
|
721
|
+
initialSetup,
|
|
722
|
+
},
|
|
723
|
+
})
|
|
724
|
+
);
|
|
668
725
|
});
|
|
669
726
|
it('should setup the meeting by difference event', async () => {
|
|
670
727
|
await webex.meetings.handleLocusEvent({
|
|
671
728
|
locus: {
|
|
672
729
|
id: uuid1,
|
|
673
|
-
replaces: [
|
|
674
|
-
|
|
675
|
-
|
|
730
|
+
replaces: [
|
|
731
|
+
{
|
|
732
|
+
locusUrl: 'http:locusUrl',
|
|
733
|
+
},
|
|
734
|
+
],
|
|
676
735
|
self: {
|
|
677
736
|
callBackInfo: {
|
|
678
|
-
callbackAddress: uri1
|
|
679
|
-
}
|
|
680
|
-
}
|
|
737
|
+
callbackAddress: uri1,
|
|
738
|
+
},
|
|
739
|
+
},
|
|
740
|
+
info: {
|
|
741
|
+
webExMeetingId
|
|
742
|
+
},
|
|
681
743
|
},
|
|
682
744
|
eventType: 'locus.difference',
|
|
683
|
-
locusUrl: url1
|
|
745
|
+
locusUrl: url1,
|
|
684
746
|
});
|
|
685
|
-
assert.callCount(webex.meetings.meetingCollection.getByKey,
|
|
747
|
+
assert.callCount(webex.meetings.meetingCollection.getByKey, 6);
|
|
686
748
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
749
|
+
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'meetingNumber', webExMeetingId);
|
|
687
750
|
assert.calledOnce(initialSetup);
|
|
688
751
|
assert.calledWith(initialSetup, {
|
|
689
752
|
id: uuid1,
|
|
690
|
-
replaces: [
|
|
691
|
-
|
|
692
|
-
|
|
753
|
+
replaces: [
|
|
754
|
+
{
|
|
755
|
+
locusUrl: 'http:locusUrl',
|
|
756
|
+
},
|
|
757
|
+
],
|
|
693
758
|
self: {
|
|
694
759
|
callBackInfo: {
|
|
695
|
-
callbackAddress: uri1
|
|
696
|
-
}
|
|
697
|
-
}
|
|
760
|
+
callbackAddress: uri1,
|
|
761
|
+
},
|
|
762
|
+
},
|
|
763
|
+
info: {
|
|
764
|
+
webExMeetingId
|
|
765
|
+
},
|
|
698
766
|
});
|
|
699
767
|
});
|
|
700
768
|
it('should setup the meeting by difference event without replaces', async () => {
|
|
@@ -703,23 +771,30 @@ describe('plugin-meetings', () => {
|
|
|
703
771
|
id: uuid1,
|
|
704
772
|
self: {
|
|
705
773
|
callBackInfo: {
|
|
706
|
-
callbackAddress: uri1
|
|
707
|
-
}
|
|
708
|
-
}
|
|
774
|
+
callbackAddress: uri1,
|
|
775
|
+
},
|
|
776
|
+
},
|
|
777
|
+
info: {
|
|
778
|
+
webExMeetingId
|
|
779
|
+
},
|
|
709
780
|
},
|
|
710
781
|
eventType: 'locus.difference',
|
|
711
|
-
locusUrl: url1
|
|
782
|
+
locusUrl: url1,
|
|
712
783
|
});
|
|
713
|
-
assert.callCount(webex.meetings.meetingCollection.getByKey,
|
|
784
|
+
assert.callCount(webex.meetings.meetingCollection.getByKey, 5);
|
|
714
785
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
786
|
+
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'meetingNumber', webExMeetingId);
|
|
715
787
|
assert.calledOnce(initialSetup);
|
|
716
788
|
assert.calledWith(initialSetup, {
|
|
717
789
|
id: uuid1,
|
|
718
790
|
self: {
|
|
719
791
|
callBackInfo: {
|
|
720
|
-
callbackAddress: uri1
|
|
721
|
-
}
|
|
722
|
-
}
|
|
792
|
+
callbackAddress: uri1,
|
|
793
|
+
},
|
|
794
|
+
},
|
|
795
|
+
info: {
|
|
796
|
+
webExMeetingId
|
|
797
|
+
},
|
|
723
798
|
});
|
|
724
799
|
});
|
|
725
800
|
it('should setup the meeting by a not difference event', async () => {
|
|
@@ -728,23 +803,30 @@ describe('plugin-meetings', () => {
|
|
|
728
803
|
id: uuid1,
|
|
729
804
|
self: {
|
|
730
805
|
callBackInfo: {
|
|
731
|
-
callbackAddress: uri1
|
|
732
|
-
}
|
|
733
|
-
}
|
|
806
|
+
callbackAddress: uri1,
|
|
807
|
+
},
|
|
808
|
+
},
|
|
809
|
+
info: {
|
|
810
|
+
webExMeetingId
|
|
811
|
+
},
|
|
734
812
|
},
|
|
735
813
|
eventType: test1,
|
|
736
|
-
locusUrl: url1
|
|
814
|
+
locusUrl: url1,
|
|
737
815
|
});
|
|
738
|
-
assert.callCount(webex.meetings.meetingCollection.getByKey,
|
|
816
|
+
assert.callCount(webex.meetings.meetingCollection.getByKey, 5);
|
|
739
817
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
818
|
+
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'meetingNumber', webExMeetingId);
|
|
740
819
|
assert.calledOnce(initialSetup);
|
|
741
820
|
assert.calledWith(initialSetup, {
|
|
742
821
|
id: uuid1,
|
|
743
822
|
self: {
|
|
744
823
|
callBackInfo: {
|
|
745
|
-
callbackAddress: uri1
|
|
746
|
-
}
|
|
747
|
-
}
|
|
824
|
+
callbackAddress: uri1,
|
|
825
|
+
},
|
|
826
|
+
},
|
|
827
|
+
info: {
|
|
828
|
+
webExMeetingId
|
|
829
|
+
},
|
|
748
830
|
});
|
|
749
831
|
});
|
|
750
832
|
|
|
@@ -753,13 +835,13 @@ describe('plugin-meetings', () => {
|
|
|
753
835
|
id: uuid1,
|
|
754
836
|
self: {
|
|
755
837
|
callbackInfo: {
|
|
756
|
-
callbackAddress: uri1
|
|
757
|
-
}
|
|
838
|
+
callbackAddress: uri1,
|
|
839
|
+
},
|
|
758
840
|
},
|
|
759
841
|
info: {
|
|
760
|
-
isUnifiedSpaceMeeting
|
|
842
|
+
isUnifiedSpaceMeeting,
|
|
761
843
|
},
|
|
762
|
-
conversationUrl: 'fakeConvoUrl'
|
|
844
|
+
conversationUrl: 'fakeConvoUrl',
|
|
763
845
|
},
|
|
764
846
|
eventType: test1,
|
|
765
847
|
locusUrl: url1,
|
|
@@ -767,19 +849,40 @@ describe('plugin-meetings', () => {
|
|
|
767
849
|
|
|
768
850
|
it('should not try to match USM meetings by conversation url', async () => {
|
|
769
851
|
await webex.meetings.handleLocusEvent(generateFakeLocusData(true));
|
|
770
|
-
assert.callCount(webex.meetings.meetingCollection.getByKey,
|
|
771
|
-
assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(0).args, [
|
|
772
|
-
|
|
773
|
-
|
|
852
|
+
assert.callCount(webex.meetings.meetingCollection.getByKey, 4);
|
|
853
|
+
assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(0).args, [
|
|
854
|
+
'locusUrl',
|
|
855
|
+
url1,
|
|
856
|
+
]);
|
|
857
|
+
assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(1).args, [
|
|
858
|
+
'correlationId',
|
|
859
|
+
false,
|
|
860
|
+
]);
|
|
861
|
+
assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(2).args, [
|
|
862
|
+
'sipUri',
|
|
863
|
+
uri1,
|
|
864
|
+
]);
|
|
774
865
|
assert.calledOnce(initialSetup);
|
|
775
866
|
});
|
|
776
867
|
it('should try to match non-USM meetings by conversation url', async () => {
|
|
777
868
|
await webex.meetings.handleLocusEvent(generateFakeLocusData(false));
|
|
778
|
-
assert.callCount(webex.meetings.meetingCollection.getByKey,
|
|
779
|
-
assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(0).args, [
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
869
|
+
assert.callCount(webex.meetings.meetingCollection.getByKey, 5);
|
|
870
|
+
assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(0).args, [
|
|
871
|
+
'locusUrl',
|
|
872
|
+
url1,
|
|
873
|
+
]);
|
|
874
|
+
assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(1).args, [
|
|
875
|
+
'correlationId',
|
|
876
|
+
false,
|
|
877
|
+
]);
|
|
878
|
+
assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(2).args, [
|
|
879
|
+
'sipUri',
|
|
880
|
+
uri1,
|
|
881
|
+
]);
|
|
882
|
+
assert.deepEqual(webex.meetings.meetingCollection.getByKey.getCall(3).args, [
|
|
883
|
+
'conversationUrl',
|
|
884
|
+
'fakeConvoUrl',
|
|
885
|
+
]);
|
|
783
886
|
assert.calledOnce(initialSetup);
|
|
784
887
|
});
|
|
785
888
|
});
|
|
@@ -798,11 +901,14 @@ describe('plugin-meetings', () => {
|
|
|
798
901
|
beforeEach(() => {
|
|
799
902
|
clock = sinon.useFakeTimers();
|
|
800
903
|
setTimeoutSpy = sinon.spy(clock, 'setTimeout');
|
|
801
|
-
webex.meetings.meetingInfo.fetchMeetingInfo = sinon.stub().returns(
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
904
|
+
webex.meetings.meetingInfo.fetchMeetingInfo = sinon.stub().returns(
|
|
905
|
+
Promise.resolve({
|
|
906
|
+
body: {
|
|
907
|
+
permissionToken: 'PT',
|
|
908
|
+
meetingJoinUrl: 'meetingJoinUrl',
|
|
909
|
+
},
|
|
910
|
+
})
|
|
911
|
+
);
|
|
806
912
|
const nowTimeStamp = Date.now();
|
|
807
913
|
|
|
808
914
|
FAKE_TIME_TO_START = 0.1 * 60 * 1000;
|
|
@@ -816,7 +922,12 @@ describe('plugin-meetings', () => {
|
|
|
816
922
|
clock.restore();
|
|
817
923
|
});
|
|
818
924
|
|
|
819
|
-
const checkCreateWithoutDelay = (
|
|
925
|
+
const checkCreateWithoutDelay = (
|
|
926
|
+
meeting,
|
|
927
|
+
destination,
|
|
928
|
+
type,
|
|
929
|
+
expectedMeetingData = {}
|
|
930
|
+
) => {
|
|
820
931
|
assert.calledOnce(webex.meetings.meetingInfo.fetchMeetingInfo);
|
|
821
932
|
assert.calledOnce(MeetingsUtil.getMeetingAddedType);
|
|
822
933
|
assert.notCalled(setTimeoutSpy);
|
|
@@ -832,12 +943,25 @@ describe('plugin-meetings', () => {
|
|
|
832
943
|
}
|
|
833
944
|
assert.equal(meeting.destination, destination);
|
|
834
945
|
assert.equal(meeting.destinationType, type);
|
|
835
|
-
assert.calledWith(
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
946
|
+
assert.calledWith(
|
|
947
|
+
TriggerProxy.trigger,
|
|
948
|
+
sinon.match.instanceOf(Meetings),
|
|
949
|
+
{
|
|
950
|
+
file: 'meetings',
|
|
951
|
+
function: 'createMeeting',
|
|
952
|
+
},
|
|
953
|
+
'meeting:added',
|
|
954
|
+
{
|
|
955
|
+
meeting: sinon.match.instanceOf(Meeting),
|
|
956
|
+
type: 'test meeting added type',
|
|
957
|
+
}
|
|
958
|
+
);
|
|
959
|
+
assert.calledWith(
|
|
960
|
+
TriggerProxy.trigger,
|
|
961
|
+
meeting,
|
|
962
|
+
{file: 'meetings', function: 'fetchMeetingInfo'},
|
|
963
|
+
'meeting:meetingInfoAvailable'
|
|
964
|
+
);
|
|
841
965
|
};
|
|
842
966
|
|
|
843
967
|
it('creates the meeting from a successful meeting info fetch promise testing', async () => {
|
|
@@ -845,7 +969,7 @@ describe('plugin-meetings', () => {
|
|
|
845
969
|
|
|
846
970
|
const expectedMeetingData = {
|
|
847
971
|
permissionToken: 'PT',
|
|
848
|
-
meetingJoinUrl: 'meetingJoinUrl'
|
|
972
|
+
meetingJoinUrl: 'meetingJoinUrl',
|
|
849
973
|
};
|
|
850
974
|
|
|
851
975
|
checkCreateWithoutDelay(meeting, 'test destination', 'test type', expectedMeetingData);
|
|
@@ -855,10 +979,14 @@ describe('plugin-meetings', () => {
|
|
|
855
979
|
const meeting = await webex.meetings.createMeeting('test destination', 'test type');
|
|
856
980
|
const expectedMeetingData = {
|
|
857
981
|
permissionToken: 'PT',
|
|
858
|
-
meetingJoinUrl: 'meetingJoinUrl'
|
|
982
|
+
meetingJoinUrl: 'meetingJoinUrl',
|
|
859
983
|
};
|
|
860
984
|
|
|
861
|
-
assert.instanceOf(
|
|
985
|
+
assert.instanceOf(
|
|
986
|
+
meeting,
|
|
987
|
+
Meeting,
|
|
988
|
+
'createMeeting should eventually resolve to a Meeting Object'
|
|
989
|
+
);
|
|
862
990
|
checkCreateWithoutDelay(meeting, 'test destination', 'test type', expectedMeetingData);
|
|
863
991
|
});
|
|
864
992
|
|
|
@@ -869,19 +997,27 @@ describe('plugin-meetings', () => {
|
|
|
869
997
|
info: {
|
|
870
998
|
webExMeetingId: 'locusMeetingId',
|
|
871
999
|
sipUri: 'locusSipUri',
|
|
872
|
-
owner: 'locusOwner'
|
|
1000
|
+
owner: 'locusOwner',
|
|
873
1001
|
},
|
|
874
1002
|
meeting: {
|
|
875
|
-
startTime: fakeMeetingStartTimeString
|
|
1003
|
+
startTime: fakeMeetingStartTimeString,
|
|
876
1004
|
},
|
|
877
1005
|
fullState: {
|
|
878
|
-
active: false
|
|
879
|
-
}
|
|
1006
|
+
active: false,
|
|
1007
|
+
},
|
|
880
1008
|
};
|
|
881
1009
|
|
|
882
|
-
const meeting = await webex.meetings.createMeeting(
|
|
1010
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1011
|
+
FAKE_LOCUS_MEETING,
|
|
1012
|
+
'test type',
|
|
1013
|
+
true
|
|
1014
|
+
);
|
|
883
1015
|
|
|
884
|
-
assert.instanceOf(
|
|
1016
|
+
assert.instanceOf(
|
|
1017
|
+
meeting,
|
|
1018
|
+
Meeting,
|
|
1019
|
+
'createMeeting should eventually resolve to a Meeting Object'
|
|
1020
|
+
);
|
|
885
1021
|
assert.notCalled(webex.meetings.meetingInfo.fetchMeetingInfo);
|
|
886
1022
|
assert.calledOnce(setTimeoutSpy);
|
|
887
1023
|
|
|
@@ -897,15 +1033,27 @@ describe('plugin-meetings', () => {
|
|
|
897
1033
|
// Add meeting and send trigger
|
|
898
1034
|
assert.calledWith(MeetingsUtil.getMeetingAddedType, 'test type');
|
|
899
1035
|
assert.calledTwice(TriggerProxy.trigger);
|
|
900
|
-
assert.calledWith(
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
1036
|
+
assert.calledWith(
|
|
1037
|
+
TriggerProxy.trigger,
|
|
1038
|
+
sinon.match.instanceOf(Meetings),
|
|
1039
|
+
{
|
|
1040
|
+
file: 'meetings',
|
|
1041
|
+
function: 'createMeeting',
|
|
1042
|
+
},
|
|
1043
|
+
'meeting:added',
|
|
1044
|
+
{
|
|
1045
|
+
meeting: sinon.match.instanceOf(Meeting),
|
|
1046
|
+
type: 'test meeting added type',
|
|
1047
|
+
}
|
|
1048
|
+
);
|
|
905
1049
|
|
|
906
1050
|
// When timer expires
|
|
907
1051
|
clock.tick(FAKE_TIME_TO_START);
|
|
908
|
-
assert.calledWith(
|
|
1052
|
+
assert.calledWith(
|
|
1053
|
+
webex.meetings.meetingInfo.fetchMeetingInfo,
|
|
1054
|
+
FAKE_LOCUS_MEETING,
|
|
1055
|
+
'test type'
|
|
1056
|
+
);
|
|
909
1057
|
|
|
910
1058
|
// Parse meeting info is called again with new meeting info
|
|
911
1059
|
await testUtils.flushPromises();
|
|
@@ -917,7 +1065,12 @@ describe('plugin-meetings', () => {
|
|
|
917
1065
|
assert.equal(meeting.owner, 'locusOwner');
|
|
918
1066
|
assert.equal(meeting.permissionToken, 'PT');
|
|
919
1067
|
|
|
920
|
-
assert.calledWith(
|
|
1068
|
+
assert.calledWith(
|
|
1069
|
+
TriggerProxy.trigger,
|
|
1070
|
+
meeting,
|
|
1071
|
+
{file: 'meetings', function: 'fetchMeetingInfo'},
|
|
1072
|
+
'meeting:meetingInfoAvailable'
|
|
1073
|
+
);
|
|
921
1074
|
});
|
|
922
1075
|
|
|
923
1076
|
it('creates the meeting from a successful meeting info fetch that has no random delay because it is active', async () => {
|
|
@@ -927,19 +1080,27 @@ describe('plugin-meetings', () => {
|
|
|
927
1080
|
info: {
|
|
928
1081
|
webExMeetingId: 'locusMeetingId',
|
|
929
1082
|
sipUri: 'locusSipUri',
|
|
930
|
-
owner: 'locusOwner'
|
|
1083
|
+
owner: 'locusOwner',
|
|
931
1084
|
},
|
|
932
1085
|
meeting: {
|
|
933
|
-
startTime: fakeMeetingStartTimeString
|
|
1086
|
+
startTime: fakeMeetingStartTimeString,
|
|
934
1087
|
},
|
|
935
1088
|
fullState: {
|
|
936
|
-
active: true
|
|
937
|
-
}
|
|
1089
|
+
active: true,
|
|
1090
|
+
},
|
|
938
1091
|
};
|
|
939
1092
|
|
|
940
|
-
const meeting = await webex.meetings.createMeeting(
|
|
1093
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1094
|
+
FAKE_LOCUS_MEETING,
|
|
1095
|
+
'test type',
|
|
1096
|
+
true
|
|
1097
|
+
);
|
|
941
1098
|
|
|
942
|
-
assert.instanceOf(
|
|
1099
|
+
assert.instanceOf(
|
|
1100
|
+
meeting,
|
|
1101
|
+
Meeting,
|
|
1102
|
+
'createMeeting should eventually resolve to a Meeting Object'
|
|
1103
|
+
);
|
|
943
1104
|
checkCreateWithoutDelay(meeting, FAKE_LOCUS_MEETING, 'test type');
|
|
944
1105
|
});
|
|
945
1106
|
|
|
@@ -950,27 +1111,35 @@ describe('plugin-meetings', () => {
|
|
|
950
1111
|
info: {
|
|
951
1112
|
webExMeetingId: 'locusMeetingId',
|
|
952
1113
|
sipUri: 'locusSipUri',
|
|
953
|
-
owner: 'locusOwner'
|
|
1114
|
+
owner: 'locusOwner',
|
|
954
1115
|
},
|
|
955
1116
|
meeting: {
|
|
956
|
-
startTime: fakeMeetingStartTimeString -
|
|
1117
|
+
startTime: fakeMeetingStartTimeString - 1 * 60 * 60 * 1000,
|
|
957
1118
|
},
|
|
958
1119
|
fullState: {
|
|
959
|
-
active: false
|
|
960
|
-
}
|
|
1120
|
+
active: false,
|
|
1121
|
+
},
|
|
961
1122
|
};
|
|
962
1123
|
|
|
963
|
-
const meeting = await webex.meetings.createMeeting(
|
|
1124
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1125
|
+
FAKE_LOCUS_MEETING,
|
|
1126
|
+
'test type',
|
|
1127
|
+
true
|
|
1128
|
+
);
|
|
964
1129
|
|
|
965
|
-
assert.instanceOf(
|
|
1130
|
+
assert.instanceOf(
|
|
1131
|
+
meeting,
|
|
1132
|
+
Meeting,
|
|
1133
|
+
'createMeeting should eventually resolve to a Meeting Object'
|
|
1134
|
+
);
|
|
966
1135
|
checkCreateWithoutDelay(meeting, FAKE_LOCUS_MEETING, 'test type');
|
|
967
1136
|
});
|
|
968
1137
|
|
|
969
1138
|
it('creates the meeting from a successful meeting info fetch that has no random delay because enableUnifiedMeetings is disabled', async () => {
|
|
970
1139
|
Object.assign(webex.meetings.config, {
|
|
971
1140
|
experimental: {
|
|
972
|
-
enableUnifiedMeetings: false
|
|
973
|
-
}
|
|
1141
|
+
enableUnifiedMeetings: false,
|
|
1142
|
+
},
|
|
974
1143
|
});
|
|
975
1144
|
const FAKE_LOCUS_MEETING = {
|
|
976
1145
|
conversationUrl: 'locusConvURL',
|
|
@@ -978,19 +1147,27 @@ describe('plugin-meetings', () => {
|
|
|
978
1147
|
info: {
|
|
979
1148
|
webExMeetingId: 'locusMeetingId',
|
|
980
1149
|
sipUri: 'locusSipUri',
|
|
981
|
-
owner: 'locusOwner'
|
|
1150
|
+
owner: 'locusOwner',
|
|
982
1151
|
},
|
|
983
1152
|
meeting: {
|
|
984
|
-
startTime: fakeMeetingStartTimeString
|
|
1153
|
+
startTime: fakeMeetingStartTimeString,
|
|
985
1154
|
},
|
|
986
1155
|
fullState: {
|
|
987
|
-
active: false
|
|
988
|
-
}
|
|
1156
|
+
active: false,
|
|
1157
|
+
},
|
|
989
1158
|
};
|
|
990
1159
|
|
|
991
|
-
const meeting = await webex.meetings.createMeeting(
|
|
1160
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1161
|
+
FAKE_LOCUS_MEETING,
|
|
1162
|
+
'test type',
|
|
1163
|
+
true
|
|
1164
|
+
);
|
|
992
1165
|
|
|
993
|
-
assert.instanceOf(
|
|
1166
|
+
assert.instanceOf(
|
|
1167
|
+
meeting,
|
|
1168
|
+
Meeting,
|
|
1169
|
+
'createMeeting should eventually resolve to a Meeting Object'
|
|
1170
|
+
);
|
|
994
1171
|
checkCreateWithoutDelay(meeting, FAKE_LOCUS_MEETING, 'test type');
|
|
995
1172
|
});
|
|
996
1173
|
});
|
|
@@ -999,22 +1176,40 @@ describe('plugin-meetings', () => {
|
|
|
999
1176
|
beforeEach(() => {
|
|
1000
1177
|
console.error = sinon.stub().returns(false);
|
|
1001
1178
|
TriggerProxy.trigger.reset();
|
|
1002
|
-
webex.meetings.meetingInfo.fetchMeetingInfo = sinon
|
|
1179
|
+
webex.meetings.meetingInfo.fetchMeetingInfo = sinon
|
|
1180
|
+
.stub()
|
|
1181
|
+
.returns(Promise.reject(new Error('test')));
|
|
1003
1182
|
});
|
|
1004
1183
|
it('creates the meeting from a rejected meeting info fetch', async () => {
|
|
1005
1184
|
const meeting = await webex.meetings.createMeeting('test destination', 'test type');
|
|
1006
1185
|
|
|
1007
|
-
assert.instanceOf(
|
|
1186
|
+
assert.instanceOf(
|
|
1187
|
+
meeting,
|
|
1188
|
+
Meeting,
|
|
1189
|
+
'createMeeting should eventually resolve to a Meeting Object'
|
|
1190
|
+
);
|
|
1008
1191
|
assert.calledOnce(webex.meetings.meetingInfo.fetchMeetingInfo);
|
|
1009
1192
|
assert.calledOnce(MeetingsUtil.getMeetingAddedType);
|
|
1010
1193
|
assert.calledTwice(TriggerProxy.trigger);
|
|
1011
|
-
assert.calledWith(
|
|
1194
|
+
assert.calledWith(
|
|
1195
|
+
webex.meetings.meetingInfo.fetchMeetingInfo,
|
|
1196
|
+
'test destination',
|
|
1197
|
+
'test type'
|
|
1198
|
+
);
|
|
1012
1199
|
assert.calledWith(MeetingsUtil.getMeetingAddedType, 'test type');
|
|
1013
|
-
assert.calledWith(
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1200
|
+
assert.calledWith(
|
|
1201
|
+
TriggerProxy.trigger,
|
|
1202
|
+
sinon.match.instanceOf(Meetings),
|
|
1203
|
+
{
|
|
1204
|
+
file: 'meetings',
|
|
1205
|
+
function: 'createMeeting',
|
|
1206
|
+
},
|
|
1207
|
+
'meeting:added',
|
|
1208
|
+
{
|
|
1209
|
+
meeting: sinon.match.instanceOf(Meeting),
|
|
1210
|
+
type: 'test meeting added type',
|
|
1211
|
+
}
|
|
1212
|
+
);
|
|
1018
1213
|
});
|
|
1019
1214
|
});
|
|
1020
1215
|
});
|
|
@@ -1039,11 +1234,19 @@ describe('plugin-meetings', () => {
|
|
|
1039
1234
|
|
|
1040
1235
|
assert.calledOnce(webex.meetings.meetingCollection.delete);
|
|
1041
1236
|
assert.calledWith(webex.meetings.meetingCollection.delete, meeting.id);
|
|
1042
|
-
assert.calledWith(
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1237
|
+
assert.calledWith(
|
|
1238
|
+
TriggerProxy.trigger,
|
|
1239
|
+
sinon.match.instanceOf(Meetings),
|
|
1240
|
+
{
|
|
1241
|
+
file: 'meetings',
|
|
1242
|
+
function: 'destroy',
|
|
1243
|
+
},
|
|
1244
|
+
'meeting:removed',
|
|
1245
|
+
{
|
|
1246
|
+
meetingId: meeting.id,
|
|
1247
|
+
reason: test1,
|
|
1248
|
+
}
|
|
1249
|
+
);
|
|
1047
1250
|
});
|
|
1048
1251
|
});
|
|
1049
1252
|
|
|
@@ -1068,7 +1271,8 @@ describe('plugin-meetings', () => {
|
|
|
1068
1271
|
it('should trigger event upon mercury disconnect', () => {
|
|
1069
1272
|
const {meetings} = webex;
|
|
1070
1273
|
const SCOPE = {
|
|
1071
|
-
file: 'meetings/index',
|
|
1274
|
+
file: 'meetings/index',
|
|
1275
|
+
function: 'handleMercuryOffline',
|
|
1072
1276
|
};
|
|
1073
1277
|
const EVENT = 'network:disconnected';
|
|
1074
1278
|
|
|
@@ -1098,13 +1302,11 @@ describe('plugin-meetings', () => {
|
|
|
1098
1302
|
services: {
|
|
1099
1303
|
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1100
1304
|
},
|
|
1101
|
-
|
|
1102
1305
|
});
|
|
1103
1306
|
|
|
1104
|
-
await webex.meetings.fetchUserPreferredWebexSite()
|
|
1105
|
-
.
|
|
1106
|
-
|
|
1107
|
-
});
|
|
1307
|
+
await webex.meetings.fetchUserPreferredWebexSite().then(() => {
|
|
1308
|
+
assert.equal(webex.meetings.preferredWebexSite, '');
|
|
1309
|
+
});
|
|
1108
1310
|
});
|
|
1109
1311
|
});
|
|
1110
1312
|
});
|
|
@@ -1120,11 +1322,14 @@ describe('plugin-meetings', () => {
|
|
|
1120
1322
|
TriggerProxy.trigger.reset();
|
|
1121
1323
|
// clock = sinon.useFakeTimers();
|
|
1122
1324
|
// setTimeoutSpy = sinon.spy(clock, 'setTimeout');
|
|
1123
|
-
webex.meetings.meetingInfo.fetchMeetingInfo = sinon.stub().returns(
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1325
|
+
webex.meetings.meetingInfo.fetchMeetingInfo = sinon.stub().returns(
|
|
1326
|
+
Promise.resolve({
|
|
1327
|
+
body: {
|
|
1328
|
+
permissionToken: 'PT',
|
|
1329
|
+
meetingJoinUrl: 'meetingJoinUrl',
|
|
1330
|
+
},
|
|
1331
|
+
})
|
|
1332
|
+
);
|
|
1128
1333
|
|
|
1129
1334
|
meeting = await webex.meetings.createMeeting('test destination', 'test type');
|
|
1130
1335
|
|
|
@@ -1132,37 +1337,37 @@ describe('plugin-meetings', () => {
|
|
|
1132
1337
|
});
|
|
1133
1338
|
|
|
1134
1339
|
it('triggers correct event when CONTROLS_ENTRY_EXIT_TONE_UPDATED emitted', async () => {
|
|
1135
|
-
await meeting.locusInfo.emitScoped(
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
{entryExitTone: 'foo'}
|
|
1139
|
-
);
|
|
1340
|
+
await meeting.locusInfo.emitScoped({}, LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, {
|
|
1341
|
+
entryExitTone: 'foo',
|
|
1342
|
+
});
|
|
1140
1343
|
|
|
1141
1344
|
assert.calledOnce(TriggerProxy.trigger);
|
|
1142
|
-
assert.calledWith(
|
|
1345
|
+
assert.calledWith(
|
|
1346
|
+
TriggerProxy.trigger,
|
|
1347
|
+
sinon.match.instanceOf(Meeting),
|
|
1143
1348
|
{
|
|
1144
1349
|
file: 'meeting/index',
|
|
1145
|
-
function: 'setupLocusControlsListener'
|
|
1350
|
+
function: 'setupLocusControlsListener',
|
|
1146
1351
|
},
|
|
1147
1352
|
EVENT_TRIGGERS.MEETING_ENTRY_EXIT_TONE_UPDATE,
|
|
1148
|
-
{entryExitTone: 'foo'}
|
|
1353
|
+
{entryExitTone: 'foo'}
|
|
1354
|
+
);
|
|
1149
1355
|
});
|
|
1150
1356
|
|
|
1151
1357
|
const checkSelfTrigger = async (inEvent, outEvent) => {
|
|
1152
|
-
await meeting.locusInfo.emitScoped(
|
|
1153
|
-
{},
|
|
1154
|
-
inEvent,
|
|
1155
|
-
{foo: 'bar'}
|
|
1156
|
-
);
|
|
1358
|
+
await meeting.locusInfo.emitScoped({}, inEvent, {foo: 'bar'});
|
|
1157
1359
|
|
|
1158
1360
|
assert.calledOnce(TriggerProxy.trigger);
|
|
1159
|
-
assert.calledWith(
|
|
1361
|
+
assert.calledWith(
|
|
1362
|
+
TriggerProxy.trigger,
|
|
1363
|
+
sinon.match.instanceOf(Meeting),
|
|
1160
1364
|
{
|
|
1161
1365
|
file: 'meeting/index',
|
|
1162
|
-
function: 'setUpLocusInfoSelfListener'
|
|
1366
|
+
function: 'setUpLocusInfoSelfListener',
|
|
1163
1367
|
},
|
|
1164
1368
|
outEvent,
|
|
1165
|
-
{payload: {foo: 'bar'}}
|
|
1369
|
+
{payload: {foo: 'bar'}}
|
|
1370
|
+
);
|
|
1166
1371
|
};
|
|
1167
1372
|
|
|
1168
1373
|
it('triggers correct event when SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE emitted', async () => {
|
|
@@ -1186,5 +1391,159 @@ describe('plugin-meetings', () => {
|
|
|
1186
1391
|
);
|
|
1187
1392
|
});
|
|
1188
1393
|
});
|
|
1394
|
+
|
|
1395
|
+
describe('#isNeedHandleMainLocus', () => {
|
|
1396
|
+
let meeting;
|
|
1397
|
+
let newLocus;
|
|
1398
|
+
beforeEach(() => {
|
|
1399
|
+
meeting = {
|
|
1400
|
+
controls: {},
|
|
1401
|
+
self: {},
|
|
1402
|
+
};
|
|
1403
|
+
newLocus = {
|
|
1404
|
+
controls: {},
|
|
1405
|
+
self: {},
|
|
1406
|
+
}
|
|
1407
|
+
});
|
|
1408
|
+
afterEach(() => {
|
|
1409
|
+
sinon.restore();
|
|
1410
|
+
});
|
|
1411
|
+
it('check normal case will return true', () => {
|
|
1412
|
+
sinon.stub(webex.meetings.meetingCollection, 'getActiveBreakoutLocus').returns(null);
|
|
1413
|
+
LoggerProxy.logger.log = sinon.stub();
|
|
1414
|
+
const result = webex.meetings.isNeedHandleMainLocus(meeting, newLocus);
|
|
1415
|
+
assert.equal(result, true);
|
|
1416
|
+
assert.calledWith(
|
|
1417
|
+
LoggerProxy.logger.log,
|
|
1418
|
+
'Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case'
|
|
1419
|
+
);
|
|
1420
|
+
});
|
|
1421
|
+
|
|
1422
|
+
it('check self joined and joined on this device, return true', () => {
|
|
1423
|
+
sinon.stub(webex.meetings.meetingCollection, 'getActiveBreakoutLocus').returns(null);
|
|
1424
|
+
newLocus.self.state = 'JOINED';
|
|
1425
|
+
sinon.stub(MeetingsUtil, 'joinedOnThisDevice').returns(true);
|
|
1426
|
+
|
|
1427
|
+
LoggerProxy.logger.log = sinon.stub();
|
|
1428
|
+
const result = webex.meetings.isNeedHandleMainLocus(meeting, newLocus);
|
|
1429
|
+
assert.equal(result, true);
|
|
1430
|
+
assert.calledWith(
|
|
1431
|
+
LoggerProxy.logger.log,
|
|
1432
|
+
'Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session'
|
|
1433
|
+
);
|
|
1434
|
+
});
|
|
1435
|
+
|
|
1436
|
+
it('if newLocus replaceAt time is expired, then return false', () => {
|
|
1437
|
+
sinon.stub(webex.meetings.meetingCollection, 'getActiveBreakoutLocus').returns({joinedWith: {replaces: [{
|
|
1438
|
+
replaceAt: '2023-03-27T02:17:02.506Z',
|
|
1439
|
+
}]}});
|
|
1440
|
+
newLocus.self.state = 'JOINED';
|
|
1441
|
+
sinon.stub(MeetingsUtil, 'joinedOnThisDevice').returns(true);
|
|
1442
|
+
sinon.stub(MeetingsUtil, 'getThisDevice').returns({
|
|
1443
|
+
replaces: [{
|
|
1444
|
+
replaceAt: '2023-03-27T02:17:01.506Z'
|
|
1445
|
+
}]
|
|
1446
|
+
})
|
|
1447
|
+
|
|
1448
|
+
LoggerProxy.logger.log = sinon.stub();
|
|
1449
|
+
const result = webex.meetings.isNeedHandleMainLocus(meeting, newLocus);
|
|
1450
|
+
assert.equal(result, false);
|
|
1451
|
+
assert.calledWith(
|
|
1452
|
+
LoggerProxy.logger.log,
|
|
1453
|
+
`Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt 2023-03-27T02:17:01.506Z bo replacedAt 2023-03-27T02:17:02.506Z`
|
|
1454
|
+
);
|
|
1455
|
+
});
|
|
1456
|
+
|
|
1457
|
+
it('check current is in breakout join with this device, return false', () => {
|
|
1458
|
+
sinon.stub(webex.meetings.meetingCollection, 'getActiveBreakoutLocus').returns({
|
|
1459
|
+
joinedWith: {
|
|
1460
|
+
correlationId: '111',
|
|
1461
|
+
},
|
|
1462
|
+
});
|
|
1463
|
+
newLocus.controls.breakout = {url: 'url'};
|
|
1464
|
+
meeting.correlationId = '111';
|
|
1465
|
+
|
|
1466
|
+
LoggerProxy.logger.log = sinon.stub();
|
|
1467
|
+
const result = webex.meetings.isNeedHandleMainLocus(meeting, newLocus);
|
|
1468
|
+
assert.equal(result, false);
|
|
1469
|
+
assert.calledWith(
|
|
1470
|
+
LoggerProxy.logger.log,
|
|
1471
|
+
`Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: url`
|
|
1472
|
+
);
|
|
1473
|
+
});
|
|
1474
|
+
|
|
1475
|
+
it('check self is moved and removed, return false', () => {
|
|
1476
|
+
webex.meetings.meetingCollection.getActiveBreakoutLocus = sinon.stub().returns(null);
|
|
1477
|
+
newLocus.self.state = 'LEFT';
|
|
1478
|
+
newLocus.self.reason = 'MOVED';
|
|
1479
|
+
newLocus.self.removed = true;
|
|
1480
|
+
LoggerProxy.logger.log = sinon.stub();
|
|
1481
|
+
const result = webex.meetings.isNeedHandleMainLocus(meeting, newLocus);
|
|
1482
|
+
assert.equal(result, false);
|
|
1483
|
+
assert.calledWith(
|
|
1484
|
+
LoggerProxy.logger.log,
|
|
1485
|
+
'Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status, not need to handle'
|
|
1486
|
+
);
|
|
1487
|
+
});
|
|
1488
|
+
});
|
|
1489
|
+
|
|
1490
|
+
describe('#isNeedHandleLocusDTO', () => {
|
|
1491
|
+
let meeting;
|
|
1492
|
+
let newLocus;
|
|
1493
|
+
beforeEach(() => {
|
|
1494
|
+
meeting = {
|
|
1495
|
+
controls: {},
|
|
1496
|
+
self: {},
|
|
1497
|
+
};
|
|
1498
|
+
newLocus = {
|
|
1499
|
+
controls: {},
|
|
1500
|
+
self: {},
|
|
1501
|
+
}
|
|
1502
|
+
});
|
|
1503
|
+
afterEach(() => {
|
|
1504
|
+
sinon.restore();
|
|
1505
|
+
});
|
|
1506
|
+
it('initial DTO , joined breakout session, return true', () => {
|
|
1507
|
+
newLocus.controls.breakout = {
|
|
1508
|
+
sessionType: 'BREAKOUT',
|
|
1509
|
+
};
|
|
1510
|
+
newLocus.self.state = 'JOINED';
|
|
1511
|
+
newLocus.fullState = {
|
|
1512
|
+
active: true,
|
|
1513
|
+
};
|
|
1514
|
+
LoggerProxy.logger.log = sinon.stub();
|
|
1515
|
+
const result = webex.meetings.isNeedHandleLocusDTO(null, newLocus);
|
|
1516
|
+
assert.equal(result, true);
|
|
1517
|
+
assert.calledWith(
|
|
1518
|
+
LoggerProxy.logger.log,
|
|
1519
|
+
`Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: true`
|
|
1520
|
+
);
|
|
1521
|
+
});
|
|
1522
|
+
it('others go to check isNeedHandleMainLocus', () => {
|
|
1523
|
+
newLocus.controls.breakout = {
|
|
1524
|
+
sessionType: 'MAIN',
|
|
1525
|
+
};
|
|
1526
|
+
newLocus.self.state = 'JOINED';
|
|
1527
|
+
|
|
1528
|
+
LoggerProxy.logger.log = sinon.stub();
|
|
1529
|
+
const result = webex.meetings.isNeedHandleLocusDTO(meeting, newLocus);
|
|
1530
|
+
assert.equal(result, true);
|
|
1531
|
+
assert.calledWith(
|
|
1532
|
+
LoggerProxy.logger.log,
|
|
1533
|
+
'Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case'
|
|
1534
|
+
);
|
|
1535
|
+
});
|
|
1536
|
+
it('joined breakout session, self status is moved, return false', () => {
|
|
1537
|
+
newLocus.controls.breakout = {
|
|
1538
|
+
sessionType: 'BREAKOUT',
|
|
1539
|
+
};
|
|
1540
|
+
newLocus.self.state = 'LEFT';
|
|
1541
|
+
newLocus.self.reason = 'MOVED';
|
|
1542
|
+
|
|
1543
|
+
LoggerProxy.logger.log = sinon.stub();
|
|
1544
|
+
const result = webex.meetings.isNeedHandleLocusDTO(meeting, newLocus);
|
|
1545
|
+
assert.equal(result, false);
|
|
1546
|
+
});
|
|
1547
|
+
});
|
|
1189
1548
|
});
|
|
1190
1549
|
});
|