@webex/plugin-meetings 3.0.0-stream-classes.4 → 3.0.0
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/.eslintrc.js +6 -0
- package/README.md +12 -0
- package/babel.config.js +3 -0
- package/dist/annotation/constants.js +12 -20
- package/dist/annotation/constants.js.map +1 -1
- package/dist/annotation/index.js +25 -10
- package/dist/annotation/index.js.map +1 -1
- package/dist/breakouts/breakout.js +2 -3
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/collection.js +1 -2
- package/dist/breakouts/collection.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +1 -2
- package/dist/breakouts/edit-lock-error.js.map +1 -1
- package/dist/breakouts/events.js +1 -2
- package/dist/breakouts/events.js.map +1 -1
- package/dist/breakouts/index.js +13 -14
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/request.js +1 -2
- package/dist/breakouts/request.js.map +1 -1
- package/dist/breakouts/utils.js +3 -6
- package/dist/breakouts/utils.js.map +1 -1
- package/dist/common/browser-detection.js +2 -3
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +3 -4
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +1 -2
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +1 -2
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +1 -2
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +1 -2
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +1 -2
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/common/errors/no-meeting-info.js +50 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/parameter.js +3 -4
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +1 -2
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +1 -2
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/common/errors/reclaim-host-role-errors.js +154 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +1 -2
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +1 -2
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +1 -2
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/{types/common → common}/errors/webex-errors.d.ts +13 -1
- package/dist/common/errors/webex-errors.js +35 -16
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -2
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +1 -2
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +1 -2
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +1 -2
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +1 -2
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +1 -2
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -2
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/{types/common → common}/logs/request.d.ts +3 -1
- package/dist/common/logs/request.js +8 -5
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +2 -4
- package/dist/common/queue.js.map +1 -1
- package/dist/{types/config.d.ts → config.d.ts} +1 -1
- package/dist/config.js +3 -3
- package/dist/config.js.map +1 -1
- package/dist/{types/constants.d.ts → constants.d.ts} +72 -15
- package/dist/constants.js +254 -371
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +3 -6
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +7 -10
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +27 -32
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/util.js +1 -2
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interceptors/locusRetry.js +94 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/collection.js +1 -2
- package/dist/interpretation/collection.js.map +1 -1
- package/dist/interpretation/index.js +2 -3
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +2 -3
- package/dist/interpretation/siLanguage.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +12 -13
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -4
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +1 -2
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +1 -2
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/{types/locus-info → locus-info}/index.d.ts +1 -1
- package/dist/locus-info/index.js +63 -38
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -4
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +16 -3
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/{types/locus-info → locus-info}/parser.d.ts +3 -2
- package/dist/locus-info/parser.js +48 -31
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +7 -6
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +15 -10
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +16 -7
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -2
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/mediaQualityMetrics/config.js +135 -339
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/{types/meeting → meeting}/in-meeting-actions.d.ts +4 -0
- package/dist/meeting/in-meeting-actions.js +18 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/{types/meeting → meeting}/index.d.ts +331 -44
- package/dist/meeting/index.js +2639 -1367
- package/dist/meeting/index.js.map +1 -1
- package/dist/{types/meeting → meeting}/locusMediaRequest.d.ts +1 -2
- package/dist/meeting/locusMediaRequest.js +4 -5
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +2 -4
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/{types/meeting → meeting}/request.d.ts +4 -1
- package/dist/meeting/request.js +47 -32
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +1 -2
- package/dist/meeting/state.js.map +1 -1
- package/dist/{types/meeting → meeting}/util.d.ts +26 -1
- package/dist/meeting/util.js +83 -10
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.d.ts +16 -0
- package/dist/meeting/voicea-meeting.js +169 -0
- package/dist/meeting/voicea-meeting.js.map +1 -0
- package/dist/meeting-info/collection.js +3 -4
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/{types/meeting-info → meeting-info}/index.d.ts +7 -0
- package/dist/meeting-info/index.js +53 -27
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/{types/meeting-info → meeting-info}/meeting-info-v2.d.ts +1 -0
- package/dist/meeting-info/meeting-info-v2.js +52 -33
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -2
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +8 -8
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +12 -9
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/{types/meetings → meetings}/collection.d.ts +9 -0
- package/dist/meetings/collection.js +21 -5
- package/dist/meetings/collection.js.map +1 -1
- package/dist/{types/meetings → meetings}/index.d.ts +45 -16
- package/dist/meetings/index.js +166 -74
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +2 -3
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +3 -10
- package/dist/meetings/util.js.map +1 -1
- package/dist/{types/member → member}/index.d.ts +1 -0
- package/dist/member/index.js +10 -3
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.d.ts +11 -0
- package/dist/member/member.types.js +17 -0
- package/dist/member/member.types.js.map +1 -0
- package/dist/member/types.js +6 -8
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js +12 -2
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +1 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +25 -8
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +2 -3
- package/dist/members/request.js.map +1 -1
- package/dist/{types/members → members}/types.d.ts +1 -0
- package/dist/members/types.js +3 -4
- package/dist/members/types.js.map +1 -1
- package/dist/{types/members → members}/util.d.ts +6 -1
- package/dist/members/util.js +18 -8
- package/dist/members/util.js.map +1 -1
- package/dist/{types/metrics → metrics}/constants.d.ts +15 -0
- package/dist/metrics/constants.js +16 -3
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +3 -2
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +9 -11
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +3 -5
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +7 -9
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +3 -5
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +7 -6
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/{types/multistream → multistream}/remoteMediaManager.d.ts +9 -1
- package/dist/multistream/remoteMediaManager.js +74 -36
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +9 -6
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +1 -2
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +2 -3
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -3
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +1 -2
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/clusterReachability.d.ts +109 -0
- package/dist/reachability/clusterReachability.js +357 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.d.ts +105 -0
- package/dist/reachability/index.js +279 -436
- package/dist/reachability/index.js.map +1 -1
- package/dist/{types/reachability → reachability}/request.d.ts +1 -1
- package/dist/reachability/request.js +14 -11
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- package/dist/reactions/constants.js +1 -2
- package/dist/reactions/constants.js.map +1 -1
- package/dist/reactions/reactions.js +2 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +6 -8
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/{types/reconnection-manager → reconnection-manager}/index.d.ts +10 -0
- package/dist/reconnection-manager/index.js +129 -106
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +4 -5
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.js +43 -51
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +1 -2
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/{types/roap → roap}/index.d.ts +2 -1
- package/dist/roap/index.js +59 -28
- package/dist/roap/index.js.map +1 -1
- package/dist/{types/roap → roap}/request.d.ts +2 -1
- package/dist/roap/request.js +14 -22
- package/dist/roap/request.js.map +1 -1
- package/dist/{types/roap → roap}/turnDiscovery.d.ts +21 -4
- package/dist/roap/turnDiscovery.js +182 -89
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +1 -2
- package/dist/rtcMetrics/constants.js.map +1 -1
- package/dist/{types/rtcMetrics → rtcMetrics}/index.d.ts +15 -1
- package/dist/rtcMetrics/index.js +72 -12
- package/dist/rtcMetrics/index.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/{types/statsAnalyzer → statsAnalyzer}/index.d.ts +28 -11
- package/dist/statsAnalyzer/index.js +371 -318
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/statsAnalyzer/mqaUtil.js +295 -162
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +1 -2
- package/dist/transcription/index.js.map +1 -1
- package/dist/webinar/collection.d.ts +16 -0
- package/dist/webinar/collection.js +43 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +68 -0
- package/dist/webinar/index.js.map +1 -0
- package/jest.config.js +3 -0
- package/package.json +44 -24
- package/process +1 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/webex-errors.ts +19 -2
- package/src/common/logs/request.ts +5 -1
- package/src/config.ts +3 -5
- package/src/constants.ts +78 -8
- package/src/index.ts +4 -0
- package/src/interceptors/index.ts +3 -0
- package/src/interceptors/locusRetry.ts +67 -0
- package/src/locus-info/index.ts +52 -16
- package/src/locus-info/mediaSharesUtils.ts +16 -0
- package/src/locus-info/parser.ts +47 -21
- package/src/media/index.ts +8 -6
- package/src/media/properties.ts +17 -2
- package/src/mediaQualityMetrics/config.ts +103 -238
- package/src/meeting/in-meeting-actions.ts +8 -0
- package/src/meeting/index.ts +1692 -627
- package/src/meeting/request.ts +19 -1
- package/src/meeting/util.ts +102 -1
- package/src/meeting/voicea-meeting.ts +122 -0
- package/src/meeting-info/index.ts +47 -20
- package/src/meeting-info/meeting-info-v2.ts +32 -16
- package/src/meeting-info/util.ts +12 -9
- package/src/meeting-info/utilv2.ts +25 -15
- package/src/meetings/collection.ts +13 -0
- package/src/meetings/index.ts +112 -31
- package/src/meetings/util.ts +2 -8
- package/src/member/index.ts +9 -1
- package/src/member/member.types.ts +13 -0
- package/src/member/util.ts +14 -0
- package/src/members/index.ts +29 -2
- package/src/members/types.ts +1 -0
- package/src/members/util.ts +15 -1
- package/src/metrics/constants.ts +14 -0
- package/src/multistream/remoteMediaManager.ts +41 -4
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +221 -382
- package/src/reachability/request.ts +1 -1
- package/src/reachability/util.ts +24 -0
- package/src/reconnection-manager/index.ts +87 -83
- package/src/roap/index.ts +60 -24
- package/src/roap/request.ts +4 -17
- package/src/roap/turnDiscovery.ts +112 -39
- package/src/rtcMetrics/index.ts +71 -5
- package/src/statsAnalyzer/index.ts +430 -427
- package/src/statsAnalyzer/mqaUtil.ts +317 -168
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +7 -7
- package/test/integration/spec/journey.js +88 -106
- package/test/integration/spec/space-meeting.js +10 -10
- package/test/unit/spec/breakouts/breakout.ts +2 -1
- package/test/unit/spec/breakouts/index.ts +7 -4
- package/test/unit/spec/interceptors/locusRetry.ts +131 -0
- package/test/unit/spec/locus-info/index.js +206 -13
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +10 -0
- package/test/unit/spec/locus-info/parser.js +54 -13
- package/test/unit/spec/locus-info/selfUtils.js +1 -1
- package/test/unit/spec/media/index.ts +25 -4
- package/test/unit/spec/media/properties.ts +2 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
- package/test/unit/spec/meeting/index.js +4354 -1285
- package/test/unit/spec/meeting/request.js +63 -12
- package/test/unit/spec/meeting/utils.js +145 -10
- package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
- package/test/unit/spec/meeting-info/index.js +180 -61
- package/test/unit/spec/meeting-info/meetinginfov2.js +216 -68
- package/test/unit/spec/meetings/collection.js +12 -0
- package/test/unit/spec/meetings/index.js +676 -195
- package/test/unit/spec/meetings/utils.js +35 -12
- package/test/unit/spec/member/index.js +8 -7
- package/test/unit/spec/member/util.js +32 -0
- package/test/unit/spec/members/index.js +130 -17
- package/test/unit/spec/members/utils.js +26 -0
- package/test/unit/spec/metrics/index.js +1 -2
- package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +10 -2
- package/test/unit/spec/reachability/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +505 -135
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +74 -17
- package/test/unit/spec/recording-controller/index.js +0 -1
- package/test/unit/spec/roap/index.ts +181 -61
- package/test/unit/spec/roap/request.ts +27 -3
- package/test/unit/spec/roap/turnDiscovery.ts +363 -102
- package/test/unit/spec/rtcMetrics/index.ts +57 -3
- package/test/unit/spec/stats-analyzer/index.js +1225 -12
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/integrationTestUtils.js +4 -4
- package/test/utils/webex-test-users.js +12 -4
- package/dist/types/mediaQualityMetrics/config.d.ts +0 -365
- package/dist/types/reachability/index.d.ts +0 -158
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -24
- /package/dist/{types/annotation → annotation}/annotation.types.d.ts +0 -0
- /package/dist/{types/annotation → annotation}/constants.d.ts +0 -0
- /package/dist/{types/annotation → annotation}/index.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/breakout.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/collection.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/edit-lock-error.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/events.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/index.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/request.d.ts +0 -0
- /package/dist/{types/breakouts → breakouts}/utils.d.ts +0 -0
- /package/dist/{types/common → common}/browser-detection.d.ts +0 -0
- /package/dist/{types/common → common}/collection.d.ts +0 -0
- /package/dist/{types/common → common}/config.d.ts +0 -0
- /package/dist/{types/common → common}/errors/captcha-error.d.ts +0 -0
- /package/dist/{types/common → common}/errors/intent-to-join.d.ts +0 -0
- /package/dist/{types/common → common}/errors/join-meeting.d.ts +0 -0
- /package/dist/{types/common → common}/errors/media.d.ts +0 -0
- /package/dist/{types/common → common}/errors/parameter.d.ts +0 -0
- /package/dist/{types/common → common}/errors/password-error.d.ts +0 -0
- /package/dist/{types/common → common}/errors/permission.d.ts +0 -0
- /package/dist/{types/common → common}/errors/reconnection-in-progress.d.ts +0 -0
- /package/dist/{types/common → common}/errors/reconnection.d.ts +0 -0
- /package/dist/{types/common → common}/errors/stats.d.ts +0 -0
- /package/dist/{types/common → common}/errors/webex-meetings-error.d.ts +0 -0
- /package/dist/{types/common → common}/events/events-scope.d.ts +0 -0
- /package/dist/{types/common → common}/events/events.d.ts +0 -0
- /package/dist/{types/common → common}/events/trigger-proxy.d.ts +0 -0
- /package/dist/{types/common → common}/events/util.d.ts +0 -0
- /package/dist/{types/common → common}/logs/logger-config.d.ts +0 -0
- /package/dist/{types/common → common}/logs/logger-proxy.d.ts +0 -0
- /package/dist/{types/common → common}/queue.d.ts +0 -0
- /package/dist/{types/controls-options-manager → controls-options-manager}/constants.d.ts +0 -0
- /package/dist/{types/controls-options-manager → controls-options-manager}/enums.d.ts +0 -0
- /package/dist/{types/controls-options-manager → controls-options-manager}/index.d.ts +0 -0
- /package/dist/{types/controls-options-manager → controls-options-manager}/types.d.ts +0 -0
- /package/dist/{types/controls-options-manager → controls-options-manager}/util.d.ts +0 -0
- /package/dist/{types/index.d.ts → index.d.ts} +0 -0
- /package/dist/{types/interpretation → interpretation}/collection.d.ts +0 -0
- /package/dist/{types/interpretation → interpretation}/index.d.ts +0 -0
- /package/dist/{types/interpretation → interpretation}/siLanguage.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/controlsUtils.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/embeddedAppsUtils.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/fullState.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/hostUtils.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/infoUtils.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/mediaSharesUtils.d.ts +0 -0
- /package/dist/{types/locus-info → locus-info}/selfUtils.d.ts +0 -0
- /package/dist/{types/media → media}/index.d.ts +0 -0
- /package/dist/{types/media → media}/properties.d.ts +0 -0
- /package/dist/{types/media → media}/util.d.ts +0 -0
- /package/dist/{types/meeting → meeting}/muteState.d.ts +0 -0
- /package/dist/{types/meeting → meeting}/request.type.d.ts +0 -0
- /package/dist/{types/meeting → meeting}/state.d.ts +0 -0
- /package/dist/{types/meeting-info → meeting-info}/collection.d.ts +0 -0
- /package/dist/{types/meeting-info → meeting-info}/request.d.ts +0 -0
- /package/dist/{types/meeting-info → meeting-info}/util.d.ts +0 -0
- /package/dist/{types/meeting-info → meeting-info}/utilv2.d.ts +0 -0
- /package/dist/{types/meetings → meetings}/meetings.types.d.ts +0 -0
- /package/dist/{types/meetings → meetings}/request.d.ts +0 -0
- /package/dist/{types/meetings → meetings}/util.d.ts +0 -0
- /package/dist/{types/member → member}/types.d.ts +0 -0
- /package/dist/{types/member → member}/util.d.ts +0 -0
- /package/dist/{types/members → members}/collection.d.ts +0 -0
- /package/dist/{types/members → members}/index.d.ts +0 -0
- /package/dist/{types/members → members}/request.d.ts +0 -0
- /package/dist/{types/metrics → metrics}/index.d.ts +0 -0
- /package/dist/{types/multistream → multistream}/mediaRequestManager.d.ts +0 -0
- /package/dist/{types/multistream → multistream}/receiveSlot.d.ts +0 -0
- /package/dist/{types/multistream → multistream}/receiveSlotManager.d.ts +0 -0
- /package/dist/{types/multistream → multistream}/remoteMedia.d.ts +0 -0
- /package/dist/{types/multistream → multistream}/remoteMediaGroup.d.ts +0 -0
- /package/dist/{types/multistream → multistream}/sendSlotManager.d.ts +0 -0
- /package/dist/{types/networkQualityMonitor → networkQualityMonitor}/index.d.ts +0 -0
- /package/dist/{types/personal-meeting-room → personal-meeting-room}/index.d.ts +0 -0
- /package/dist/{types/personal-meeting-room → personal-meeting-room}/request.d.ts +0 -0
- /package/dist/{types/personal-meeting-room → personal-meeting-room}/util.d.ts +0 -0
- /package/dist/{types/reactions → reactions}/constants.d.ts +0 -0
- /package/dist/{types/reactions → reactions}/reactions.d.ts +0 -0
- /package/dist/{types/reactions → reactions}/reactions.type.d.ts +0 -0
- /package/dist/{types/recording-controller → recording-controller}/enums.d.ts +0 -0
- /package/dist/{types/recording-controller → recording-controller}/index.d.ts +0 -0
- /package/dist/{types/recording-controller → recording-controller}/util.d.ts +0 -0
- /package/dist/{types/rtcMetrics → rtcMetrics}/constants.d.ts +0 -0
- /package/dist/{types/statsAnalyzer → statsAnalyzer}/global.d.ts +0 -0
- /package/dist/{types/transcription → transcription}/index.d.ts +0 -0
- /package/test/unit/spec/locus-info/{selfConstant.js → lib/selfConstant.js} +0 -0
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import 'jsdom-global/register';
|
|
5
5
|
|
|
6
|
+
// Polyfill for crypto: https://github.com/jsdom/jsdom/issues/1612#issuecomment-663210638
|
|
7
|
+
import {Crypto} from '@peculiar/webcrypto';
|
|
8
|
+
global.crypto = new Crypto();
|
|
9
|
+
|
|
6
10
|
import Device from '@webex/internal-plugin-device';
|
|
7
11
|
import Mercury from '@webex/internal-plugin-mercury';
|
|
8
12
|
import {assert} from '@webex/test-helper-chai';
|
|
@@ -13,7 +17,7 @@ import StaticConfig from '@webex/plugin-meetings/src/common/config';
|
|
|
13
17
|
import TriggerProxy from '@webex/plugin-meetings/src/common/events/trigger-proxy';
|
|
14
18
|
import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
|
|
15
19
|
import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
|
|
16
|
-
import Meeting from '@webex/plugin-meetings/src/meeting';
|
|
20
|
+
import Meeting, {CallStateForMetrics} from '@webex/plugin-meetings/src/meeting';
|
|
17
21
|
import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
|
|
18
22
|
import Meetings from '@webex/plugin-meetings/src/meetings';
|
|
19
23
|
import MeetingCollection from '@webex/plugin-meetings/src/meetings/collection';
|
|
@@ -32,10 +36,11 @@ import {
|
|
|
32
36
|
EVENT_TRIGGERS,
|
|
33
37
|
} from '../../../../src/constants';
|
|
34
38
|
import CaptchaError from '@webex/plugin-meetings/src/common/errors/captcha-error';
|
|
35
|
-
import {
|
|
39
|
+
import {forEach} from 'lodash';
|
|
36
40
|
import PasswordError from '@webex/plugin-meetings/src/common/errors/password-error';
|
|
37
41
|
import PermissionError from '@webex/plugin-meetings/src/common/errors/permission';
|
|
38
|
-
import {NoiseReductionEffect,VirtualBackgroundEffect} from '@webex/media-helpers';
|
|
42
|
+
import {NoiseReductionEffect, VirtualBackgroundEffect} from '@webex/media-helpers';
|
|
43
|
+
import NoMeetingInfoError from '../../../../src/common/errors/no-meeting-info';
|
|
39
44
|
|
|
40
45
|
describe('plugin-meetings', () => {
|
|
41
46
|
const logger = {
|
|
@@ -74,7 +79,7 @@ describe('plugin-meetings', () => {
|
|
|
74
79
|
describe('meetings index', () => {
|
|
75
80
|
beforeEach(() => {
|
|
76
81
|
MeetingsUtil.checkH264Support = sinon.stub();
|
|
77
|
-
|
|
82
|
+
uuid1 = uuid.v4();
|
|
78
83
|
url1 = `https://example.com/${uuid.v4()}`;
|
|
79
84
|
uri1 = `test-${uuid.v4()}@example.com`;
|
|
80
85
|
test1 = `test-${uuid.v4()}`;
|
|
@@ -235,30 +240,15 @@ describe('plugin-meetings', () => {
|
|
|
235
240
|
});
|
|
236
241
|
});
|
|
237
242
|
|
|
238
|
-
describe('#
|
|
239
|
-
it('should have
|
|
240
|
-
assert.equal(typeof webex.meetings.
|
|
243
|
+
describe('#_toggleTcpReachability', () => {
|
|
244
|
+
it('should have _toggleTcpReachability', () => {
|
|
245
|
+
assert.equal(typeof webex.meetings._toggleTcpReachability, 'function');
|
|
241
246
|
});
|
|
242
247
|
|
|
243
248
|
describe('success', () => {
|
|
244
|
-
it('should update meetings to do
|
|
245
|
-
webex.meetings.
|
|
246
|
-
assert.equal(webex.meetings.config.experimental.
|
|
247
|
-
|
|
248
|
-
webex.meetings._toggleTurnDiscovery(false);
|
|
249
|
-
assert.equal(webex.meetings.config.experimental.enableTurnDiscovery, false);
|
|
250
|
-
});
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
describe('failure', () => {
|
|
254
|
-
it('should not accept non boolean input', () => {
|
|
255
|
-
const currentEnableTurnDiscovery = webex.meetings.config.experimental.enableTurnDiscovery;
|
|
256
|
-
|
|
257
|
-
webex.meetings._toggleTurnDiscovery('test');
|
|
258
|
-
assert.equal(
|
|
259
|
-
webex.meetings.config.experimental.enableAdhocMeetings,
|
|
260
|
-
currentEnableTurnDiscovery
|
|
261
|
-
);
|
|
249
|
+
it('should update meetings to do TCP reachability', () => {
|
|
250
|
+
webex.meetings._toggleTcpReachability(true);
|
|
251
|
+
assert.equal(webex.meetings.config.experimental.enableTcpReachability, true);
|
|
262
252
|
});
|
|
263
253
|
});
|
|
264
254
|
});
|
|
@@ -360,24 +350,24 @@ describe('plugin-meetings', () => {
|
|
|
360
350
|
beforeEach(() => {
|
|
361
351
|
webex.credentials = {
|
|
362
352
|
supertoken: {
|
|
363
|
-
access_token:
|
|
364
|
-
}
|
|
353
|
+
access_token: 'fake_token',
|
|
354
|
+
},
|
|
365
355
|
};
|
|
366
|
-
})
|
|
356
|
+
});
|
|
367
357
|
|
|
368
358
|
it('creates background effect', async () => {
|
|
369
359
|
const result = await webex.meetings.createVirtualBackgroundEffect();
|
|
370
360
|
|
|
371
361
|
assert.exists(result);
|
|
372
362
|
assert.instanceOf(result, VirtualBackgroundEffect);
|
|
373
|
-
assert.containsAllKeys(result, ['loadModel', 'isEnabled', '
|
|
363
|
+
assert.containsAllKeys(result, ['loadModel', 'isEnabled', 'options']);
|
|
374
364
|
assert.deepEqual(result.options, {
|
|
375
365
|
mode: 'BLUR',
|
|
376
366
|
blurStrength: 'STRONG',
|
|
377
367
|
generator: 'worker',
|
|
378
368
|
quality: 'LOW',
|
|
379
369
|
authToken: 'fake_token',
|
|
380
|
-
mirror: false
|
|
370
|
+
mirror: false,
|
|
381
371
|
});
|
|
382
372
|
assert.exists(result.enable);
|
|
383
373
|
assert.exists(result.disable);
|
|
@@ -386,35 +376,35 @@ describe('plugin-meetings', () => {
|
|
|
386
376
|
|
|
387
377
|
it('creates background effect with custom options passed', async () => {
|
|
388
378
|
const effectOptions = {
|
|
389
|
-
generator:
|
|
379
|
+
generator: 'local',
|
|
390
380
|
frameRate: 45,
|
|
391
|
-
mode:
|
|
381
|
+
mode: 'IMAGE',
|
|
392
382
|
mirror: false,
|
|
393
|
-
quality:
|
|
394
|
-
blurStrength:
|
|
395
|
-
bgImageUrl:
|
|
383
|
+
quality: 'HIGH',
|
|
384
|
+
blurStrength: 'STRONG',
|
|
385
|
+
bgImageUrl: 'https://test.webex.com/landscape.5a535788.jpg',
|
|
396
386
|
};
|
|
397
387
|
|
|
398
388
|
const result = await webex.meetings.createVirtualBackgroundEffect(effectOptions);
|
|
399
389
|
|
|
400
390
|
assert.exists(result);
|
|
401
391
|
assert.instanceOf(result, VirtualBackgroundEffect);
|
|
402
|
-
assert.containsAllKeys(result, ['loadModel', 'isEnabled', '
|
|
403
|
-
assert.deepEqual(result.options, {...effectOptions, authToken:
|
|
392
|
+
assert.containsAllKeys(result, ['loadModel', 'isEnabled', 'options']);
|
|
393
|
+
assert.deepEqual(result.options, {...effectOptions, authToken: 'fake_token'});
|
|
404
394
|
assert.exists(result.enable);
|
|
405
395
|
assert.exists(result.disable);
|
|
406
396
|
assert.exists(result.dispose);
|
|
407
397
|
});
|
|
408
|
-
})
|
|
398
|
+
});
|
|
409
399
|
|
|
410
400
|
describe('noise reduction effect', () => {
|
|
411
401
|
beforeEach(() => {
|
|
412
402
|
webex.credentials = {
|
|
413
403
|
supertoken: {
|
|
414
|
-
access_token:
|
|
415
|
-
}
|
|
404
|
+
access_token: 'fake_token',
|
|
405
|
+
},
|
|
416
406
|
};
|
|
417
|
-
})
|
|
407
|
+
});
|
|
418
408
|
|
|
419
409
|
it('creates noise reduction effect', async () => {
|
|
420
410
|
const result = await webex.meetings.createNoiseReductionEffect({audioContext: {}});
|
|
@@ -424,7 +414,7 @@ describe('plugin-meetings', () => {
|
|
|
424
414
|
assert.containsAllKeys(result, ['audioContext', 'isEnabled', 'isReady', 'options']);
|
|
425
415
|
assert.deepEqual(result.options, {
|
|
426
416
|
authToken: 'fake_token',
|
|
427
|
-
audioContext: {}
|
|
417
|
+
audioContext: {},
|
|
428
418
|
});
|
|
429
419
|
assert.exists(result.enable);
|
|
430
420
|
assert.exists(result.disable);
|
|
@@ -434,8 +424,8 @@ describe('plugin-meetings', () => {
|
|
|
434
424
|
it('creates noise reduction effect with custom options passed', async () => {
|
|
435
425
|
const effectOptions = {
|
|
436
426
|
audioContext: {},
|
|
437
|
-
mode:
|
|
438
|
-
env:
|
|
427
|
+
mode: 'WORKLET',
|
|
428
|
+
env: 'prod',
|
|
439
429
|
};
|
|
440
430
|
|
|
441
431
|
const result = await webex.meetings.createNoiseReductionEffect(effectOptions);
|
|
@@ -443,12 +433,12 @@ describe('plugin-meetings', () => {
|
|
|
443
433
|
assert.exists(result);
|
|
444
434
|
assert.instanceOf(result, NoiseReductionEffect);
|
|
445
435
|
assert.containsAllKeys(result, ['audioContext', 'isEnabled', 'isReady', 'options']);
|
|
446
|
-
assert.deepEqual(result.options, {...effectOptions, authToken:
|
|
436
|
+
assert.deepEqual(result.options, {...effectOptions, authToken: 'fake_token'});
|
|
447
437
|
assert.exists(result.enable);
|
|
448
438
|
assert.exists(result.disable);
|
|
449
439
|
assert.exists(result.dispose);
|
|
450
440
|
});
|
|
451
|
-
})
|
|
441
|
+
});
|
|
452
442
|
|
|
453
443
|
describe('gets', () => {
|
|
454
444
|
describe('#getReachability', () => {
|
|
@@ -458,10 +448,7 @@ describe('plugin-meetings', () => {
|
|
|
458
448
|
it('gets the reachability data instance from webex.meetings', () => {
|
|
459
449
|
const reachability = webex.meetings.getReachability();
|
|
460
450
|
|
|
461
|
-
assert.exists(
|
|
462
|
-
reachability,
|
|
463
|
-
'reachability is defined'
|
|
464
|
-
);
|
|
451
|
+
assert.exists(reachability, 'reachability is defined');
|
|
465
452
|
assert.instanceOf(reachability, Reachability, 'should be a reachability instance');
|
|
466
453
|
});
|
|
467
454
|
});
|
|
@@ -524,6 +511,27 @@ describe('plugin-meetings', () => {
|
|
|
524
511
|
it('should have #syncMeetings', () => {
|
|
525
512
|
assert.exists(webex.meetings.syncMeetings);
|
|
526
513
|
});
|
|
514
|
+
it('should do nothing and return a resolved promise if unverified guest', async () => {
|
|
515
|
+
webex.meetings.request.getActiveMeetings = sinon.stub().returns(
|
|
516
|
+
Promise.resolve({
|
|
517
|
+
loci: [
|
|
518
|
+
{
|
|
519
|
+
url: url1,
|
|
520
|
+
},
|
|
521
|
+
],
|
|
522
|
+
})
|
|
523
|
+
);
|
|
524
|
+
webex.credentials.isUnverifiedGuest = true;
|
|
525
|
+
LoggerProxy.logger.info = sinon.stub();
|
|
526
|
+
|
|
527
|
+
await webex.meetings.syncMeetings();
|
|
528
|
+
|
|
529
|
+
assert.notCalled(webex.meetings.request.getActiveMeetings);
|
|
530
|
+
assert.calledWith(
|
|
531
|
+
LoggerProxy.logger.info,
|
|
532
|
+
'Meetings:index#syncMeetings --> skipping meeting sync as unverified guest'
|
|
533
|
+
);
|
|
534
|
+
});
|
|
527
535
|
describe('succesful requests', () => {
|
|
528
536
|
beforeEach(() => {
|
|
529
537
|
webex.meetings.request.getActiveMeetings = sinon.stub().returns(
|
|
@@ -537,7 +545,6 @@ describe('plugin-meetings', () => {
|
|
|
537
545
|
);
|
|
538
546
|
});
|
|
539
547
|
describe('when meeting is returned', () => {
|
|
540
|
-
|
|
541
548
|
beforeEach(() => {
|
|
542
549
|
webex.meetings.meetingCollection.getByKey = sinon.stub().returns({
|
|
543
550
|
locusInfo,
|
|
@@ -586,43 +593,76 @@ describe('plugin-meetings', () => {
|
|
|
586
593
|
});
|
|
587
594
|
});
|
|
588
595
|
});
|
|
589
|
-
describe('
|
|
590
|
-
let initialSetup;
|
|
591
|
-
let parse;
|
|
596
|
+
describe('when destroying meeting is needed', () => {
|
|
592
597
|
let destroySpy;
|
|
598
|
+
let cleanUpSpy;
|
|
599
|
+
|
|
600
|
+
const meetingCollectionMeetings = {
|
|
601
|
+
stillValidLocusMeeting: {
|
|
602
|
+
locusUrl: 'still-valid-locus-url',
|
|
603
|
+
sendCallAnalyzerMetrics: sinon.stub(),
|
|
604
|
+
},
|
|
605
|
+
noLongerValidLocusMeeting: {
|
|
606
|
+
locusUrl: 'no-longer-valid-locus-url',
|
|
607
|
+
sendCallAnalyzerMetrics: sinon.stub(),
|
|
608
|
+
},
|
|
609
|
+
otherNonLocusMeeting1: {
|
|
610
|
+
locusUrl: null,
|
|
611
|
+
sendCallAnalyzerMetrics: sinon.stub(),
|
|
612
|
+
},
|
|
613
|
+
otherNonLocusMeeting2: {
|
|
614
|
+
locusUrl: undefined,
|
|
615
|
+
sendCallAnalyzerMetrics: sinon.stub(),
|
|
616
|
+
},
|
|
617
|
+
};
|
|
593
618
|
|
|
594
619
|
beforeEach(() => {
|
|
595
620
|
destroySpy = sinon.spy(webex.meetings, 'destroy');
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
sendCallAnalyzerMetrics: sinon.stub(),
|
|
600
|
-
});
|
|
601
|
-
webex.meetings.meetingCollection.getAll = sinon.stub().returns({
|
|
602
|
-
meetingutk: {
|
|
603
|
-
locusUrl: 'fdfdjfdhj',
|
|
604
|
-
sendCallAnalyzerMetrics: sinon.stub(),
|
|
605
|
-
},
|
|
606
|
-
});
|
|
607
|
-
webex.meetings.create = sinon.stub().returns(
|
|
608
|
-
Promise.resolve({
|
|
609
|
-
locusInfo: {
|
|
610
|
-
initialSetup,
|
|
611
|
-
},
|
|
612
|
-
sendCallAnalyzerMetrics: sinon.stub(),
|
|
613
|
-
})
|
|
614
|
-
);
|
|
621
|
+
webex.meetings.meetingCollection.getAll = sinon
|
|
622
|
+
.stub()
|
|
623
|
+
.returns(meetingCollectionMeetings);
|
|
615
624
|
webex.meetings.request.getActiveMeetings = sinon.stub().returns(
|
|
616
625
|
Promise.resolve({
|
|
617
|
-
loci: [],
|
|
626
|
+
loci: [{url: 'still-valid-locus-url'}],
|
|
618
627
|
})
|
|
619
628
|
);
|
|
620
|
-
|
|
629
|
+
cleanUpSpy = sinon.stub(MeetingUtil, 'cleanUp').returns(Promise.resolve());
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
afterEach(() => {
|
|
633
|
+
cleanUpSpy.restore();
|
|
621
634
|
});
|
|
622
|
-
|
|
635
|
+
|
|
636
|
+
it('destroy any meeting that has no active locus url if keepOnlyLocusMeetings is not defined', async () => {
|
|
623
637
|
await webex.meetings.syncMeetings();
|
|
624
638
|
assert.calledOnce(webex.meetings.request.getActiveMeetings);
|
|
625
|
-
assert.calledOnce(
|
|
639
|
+
assert.calledOnce(webex.meetings.meetingCollection.getAll);
|
|
640
|
+
assert.calledWith(destroySpy, meetingCollectionMeetings.noLongerValidLocusMeeting);
|
|
641
|
+
assert.calledWith(destroySpy, meetingCollectionMeetings.otherNonLocusMeeting1);
|
|
642
|
+
assert.calledWith(destroySpy, meetingCollectionMeetings.otherNonLocusMeeting2);
|
|
643
|
+
assert.callCount(destroySpy, 3);
|
|
644
|
+
|
|
645
|
+
assert.callCount(MeetingUtil.cleanUp, 3);
|
|
646
|
+
});
|
|
647
|
+
|
|
648
|
+
it('destroy any meeting that has no active locus url if keepOnlyLocusMeetings === true', async () => {
|
|
649
|
+
await webex.meetings.syncMeetings({keepOnlyLocusMeetings: true});
|
|
650
|
+
assert.calledOnce(webex.meetings.request.getActiveMeetings);
|
|
651
|
+
assert.calledOnce(webex.meetings.meetingCollection.getAll);
|
|
652
|
+
assert.calledWith(destroySpy, meetingCollectionMeetings.noLongerValidLocusMeeting);
|
|
653
|
+
assert.calledWith(destroySpy, meetingCollectionMeetings.otherNonLocusMeeting1);
|
|
654
|
+
assert.calledWith(destroySpy, meetingCollectionMeetings.otherNonLocusMeeting2);
|
|
655
|
+
assert.callCount(destroySpy, 3);
|
|
656
|
+
|
|
657
|
+
assert.callCount(MeetingUtil.cleanUp, 3);
|
|
658
|
+
});
|
|
659
|
+
|
|
660
|
+
it('destroy any LOCUS meetings that have no active locus url if keepOnlyLocusMeetings === false', async () => {
|
|
661
|
+
await webex.meetings.syncMeetings({keepOnlyLocusMeetings: false});
|
|
662
|
+
assert.calledOnce(webex.meetings.request.getActiveMeetings);
|
|
663
|
+
assert.calledOnce(webex.meetings.meetingCollection.getAll);
|
|
664
|
+
assert.calledWith(destroySpy, meetingCollectionMeetings.noLongerValidLocusMeeting);
|
|
665
|
+
assert.callCount(destroySpy, 1);
|
|
626
666
|
|
|
627
667
|
assert.calledOnce(MeetingUtil.cleanUp);
|
|
628
668
|
});
|
|
@@ -662,28 +702,139 @@ describe('plugin-meetings', () => {
|
|
|
662
702
|
});
|
|
663
703
|
});
|
|
664
704
|
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
705
|
+
const FAKE_USE_RANDOM_DELAY = true;
|
|
706
|
+
const correlationId = 'my-correlationId';
|
|
707
|
+
const callStateForMetrics = {
|
|
708
|
+
correlationId: 'my-correlationId2',
|
|
709
|
+
joinTrigger: 'my-join-trigger',
|
|
710
|
+
loginType: 'my-login-type',
|
|
711
|
+
};
|
|
712
|
+
|
|
713
|
+
it('should call setCallStateForMetrics on any pre-existing meeting', async () => {
|
|
714
|
+
const fakeMeeting = {setCallStateForMetrics: sinon.mock()};
|
|
715
|
+
webex.meetings.meetingCollection.getByKey = sinon.stub().returns(fakeMeeting);
|
|
716
|
+
await webex.meetings.create(
|
|
717
|
+
test1,
|
|
718
|
+
test2,
|
|
719
|
+
FAKE_USE_RANDOM_DELAY,
|
|
720
|
+
{},
|
|
721
|
+
correlationId,
|
|
722
|
+
true,
|
|
723
|
+
callStateForMetrics
|
|
724
|
+
);
|
|
725
|
+
assert.calledOnceWithExactly(fakeMeeting.setCallStateForMetrics, {
|
|
726
|
+
...callStateForMetrics,
|
|
727
|
+
correlationId,
|
|
728
|
+
});
|
|
729
|
+
});
|
|
730
|
+
|
|
731
|
+
const checkCallCreateMeeting = async (createParameters, createMeetingParameters) => {
|
|
732
|
+
const create = webex.meetings.create(...createParameters);
|
|
669
733
|
|
|
670
734
|
assert.exists(create.then);
|
|
671
735
|
await create;
|
|
672
736
|
assert.calledOnce(webex.meetings.createMeeting);
|
|
673
|
-
assert.calledWith(webex.meetings.createMeeting,
|
|
737
|
+
assert.calledWith(webex.meetings.createMeeting, ...createMeetingParameters);
|
|
738
|
+
};
|
|
739
|
+
|
|
740
|
+
it('calls createMeeting and returns its promise', async () => {
|
|
741
|
+
await checkCallCreateMeeting(
|
|
742
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, correlationId, true],
|
|
743
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, {correlationId}, true]
|
|
744
|
+
);
|
|
745
|
+
});
|
|
746
|
+
|
|
747
|
+
it('calls createMeeting, pass the meeting info param and returns its promise', async () => {
|
|
748
|
+
const meetingInfo = {};
|
|
749
|
+
await checkCallCreateMeeting(
|
|
750
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, correlationId, true, undefined, meetingInfo],
|
|
751
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, {correlationId}, true, meetingInfo]
|
|
752
|
+
);
|
|
753
|
+
});
|
|
754
|
+
|
|
755
|
+
it('calls createMeeting, pass the meeting info and meetingLookupURL param and returns its promise', async () => {
|
|
756
|
+
const meetingInfo = {};
|
|
757
|
+
await checkCallCreateMeeting(
|
|
758
|
+
[
|
|
759
|
+
test1,
|
|
760
|
+
test2,
|
|
761
|
+
FAKE_USE_RANDOM_DELAY,
|
|
762
|
+
{},
|
|
763
|
+
correlationId,
|
|
764
|
+
true,
|
|
765
|
+
undefined,
|
|
766
|
+
meetingInfo,
|
|
767
|
+
'meetingLookupURL',
|
|
768
|
+
],
|
|
769
|
+
[
|
|
770
|
+
test1,
|
|
771
|
+
test2,
|
|
772
|
+
FAKE_USE_RANDOM_DELAY,
|
|
773
|
+
{},
|
|
774
|
+
{correlationId},
|
|
775
|
+
true,
|
|
776
|
+
meetingInfo,
|
|
777
|
+
'meetingLookupURL',
|
|
778
|
+
]
|
|
779
|
+
);
|
|
780
|
+
});
|
|
781
|
+
|
|
782
|
+
it('calls createMeeting when failOnMissingMeetinginfo is undefined and returns its promise', async () => {
|
|
783
|
+
await checkCallCreateMeeting(
|
|
784
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, correlationId, undefined],
|
|
785
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, {correlationId}, false]
|
|
786
|
+
);
|
|
787
|
+
});
|
|
788
|
+
|
|
789
|
+
it('calls createMeeting when failOnMissingMeetinginfo is false and returns its promise', async () => {
|
|
790
|
+
await checkCallCreateMeeting(
|
|
791
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, correlationId, false],
|
|
792
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, {correlationId}, false]
|
|
793
|
+
);
|
|
794
|
+
});
|
|
795
|
+
|
|
796
|
+
it('calls createMeeting with callStateForMetrics and returns its promise', async () => {
|
|
797
|
+
await checkCallCreateMeeting(
|
|
798
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, undefined, true, callStateForMetrics],
|
|
799
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, callStateForMetrics, true]
|
|
800
|
+
);
|
|
801
|
+
});
|
|
802
|
+
|
|
803
|
+
it('calls createMeeting with callStateForMetrics overwritten with correlationId and returns its promise', async () => {
|
|
804
|
+
await checkCallCreateMeeting(
|
|
805
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, correlationId, true, callStateForMetrics],
|
|
806
|
+
[test1, test2, FAKE_USE_RANDOM_DELAY, {}, {...callStateForMetrics, correlationId}, true]
|
|
807
|
+
);
|
|
674
808
|
});
|
|
675
809
|
|
|
676
810
|
it('calls createMeeting with extra info params and returns its promise', async () => {
|
|
677
811
|
const FAKE_USE_RANDOM_DELAY = false;
|
|
678
812
|
const correlationId = 'my-correlationId';
|
|
679
813
|
|
|
680
|
-
const FAKE_INFO_EXTRA_PARAMS = {
|
|
681
|
-
|
|
814
|
+
const FAKE_INFO_EXTRA_PARAMS = {
|
|
815
|
+
mtid: 'm9fe0afd8c435e892afcce9ea25b97046',
|
|
816
|
+
joinTXId: 'TSmrX61wNF',
|
|
817
|
+
};
|
|
818
|
+
const create = webex.meetings.create(
|
|
819
|
+
test1,
|
|
820
|
+
test2,
|
|
821
|
+
FAKE_USE_RANDOM_DELAY,
|
|
822
|
+
FAKE_INFO_EXTRA_PARAMS,
|
|
823
|
+
correlationId
|
|
824
|
+
);
|
|
682
825
|
|
|
683
826
|
assert.exists(create.then);
|
|
684
827
|
await create;
|
|
685
828
|
assert.calledOnce(webex.meetings.createMeeting);
|
|
686
|
-
assert.calledWith(
|
|
829
|
+
assert.calledWith(
|
|
830
|
+
webex.meetings.createMeeting,
|
|
831
|
+
test1,
|
|
832
|
+
test2,
|
|
833
|
+
FAKE_USE_RANDOM_DELAY,
|
|
834
|
+
FAKE_INFO_EXTRA_PARAMS,
|
|
835
|
+
{correlationId},
|
|
836
|
+
false
|
|
837
|
+
);
|
|
687
838
|
});
|
|
688
839
|
|
|
689
840
|
it('creates a new meeting when a scheduled meeting exists in the conversation', async () => {
|
|
@@ -779,7 +930,6 @@ describe('plugin-meetings', () => {
|
|
|
779
930
|
});
|
|
780
931
|
describe('#handleLocusEvent', () => {
|
|
781
932
|
describe('there was a meeting', () => {
|
|
782
|
-
|
|
783
933
|
beforeEach(() => {
|
|
784
934
|
webex.meetings.meetingCollection.getByKey = sinon.stub().returns({
|
|
785
935
|
locusInfo,
|
|
@@ -845,7 +995,7 @@ describe('plugin-meetings', () => {
|
|
|
845
995
|
},
|
|
846
996
|
},
|
|
847
997
|
info: {
|
|
848
|
-
webExMeetingId
|
|
998
|
+
webExMeetingId,
|
|
849
999
|
},
|
|
850
1000
|
},
|
|
851
1001
|
eventType: 'locus.difference',
|
|
@@ -853,7 +1003,11 @@ describe('plugin-meetings', () => {
|
|
|
853
1003
|
});
|
|
854
1004
|
assert.callCount(webex.meetings.meetingCollection.getByKey, 6);
|
|
855
1005
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
856
|
-
assert.calledWith(
|
|
1006
|
+
assert.calledWith(
|
|
1007
|
+
webex.meetings.meetingCollection.getByKey,
|
|
1008
|
+
'meetingNumber',
|
|
1009
|
+
webExMeetingId
|
|
1010
|
+
);
|
|
857
1011
|
assert.calledOnce(initialSetup);
|
|
858
1012
|
assert.calledWith(initialSetup, {
|
|
859
1013
|
id: uuid1,
|
|
@@ -868,7 +1022,7 @@ describe('plugin-meetings', () => {
|
|
|
868
1022
|
},
|
|
869
1023
|
},
|
|
870
1024
|
info: {
|
|
871
|
-
webExMeetingId
|
|
1025
|
+
webExMeetingId,
|
|
872
1026
|
},
|
|
873
1027
|
});
|
|
874
1028
|
});
|
|
@@ -882,7 +1036,7 @@ describe('plugin-meetings', () => {
|
|
|
882
1036
|
},
|
|
883
1037
|
},
|
|
884
1038
|
info: {
|
|
885
|
-
webExMeetingId
|
|
1039
|
+
webExMeetingId,
|
|
886
1040
|
},
|
|
887
1041
|
},
|
|
888
1042
|
eventType: 'locus.difference',
|
|
@@ -890,7 +1044,11 @@ describe('plugin-meetings', () => {
|
|
|
890
1044
|
});
|
|
891
1045
|
assert.callCount(webex.meetings.meetingCollection.getByKey, 5);
|
|
892
1046
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
893
|
-
assert.calledWith(
|
|
1047
|
+
assert.calledWith(
|
|
1048
|
+
webex.meetings.meetingCollection.getByKey,
|
|
1049
|
+
'meetingNumber',
|
|
1050
|
+
webExMeetingId
|
|
1051
|
+
);
|
|
894
1052
|
assert.calledOnce(initialSetup);
|
|
895
1053
|
assert.calledWith(initialSetup, {
|
|
896
1054
|
id: uuid1,
|
|
@@ -900,7 +1058,7 @@ describe('plugin-meetings', () => {
|
|
|
900
1058
|
},
|
|
901
1059
|
},
|
|
902
1060
|
info: {
|
|
903
|
-
webExMeetingId
|
|
1061
|
+
webExMeetingId,
|
|
904
1062
|
},
|
|
905
1063
|
});
|
|
906
1064
|
});
|
|
@@ -947,7 +1105,7 @@ describe('plugin-meetings', () => {
|
|
|
947
1105
|
},
|
|
948
1106
|
},
|
|
949
1107
|
info: {
|
|
950
|
-
webExMeetingId
|
|
1108
|
+
webExMeetingId,
|
|
951
1109
|
},
|
|
952
1110
|
},
|
|
953
1111
|
eventType: test1,
|
|
@@ -955,7 +1113,11 @@ describe('plugin-meetings', () => {
|
|
|
955
1113
|
});
|
|
956
1114
|
assert.callCount(webex.meetings.meetingCollection.getByKey, 5);
|
|
957
1115
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
958
|
-
assert.calledWith(
|
|
1116
|
+
assert.calledWith(
|
|
1117
|
+
webex.meetings.meetingCollection.getByKey,
|
|
1118
|
+
'meetingNumber',
|
|
1119
|
+
webExMeetingId
|
|
1120
|
+
);
|
|
959
1121
|
assert.calledOnce(initialSetup);
|
|
960
1122
|
assert.calledWith(initialSetup, {
|
|
961
1123
|
id: uuid1,
|
|
@@ -965,7 +1127,7 @@ describe('plugin-meetings', () => {
|
|
|
965
1127
|
},
|
|
966
1128
|
},
|
|
967
1129
|
info: {
|
|
968
|
-
webExMeetingId
|
|
1130
|
+
webExMeetingId,
|
|
969
1131
|
},
|
|
970
1132
|
});
|
|
971
1133
|
});
|
|
@@ -1037,7 +1199,10 @@ describe('plugin-meetings', () => {
|
|
|
1037
1199
|
});
|
|
1038
1200
|
describe('successful MeetingInfo.#fetchMeetingInfo', () => {
|
|
1039
1201
|
let clock, setTimeoutSpy, fakeMeetingStartTimeString, FAKE_TIME_TO_START;
|
|
1040
|
-
const FAKE_INFO_EXTRA_PARAMS = {
|
|
1202
|
+
const FAKE_INFO_EXTRA_PARAMS = {
|
|
1203
|
+
mtid: 'm9fe0afd8c435e892afcce9ea25b97046',
|
|
1204
|
+
joinTXId: 'TSmrX61wNF',
|
|
1205
|
+
};
|
|
1041
1206
|
|
|
1042
1207
|
beforeEach(() => {
|
|
1043
1208
|
clock = sinon.useFakeTimers();
|
|
@@ -1045,7 +1210,8 @@ describe('plugin-meetings', () => {
|
|
|
1045
1210
|
webex.meetings.meetingInfo.fetchMeetingInfo = sinon.stub().returns(
|
|
1046
1211
|
Promise.resolve({
|
|
1047
1212
|
body: {
|
|
1048
|
-
permissionToken:
|
|
1213
|
+
permissionToken:
|
|
1214
|
+
'eyJhbGciOiJIUzI1NiJ9.eyJleHAiOiIxMjM0NTYiLCJwZXJtaXNzaW9uIjp7InVzZXJQb2xpY2llcyI6eyJhIjp0cnVlfX19.wkTk0Hp8sUlq2wi2nP4-Ym4Xb7aEUHzyXA1kzk6f0V0',
|
|
1049
1215
|
meetingJoinUrl: 'meetingJoinUrl',
|
|
1050
1216
|
},
|
|
1051
1217
|
})
|
|
@@ -1068,13 +1234,36 @@ describe('plugin-meetings', () => {
|
|
|
1068
1234
|
destination,
|
|
1069
1235
|
type,
|
|
1070
1236
|
extraParams = {},
|
|
1071
|
-
expectedMeetingData = {}
|
|
1237
|
+
expectedMeetingData = {},
|
|
1238
|
+
sendCAevents = false,
|
|
1239
|
+
injectMeetingInfo = false
|
|
1072
1240
|
) => {
|
|
1073
|
-
|
|
1241
|
+
if (injectMeetingInfo) {
|
|
1242
|
+
assert.notCalled(webex.meetings.meetingInfo.fetchMeetingInfo);
|
|
1243
|
+
} else {
|
|
1244
|
+
assert.calledOnce(webex.meetings.meetingInfo.fetchMeetingInfo);
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1074
1247
|
assert.calledOnce(MeetingsUtil.getMeetingAddedType);
|
|
1075
1248
|
assert.notCalled(setTimeoutSpy);
|
|
1076
1249
|
assert.callCount(TriggerProxy.trigger, 5);
|
|
1077
|
-
|
|
1250
|
+
|
|
1251
|
+
if (injectMeetingInfo) {
|
|
1252
|
+
assert.notCalled(webex.meetings.meetingInfo.fetchMeetingInfo);
|
|
1253
|
+
} else {
|
|
1254
|
+
assert.calledWith(
|
|
1255
|
+
webex.meetings.meetingInfo.fetchMeetingInfo,
|
|
1256
|
+
destination,
|
|
1257
|
+
type,
|
|
1258
|
+
null,
|
|
1259
|
+
null,
|
|
1260
|
+
undefined,
|
|
1261
|
+
undefined,
|
|
1262
|
+
extraParams,
|
|
1263
|
+
{meetingId: meeting.id, sendCAevents}
|
|
1264
|
+
);
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1078
1267
|
assert.calledWith(MeetingsUtil.getMeetingAddedType, 'test type');
|
|
1079
1268
|
|
|
1080
1269
|
if (expectedMeetingData.permissionToken) {
|
|
@@ -1083,9 +1272,21 @@ describe('plugin-meetings', () => {
|
|
|
1083
1272
|
if (expectedMeetingData.meetingJoinUrl) {
|
|
1084
1273
|
assert.equal(meeting.meetingJoinUrl, expectedMeetingData.meetingJoinUrl);
|
|
1085
1274
|
}
|
|
1086
|
-
if(expectedMeetingData.correlationId) {
|
|
1275
|
+
if (expectedMeetingData.correlationId) {
|
|
1087
1276
|
assert.equal(meeting.correlationId, expectedMeetingData.correlationId);
|
|
1088
1277
|
}
|
|
1278
|
+
if (expectedMeetingData.callStateForMetrics) {
|
|
1279
|
+
assert.deepEqual(
|
|
1280
|
+
meeting.callStateForMetrics,
|
|
1281
|
+
expectedMeetingData.callStateForMetrics
|
|
1282
|
+
);
|
|
1283
|
+
}
|
|
1284
|
+
if (expectedMeetingData.meetingLookupUrl) {
|
|
1285
|
+
assert.equal(
|
|
1286
|
+
meeting.meetingInfo.meetingLookupUrl,
|
|
1287
|
+
expectedMeetingData.meetingLookupUrl
|
|
1288
|
+
);
|
|
1289
|
+
}
|
|
1089
1290
|
assert.equal(meeting.destination, destination);
|
|
1090
1291
|
assert.equal(meeting.destinationType, type);
|
|
1091
1292
|
assert.calledWith(
|
|
@@ -1113,21 +1314,104 @@ describe('plugin-meetings', () => {
|
|
|
1113
1314
|
const meeting = await webex.meetings.createMeeting('test destination', 'test type');
|
|
1114
1315
|
|
|
1115
1316
|
const expectedMeetingData = {
|
|
1116
|
-
permissionToken:
|
|
1317
|
+
permissionToken:
|
|
1318
|
+
'eyJhbGciOiJIUzI1NiJ9.eyJleHAiOiIxMjM0NTYiLCJwZXJtaXNzaW9uIjp7InVzZXJQb2xpY2llcyI6eyJhIjp0cnVlfX19.wkTk0Hp8sUlq2wi2nP4-Ym4Xb7aEUHzyXA1kzk6f0V0',
|
|
1117
1319
|
meetingJoinUrl: 'meetingJoinUrl',
|
|
1118
1320
|
correlationId: meeting.id,
|
|
1119
1321
|
};
|
|
1120
1322
|
|
|
1121
|
-
checkCreateWithoutDelay(
|
|
1323
|
+
checkCreateWithoutDelay(
|
|
1324
|
+
meeting,
|
|
1325
|
+
'test destination',
|
|
1326
|
+
'test type',
|
|
1327
|
+
{},
|
|
1328
|
+
expectedMeetingData
|
|
1329
|
+
);
|
|
1330
|
+
});
|
|
1331
|
+
|
|
1332
|
+
it('accepts injected meeting info', async () => {
|
|
1333
|
+
const meetingInfo = {
|
|
1334
|
+
permissionToken:
|
|
1335
|
+
'eyJhbGciOiJIUzI1NiJ9.eyJleHAiOiIxMjM0NTYiLCJwZXJtaXNzaW9uIjp7InVzZXJQb2xpY2llcyI6eyJhIjp0cnVlfX19.wkTk0Hp8sUlq2wi2nP4-Ym4Xb7aEUHzyXA1kzk6f0V0',
|
|
1336
|
+
meetingJoinUrl: 'meetingJoinUrl',
|
|
1337
|
+
};
|
|
1338
|
+
|
|
1339
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1340
|
+
'test destination',
|
|
1341
|
+
'test type',
|
|
1342
|
+
false,
|
|
1343
|
+
{},
|
|
1344
|
+
undefined,
|
|
1345
|
+
false,
|
|
1346
|
+
meetingInfo
|
|
1347
|
+
);
|
|
1348
|
+
|
|
1349
|
+
const expectedMeetingData = {
|
|
1350
|
+
...meetingInfo,
|
|
1351
|
+
correlationId: meeting.id,
|
|
1352
|
+
};
|
|
1353
|
+
|
|
1354
|
+
checkCreateWithoutDelay(
|
|
1355
|
+
meeting,
|
|
1356
|
+
'test destination',
|
|
1357
|
+
'test type',
|
|
1358
|
+
{},
|
|
1359
|
+
expectedMeetingData,
|
|
1360
|
+
false,
|
|
1361
|
+
true
|
|
1362
|
+
);
|
|
1363
|
+
});
|
|
1364
|
+
|
|
1365
|
+
it('accepts injected meeting info with meeting lookup url', async () => {
|
|
1366
|
+
const meetingInfo = {
|
|
1367
|
+
permissionToken:
|
|
1368
|
+
'eyJhbGciOiJIUzI1NiJ9.eyJleHAiOiIxMjM0NTYiLCJwZXJtaXNzaW9uIjp7InVzZXJQb2xpY2llcyI6eyJhIjp0cnVlfX19.wkTk0Hp8sUlq2wi2nP4-Ym4Xb7aEUHzyXA1kzk6f0V0',
|
|
1369
|
+
meetingJoinUrl: 'meetingJoinUrl',
|
|
1370
|
+
};
|
|
1371
|
+
|
|
1372
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1373
|
+
'test destination',
|
|
1374
|
+
'test type',
|
|
1375
|
+
false,
|
|
1376
|
+
{},
|
|
1377
|
+
undefined,
|
|
1378
|
+
false,
|
|
1379
|
+
meetingInfo,
|
|
1380
|
+
'meetingLookupUrl'
|
|
1381
|
+
);
|
|
1382
|
+
|
|
1383
|
+
const expectedMeetingData = {
|
|
1384
|
+
...meetingInfo,
|
|
1385
|
+
meetingLookupUrl: 'meetingLookupUrl',
|
|
1386
|
+
correlationId: meeting.id,
|
|
1387
|
+
};
|
|
1388
|
+
|
|
1389
|
+
checkCreateWithoutDelay(
|
|
1390
|
+
meeting,
|
|
1391
|
+
'test destination',
|
|
1392
|
+
'test type',
|
|
1393
|
+
{},
|
|
1394
|
+
expectedMeetingData,
|
|
1395
|
+
false,
|
|
1396
|
+
true
|
|
1397
|
+
);
|
|
1122
1398
|
});
|
|
1123
1399
|
|
|
1124
1400
|
[undefined, FAKE_INFO_EXTRA_PARAMS].forEach((infoExtraParams) => {
|
|
1125
1401
|
const infoExtraParamsProvided = infoExtraParams !== undefined;
|
|
1126
1402
|
|
|
1127
|
-
it(`creates the meeting from a successful meeting info fetch meeting resolve testing${
|
|
1128
|
-
|
|
1403
|
+
it(`creates the meeting from a successful meeting info fetch meeting resolve testing${
|
|
1404
|
+
infoExtraParamsProvided ? ' with infoExtraParams' : ''
|
|
1405
|
+
}`, async () => {
|
|
1406
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1407
|
+
'test destination',
|
|
1408
|
+
'test type',
|
|
1409
|
+
false,
|
|
1410
|
+
infoExtraParams
|
|
1411
|
+
);
|
|
1129
1412
|
const expectedMeetingData = {
|
|
1130
|
-
permissionToken:
|
|
1413
|
+
permissionToken:
|
|
1414
|
+
'eyJhbGciOiJIUzI1NiJ9.eyJleHAiOiIxMjM0NTYiLCJwZXJtaXNzaW9uIjp7InVzZXJQb2xpY2llcyI6eyJhIjp0cnVlfX19.wkTk0Hp8sUlq2wi2nP4-Ym4Xb7aEUHzyXA1kzk6f0V0',
|
|
1131
1415
|
meetingJoinUrl: 'meetingJoinUrl',
|
|
1132
1416
|
};
|
|
1133
1417
|
|
|
@@ -1136,10 +1420,18 @@ describe('plugin-meetings', () => {
|
|
|
1136
1420
|
Meeting,
|
|
1137
1421
|
'createMeeting should eventually resolve to a Meeting Object'
|
|
1138
1422
|
);
|
|
1139
|
-
checkCreateWithoutDelay(
|
|
1423
|
+
checkCreateWithoutDelay(
|
|
1424
|
+
meeting,
|
|
1425
|
+
'test destination',
|
|
1426
|
+
'test type',
|
|
1427
|
+
infoExtraParamsProvided ? infoExtraParams : {},
|
|
1428
|
+
expectedMeetingData
|
|
1429
|
+
);
|
|
1140
1430
|
});
|
|
1141
1431
|
|
|
1142
|
-
it(`creates the meeting from a successful meeting info fetch with random delay${
|
|
1432
|
+
it(`creates the meeting from a successful meeting info fetch with random delay${
|
|
1433
|
+
infoExtraParamsProvided ? ' with infoExtraParams' : ''
|
|
1434
|
+
}`, async () => {
|
|
1143
1435
|
const FAKE_LOCUS_MEETING = {
|
|
1144
1436
|
conversationUrl: 'locusConvURL',
|
|
1145
1437
|
url: 'locusUrl',
|
|
@@ -1199,6 +1491,8 @@ describe('plugin-meetings', () => {
|
|
|
1199
1491
|
|
|
1200
1492
|
// When timer expires
|
|
1201
1493
|
clock.tick(FAKE_TIME_TO_START);
|
|
1494
|
+
await testUtils.flushPromises();
|
|
1495
|
+
|
|
1202
1496
|
assert.calledWith(
|
|
1203
1497
|
webex.meetings.meetingInfo.fetchMeetingInfo,
|
|
1204
1498
|
FAKE_LOCUS_MEETING,
|
|
@@ -1218,8 +1512,10 @@ describe('plugin-meetings', () => {
|
|
|
1218
1512
|
assert.equal(meeting.meetingNumber, 'locusMeetingId');
|
|
1219
1513
|
assert.equal(meeting.meetingJoinUrl, 'meetingJoinUrl');
|
|
1220
1514
|
assert.equal(meeting.owner, 'locusOwner');
|
|
1221
|
-
assert.equal(
|
|
1222
|
-
|
|
1515
|
+
assert.equal(
|
|
1516
|
+
meeting.permissionToken,
|
|
1517
|
+
'eyJhbGciOiJIUzI1NiJ9.eyJleHAiOiIxMjM0NTYiLCJwZXJtaXNzaW9uIjp7InVzZXJQb2xpY2llcyI6eyJhIjp0cnVlfX19.wkTk0Hp8sUlq2wi2nP4-Ym4Xb7aEUHzyXA1kzk6f0V0'
|
|
1518
|
+
);
|
|
1223
1519
|
assert.calledWith(
|
|
1224
1520
|
TriggerProxy.trigger,
|
|
1225
1521
|
meeting,
|
|
@@ -1227,7 +1523,7 @@ describe('plugin-meetings', () => {
|
|
|
1227
1523
|
'meeting:meetingInfoAvailable'
|
|
1228
1524
|
);
|
|
1229
1525
|
});
|
|
1230
|
-
})
|
|
1526
|
+
});
|
|
1231
1527
|
|
|
1232
1528
|
it('creates the meeting from a successful meeting info fetch that has no random delay because it is active', async () => {
|
|
1233
1529
|
const FAKE_LOCUS_MEETING = {
|
|
@@ -1328,14 +1624,59 @@ describe('plugin-meetings', () => {
|
|
|
1328
1624
|
});
|
|
1329
1625
|
|
|
1330
1626
|
it('creates meeting with the correlationId provided', async () => {
|
|
1331
|
-
const meeting = await webex.meetings.createMeeting(
|
|
1627
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1628
|
+
'test destination',
|
|
1629
|
+
'test type',
|
|
1630
|
+
false,
|
|
1631
|
+
{},
|
|
1632
|
+
{correlationId: 'my-correlationId'}
|
|
1633
|
+
);
|
|
1332
1634
|
|
|
1333
1635
|
const expectedMeetingData = {
|
|
1334
1636
|
correlationId: 'my-correlationId',
|
|
1335
1637
|
};
|
|
1336
1638
|
|
|
1337
|
-
checkCreateWithoutDelay(
|
|
1338
|
-
|
|
1639
|
+
checkCreateWithoutDelay(
|
|
1640
|
+
meeting,
|
|
1641
|
+
'test destination',
|
|
1642
|
+
'test type',
|
|
1643
|
+
{},
|
|
1644
|
+
expectedMeetingData,
|
|
1645
|
+
true
|
|
1646
|
+
);
|
|
1647
|
+
});
|
|
1648
|
+
|
|
1649
|
+
it('creates meeting with the callStateForMetrics provided', async () => {
|
|
1650
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1651
|
+
'test destination',
|
|
1652
|
+
'test type',
|
|
1653
|
+
false,
|
|
1654
|
+
{},
|
|
1655
|
+
{
|
|
1656
|
+
correlationId: 'my-correlationId',
|
|
1657
|
+
joinTrigger: 'my-join-trigger',
|
|
1658
|
+
loginType: 'my-login-type',
|
|
1659
|
+
}
|
|
1660
|
+
);
|
|
1661
|
+
|
|
1662
|
+
const expectedMeetingData = {
|
|
1663
|
+
correlationId: 'my-correlationId',
|
|
1664
|
+
callStateForMetrics: {
|
|
1665
|
+
correlationId: 'my-correlationId',
|
|
1666
|
+
joinTrigger: 'my-join-trigger',
|
|
1667
|
+
loginType: 'my-login-type',
|
|
1668
|
+
},
|
|
1669
|
+
};
|
|
1670
|
+
|
|
1671
|
+
checkCreateWithoutDelay(
|
|
1672
|
+
meeting,
|
|
1673
|
+
'test destination',
|
|
1674
|
+
'test type',
|
|
1675
|
+
{},
|
|
1676
|
+
expectedMeetingData,
|
|
1677
|
+
true
|
|
1678
|
+
);
|
|
1679
|
+
});
|
|
1339
1680
|
});
|
|
1340
1681
|
|
|
1341
1682
|
describe('rejected MeetingInfo.#fetchMeetingInfo', () => {
|
|
@@ -1345,37 +1686,72 @@ describe('plugin-meetings', () => {
|
|
|
1345
1686
|
webex.meetings.meetingInfo.fetchMeetingInfo = sinon
|
|
1346
1687
|
.stub()
|
|
1347
1688
|
.returns(Promise.reject(new Error('test')));
|
|
1689
|
+
webex.meetings.destroy = sinon.stub().returns(Promise.resolve());
|
|
1690
|
+
webex.meetings.createMeeting = sinon.spy(webex.meetings.createMeeting);
|
|
1348
1691
|
});
|
|
1349
|
-
it('creates the meeting from a rejected meeting info fetch', async () => {
|
|
1350
|
-
const meeting = await webex.meetings.createMeeting('test destination', 'test type');
|
|
1351
1692
|
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1693
|
+
const checkCreateMeetingWithNoMeetingInfo = async (failOnMissingMeetingInfo, destroy) => {
|
|
1694
|
+
try {
|
|
1695
|
+
const meeting = await webex.meetings.createMeeting(
|
|
1696
|
+
'test destination',
|
|
1697
|
+
'test type',
|
|
1698
|
+
undefined,
|
|
1699
|
+
undefined,
|
|
1700
|
+
undefined,
|
|
1701
|
+
failOnMissingMeetingInfo
|
|
1702
|
+
);
|
|
1703
|
+
|
|
1704
|
+
assert.instanceOf(
|
|
1705
|
+
meeting,
|
|
1706
|
+
Meeting,
|
|
1707
|
+
'createMeeting should eventually resolve to a Meeting Object'
|
|
1708
|
+
);
|
|
1709
|
+
assert.calledOnce(webex.meetings.meetingInfo.fetchMeetingInfo);
|
|
1710
|
+
assert.calledOnce(MeetingsUtil.getMeetingAddedType);
|
|
1711
|
+
assert.calledThrice(TriggerProxy.trigger);
|
|
1712
|
+
assert.calledWith(
|
|
1713
|
+
webex.meetings.meetingInfo.fetchMeetingInfo,
|
|
1714
|
+
'test destination',
|
|
1715
|
+
'test type'
|
|
1716
|
+
);
|
|
1717
|
+
|
|
1718
|
+
if (destroy) {
|
|
1719
|
+
assert.calledWith(
|
|
1720
|
+
webex.meetings.destroy,
|
|
1721
|
+
sinon.match.instanceOf(Meeting),
|
|
1722
|
+
'MISSING_MEETING_INFO'
|
|
1723
|
+
);
|
|
1724
|
+
assert.notCalled(MeetingsUtil.getMeetingAddedType);
|
|
1725
|
+
assert.notCalled(TriggerProxy.trigger);
|
|
1726
|
+
assert.throw(webex.meetings.createMeeting, 'meeting information not found');
|
|
1727
|
+
} else {
|
|
1728
|
+
assert.notCalled(webex.meetings.destroy);
|
|
1729
|
+
assert.calledWith(MeetingsUtil.getMeetingAddedType, 'test type');
|
|
1730
|
+
assert.calledWith(
|
|
1731
|
+
TriggerProxy.trigger,
|
|
1732
|
+
sinon.match.instanceOf(Meetings),
|
|
1733
|
+
{
|
|
1734
|
+
file: 'meetings',
|
|
1735
|
+
function: 'createMeeting',
|
|
1736
|
+
},
|
|
1737
|
+
'meeting:added',
|
|
1738
|
+
{
|
|
1739
|
+
meeting: sinon.match.instanceOf(Meeting),
|
|
1740
|
+
type: 'test meeting added type',
|
|
1741
|
+
}
|
|
1742
|
+
);
|
|
1377
1743
|
}
|
|
1378
|
-
)
|
|
1744
|
+
} catch (err) {
|
|
1745
|
+
assert.instanceOf(err, NoMeetingInfoError);
|
|
1746
|
+
}
|
|
1747
|
+
};
|
|
1748
|
+
|
|
1749
|
+
it('creates the meeting from a rejected meeting info fetch', async () => {
|
|
1750
|
+
checkCreateMeetingWithNoMeetingInfo(false, false);
|
|
1751
|
+
});
|
|
1752
|
+
|
|
1753
|
+
it('creates the meeting from a rejected meeting info fetch and destroys it if failOnMissingMeetingInfo', async () => {
|
|
1754
|
+
checkCreateMeetingWithNoMeetingInfo(true, true);
|
|
1379
1755
|
});
|
|
1380
1756
|
});
|
|
1381
1757
|
|
|
@@ -1438,9 +1814,13 @@ describe('plugin-meetings', () => {
|
|
|
1438
1814
|
});
|
|
1439
1815
|
});
|
|
1440
1816
|
describe('Public Event Triggers', () => {
|
|
1817
|
+
let cleanUpSpy;
|
|
1441
1818
|
describe('#destroy', () => {
|
|
1442
1819
|
beforeEach(() => {
|
|
1443
|
-
|
|
1820
|
+
cleanUpSpy = sinon.stub(MeetingUtil, 'cleanUp');
|
|
1821
|
+
});
|
|
1822
|
+
afterEach(() => {
|
|
1823
|
+
cleanUpSpy.restore();
|
|
1444
1824
|
});
|
|
1445
1825
|
it('should have #destroy', () => {
|
|
1446
1826
|
assert.exists(webex.meetings.destroy);
|
|
@@ -1513,7 +1893,6 @@ describe('plugin-meetings', () => {
|
|
|
1513
1893
|
});
|
|
1514
1894
|
|
|
1515
1895
|
describe('#fetchUserPreferredWebexSite', () => {
|
|
1516
|
-
|
|
1517
1896
|
let loggerProxySpy;
|
|
1518
1897
|
|
|
1519
1898
|
it('should call request.getMeetingPreferences to get the preferred webex site ', async () => {
|
|
@@ -1531,12 +1910,10 @@ describe('plugin-meetings', () => {
|
|
|
1531
1910
|
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1532
1911
|
},
|
|
1533
1912
|
user: {
|
|
1534
|
-
get: sinon.stub().returns(
|
|
1535
|
-
Promise.resolve(user)
|
|
1536
|
-
),
|
|
1913
|
+
get: sinon.stub().returns(Promise.resolve(user)),
|
|
1537
1914
|
},
|
|
1538
1915
|
});
|
|
1539
|
-
}
|
|
1916
|
+
};
|
|
1540
1917
|
|
|
1541
1918
|
it('should not fail if UserPreferred info is not fetched ', async () => {
|
|
1542
1919
|
setup();
|
|
@@ -1573,6 +1950,59 @@ describe('plugin-meetings', () => {
|
|
|
1573
1950
|
assert.notCalled(loggerProxySpy);
|
|
1574
1951
|
});
|
|
1575
1952
|
|
|
1953
|
+
forEach(
|
|
1954
|
+
[
|
|
1955
|
+
{user: undefined},
|
|
1956
|
+
{user: {userPreferences: {}}},
|
|
1957
|
+
{user: {userPreferences: {userPreferencesItems: {}}}},
|
|
1958
|
+
{user: {userPreferences: {userPreferencesItems: {preferredWebExSite: undefined}}}},
|
|
1959
|
+
],
|
|
1960
|
+
({user}) => {
|
|
1961
|
+
it(`should handle invalid user data ${user}`, async () => {
|
|
1962
|
+
setup({user});
|
|
1963
|
+
|
|
1964
|
+
await webex.meetings.fetchUserPreferredWebexSite();
|
|
1965
|
+
|
|
1966
|
+
assert.equal(webex.meetings.preferredWebexSite, '');
|
|
1967
|
+
assert.calledOnceWithExactly(
|
|
1968
|
+
loggerProxySpy,
|
|
1969
|
+
'Failed to fetch preferred site from user - no site will be set'
|
|
1970
|
+
);
|
|
1971
|
+
});
|
|
1972
|
+
}
|
|
1973
|
+
);
|
|
1974
|
+
|
|
1975
|
+
it('should handle a get user failure', async () => {
|
|
1976
|
+
setup();
|
|
1977
|
+
|
|
1978
|
+
webex.internal.user.get.rejects(new Error());
|
|
1979
|
+
|
|
1980
|
+
await webex.meetings.fetchUserPreferredWebexSite();
|
|
1981
|
+
|
|
1982
|
+
assert.equal(webex.meetings.preferredWebexSite, '');
|
|
1983
|
+
assert.calledOnceWithExactly(
|
|
1984
|
+
loggerProxySpy,
|
|
1985
|
+
'Failed to fetch preferred site from user - no site will be set'
|
|
1986
|
+
);
|
|
1987
|
+
});
|
|
1988
|
+
|
|
1989
|
+
it('should fall back to fetching the site from the user', async () => {
|
|
1990
|
+
setup({
|
|
1991
|
+
user: {
|
|
1992
|
+
userPreferences: {
|
|
1993
|
+
userPreferencesItems: {
|
|
1994
|
+
preferredWebExSite: 'site.webex.com',
|
|
1995
|
+
},
|
|
1996
|
+
},
|
|
1997
|
+
},
|
|
1998
|
+
});
|
|
1999
|
+
|
|
2000
|
+
await webex.meetings.fetchUserPreferredWebexSite();
|
|
2001
|
+
|
|
2002
|
+
assert.equal(webex.meetings.preferredWebexSite, 'site.webex.com');
|
|
2003
|
+
assert.notCalled(loggerProxySpy);
|
|
2004
|
+
});
|
|
2005
|
+
|
|
1576
2006
|
forEach([
|
|
1577
2007
|
{user: undefined},
|
|
1578
2008
|
{user: {userPreferences: {}}},
|
|
@@ -1623,7 +2053,8 @@ describe('plugin-meetings', () => {
|
|
|
1623
2053
|
webex.meetings.meetingInfo.fetchMeetingInfo = sinon.stub().returns(
|
|
1624
2054
|
Promise.resolve({
|
|
1625
2055
|
body: {
|
|
1626
|
-
permissionToken:
|
|
2056
|
+
permissionToken:
|
|
2057
|
+
'eyJhbGciOiJIUzI1NiJ9.eyJleHAiOiIxMjM0NTYiLCJwZXJtaXNzaW9uIjp7InVzZXJQb2xpY2llcyI6eyJhIjp0cnVlfX19.wkTk0Hp8sUlq2wi2nP4-Ym4Xb7aEUHzyXA1kzk6f0V0',
|
|
1627
2058
|
meetingJoinUrl: 'meetingJoinUrl',
|
|
1628
2059
|
},
|
|
1629
2060
|
})
|
|
@@ -1701,7 +2132,7 @@ describe('plugin-meetings', () => {
|
|
|
1701
2132
|
newLocus = {
|
|
1702
2133
|
controls: {},
|
|
1703
2134
|
self: {},
|
|
1704
|
-
}
|
|
2135
|
+
};
|
|
1705
2136
|
});
|
|
1706
2137
|
afterEach(() => {
|
|
1707
2138
|
sinon.restore();
|
|
@@ -1732,16 +2163,24 @@ describe('plugin-meetings', () => {
|
|
|
1732
2163
|
});
|
|
1733
2164
|
|
|
1734
2165
|
it('if newLocus replaceAt time is expired, then return false', () => {
|
|
1735
|
-
sinon.stub(webex.meetings.meetingCollection, 'getActiveBreakoutLocus').returns({
|
|
1736
|
-
|
|
1737
|
-
|
|
2166
|
+
sinon.stub(webex.meetings.meetingCollection, 'getActiveBreakoutLocus').returns({
|
|
2167
|
+
joinedWith: {
|
|
2168
|
+
replaces: [
|
|
2169
|
+
{
|
|
2170
|
+
replaceAt: '2023-03-27T02:17:02.506Z',
|
|
2171
|
+
},
|
|
2172
|
+
],
|
|
2173
|
+
},
|
|
2174
|
+
});
|
|
1738
2175
|
newLocus.self.state = 'JOINED';
|
|
1739
2176
|
sinon.stub(MeetingsUtil, 'joinedOnThisDevice').returns(true);
|
|
1740
2177
|
sinon.stub(MeetingsUtil, 'getThisDevice').returns({
|
|
1741
|
-
replaces: [
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
2178
|
+
replaces: [
|
|
2179
|
+
{
|
|
2180
|
+
replaceAt: '2023-03-27T02:17:01.506Z',
|
|
2181
|
+
},
|
|
2182
|
+
],
|
|
2183
|
+
});
|
|
1745
2184
|
|
|
1746
2185
|
LoggerProxy.logger.log = sinon.stub();
|
|
1747
2186
|
const result = webex.meetings.isNeedHandleMainLocus(meeting, newLocus);
|
|
@@ -1830,7 +2269,7 @@ describe('plugin-meetings', () => {
|
|
|
1830
2269
|
newLocus = {
|
|
1831
2270
|
controls: {},
|
|
1832
2271
|
self: {},
|
|
1833
|
-
}
|
|
2272
|
+
};
|
|
1834
2273
|
});
|
|
1835
2274
|
afterEach(() => {
|
|
1836
2275
|
sinon.restore();
|
|
@@ -1896,13 +2335,13 @@ describe('plugin-meetings', () => {
|
|
|
1896
2335
|
self: {
|
|
1897
2336
|
callbackInfo: {
|
|
1898
2337
|
callbackAddress: 'address1',
|
|
1899
|
-
}
|
|
2338
|
+
},
|
|
1900
2339
|
},
|
|
1901
2340
|
info: {
|
|
1902
2341
|
webExMeetingId: '123456',
|
|
1903
2342
|
isUnifiedSpaceMeeting: false,
|
|
1904
2343
|
},
|
|
1905
|
-
conversationUrl: 'conversationUrl1'
|
|
2344
|
+
conversationUrl: 'conversationUrl1',
|
|
1906
2345
|
};
|
|
1907
2346
|
|
|
1908
2347
|
sinon.stub(MeetingsUtil, 'checkForCorrelationId').returns('correlationId1');
|
|
@@ -1916,9 +2355,17 @@ describe('plugin-meetings', () => {
|
|
|
1916
2355
|
assert.isNull(result);
|
|
1917
2356
|
assert.callCount(webex.meetings.meetingCollection.getByKey, 5);
|
|
1918
2357
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
1919
|
-
assert.calledWith(
|
|
2358
|
+
assert.calledWith(
|
|
2359
|
+
webex.meetings.meetingCollection.getByKey,
|
|
2360
|
+
'correlationId',
|
|
2361
|
+
'correlationId1'
|
|
2362
|
+
);
|
|
1920
2363
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'sipUri', 'address1');
|
|
1921
|
-
assert.calledWith(
|
|
2364
|
+
assert.calledWith(
|
|
2365
|
+
webex.meetings.meetingCollection.getByKey,
|
|
2366
|
+
'conversationUrl',
|
|
2367
|
+
'conversationUrl1'
|
|
2368
|
+
);
|
|
1922
2369
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'meetingNumber', '123456');
|
|
1923
2370
|
});
|
|
1924
2371
|
|
|
@@ -1928,7 +2375,7 @@ describe('plugin-meetings', () => {
|
|
|
1928
2375
|
const result = webex.meetings.getCorrespondingMeetingByLocus({locus, locusUrl: url1});
|
|
1929
2376
|
assert.isNull(result);
|
|
1930
2377
|
assert.callCount(webex.meetings.meetingCollection.getByKey, 4);
|
|
1931
|
-
})
|
|
2378
|
+
});
|
|
1932
2379
|
|
|
1933
2380
|
it('check the calls when meeting found by key: locusUrl', () => {
|
|
1934
2381
|
mockGetByKey('locusUrl');
|
|
@@ -1944,7 +2391,11 @@ describe('plugin-meetings', () => {
|
|
|
1944
2391
|
assert.deepEqual(result, mockReturnMeeting);
|
|
1945
2392
|
assert.callCount(webex.meetings.meetingCollection.getByKey, 2);
|
|
1946
2393
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
1947
|
-
assert.calledWith(
|
|
2394
|
+
assert.calledWith(
|
|
2395
|
+
webex.meetings.meetingCollection.getByKey,
|
|
2396
|
+
'correlationId',
|
|
2397
|
+
'correlationId1'
|
|
2398
|
+
);
|
|
1948
2399
|
});
|
|
1949
2400
|
|
|
1950
2401
|
it('check the calls when meeting found by key: sipUri', () => {
|
|
@@ -1953,7 +2404,11 @@ describe('plugin-meetings', () => {
|
|
|
1953
2404
|
assert.deepEqual(result, mockReturnMeeting);
|
|
1954
2405
|
assert.callCount(webex.meetings.meetingCollection.getByKey, 3);
|
|
1955
2406
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
1956
|
-
assert.calledWith(
|
|
2407
|
+
assert.calledWith(
|
|
2408
|
+
webex.meetings.meetingCollection.getByKey,
|
|
2409
|
+
'correlationId',
|
|
2410
|
+
'correlationId1'
|
|
2411
|
+
);
|
|
1957
2412
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'sipUri', 'address1');
|
|
1958
2413
|
});
|
|
1959
2414
|
|
|
@@ -1963,9 +2418,17 @@ describe('plugin-meetings', () => {
|
|
|
1963
2418
|
assert.deepEqual(result, mockReturnMeeting);
|
|
1964
2419
|
assert.callCount(webex.meetings.meetingCollection.getByKey, 4);
|
|
1965
2420
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
1966
|
-
assert.calledWith(
|
|
2421
|
+
assert.calledWith(
|
|
2422
|
+
webex.meetings.meetingCollection.getByKey,
|
|
2423
|
+
'correlationId',
|
|
2424
|
+
'correlationId1'
|
|
2425
|
+
);
|
|
1967
2426
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'sipUri', 'address1');
|
|
1968
|
-
assert.calledWith(
|
|
2427
|
+
assert.calledWith(
|
|
2428
|
+
webex.meetings.meetingCollection.getByKey,
|
|
2429
|
+
'conversationUrl',
|
|
2430
|
+
'conversationUrl1'
|
|
2431
|
+
);
|
|
1969
2432
|
});
|
|
1970
2433
|
|
|
1971
2434
|
it('check the calls when meeting found by key: meetingNumber', () => {
|
|
@@ -1974,9 +2437,17 @@ describe('plugin-meetings', () => {
|
|
|
1974
2437
|
assert.deepEqual(result, mockReturnMeeting);
|
|
1975
2438
|
assert.callCount(webex.meetings.meetingCollection.getByKey, 5);
|
|
1976
2439
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'locusUrl', url1);
|
|
1977
|
-
assert.calledWith(
|
|
2440
|
+
assert.calledWith(
|
|
2441
|
+
webex.meetings.meetingCollection.getByKey,
|
|
2442
|
+
'correlationId',
|
|
2443
|
+
'correlationId1'
|
|
2444
|
+
);
|
|
1978
2445
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'sipUri', 'address1');
|
|
1979
|
-
assert.calledWith(
|
|
2446
|
+
assert.calledWith(
|
|
2447
|
+
webex.meetings.meetingCollection.getByKey,
|
|
2448
|
+
'conversationUrl',
|
|
2449
|
+
'conversationUrl1'
|
|
2450
|
+
);
|
|
1980
2451
|
assert.calledWith(webex.meetings.meetingCollection.getByKey, 'meetingNumber', '123456');
|
|
1981
2452
|
});
|
|
1982
2453
|
});
|
|
@@ -1991,18 +2462,18 @@ describe('plugin-meetings', () => {
|
|
|
1991
2462
|
controls: {
|
|
1992
2463
|
breakout: {
|
|
1993
2464
|
sessionType: 'MAIN',
|
|
1994
|
-
url: 'breakoutUnifiedUrl1'
|
|
1995
|
-
}
|
|
1996
|
-
}
|
|
2465
|
+
url: 'breakoutUnifiedUrl1',
|
|
2466
|
+
},
|
|
2467
|
+
},
|
|
1997
2468
|
};
|
|
1998
2469
|
breakoutLocus = {
|
|
1999
2470
|
url: 'breakoutUrl1',
|
|
2000
2471
|
controls: {
|
|
2001
2472
|
breakout: {
|
|
2002
2473
|
sessionType: 'BREAKOUT',
|
|
2003
|
-
url: 'breakoutUnifiedUrl1'
|
|
2004
|
-
}
|
|
2005
|
-
}
|
|
2474
|
+
url: 'breakoutUnifiedUrl1',
|
|
2475
|
+
},
|
|
2476
|
+
},
|
|
2006
2477
|
};
|
|
2007
2478
|
lociArray = [mainLocus, breakoutLocus];
|
|
2008
2479
|
|
|
@@ -2045,8 +2516,8 @@ describe('plugin-meetings', () => {
|
|
|
2045
2516
|
breakout: {
|
|
2046
2517
|
sessionType: 'BREAKOUT',
|
|
2047
2518
|
url: 'breakoutUnifiedUrl1',
|
|
2048
|
-
}
|
|
2049
|
-
}
|
|
2519
|
+
},
|
|
2520
|
+
},
|
|
2050
2521
|
};
|
|
2051
2522
|
|
|
2052
2523
|
webex.meetings.handleLocusEvent = sinon.stub();
|
|
@@ -2076,8 +2547,8 @@ describe('plugin-meetings', () => {
|
|
|
2076
2547
|
breakout: {
|
|
2077
2548
|
sessionType: 'MAIN',
|
|
2078
2549
|
url: 'breakoutUnifiedUrl2',
|
|
2079
|
-
}
|
|
2080
|
-
}
|
|
2550
|
+
},
|
|
2551
|
+
},
|
|
2081
2552
|
});
|
|
2082
2553
|
assert.notCalled(webex.meetings.handleLocusEvent);
|
|
2083
2554
|
});
|
|
@@ -2089,10 +2560,13 @@ describe('plugin-meetings', () => {
|
|
|
2089
2560
|
breakout: {
|
|
2090
2561
|
sessionType: 'MAIN',
|
|
2091
2562
|
url: 'breakoutUnifiedUrl1',
|
|
2092
|
-
}
|
|
2093
|
-
}
|
|
2563
|
+
},
|
|
2564
|
+
},
|
|
2565
|
+
});
|
|
2566
|
+
assert.calledWith(webex.meetings.handleLocusEvent, {
|
|
2567
|
+
locus: breakoutLocus,
|
|
2568
|
+
locusUrl: breakoutLocus.url,
|
|
2094
2569
|
});
|
|
2095
|
-
assert.calledWith(webex.meetings.handleLocusEvent, {locus: breakoutLocus, locusUrl: breakoutLocus.url});
|
|
2096
2570
|
});
|
|
2097
2571
|
});
|
|
2098
2572
|
|
|
@@ -2116,17 +2590,16 @@ describe('plugin-meetings', () => {
|
|
|
2116
2590
|
meeting.locusId = 'locus id';
|
|
2117
2591
|
meeting.correlationId = 'correlation id';
|
|
2118
2592
|
meeting.locusInfo = {
|
|
2119
|
-
fullState: {
|
|
2120
|
-
info: {
|
|
2121
|
-
}
|
|
2593
|
+
fullState: {lastActive: 'last active', sessionId: 'locus session id'},
|
|
2594
|
+
info: {webExMeetingId: 'meeting id'},
|
|
2595
|
+
};
|
|
2122
2596
|
});
|
|
2123
2597
|
|
|
2124
2598
|
afterEach(() => {
|
|
2125
2599
|
sinon.restore();
|
|
2126
|
-
})
|
|
2600
|
+
});
|
|
2127
2601
|
|
|
2128
2602
|
it('sends metrics on success', async () => {
|
|
2129
|
-
|
|
2130
2603
|
await meeting.uploadLogs();
|
|
2131
2604
|
|
|
2132
2605
|
await testUtils.flushPromises();
|
|
@@ -2137,6 +2610,8 @@ describe('plugin-meetings', () => {
|
|
|
2137
2610
|
feedbackId: 'correlation id',
|
|
2138
2611
|
locusId: 'locus id',
|
|
2139
2612
|
meetingId: 'meeting id',
|
|
2613
|
+
autoupload: true,
|
|
2614
|
+
locussessionid: 'locus session id',
|
|
2140
2615
|
});
|
|
2141
2616
|
});
|
|
2142
2617
|
|
|
@@ -2147,14 +2622,20 @@ describe('plugin-meetings', () => {
|
|
|
2147
2622
|
|
|
2148
2623
|
await testUtils.flushPromises();
|
|
2149
2624
|
|
|
2150
|
-
assert.calledOnceWithExactly(
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2625
|
+
assert.calledOnceWithExactly(
|
|
2626
|
+
metricsSpy,
|
|
2627
|
+
'js_sdk_upload_logs_failure',
|
|
2628
|
+
sinon.match({
|
|
2629
|
+
callStart: 'last active',
|
|
2630
|
+
correlationId: 'correlation id',
|
|
2631
|
+
feedbackId: 'correlation id',
|
|
2632
|
+
locusId: 'locus id',
|
|
2633
|
+
meetingId: 'meeting id',
|
|
2634
|
+
reason: 'fake error',
|
|
2635
|
+
autoupload: true,
|
|
2636
|
+
locussessionid: 'locus session id',
|
|
2637
|
+
})
|
|
2638
|
+
);
|
|
2158
2639
|
});
|
|
2159
2640
|
});
|
|
2160
2641
|
});
|