@webex/plugin-meetings 3.0.0-beta.31 → 3.0.0-beta.310
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/README.md +46 -8
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +94 -15
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +709 -35
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/utils.js +45 -1
- package/dist/breakouts/utils.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +51 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.js +158 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/webex-errors.js +48 -7
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +5 -1
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +5 -11
- package/dist/config.js.map +1 -1
- package/dist/constants.js +233 -29
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +14 -2
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +109 -15
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +309 -18
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +112 -1
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +383 -62
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +57 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +249 -72
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +61 -116
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +73 -124
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +82 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +3777 -2929
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +292 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +230 -124
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +260 -196
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +601 -417
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +73 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +192 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/util.js +1 -1
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +36 -36
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +39 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +415 -115
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +72 -6
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +58 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +132 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +102 -6
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- 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 +326 -232
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +13 -5
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -468
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +238 -49
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +29 -16
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +39 -36
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +209 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +233 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/reachability/index.js +225 -59
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +17 -8
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +201 -156
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +62 -32
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +112 -97
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +95 -36
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +117 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/index.js +86 -78
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +11 -10
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/utils.d.ts +14 -0
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/types/common/errors/webex-errors.d.ts +25 -1
- package/dist/types/common/logs/request.d.ts +2 -0
- package/dist/types/common/queue.d.ts +9 -7
- package/dist/types/config.d.ts +1 -7
- package/dist/types/constants.d.ts +194 -24
- package/dist/types/controls-options-manager/enums.d.ts +11 -1
- package/dist/types/controls-options-manager/index.d.ts +17 -1
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -7
- package/dist/types/index.d.ts +6 -4
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/index.d.ts +57 -4
- package/dist/types/locus-info/parser.d.ts +67 -6
- package/dist/types/media/index.d.ts +2 -0
- package/dist/types/media/properties.d.ts +34 -48
- package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
- package/dist/types/meeting/index.d.ts +463 -510
- package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/types/meeting/muteState.d.ts +99 -23
- package/dist/types/meeting/request.d.ts +72 -43
- package/dist/types/meeting/util.d.ts +101 -1
- package/dist/types/meeting-info/index.d.ts +13 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
- package/dist/types/meetings/collection.d.ts +17 -0
- package/dist/types/meetings/index.d.ts +98 -20
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/member/index.d.ts +14 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/members/collection.d.ts +5 -0
- package/dist/types/members/index.d.ts +35 -2
- package/dist/types/members/request.d.ts +73 -9
- package/dist/types/members/types.d.ts +25 -0
- package/dist/types/members/util.d.ts +214 -1
- package/dist/types/metrics/constants.d.ts +12 -4
- package/dist/types/metrics/index.d.ts +4 -119
- package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
- package/dist/types/multistream/receiveSlot.d.ts +13 -11
- package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
- package/dist/types/multistream/remoteMedia.d.ts +8 -29
- package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
- package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
- package/dist/types/multistream/sendSlotManager.d.ts +61 -0
- package/dist/types/reachability/index.d.ts +61 -7
- package/dist/types/reachability/request.d.ts +7 -3
- package/dist/types/reconnection-manager/index.d.ts +9 -0
- package/dist/types/recording-controller/index.d.ts +15 -1
- package/dist/types/recording-controller/util.d.ts +5 -4
- package/dist/types/roap/index.d.ts +2 -1
- package/dist/types/roap/request.d.ts +15 -11
- package/dist/types/roap/turnDiscovery.d.ts +21 -3
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +47 -0
- package/dist/types/statsAnalyzer/index.d.ts +7 -1
- package/dist/types/webinar/collection.d.ts +16 -0
- package/dist/types/webinar/index.d.ts +5 -0
- package/dist/webinar/collection.js +44 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +69 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +23 -20
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +42 -12
- package/src/breakouts/breakout.ts +67 -9
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +592 -20
- package/src/breakouts/utils.ts +42 -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 +44 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +5 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +4 -10
- package/src/constants.ts +221 -19
- package/src/controls-options-manager/enums.ts +12 -0
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +40 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +413 -59
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +102 -122
- package/src/media/properties.ts +87 -110
- package/src/meeting/in-meeting-actions.ts +163 -3
- package/src/meeting/index.ts +3132 -2541
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +229 -131
- package/src/meeting/request.ts +177 -121
- package/src/meeting/util.ts +588 -394
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +170 -14
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +23 -23
- package/src/meetings/collection.ts +33 -0
- package/src/meetings/index.ts +445 -123
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +80 -11
- package/src/member/index.ts +58 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +141 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +134 -8
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +333 -240
- package/src/metrics/constants.ts +12 -4
- package/src/metrics/index.ts +1 -490
- package/src/multistream/mediaRequestManager.ts +289 -79
- package/src/multistream/receiveSlot.ts +31 -17
- package/src/multistream/receiveSlotManager.ts +34 -24
- package/src/multistream/remoteMedia.ts +27 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +148 -30
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/reachability/index.ts +228 -37
- package/src/reachability/request.ts +17 -8
- package/src/reconnection-manager/index.ts +83 -56
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +63 -32
- package/src/roap/request.ts +100 -104
- package/src/roap/turnDiscovery.ts +48 -26
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/index.ts +105 -91
- package/src/statsAnalyzer/mqaUtil.ts +13 -14
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +60 -3
- package/test/integration/spec/journey.js +320 -261
- package/test/integration/spec/space-meeting.js +76 -3
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +118 -28
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1395 -69
- package/test/unit/spec/breakouts/utils.js +52 -1
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +1304 -33
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
- package/test/unit/spec/locus-info/parser.js +116 -35
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +104 -37
- package/test/unit/spec/media/properties.ts +2 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
- package/test/unit/spec/meeting/index.js +5216 -1956
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +408 -208
- package/test/unit/spec/meeting/request.js +483 -49
- package/test/unit/spec/meeting/utils.js +679 -64
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +26 -0
- package/test/unit/spec/meetings/index.js +1011 -205
- package/test/unit/spec/meetings/utils.js +202 -2
- package/test/unit/spec/member/index.js +61 -6
- package/test/unit/spec/member/util.js +510 -34
- package/test/unit/spec/members/index.js +432 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +210 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
- package/test/unit/spec/multistream/receiveSlot.ts +28 -20
- package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/reachability/index.ts +549 -9
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reconnection-manager/index.js +85 -9
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +178 -64
- package/test/unit/spec/roap/request.ts +203 -85
- package/test/unit/spec/roap/turnDiscovery.ts +82 -36
- package/test/unit/spec/rtcMetrics/index.ts +73 -0
- package/test/unit/spec/stats-analyzer/index.js +136 -2
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -52
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -299
- package/dist/metrics/config.js.map +0 -1
- package/dist/types/meeting/effectsState.d.ts +0 -42
- package/dist/types/metrics/config.d.ts +0 -178
- package/src/index.js +0 -16
- package/src/meeting/effectsState.ts +0 -211
- package/src/metrics/config.ts +0 -495
- package/test/unit/spec/meeting/effectsState.js +0 -285
|
@@ -6,9 +6,11 @@ import {skipInNode} from '@webex/test-helper-mocha';
|
|
|
6
6
|
import sinon from 'sinon';
|
|
7
7
|
|
|
8
8
|
import BrowserDetection from '@webex/plugin-meetings/dist/common/browser-detection';
|
|
9
|
+
import {createCameraStream, createDisplayStream, createMicrophoneStream, LocalTrackEvents, LocalStreamEventNames} from '@webex/plugin-meetings';
|
|
9
10
|
|
|
10
|
-
import DEFAULT_RESOLUTIONS from '../../../src/config';
|
|
11
11
|
import testUtils from '../../utils/testUtils';
|
|
12
|
+
import integrationTestUtils from '../../utils/integrationTestUtils';
|
|
13
|
+
import {EVENT_TRIGGERS} from '../../../src/constants';
|
|
12
14
|
|
|
13
15
|
require('dotenv').config();
|
|
14
16
|
|
|
@@ -18,6 +20,42 @@ const {isBrowser} = BrowserDetection();
|
|
|
18
20
|
|
|
19
21
|
let userSet, alice, bob, chris, enumerateSpy, channelUrlA, channelUrlB;
|
|
20
22
|
|
|
23
|
+
const localStreams = {
|
|
24
|
+
alice: {
|
|
25
|
+
microphone: undefined,
|
|
26
|
+
camera: undefined,
|
|
27
|
+
screenShare: {
|
|
28
|
+
video: undefined,
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
bob: {
|
|
32
|
+
microphone: undefined,
|
|
33
|
+
camera: undefined,
|
|
34
|
+
screenShare: {
|
|
35
|
+
video: undefined,
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
chris: {
|
|
39
|
+
microphone: undefined,
|
|
40
|
+
camera: undefined,
|
|
41
|
+
screenShare: {
|
|
42
|
+
video: undefined,
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
// Updated expectedPublished from a boolean value to an object containing the stream and status properties
|
|
48
|
+
const waitForPublished = (meeting, expectedPublished, description) => {
|
|
49
|
+
return testUtils.waitForEvents([{
|
|
50
|
+
scope: meeting,
|
|
51
|
+
event: EVENT_TRIGGERS.MEETING_STREAM_PUBLISH_STATE_CHANGED,
|
|
52
|
+
match: (event) => {
|
|
53
|
+
console.log(`${description} is now ${event.isPublished ? 'published': 'not published'}`);
|
|
54
|
+
return (event.isPublished === expectedPublished.status && event.stream.id === expectedPublished.stream.id) ;
|
|
55
|
+
}
|
|
56
|
+
}]);
|
|
57
|
+
};
|
|
58
|
+
|
|
21
59
|
skipInNode(describe)('plugin-meetings', () => {
|
|
22
60
|
describe('journey', () => {
|
|
23
61
|
before(() =>
|
|
@@ -274,6 +312,11 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
274
312
|
);
|
|
275
313
|
});
|
|
276
314
|
|
|
315
|
+
it('alice creates local microphone and camera tracks', async () => {
|
|
316
|
+
localStreams.alice.microphone = await createMicrophoneStream();
|
|
317
|
+
localStreams.alice.camera = await createCameraStream();
|
|
318
|
+
});
|
|
319
|
+
|
|
277
320
|
it('alice dials bob and adds media', () =>
|
|
278
321
|
Promise.all([
|
|
279
322
|
testUtils.delayedPromise(alice.webex.meetings.create(bob.emailAddress)),
|
|
@@ -301,7 +344,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
301
344
|
})
|
|
302
345
|
.then(() =>
|
|
303
346
|
Promise.all([
|
|
304
|
-
|
|
347
|
+
integrationTestUtils.addMedia(alice, {microphone: localStreams.alice.microphone, camera: localStreams.alice.camera}),
|
|
305
348
|
testUtils.waitForEvents([
|
|
306
349
|
{scope: alice.meeting, event: 'meeting:media:local:start', user: alice},
|
|
307
350
|
]),
|
|
@@ -328,9 +371,14 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
328
371
|
]);
|
|
329
372
|
});
|
|
330
373
|
|
|
374
|
+
it('bob creates local microphone and camera tracks', async () => {
|
|
375
|
+
localStreams.bob.microphone = await createMicrophoneStream();
|
|
376
|
+
localStreams.bob.camera = await createCameraStream();
|
|
377
|
+
});
|
|
378
|
+
|
|
331
379
|
it('bob adds media to the meeting', () =>
|
|
332
380
|
Promise.all([
|
|
333
|
-
|
|
381
|
+
integrationTestUtils.addMedia(bob, {microphone: localStreams.bob.microphone, camera: localStreams.bob.camera}),
|
|
334
382
|
testUtils
|
|
335
383
|
.waitForEvents([
|
|
336
384
|
{scope: bob.meeting, event: 'meeting:media:local:start', user: bob},
|
|
@@ -372,133 +420,126 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
372
420
|
assert.exists(alice.meeting.members.selfId, 'selfId not present');
|
|
373
421
|
});
|
|
374
422
|
|
|
375
|
-
it('alice Audio Mute ', () => {
|
|
423
|
+
it('alice Audio Mute ', async () => {
|
|
376
424
|
const checkEvent = (event) =>
|
|
377
425
|
!!event.delta.updated.find(
|
|
378
426
|
(member) => alice.meeting.members.selfId === member.id && member.isAudioMuted === true
|
|
379
427
|
);
|
|
380
428
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
429
|
+
await testUtils.waitUntil(2000);
|
|
430
|
+
|
|
431
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
432
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
433
|
+
]);
|
|
434
|
+
|
|
435
|
+
localStreams.alice.microphone.setMuted(true);
|
|
436
|
+
|
|
437
|
+
await membersUpdate;
|
|
438
|
+
|
|
439
|
+
assert.equal(localStreams.alice.microphone.muted, true);
|
|
390
440
|
});
|
|
391
441
|
|
|
392
|
-
it('alice Audio unMute ', () => {
|
|
442
|
+
it('alice Audio unMute ', async () => {
|
|
393
443
|
const checkEvent = (event) =>
|
|
394
444
|
!!event.delta.updated.find(
|
|
395
445
|
(member) => alice.meeting.members.selfId === member.id && member.isAudioMuted === false
|
|
396
446
|
);
|
|
397
447
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
448
|
+
await testUtils.waitUntil(2000);
|
|
449
|
+
|
|
450
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
451
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
452
|
+
]);
|
|
453
|
+
|
|
454
|
+
localStreams.alice.microphone.setMuted(false);
|
|
455
|
+
|
|
456
|
+
await membersUpdate;
|
|
457
|
+
|
|
458
|
+
assert.equal(localStreams.alice.microphone.muted, false);
|
|
407
459
|
});
|
|
408
460
|
|
|
409
|
-
it('alice
|
|
461
|
+
it('alice video mute', async () => {
|
|
410
462
|
const checkEvent = (event) =>
|
|
411
463
|
!!event.delta.updated.find(
|
|
412
464
|
(member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === true
|
|
413
465
|
);
|
|
414
466
|
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
467
|
+
await testUtils.waitUntil(2000);
|
|
468
|
+
|
|
469
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
470
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
471
|
+
]);
|
|
472
|
+
|
|
473
|
+
localStreams.alice.camera.setMuted(true);
|
|
474
|
+
|
|
475
|
+
await membersUpdate;
|
|
476
|
+
|
|
477
|
+
assert.equal(localStreams.alice.camera.muted, true);
|
|
424
478
|
});
|
|
425
479
|
|
|
426
|
-
it('alice video
|
|
480
|
+
it('alice video unmute', async () => {
|
|
427
481
|
const checkEvent = (event) =>
|
|
428
482
|
!!event.delta.updated.find(
|
|
429
483
|
(member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === false
|
|
430
484
|
);
|
|
431
485
|
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
486
|
+
await testUtils.waitUntil(2000);
|
|
487
|
+
|
|
488
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
489
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
490
|
+
]);
|
|
491
|
+
|
|
492
|
+
localStreams.alice.camera.setMuted(false);
|
|
493
|
+
|
|
494
|
+
await membersUpdate;
|
|
495
|
+
|
|
496
|
+
assert.equal(localStreams.alice.camera.muted, false);
|
|
441
497
|
});
|
|
442
498
|
|
|
443
|
-
it('alice update Audio', () => {
|
|
444
|
-
const
|
|
499
|
+
it('alice update Audio', async () => {
|
|
500
|
+
const newMicrophoneStream = await createMicrophoneStream();
|
|
501
|
+
const newStreamPublished = waitForPublished(alice.meeting, {stream: newMicrophoneStream, status: true}, "Alice AUDIO: new microphone stream");
|
|
445
502
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
),
|
|
464
|
-
testUtils
|
|
465
|
-
.waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
|
|
466
|
-
.then((response) => {
|
|
467
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
468
|
-
assert.equal(response[0].result.type === 'local', true);
|
|
469
|
-
}),
|
|
470
|
-
])
|
|
471
|
-
);
|
|
503
|
+
await testUtils.delayedPromise(
|
|
504
|
+
alice.meeting
|
|
505
|
+
.publishStreams({
|
|
506
|
+
microphone: newMicrophoneStream,
|
|
507
|
+
})
|
|
508
|
+
.then(() => {
|
|
509
|
+
console.log('Alice AUDIO: new stream on meeting object:', alice.meeting.mediaProperties.audioStream);
|
|
510
|
+
assert.equal(
|
|
511
|
+
alice.meeting.mediaProperties.audioStream.id,
|
|
512
|
+
newMicrophoneStream.id
|
|
513
|
+
);
|
|
514
|
+
})
|
|
515
|
+
);
|
|
516
|
+
|
|
517
|
+
await newStreamPublished;
|
|
518
|
+
|
|
519
|
+
localStreams.alice.microphone = newMicrophoneStream;
|
|
472
520
|
});
|
|
473
521
|
|
|
474
|
-
it('alice update video', () => {
|
|
475
|
-
const
|
|
522
|
+
it('alice update video', async () => {
|
|
523
|
+
const newCameraStream = await createCameraStream();
|
|
524
|
+
const newStreamPublished = waitForPublished(alice.meeting, {stream: newCameraStream, status: true}, "Alice VIDEO: new camera stream");
|
|
476
525
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
testUtils
|
|
495
|
-
.waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
|
|
496
|
-
.then((response) => {
|
|
497
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
498
|
-
assert.equal(response[0].result.type === 'local', true);
|
|
499
|
-
}),
|
|
500
|
-
])
|
|
501
|
-
);
|
|
526
|
+
await testUtils.delayedPromise(
|
|
527
|
+
alice.meeting
|
|
528
|
+
.publishStreams({
|
|
529
|
+
camera: newCameraStream,
|
|
530
|
+
})
|
|
531
|
+
.then(() => {
|
|
532
|
+
console.log('Alice VIDEO: new stream on meeting:', alice.meeting.mediaProperties.videoStream);
|
|
533
|
+
assert.equal(
|
|
534
|
+
alice.meeting.mediaProperties.videoStream.id,
|
|
535
|
+
newCameraStream.id
|
|
536
|
+
);
|
|
537
|
+
})
|
|
538
|
+
);
|
|
539
|
+
|
|
540
|
+
await newStreamPublished;
|
|
541
|
+
|
|
542
|
+
localStreams.alice.camera = newCameraStream;
|
|
502
543
|
});
|
|
503
544
|
|
|
504
545
|
it('alice mutes bob', () =>
|
|
@@ -522,27 +563,25 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
522
563
|
}),
|
|
523
564
|
]));
|
|
524
565
|
|
|
525
|
-
it('bob audio mute, so alice cannot unmute bob', (
|
|
566
|
+
it('bob audio mute, so alice cannot unmute bob', async () => {
|
|
526
567
|
const checkEvent = (event) =>
|
|
527
568
|
!!event.delta.updated.find(
|
|
528
569
|
(member) => bob.meeting.members.selfId === member.id && member.isAudioMuted === true
|
|
529
570
|
);
|
|
530
571
|
|
|
572
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
573
|
+
{scope: bob.meeting.members, event: 'members:update', match: checkEvent},
|
|
574
|
+
]);
|
|
575
|
+
|
|
531
576
|
// first bob mutes himself
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
assert.equal(bob.meeting.isAudioMuted(), true);
|
|
541
|
-
})
|
|
542
|
-
// now alice tries to unmmut bob
|
|
543
|
-
.then(() =>
|
|
544
|
-
testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, false))
|
|
545
|
-
)
|
|
577
|
+
localStreams.bob.microphone.setMuted(true);
|
|
578
|
+
|
|
579
|
+
await membersUpdate;
|
|
580
|
+
|
|
581
|
+
assert.equal(localStreams.bob.microphone.muted, true);
|
|
582
|
+
|
|
583
|
+
// now alice tries to unmmute bob
|
|
584
|
+
await testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, false))
|
|
546
585
|
// expect the waitForEvents to timeout
|
|
547
586
|
.then(() =>
|
|
548
587
|
testUtils.waitForEvents(
|
|
@@ -554,126 +593,121 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
554
593
|
assert.fail('bob received unexpected meeting:self:unmutedByOthers event');
|
|
555
594
|
})
|
|
556
595
|
.catch(() => {
|
|
557
|
-
assert.equal(bob.
|
|
558
|
-
assert.equal(bob.meeting.isAudioMuted(), true);
|
|
559
|
-
done();
|
|
596
|
+
assert.equal(localStreams.bob.microphone.muted, true);
|
|
560
597
|
});
|
|
561
598
|
});
|
|
562
599
|
|
|
563
|
-
it('bob audio unmute ', () => {
|
|
600
|
+
it('bob audio unmute ', async () => {
|
|
564
601
|
const checkEvent = (event) =>
|
|
565
602
|
!!event.delta.updated.find(
|
|
566
603
|
(member) => bob.meeting.members.selfId === member.id && member.isAudioMuted === false
|
|
567
604
|
);
|
|
568
605
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
606
|
+
const membersUpdate = testUtils.waitForEvents([
|
|
607
|
+
{scope: alice.meeting.members, event: 'members:update', match: checkEvent},
|
|
608
|
+
]);
|
|
609
|
+
|
|
610
|
+
localStreams.bob.microphone.setMuted(false);
|
|
611
|
+
|
|
612
|
+
await membersUpdate;
|
|
613
|
+
|
|
614
|
+
assert.equal(localStreams.bob.microphone.muted, false);
|
|
578
615
|
});
|
|
579
616
|
|
|
580
|
-
it('alice shares the screen with highFrameRate', () =>
|
|
581
|
-
|
|
582
|
-
testUtils.delayedPromise(
|
|
583
|
-
alice.meeting.shareScreen({sharePreferences: {highFrameRate: true}})
|
|
584
|
-
),
|
|
585
|
-
testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingLocal'}]),
|
|
586
|
-
testUtils
|
|
587
|
-
.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingRemote'}])
|
|
588
|
-
.then((response) => {
|
|
589
|
-
assert.equal(response[0].result.memberId, alice.meeting.selfId);
|
|
590
|
-
}),
|
|
591
|
-
testUtils
|
|
592
|
-
.waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
|
|
593
|
-
.then((response) => {
|
|
594
|
-
console.log(
|
|
595
|
-
'SCREEN SHARE RESPONSE ',
|
|
596
|
-
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
597
|
-
);
|
|
598
|
-
}),
|
|
599
|
-
testUtils
|
|
600
|
-
.waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
|
|
601
|
-
.then((response) => {
|
|
602
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
603
|
-
assert.equal(response[0].result.type === 'localShare', true);
|
|
604
|
-
}),
|
|
605
|
-
]).then(() => {
|
|
606
|
-
// TODO: Re-eanable Safari when screensharing issues have been resolved
|
|
607
|
-
if (!isBrowser('safari')) {
|
|
608
|
-
assert.equal(alice.meeting.mediaProperties.shareTrack.getConstraints().height, 720);
|
|
609
|
-
}
|
|
610
|
-
assert.equal(alice.meeting.isSharing, true);
|
|
611
|
-
assert.equal(alice.meeting.shareStatus, 'local_share_active');
|
|
612
|
-
assert.equal(bob.meeting.shareStatus, 'remote_share_active');
|
|
613
|
-
console.log(
|
|
614
|
-
'SCREEN SHARE PARTICIPANTS ',
|
|
615
|
-
JSON.stringify(alice.meeting.locusInfo.participants)
|
|
616
|
-
);
|
|
617
|
+
it('alice shares the screen with highFrameRate', async () => {
|
|
618
|
+
localStreams.alice.screenShare.video = await createDisplayStream();
|
|
617
619
|
|
|
618
|
-
|
|
619
|
-
})
|
|
620
|
+
const startedSharingLocal = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingLocal'}]);
|
|
621
|
+
const startedSharingRemote = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingRemote'}])
|
|
622
|
+
.then((response) => {
|
|
623
|
+
assert.equal(response[0].result.memberId, alice.meeting.selfId);
|
|
624
|
+
});
|
|
625
|
+
const bobReceivesMembersUpdate = testUtils.waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
|
|
626
|
+
.then((response) => {
|
|
627
|
+
console.log(
|
|
628
|
+
'SCREEN SHARE RESPONSE ',
|
|
629
|
+
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
630
|
+
);
|
|
631
|
+
});
|
|
620
632
|
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
641
|
-
assert.equal(response[0].result.type === 'localShare', true);
|
|
642
|
-
}),
|
|
643
|
-
]).then(() => {
|
|
644
|
-
const heightResolution = DEFAULT_RESOLUTIONS.meetings.screenResolution.idealHeight;
|
|
633
|
+
const screenShareVideoPublished = waitForPublished(alice.meeting, {stream: localStreams.alice.screenShare.video, status: true}, "alice's screen share video stream");
|
|
634
|
+
|
|
635
|
+
await testUtils.delayedPromise(alice.meeting.publishStreams({screenShare: {video: localStreams.alice.screenShare.video}}));
|
|
636
|
+
|
|
637
|
+
await screenShareVideoPublished;
|
|
638
|
+
await startedSharingLocal;
|
|
639
|
+
await startedSharingRemote;
|
|
640
|
+
await bobReceivesMembersUpdate;
|
|
641
|
+
|
|
642
|
+
assert.equal(alice.meeting.screenShareFloorState, 'floor_request_granted');
|
|
643
|
+
assert.equal(alice.meeting.shareStatus, 'local_share_active');
|
|
644
|
+
assert.equal(bob.meeting.shareStatus, 'remote_share_active');
|
|
645
|
+
console.log(
|
|
646
|
+
'SCREEN SHARE PARTICIPANTS ',
|
|
647
|
+
JSON.stringify(alice.meeting.locusInfo.participants)
|
|
648
|
+
);
|
|
649
|
+
|
|
650
|
+
await testUtils.waitUntil(10000);
|
|
651
|
+
});
|
|
645
652
|
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
653
|
+
it('bob steals the screen share from alice', async () => {
|
|
654
|
+
localStreams.bob.screenShare.video = await createDisplayStream();
|
|
655
|
+
|
|
656
|
+
const stoppedSharingLocal = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingLocal'}]);
|
|
657
|
+
const startedSharingLocal = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]);
|
|
658
|
+
const startedSharingRemote = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
|
|
659
|
+
.then((response) => {
|
|
660
|
+
assert.equal(response[0].result.memberId, bob.meeting.selfId);
|
|
661
|
+
});
|
|
662
|
+
const aliceReceivesMembersUpdate = testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
|
|
663
|
+
.then((response) => {
|
|
664
|
+
console.log(
|
|
665
|
+
'SCREEN SHARE RESPONSE ',
|
|
666
|
+
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
651
667
|
);
|
|
652
|
-
}
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
668
|
+
});
|
|
669
|
+
const aliceScreenShareVideoUnpublished = waitForPublished(alice.meeting, {stream: localStreams.alice.screenShare.video, status: false}, "alice's screen share video stream");
|
|
670
|
+
const bobScreenShareVideoPublished = waitForPublished(bob.meeting, {stream: localStreams.bob.screenShare.video, status: true}, "bob's screen share video stream");
|
|
656
671
|
|
|
657
|
-
|
|
658
|
-
}));
|
|
672
|
+
await testUtils.delayedPromise(bob.meeting.publishStreams({screenShare: {video: localStreams.bob.screenShare.video}}));
|
|
659
673
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
674
|
+
await bobScreenShareVideoPublished;
|
|
675
|
+
await aliceScreenShareVideoUnpublished;
|
|
676
|
+
await stoppedSharingLocal;
|
|
677
|
+
await startedSharingLocal;
|
|
678
|
+
await startedSharingRemote;
|
|
679
|
+
await aliceReceivesMembersUpdate;
|
|
680
|
+
|
|
681
|
+
localStreams.alice.screenShare.video.stop();
|
|
682
|
+
localStreams.alice.screenShare.video = undefined;
|
|
683
|
+
|
|
684
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_request_granted');
|
|
685
|
+
assert.equal(bob.meeting.shareStatus, 'local_share_active');
|
|
686
|
+
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
687
|
+
|
|
688
|
+
await testUtils.waitUntil(10000);
|
|
689
|
+
});
|
|
690
|
+
|
|
691
|
+
it('bob stops sharing', async () => {
|
|
692
|
+
const screenShareVideoUnpublished = waitForPublished(bob.meeting, {stream: localStreams.bob.screenShare.video, status: false}, "bob's screen share video stream");
|
|
693
|
+
const stoppedSharingLocal = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:stoppedSharingLocal'}]);
|
|
694
|
+
const stoppedSharingRemote = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingRemote'}]);
|
|
695
|
+
|
|
696
|
+
await testUtils.delayedPromise(bob.meeting.unpublishStreams([localStreams.bob.screenShare.video]));
|
|
697
|
+
|
|
698
|
+
await screenShareVideoUnpublished;
|
|
699
|
+
await stoppedSharingLocal;
|
|
700
|
+
await stoppedSharingRemote;
|
|
701
|
+
|
|
702
|
+
localStreams.bob.screenShare.video.stop();
|
|
703
|
+
localStreams.bob.screenShare.video = undefined;
|
|
704
|
+
|
|
705
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
706
|
+
assert.equal(bob.meeting.shareStatus, 'no_share');
|
|
707
|
+
assert.equal(alice.meeting.shareStatus, 'no_share');
|
|
708
|
+
|
|
709
|
+
await testUtils.waitUntil(10000);
|
|
710
|
+
});
|
|
677
711
|
|
|
678
712
|
it('alice shares whiteboard A', () =>
|
|
679
713
|
Promise.all([
|
|
@@ -698,7 +732,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
698
732
|
);
|
|
699
733
|
}),
|
|
700
734
|
]).then(() => {
|
|
701
|
-
assert.equal(alice.meeting.
|
|
735
|
+
assert.equal(alice.meeting.screenShareFloorState, 'floor_released');
|
|
702
736
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
703
737
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
704
738
|
}));
|
|
@@ -726,12 +760,12 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
726
760
|
);
|
|
727
761
|
}),
|
|
728
762
|
]).then(() => {
|
|
729
|
-
assert.equal(bob.meeting.
|
|
763
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
730
764
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
731
765
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
732
766
|
}));
|
|
733
767
|
|
|
734
|
-
it('bob stops sharing ', () =>
|
|
768
|
+
it('bob stops sharing again', () =>
|
|
735
769
|
Promise.all([
|
|
736
770
|
// Wait for peerConnection to stabalize
|
|
737
771
|
testUtils.waitUntil(20000),
|
|
@@ -743,7 +777,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
743
777
|
{scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'},
|
|
744
778
|
]),
|
|
745
779
|
]).then(() => {
|
|
746
|
-
assert.equal(bob.meeting.
|
|
780
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
747
781
|
assert.equal(bob.meeting.shareStatus, 'no_share');
|
|
748
782
|
assert.equal(alice.meeting.shareStatus, 'no_share');
|
|
749
783
|
}));
|
|
@@ -771,51 +805,43 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
771
805
|
);
|
|
772
806
|
}),
|
|
773
807
|
]).then(() => {
|
|
774
|
-
assert.equal(alice.meeting.
|
|
808
|
+
assert.equal(alice.meeting.screenShareFloorState, 'floor_released');
|
|
775
809
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
776
810
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
777
811
|
}));
|
|
778
812
|
|
|
779
|
-
it('bob steals the share from alice with desktop share', () =>
|
|
780
|
-
|
|
781
|
-
testUtils.delayedPromise(bob.meeting.shareScreen()),
|
|
782
|
-
testUtils.waitForEvents([
|
|
783
|
-
{scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'},
|
|
784
|
-
]),
|
|
785
|
-
testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]),
|
|
786
|
-
testUtils
|
|
787
|
-
.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
|
|
788
|
-
.then((response) => {
|
|
789
|
-
assert.equal(response[0].result.memberId, bob.meeting.selfId);
|
|
790
|
-
}),
|
|
791
|
-
testUtils
|
|
792
|
-
.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
|
|
793
|
-
.then((response) => {
|
|
794
|
-
console.log(
|
|
795
|
-
'SCREEN SHARE RESPONSE ',
|
|
796
|
-
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
797
|
-
);
|
|
798
|
-
}),
|
|
799
|
-
testUtils.waitForEvents([{scope: bob.meeting, event: 'media:ready'}]).then((response) => {
|
|
800
|
-
console.log('MEDIA:READY event ', response[0].result);
|
|
801
|
-
assert.equal(response[0].result.type === 'localShare', true);
|
|
802
|
-
}),
|
|
803
|
-
]).then(() => {
|
|
804
|
-
const heightResolution = DEFAULT_RESOLUTIONS.meetings.screenResolution.idealHeight;
|
|
813
|
+
it('bob steals the share from alice with desktop share', async () => {
|
|
814
|
+
localStreams.bob.screenShare.video = await createDisplayStream();
|
|
805
815
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
816
|
+
const stoppedSharingWhiteboard = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'}]);
|
|
817
|
+
const startedSharingLocal = testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]);
|
|
818
|
+
const startedSharingRemote = testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
|
|
819
|
+
.then((response) => {
|
|
820
|
+
assert.equal(response[0].result.memberId, bob.meeting.selfId);
|
|
821
|
+
});
|
|
822
|
+
const aliceReceivesMembersUpdate = testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
|
|
823
|
+
.then((response) => {
|
|
824
|
+
console.log(
|
|
825
|
+
'SCREEN SHARE RESPONSE ',
|
|
826
|
+
JSON.stringify(response, testUtils.getCircularReplacer())
|
|
811
827
|
);
|
|
812
|
-
}
|
|
813
|
-
|
|
814
|
-
assert.equal(bob.meeting.shareStatus, 'local_share_active');
|
|
815
|
-
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
828
|
+
});
|
|
829
|
+
const bobScreenShareVideoPublished = waitForPublished(bob.meeting, {stream: localStreams.bob.screenShare.video, status: true}, "bob's screen share video stream");
|
|
816
830
|
|
|
817
|
-
|
|
818
|
-
|
|
831
|
+
await testUtils.delayedPromise(bob.meeting.publishStreams({screenShare: {video: localStreams.bob.screenShare.video}}));
|
|
832
|
+
|
|
833
|
+
await bobScreenShareVideoPublished;
|
|
834
|
+
await stoppedSharingWhiteboard;
|
|
835
|
+
await startedSharingLocal;
|
|
836
|
+
await startedSharingRemote;
|
|
837
|
+
await aliceReceivesMembersUpdate;
|
|
838
|
+
|
|
839
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_request_granted');
|
|
840
|
+
assert.equal(bob.meeting.shareStatus, 'local_share_active');
|
|
841
|
+
assert.equal(alice.meeting.shareStatus, 'remote_share_active');
|
|
842
|
+
|
|
843
|
+
await testUtils.waitUntil(10000);
|
|
844
|
+
});
|
|
819
845
|
|
|
820
846
|
it('bob shares whiteboard B', () =>
|
|
821
847
|
Promise.all([
|
|
@@ -840,7 +866,7 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
840
866
|
);
|
|
841
867
|
}),
|
|
842
868
|
]).then(() => {
|
|
843
|
-
assert.equal(bob.meeting.
|
|
869
|
+
assert.equal(bob.meeting.screenShareFloorState, 'floor_released');
|
|
844
870
|
assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
|
|
845
871
|
assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
|
|
846
872
|
}));
|
|
@@ -886,7 +912,11 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
886
912
|
);
|
|
887
913
|
})
|
|
888
914
|
.then(() => testUtils.waitForStateChange(chris.meeting, 'JOINED'))
|
|
889
|
-
.then(() =>
|
|
915
|
+
.then(async () => {
|
|
916
|
+
localStreams.chris.microphone = await createMicrophoneStream();
|
|
917
|
+
localStreams.chris.camera = await createCameraStream();
|
|
918
|
+
})
|
|
919
|
+
.then(() => integrationTestUtils.addMedia(chris, {microphone: localStreams.chris.microphone, camera: localStreams.chris.camera}))
|
|
890
920
|
.then(() => assert(enumerateSpy.called));
|
|
891
921
|
})
|
|
892
922
|
.then(() =>
|
|
@@ -933,6 +963,35 @@ skipInNode(describe)('plugin-meetings', () => {
|
|
|
933
963
|
assert.equal(bob.webex.meetings.getMeetingByType('sipUri', alice.emailAddress), null);
|
|
934
964
|
});
|
|
935
965
|
});
|
|
966
|
+
|
|
967
|
+
it('stop all local streams', () => {
|
|
968
|
+
if (localStreams.alice.microphone) {
|
|
969
|
+
localStreams.alice.microphone.stop();
|
|
970
|
+
localStreams.alice.microphone = undefined;
|
|
971
|
+
}
|
|
972
|
+
if (localStreams.alice.camera) {
|
|
973
|
+
localStreams.alice.camera.stop();
|
|
974
|
+
localStreams.alice.camera = undefined;
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
if (localStreams.bob.microphone) {
|
|
978
|
+
localStreams.bob.microphone.stop();
|
|
979
|
+
localStreams.bob.microphone = undefined;
|
|
980
|
+
}
|
|
981
|
+
if (localStreams.bob.camera) {
|
|
982
|
+
localStreams.bob.camera.stop();
|
|
983
|
+
localStreams.bob.camera = undefined;
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
if (localStreams.chris.microphone) {
|
|
987
|
+
localStreams.chris.microphone.stop();
|
|
988
|
+
localStreams.chris.microphone = undefined;
|
|
989
|
+
}
|
|
990
|
+
if (localStreams.chris.camera) {
|
|
991
|
+
localStreams.chris.camera.stop();
|
|
992
|
+
localStreams.chris.camera = undefined;
|
|
993
|
+
}
|
|
994
|
+
});
|
|
936
995
|
});
|
|
937
996
|
});
|
|
938
997
|
});
|