@webex/plugin-meetings 2.37.0 → 2.37.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/common/browser-detection.js +1 -20
  4. package/dist/common/browser-detection.js.map +1 -1
  5. package/dist/common/collection.js +5 -20
  6. package/dist/common/collection.js.map +1 -1
  7. package/dist/common/config.js +0 -7
  8. package/dist/common/config.js.map +1 -1
  9. package/dist/common/errors/captcha-error.js +5 -26
  10. package/dist/common/errors/captcha-error.js.map +1 -1
  11. package/dist/common/errors/intent-to-join.js +5 -26
  12. package/dist/common/errors/intent-to-join.js.map +1 -1
  13. package/dist/common/errors/join-meeting.js +6 -27
  14. package/dist/common/errors/join-meeting.js.map +1 -1
  15. package/dist/common/errors/media.js +5 -26
  16. package/dist/common/errors/media.js.map +1 -1
  17. package/dist/common/errors/parameter.js +5 -33
  18. package/dist/common/errors/parameter.js.map +1 -1
  19. package/dist/common/errors/password-error.js +5 -26
  20. package/dist/common/errors/password-error.js.map +1 -1
  21. package/dist/common/errors/permission.js +4 -25
  22. package/dist/common/errors/permission.js.map +1 -1
  23. package/dist/common/errors/reconnection-in-progress.js +0 -17
  24. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  25. package/dist/common/errors/reconnection.js +5 -26
  26. package/dist/common/errors/reconnection.js.map +1 -1
  27. package/dist/common/errors/stats.js +5 -26
  28. package/dist/common/errors/stats.js.map +1 -1
  29. package/dist/common/errors/webex-errors.js +7 -46
  30. package/dist/common/errors/webex-errors.js.map +1 -1
  31. package/dist/common/errors/webex-meetings-error.js +1 -24
  32. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  33. package/dist/common/events/events-scope.js +0 -22
  34. package/dist/common/events/events-scope.js.map +1 -1
  35. package/dist/common/events/events.js +0 -23
  36. package/dist/common/events/events.js.map +1 -1
  37. package/dist/common/events/trigger-proxy.js +0 -12
  38. package/dist/common/events/trigger-proxy.js.map +1 -1
  39. package/dist/common/events/util.js +0 -15
  40. package/dist/common/events/util.js.map +1 -1
  41. package/dist/common/logs/logger-config.js +0 -4
  42. package/dist/common/logs/logger-config.js.map +1 -1
  43. package/dist/common/logs/logger-proxy.js +1 -8
  44. package/dist/common/logs/logger-proxy.js.map +1 -1
  45. package/dist/common/logs/request.js +35 -61
  46. package/dist/common/logs/request.js.map +1 -1
  47. package/dist/common/queue.js +4 -14
  48. package/dist/common/queue.js.map +1 -1
  49. package/dist/config.js +1 -5
  50. package/dist/config.js.map +1 -1
  51. package/dist/constants.js +46 -42
  52. package/dist/constants.js.map +1 -1
  53. package/dist/index.js +1 -17
  54. package/dist/index.js.map +1 -1
  55. package/dist/locus-info/controlsUtils.js +10 -28
  56. package/dist/locus-info/controlsUtils.js.map +1 -1
  57. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  58. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  59. package/dist/locus-info/fullState.js +0 -15
  60. package/dist/locus-info/fullState.js.map +1 -1
  61. package/dist/locus-info/hostUtils.js +4 -12
  62. package/dist/locus-info/hostUtils.js.map +1 -1
  63. package/dist/locus-info/index.js +101 -193
  64. package/dist/locus-info/index.js.map +1 -1
  65. package/dist/locus-info/infoUtils.js +0 -37
  66. package/dist/locus-info/infoUtils.js.map +1 -1
  67. package/dist/locus-info/mediaSharesUtils.js +12 -38
  68. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  69. package/dist/locus-info/parser.js +87 -123
  70. package/dist/locus-info/parser.js.map +1 -1
  71. package/dist/locus-info/selfUtils.js +16 -81
  72. package/dist/locus-info/selfUtils.js.map +1 -1
  73. package/dist/media/index.js +74 -137
  74. package/dist/media/index.js.map +1 -1
  75. package/dist/media/properties.js +64 -110
  76. package/dist/media/properties.js.map +1 -1
  77. package/dist/media/util.js +3 -17
  78. package/dist/media/util.js.map +1 -1
  79. package/dist/mediaQualityMetrics/config.js +10 -12
  80. package/dist/mediaQualityMetrics/config.js.map +1 -1
  81. package/dist/meeting/effectsState.js +120 -192
  82. package/dist/meeting/effectsState.js.map +1 -1
  83. package/dist/meeting/in-meeting-actions.js +0 -13
  84. package/dist/meeting/in-meeting-actions.js.map +1 -1
  85. package/dist/meeting/index.js +812 -1487
  86. package/dist/meeting/index.js.map +1 -1
  87. package/dist/meeting/muteState.js +31 -78
  88. package/dist/meeting/muteState.js.map +1 -1
  89. package/dist/meeting/request.js +157 -227
  90. package/dist/meeting/request.js.map +1 -1
  91. package/dist/meeting/state.js +21 -31
  92. package/dist/meeting/state.js.map +1 -1
  93. package/dist/meeting/util.js +25 -169
  94. package/dist/meeting/util.js.map +1 -1
  95. package/dist/meeting-info/collection.js +3 -25
  96. package/dist/meeting-info/collection.js.map +1 -1
  97. package/dist/meeting-info/index.js +10 -33
  98. package/dist/meeting-info/index.js.map +1 -1
  99. package/dist/meeting-info/meeting-info-v2.js +179 -268
  100. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  101. package/dist/meeting-info/request.js +1 -16
  102. package/dist/meeting-info/request.js.map +1 -1
  103. package/dist/meeting-info/util.js +98 -183
  104. package/dist/meeting-info/util.js.map +1 -1
  105. package/dist/meeting-info/utilv2.js +137 -228
  106. package/dist/meeting-info/utilv2.js.map +1 -1
  107. package/dist/meetings/collection.js +3 -21
  108. package/dist/meetings/collection.js.map +1 -1
  109. package/dist/meetings/index.js +451 -570
  110. package/dist/meetings/index.js.map +1 -1
  111. package/dist/meetings/request.js +7 -30
  112. package/dist/meetings/request.js.map +1 -1
  113. package/dist/meetings/util.js +94 -148
  114. package/dist/meetings/util.js.map +1 -1
  115. package/dist/member/index.js +49 -89
  116. package/dist/member/index.js.map +1 -1
  117. package/dist/member/util.js +17 -68
  118. package/dist/member/util.js.map +1 -1
  119. package/dist/members/collection.js +2 -12
  120. package/dist/members/collection.js.map +1 -1
  121. package/dist/members/index.js +68 -184
  122. package/dist/members/index.js.map +1 -1
  123. package/dist/members/request.js +21 -56
  124. package/dist/members/request.js.map +1 -1
  125. package/dist/members/util.js +9 -38
  126. package/dist/members/util.js.map +1 -1
  127. package/dist/metrics/config.js +0 -2
  128. package/dist/metrics/config.js.map +1 -1
  129. package/dist/metrics/constants.js +1 -2
  130. package/dist/metrics/constants.js.map +1 -1
  131. package/dist/metrics/index.js +48 -136
  132. package/dist/metrics/index.js.map +1 -1
  133. package/dist/networkQualityMonitor/index.js +28 -57
  134. package/dist/networkQualityMonitor/index.js.map +1 -1
  135. package/dist/peer-connection-manager/index.js +60 -190
  136. package/dist/peer-connection-manager/index.js.map +1 -1
  137. package/dist/peer-connection-manager/util.js +10 -24
  138. package/dist/peer-connection-manager/util.js.map +1 -1
  139. package/dist/personal-meeting-room/index.js +10 -45
  140. package/dist/personal-meeting-room/index.js.map +1 -1
  141. package/dist/personal-meeting-room/request.js +2 -33
  142. package/dist/personal-meeting-room/request.js.map +1 -1
  143. package/dist/personal-meeting-room/util.js +0 -13
  144. package/dist/personal-meeting-room/util.js.map +1 -1
  145. package/dist/reachability/index.js +100 -166
  146. package/dist/reachability/index.js.map +1 -1
  147. package/dist/reachability/request.js +2 -18
  148. package/dist/reachability/request.js.map +1 -1
  149. package/dist/reactions/reactions.js +0 -2
  150. package/dist/reactions/reactions.js.map +1 -1
  151. package/dist/reactions/reactions.type.js +0 -5
  152. package/dist/reactions/reactions.type.js.map +1 -1
  153. package/dist/reconnection-manager/index.js +294 -468
  154. package/dist/reconnection-manager/index.js.map +1 -1
  155. package/dist/roap/collection.js +1 -12
  156. package/dist/roap/collection.js.map +1 -1
  157. package/dist/roap/handler.js +15 -85
  158. package/dist/roap/handler.js.map +1 -1
  159. package/dist/roap/index.js +42 -94
  160. package/dist/roap/index.js.map +1 -1
  161. package/dist/roap/request.js +81 -148
  162. package/dist/roap/request.js.map +1 -1
  163. package/dist/roap/state.js +2 -39
  164. package/dist/roap/state.js.map +1 -1
  165. package/dist/roap/turnDiscovery.js +8 -52
  166. package/dist/roap/turnDiscovery.js.map +1 -1
  167. package/dist/roap/util.js +0 -26
  168. package/dist/roap/util.js.map +1 -1
  169. package/dist/statsAnalyzer/global.js +0 -2
  170. package/dist/statsAnalyzer/global.js.map +1 -1
  171. package/dist/statsAnalyzer/index.js +68 -168
  172. package/dist/statsAnalyzer/index.js.map +1 -1
  173. package/dist/statsAnalyzer/mqaUtil.js +54 -53
  174. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  175. package/dist/transcription/index.js +13 -45
  176. package/dist/transcription/index.js.map +1 -1
  177. package/internal-README.md +7 -6
  178. package/package.json +17 -17
  179. package/src/common/browser-detection.ts +9 -6
  180. package/src/common/collection.ts +3 -1
  181. package/src/common/errors/captcha-error.ts +6 -6
  182. package/src/common/errors/intent-to-join.ts +6 -6
  183. package/src/common/errors/join-meeting.ts +12 -8
  184. package/src/common/errors/media.ts +6 -6
  185. package/src/common/errors/parameter.ts +9 -6
  186. package/src/common/errors/password-error.ts +6 -6
  187. package/src/common/errors/permission.ts +5 -5
  188. package/src/common/errors/reconnection.ts +6 -6
  189. package/src/common/errors/stats.ts +6 -6
  190. package/src/common/errors/webex-errors.ts +7 -5
  191. package/src/common/errors/webex-meetings-error.ts +1 -1
  192. package/src/common/events/events-scope.ts +5 -1
  193. package/src/common/events/events.ts +5 -1
  194. package/src/common/events/trigger-proxy.ts +8 -3
  195. package/src/common/events/util.ts +1 -2
  196. package/src/common/logs/logger-proxy.ts +21 -10
  197. package/src/common/logs/request.ts +11 -8
  198. package/src/config.ts +11 -11
  199. package/src/constants.ts +138 -119
  200. package/src/index.js +1 -1
  201. package/src/locus-info/controlsUtils.ts +34 -24
  202. package/src/locus-info/fullState.ts +15 -11
  203. package/src/locus-info/hostUtils.ts +4 -3
  204. package/src/locus-info/index.ts +25 -34
  205. package/src/locus-info/infoUtils.ts +12 -4
  206. package/src/locus-info/mediaSharesUtils.ts +4 -4
  207. package/src/locus-info/parser.ts +45 -68
  208. package/src/locus-info/selfUtils.ts +106 -57
  209. package/src/media/index.ts +118 -109
  210. package/src/media/properties.ts +26 -20
  211. package/src/media/util.ts +2 -2
  212. package/src/mediaQualityMetrics/config.ts +46 -46
  213. package/src/meeting/effectsState.ts +35 -35
  214. package/src/meeting/in-meeting-actions.ts +7 -3
  215. package/src/meeting/index.ts +1435 -1210
  216. package/src/meeting/muteState.ts +62 -31
  217. package/src/meeting/request.ts +160 -113
  218. package/src/meeting/state.ts +45 -30
  219. package/src/meeting/util.ts +131 -90
  220. package/src/meeting-info/collection.ts +2 -1
  221. package/src/meeting-info/index.ts +32 -30
  222. package/src/meeting-info/meeting-info-v2.ts +106 -108
  223. package/src/meeting-info/request.ts +9 -3
  224. package/src/meeting-info/util.ts +54 -46
  225. package/src/meeting-info/utilv2.ts +59 -53
  226. package/src/meetings/collection.ts +1 -1
  227. package/src/meetings/index.ts +513 -441
  228. package/src/meetings/request.ts +26 -24
  229. package/src/meetings/util.ts +26 -23
  230. package/src/member/index.ts +55 -49
  231. package/src/member/util.ts +26 -13
  232. package/src/members/collection.ts +0 -1
  233. package/src/members/index.ts +172 -121
  234. package/src/members/request.ts +46 -14
  235. package/src/members/util.ts +44 -42
  236. package/src/metrics/config.ts +254 -81
  237. package/src/metrics/constants.ts +0 -2
  238. package/src/metrics/index.ts +84 -71
  239. package/src/networkQualityMonitor/index.ts +20 -23
  240. package/src/peer-connection-manager/index.ts +321 -241
  241. package/src/peer-connection-manager/util.ts +4 -2
  242. package/src/personal-meeting-room/index.ts +12 -16
  243. package/src/personal-meeting-room/request.ts +10 -3
  244. package/src/personal-meeting-room/util.ts +3 -3
  245. package/src/reachability/index.ts +61 -59
  246. package/src/reachability/request.ts +36 -32
  247. package/src/reactions/reactions.ts +4 -4
  248. package/src/reactions/reactions.type.ts +2 -3
  249. package/src/reconnection-manager/index.ts +159 -98
  250. package/src/roap/collection.ts +2 -4
  251. package/src/roap/handler.ts +63 -32
  252. package/src/roap/index.ts +78 -58
  253. package/src/roap/request.ts +69 -54
  254. package/src/roap/state.ts +17 -11
  255. package/src/roap/turnDiscovery.ts +60 -31
  256. package/src/roap/util.ts +39 -31
  257. package/src/statsAnalyzer/global.ts +30 -33
  258. package/src/statsAnalyzer/index.ts +397 -169
  259. package/src/statsAnalyzer/mqaUtil.ts +178 -72
  260. package/src/transcription/index.ts +34 -32
  261. package/test/integration/spec/journey.js +666 -462
  262. package/test/integration/spec/space-meeting.js +318 -203
  263. package/test/integration/spec/transcription.js +6 -7
  264. package/test/unit/spec/common/browser-detection.js +9 -28
  265. package/test/unit/spec/fixture/locus.js +92 -90
  266. package/test/unit/spec/locus-info/controlsUtils.js +5 -5
  267. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  268. package/test/unit/spec/locus-info/index.js +1 -2
  269. package/test/unit/spec/locus-info/infoUtils.js +24 -31
  270. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  271. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  272. package/test/unit/spec/locus-info/parser.js +3 -9
  273. package/test/unit/spec/locus-info/selfConstant.js +72 -103
  274. package/test/unit/spec/locus-info/selfUtils.js +21 -12
  275. package/test/unit/spec/meeting/effectsState.js +33 -45
  276. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
  277. package/test/unit/spec/meeting/index.js +1141 -649
  278. package/test/unit/spec/meeting/muteState.js +42 -33
  279. package/test/unit/spec/meeting/request.js +56 -45
  280. package/test/unit/spec/meeting/utils.js +66 -49
  281. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  282. package/test/unit/spec/meeting-info/request.js +7 -9
  283. package/test/unit/spec/meeting-info/util.js +11 -12
  284. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  285. package/test/unit/spec/meetings/collection.js +1 -1
  286. package/test/unit/spec/meetings/index.js +438 -257
  287. package/test/unit/spec/meetings/utils.js +14 -12
  288. package/test/unit/spec/member/index.js +0 -1
  289. package/test/unit/spec/member/util.js +5 -6
  290. package/test/unit/spec/members/index.js +84 -35
  291. package/test/unit/spec/members/request.js +29 -20
  292. package/test/unit/spec/members/utils.js +8 -5
  293. package/test/unit/spec/metrics/index.js +16 -21
  294. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  295. package/test/unit/spec/peerconnection-manager/index.js +88 -58
  296. package/test/unit/spec/peerconnection-manager/utils.js +5 -4
  297. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +7 -8
  298. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  299. package/test/unit/spec/reachability/index.ts +9 -11
  300. package/test/unit/spec/reconnection-manager/index.js +14 -17
  301. package/test/unit/spec/roap/index.ts +18 -8
  302. package/test/unit/spec/roap/turnDiscovery.ts +22 -19
  303. package/test/unit/spec/roap/util.js +3 -3
  304. package/test/unit/spec/stats-analyzer/index.js +29 -24
  305. package/test/utils/cmr.js +44 -42
  306. package/test/utils/testUtils.js +83 -74
  307. package/test/utils/webex-config.js +18 -18
  308. package/test/utils/webex-test-users.js +53 -50
@@ -20,29 +20,35 @@ let userSet, alice, bob, chris, enumerateSpy, channelUrlA, channelUrlB;
20
20
 
21
21
  skipInNode(describe)('plugin-meetings', () => {
22
22
  describe('journey', () => {
23
- before(() => webexTestUsers.generateTestUsers({
24
- count: 3,
25
- whistler: process.env.WHISTLER || process.env.JENKINS
26
- })
27
- .then((users) => {
28
- userSet = users;
29
- alice = userSet[0];
30
- bob = userSet[1];
31
- chris = userSet[2];
32
- alice.name = 'alice';
33
- bob.name = 'bob';
34
- chris.name = 'chris';
35
- alice.webex.meetings.name = 'alice';
36
- bob.webex.meetings.name = 'bob';
37
- chris.webex.meetings.name = 'chris';
38
- channelUrlA = 'https://board-a.wbx2.com/board/api/v1/channels/49cfb550-5517-11eb-a2af-1b9e4bc3da13';
39
- channelUrlB = 'https://board-a.wbx2.com/board/api/v1/channels/977a7330-54f4-11eb-b1ef-91f5eefc7bf3';
40
- })
41
- .then(() => Promise.all([testUtils.syncAndEndMeeting(alice),
42
- testUtils.syncAndEndMeeting(bob)]))
43
- .catch((error) => {
44
- throw error;
45
- }));
23
+ before(() =>
24
+ webexTestUsers
25
+ .generateTestUsers({
26
+ count: 3,
27
+ whistler: process.env.WHISTLER || process.env.JENKINS,
28
+ })
29
+ .then((users) => {
30
+ userSet = users;
31
+ alice = userSet[0];
32
+ bob = userSet[1];
33
+ chris = userSet[2];
34
+ alice.name = 'alice';
35
+ bob.name = 'bob';
36
+ chris.name = 'chris';
37
+ alice.webex.meetings.name = 'alice';
38
+ bob.webex.meetings.name = 'bob';
39
+ chris.webex.meetings.name = 'chris';
40
+ channelUrlA =
41
+ 'https://board-a.wbx2.com/board/api/v1/channels/49cfb550-5517-11eb-a2af-1b9e4bc3da13';
42
+ channelUrlB =
43
+ 'https://board-a.wbx2.com/board/api/v1/channels/977a7330-54f4-11eb-b1ef-91f5eefc7bf3';
44
+ })
45
+ .then(() =>
46
+ Promise.all([testUtils.syncAndEndMeeting(alice), testUtils.syncAndEndMeeting(bob)])
47
+ )
48
+ .catch((error) => {
49
+ throw error;
50
+ })
51
+ );
46
52
 
47
53
  before(() => {
48
54
  enumerateSpy = sinon.spy(navigator.mediaDevices, 'enumerateDevices');
@@ -68,40 +74,51 @@ skipInNode(describe)('plugin-meetings', () => {
68
74
  bob.meeting = null;
69
75
  });
70
76
 
71
- it('Alice Ends a outgoing meeting', () => Promise.all([
72
- testUtils.delayedPromise(alice.webex.meetings.create(bob.emailAddress)),
73
- testUtils.waitForEvents([{scope: alice.webex.meetings, event: 'meeting:added', user: alice}])
74
- ])
75
- .then(() => Promise.all([
76
- testUtils.delayedPromise(alice.meeting.join()),
77
- testUtils.waitForEvents([{scope: bob.webex.meetings, event: 'meeting:added', user: bob}])
78
- ]))
79
- .then(() => {
80
- // bob and alice have meeting object
81
- bob.meeting.acknowledge('INCOMING');
82
- assert.equal(bob.meeting.sipUri, alice.emailAddress);
83
- assert.equal(alice.meeting.sipUri, bob.emailAddress);
84
- assert.equal(bob.meeting.state, 'IDLE');
85
- assert.equal(alice.meeting.state, 'JOINED');
86
- })
87
- .then(function aliceLeavesMeetingAndBobGetsMeetingRemoved() {
88
- return Promise.all([
89
- testUtils.delayedPromise(alice.meeting.leave()),
90
- testUtils.waitForEvents([{scope: bob.webex.meetings, event: 'meeting:removed', user: bob}])
91
- ]);
92
- })
93
- .then(() => testUtils.waitForStateChange(alice.meeting, 'LEFT'))
94
- .then(() => Promise.all([
95
- testUtils.waitForCallEnded(alice, bob.emailAddress),
96
- testUtils.waitForCallEnded(bob, alice.emailAddress)
97
- ]))
98
- .then(() => {
99
- assert.equal(alice.webex.meetings.getMeetingByType('sipUri', bob.emailAddress), null);
100
- assert.equal(bob.webex.meetings.getMeetingByType('sipUri', alice.emailAddress), null);
101
- })
102
- .catch((err) => {
103
- throw err;
104
- }));
77
+ it('Alice Ends a outgoing meeting', () =>
78
+ Promise.all([
79
+ testUtils.delayedPromise(alice.webex.meetings.create(bob.emailAddress)),
80
+ testUtils.waitForEvents([
81
+ {scope: alice.webex.meetings, event: 'meeting:added', user: alice},
82
+ ]),
83
+ ])
84
+ .then(() =>
85
+ Promise.all([
86
+ testUtils.delayedPromise(alice.meeting.join()),
87
+ testUtils.waitForEvents([
88
+ {scope: bob.webex.meetings, event: 'meeting:added', user: bob},
89
+ ]),
90
+ ])
91
+ )
92
+ .then(() => {
93
+ // bob and alice have meeting object
94
+ bob.meeting.acknowledge('INCOMING');
95
+ assert.equal(bob.meeting.sipUri, alice.emailAddress);
96
+ assert.equal(alice.meeting.sipUri, bob.emailAddress);
97
+ assert.equal(bob.meeting.state, 'IDLE');
98
+ assert.equal(alice.meeting.state, 'JOINED');
99
+ })
100
+ .then(function aliceLeavesMeetingAndBobGetsMeetingRemoved() {
101
+ return Promise.all([
102
+ testUtils.delayedPromise(alice.meeting.leave()),
103
+ testUtils.waitForEvents([
104
+ {scope: bob.webex.meetings, event: 'meeting:removed', user: bob},
105
+ ]),
106
+ ]);
107
+ })
108
+ .then(() => testUtils.waitForStateChange(alice.meeting, 'LEFT'))
109
+ .then(() =>
110
+ Promise.all([
111
+ testUtils.waitForCallEnded(alice, bob.emailAddress),
112
+ testUtils.waitForCallEnded(bob, alice.emailAddress),
113
+ ])
114
+ )
115
+ .then(() => {
116
+ assert.equal(alice.webex.meetings.getMeetingByType('sipUri', bob.emailAddress), null);
117
+ assert.equal(bob.webex.meetings.getMeetingByType('sipUri', alice.emailAddress), null);
118
+ })
119
+ .catch((err) => {
120
+ throw err;
121
+ }));
105
122
  });
106
123
 
107
124
  // The event was coming but incomplete
@@ -109,62 +126,77 @@ skipInNode(describe)('plugin-meetings', () => {
109
126
 
110
127
  // Alice calls bob and bob rejects it
111
128
  xdescribe('reject Incoming Call', () => {
112
- it('alice dials bob and bob receives meeting added', () => Promise.all([
113
- testUtils.delayedPromise(alice.webex.meetings.create(bob.emailAddress)),
114
- testUtils.waitForEvents([{scope: alice.webex.meetings, event: 'meeting:added', user: alice}])
115
- ])
116
- .then(() => Promise.all([
117
- testUtils.delayedPromise(alice.meeting.join()),
118
- testUtils.waitForEvents([{scope: bob.webex.meetings, event: 'meeting:added', user: bob}])
119
- ]))
120
- .then(function alicebobJoined() {
121
- assert.exists(bob.meeting);
122
- assert.exists(alice.meeting);
123
- assert.equal(bob.meeting.sipUri, alice.emailAddress);
124
- assert.equal(alice.meeting.sipUri, bob.emailAddress);
125
- assert.exists(bob.meeting.partner);
126
- assert.exists(alice.meeting.partner);
127
- })
128
- .then(function bobState() {
129
- testUtils.waitForStateChange(bob.meeting, 'IDLE');
130
- })
131
- .then(function aliceState() {
132
- testUtils.waitForStateChange(alice.meeting, 'JOINED');
133
- })
134
- .then(function bobDeclinedCall() {
135
- return bob.meeting.acknowledge('INCOMING')
136
- .then(() => bob.meeting.decline('BUSY'))
137
- .then(() => testUtils.waitForStateChange(bob.meeting, 'DECLINED'))
138
- .catch((e) => {
139
- console.error('Bob decline call not successful', e);
140
- throw e;
141
- });
142
- })
143
- .then(function aliceLeaveMeeting() {
144
- assert.equal(alice.meeting.state, 'JOINED');
145
-
146
- return alice.meeting.leave()
147
- .then(() => testUtils.waitForStateChange(alice.meeting, 'LEFT'))
148
- .then(() => testUtils.waitForStateChange(bob.meeting, 'DECLINED'))
149
- .catch((e) => {
150
- console.error('alice was not able to leave the meeting', e);
151
- throw e;
152
- });
153
- })
154
- .then(function WaitForMeetingEnd() {
155
- return Promise.all([
156
- testUtils.waitForCallEnded(alice, bob.emailAddress),
157
- testUtils.waitForCallEnded(bob, alice.emailAddress)
158
- ])
159
- .then(() => {
160
- assert.equal(alice.webex.meetings.getMeetingByType('sipUri', bob.emailAddress), null);
161
- assert.equal(bob.webex.meetings.getMeetingByType('sipUri', alice.emailAddress), null);
162
- })
163
- .catch((e) => {
164
- console.error('Alice bob meeting is deleted', e);
165
- throw e;
166
- });
167
- }));
129
+ it('alice dials bob and bob receives meeting added', () =>
130
+ Promise.all([
131
+ testUtils.delayedPromise(alice.webex.meetings.create(bob.emailAddress)),
132
+ testUtils.waitForEvents([
133
+ {scope: alice.webex.meetings, event: 'meeting:added', user: alice},
134
+ ]),
135
+ ])
136
+ .then(() =>
137
+ Promise.all([
138
+ testUtils.delayedPromise(alice.meeting.join()),
139
+ testUtils.waitForEvents([
140
+ {scope: bob.webex.meetings, event: 'meeting:added', user: bob},
141
+ ]),
142
+ ])
143
+ )
144
+ .then(function alicebobJoined() {
145
+ assert.exists(bob.meeting);
146
+ assert.exists(alice.meeting);
147
+ assert.equal(bob.meeting.sipUri, alice.emailAddress);
148
+ assert.equal(alice.meeting.sipUri, bob.emailAddress);
149
+ assert.exists(bob.meeting.partner);
150
+ assert.exists(alice.meeting.partner);
151
+ })
152
+ .then(function bobState() {
153
+ testUtils.waitForStateChange(bob.meeting, 'IDLE');
154
+ })
155
+ .then(function aliceState() {
156
+ testUtils.waitForStateChange(alice.meeting, 'JOINED');
157
+ })
158
+ .then(function bobDeclinedCall() {
159
+ return bob.meeting
160
+ .acknowledge('INCOMING')
161
+ .then(() => bob.meeting.decline('BUSY'))
162
+ .then(() => testUtils.waitForStateChange(bob.meeting, 'DECLINED'))
163
+ .catch((e) => {
164
+ console.error('Bob decline call not successful', e);
165
+ throw e;
166
+ });
167
+ })
168
+ .then(function aliceLeaveMeeting() {
169
+ assert.equal(alice.meeting.state, 'JOINED');
170
+
171
+ return alice.meeting
172
+ .leave()
173
+ .then(() => testUtils.waitForStateChange(alice.meeting, 'LEFT'))
174
+ .then(() => testUtils.waitForStateChange(bob.meeting, 'DECLINED'))
175
+ .catch((e) => {
176
+ console.error('alice was not able to leave the meeting', e);
177
+ throw e;
178
+ });
179
+ })
180
+ .then(function WaitForMeetingEnd() {
181
+ return Promise.all([
182
+ testUtils.waitForCallEnded(alice, bob.emailAddress),
183
+ testUtils.waitForCallEnded(bob, alice.emailAddress),
184
+ ])
185
+ .then(() => {
186
+ assert.equal(
187
+ alice.webex.meetings.getMeetingByType('sipUri', bob.emailAddress),
188
+ null
189
+ );
190
+ assert.equal(
191
+ bob.webex.meetings.getMeetingByType('sipUri', alice.emailAddress),
192
+ null
193
+ );
194
+ })
195
+ .catch((e) => {
196
+ console.error('Alice bob meeting is deleted', e);
197
+ throw e;
198
+ });
199
+ }));
168
200
  });
169
201
 
170
202
  // Enabled when config.enableUnifiedMeetings = true
@@ -174,30 +206,42 @@ skipInNode(describe)('plugin-meetings', () => {
174
206
  assert.equal(Object.keys(bob.webex.meetings.getAllMeetings()), 0);
175
207
  assert.equal(Object.keys(chris.webex.meetings.getAllMeetings()), 0);
176
208
 
177
- const conversation = await chris.webex.internal.conversation.create({participants: [bob]});
209
+ const conversation = await chris.webex.internal.conversation.create({
210
+ participants: [bob],
211
+ });
178
212
 
179
- await chris.webex.internal.conversation.post(conversation, {displayName: 'hello world how are you '});
213
+ await chris.webex.internal.conversation.post(conversation, {
214
+ displayName: 'hello world how are you ',
215
+ });
180
216
 
181
217
  await Promise.all([
182
- testUtils.delayedPromise(chris.webex.meetings.create(conversation.url, 'CONVERSATION_URL')),
183
- testUtils.waitForEvents([{scope: chris.webex.meetings, event: 'meeting:added', user: chris}])
184
- ])
185
- .then(function chrisJoinsMeeting() {
186
- return Promise.all([
187
- testUtils.delayedPromise(chris.meeting.join()),
188
- testUtils.waitForEvents([{scope: bob.webex.meetings, event: 'meeting:added', user: bob},
189
- {scope: chris.meeting, event: 'meeting:stateChange', user: chris}])
190
- .then((response) => {
191
- assert.equal(response[0].result.payload.currentState, 'ACTIVE');
192
- })
193
- ]);
194
- });
218
+ testUtils.delayedPromise(
219
+ chris.webex.meetings.create(conversation.url, 'CONVERSATION_URL')
220
+ ),
221
+ testUtils.waitForEvents([
222
+ {scope: chris.webex.meetings, event: 'meeting:added', user: chris},
223
+ ]),
224
+ ]).then(function chrisJoinsMeeting() {
225
+ return Promise.all([
226
+ testUtils.delayedPromise(chris.meeting.join()),
227
+ testUtils
228
+ .waitForEvents([
229
+ {scope: bob.webex.meetings, event: 'meeting:added', user: bob},
230
+ {scope: chris.meeting, event: 'meeting:stateChange', user: chris},
231
+ ])
232
+ .then((response) => {
233
+ assert.equal(response[0].result.payload.currentState, 'ACTIVE');
234
+ }),
235
+ ]);
236
+ });
195
237
  });
196
238
 
197
239
  it('Fetch meeting information with invalid conversation URL and throws error', () => {
198
- chris.webex.meetings.meetingInfo.fetchMeetingInfo('http://some-invalid.com', 'CONVERSATION_URL').then((response) => {
199
- assert(response.result === '404');
200
- });
240
+ chris.webex.meetings.meetingInfo
241
+ .fetchMeetingInfo('http://some-invalid.com', 'CONVERSATION_URL')
242
+ .then((response) => {
243
+ assert(response.result === '404');
244
+ });
201
245
  });
202
246
  });
203
247
  });
@@ -207,7 +251,11 @@ skipInNode(describe)('plugin-meetings', () => {
207
251
  // Workaround since getDisplayMedia requires a user gesture to be activated, and this is a integration tests
208
252
  // https://bugzilla.mozilla.org/show_bug.cgi?id=1580944
209
253
  if (isBrowser('firefox') || isBrowser('safari')) {
210
- sinon.replace(navigator.mediaDevices, 'getDisplayMedia', navigator.mediaDevices.getUserMedia);
254
+ sinon.replace(
255
+ navigator.mediaDevices,
256
+ 'getDisplayMedia',
257
+ navigator.mediaDevices.getUserMedia
258
+ );
211
259
  }
212
260
 
213
261
  this.timeout(80000);
@@ -217,76 +265,100 @@ skipInNode(describe)('plugin-meetings', () => {
217
265
  assert.equal(Object.keys(bob.webex.meetings.getAllMeetings()), 0);
218
266
  assert.equal(Object.keys(alice.webex.meetings.getAllMeetings()), 0);
219
267
 
220
- return alice.webex.internal.conversation.create({participants: [bob]})
221
- .then((conversation) => alice.webex.internal.conversation.post(conversation, {displayName: 'hello world how are you '}));
268
+ return alice.webex.internal.conversation
269
+ .create({participants: [bob]})
270
+ .then((conversation) =>
271
+ alice.webex.internal.conversation.post(conversation, {
272
+ displayName: 'hello world how are you ',
273
+ })
274
+ );
222
275
  });
223
276
 
224
- it('alice dials bob and adds media', () => Promise.all([
225
- testUtils.delayedPromise(alice.webex.meetings.create(bob.emailAddress)),
226
- testUtils.waitForEvents([{scope: alice.webex.meetings, event: 'meeting:added', user: alice}])
227
- ])
228
- .then(function aliceJoinsMeeting() {
229
- return Promise.all([
230
- testUtils.delayedPromise(alice.meeting.join()),
231
- testUtils.waitForEvents([{scope: bob.webex.meetings, event: 'meeting:added', user: bob},
232
- {scope: alice.meeting, event: 'meeting:stateChange', user: alice}])
233
- .then((response) => {
234
- assert.equal(response[0].result.payload.currentState, 'ACTIVE');
235
- })
236
- ]);
237
- })
238
- .then(() => {
239
- assert.equal(bob.meeting.partner.state, 'JOINED');
240
- // Wait for openH264 to finsish downloading and peerConnection to be stable
241
- testUtils.waitUntil(4000);
242
- })
243
- .then(() => Promise.all([
244
- testUtils.addMedia(alice),
277
+ it('alice dials bob and adds media', () =>
278
+ Promise.all([
279
+ testUtils.delayedPromise(alice.webex.meetings.create(bob.emailAddress)),
245
280
  testUtils.waitForEvents([
246
- {scope: alice.meeting, event: 'meeting:media:local:start', user: alice}
247
- ])
248
- ]))
249
- .then(() => assert(enumerateSpy.called)));
281
+ {scope: alice.webex.meetings, event: 'meeting:added', user: alice},
282
+ ]),
283
+ ])
284
+ .then(function aliceJoinsMeeting() {
285
+ return Promise.all([
286
+ testUtils.delayedPromise(alice.meeting.join()),
287
+ testUtils
288
+ .waitForEvents([
289
+ {scope: bob.webex.meetings, event: 'meeting:added', user: bob},
290
+ {scope: alice.meeting, event: 'meeting:stateChange', user: alice},
291
+ ])
292
+ .then((response) => {
293
+ assert.equal(response[0].result.payload.currentState, 'ACTIVE');
294
+ }),
295
+ ]);
296
+ })
297
+ .then(() => {
298
+ assert.equal(bob.meeting.partner.state, 'JOINED');
299
+ // Wait for openH264 to finsish downloading and peerConnection to be stable
300
+ testUtils.waitUntil(4000);
301
+ })
302
+ .then(() =>
303
+ Promise.all([
304
+ testUtils.addMedia(alice),
305
+ testUtils.waitForEvents([
306
+ {scope: alice.meeting, event: 'meeting:media:local:start', user: alice},
307
+ ]),
308
+ ])
309
+ )
310
+ .then(() => assert(enumerateSpy.called)));
250
311
 
251
312
  it('bob joins the meeting', () => {
252
- const checkBobIsInMeeting = (event) => !!event.delta.updated.find((member) => bob.meeting.members.selfId === member.id && member.status === 'IN_MEETING');
313
+ const checkBobIsInMeeting = (event) =>
314
+ !!event.delta.updated.find(
315
+ (member) => bob.meeting.members.selfId === member.id && member.status === 'IN_MEETING'
316
+ );
253
317
 
254
318
  return Promise.all([
255
319
  bob.meeting.acknowledge('INCOMING').then(() => bob.meeting.join()),
256
- testUtils.waitForEvents([{
257
- scope: alice.meeting.members, event: 'members:update', user: alice, match: checkBobIsInMeeting
258
- }])
320
+ testUtils.waitForEvents([
321
+ {
322
+ scope: alice.meeting.members,
323
+ event: 'members:update',
324
+ user: alice,
325
+ match: checkBobIsInMeeting,
326
+ },
327
+ ]),
259
328
  ]);
260
329
  });
261
330
 
262
- it('bob adds media to the meeting', () => Promise.all([
263
- testUtils.addMedia(bob),
264
- testUtils.waitForEvents([
265
- {scope: bob.meeting, event: 'meeting:media:local:start', user: bob},
266
- {scope: alice.meeting, event: 'meeting:media:remote:start', user: alice}
267
- ]).catch((e) => {
268
- console.error('Error on remote and local start event', e);
269
- throw e;
270
- })
271
- ])
272
- .then(() => {
273
- assert.equal(bob.meeting.sipUri, alice.id);
274
- assert.equal(alice.meeting.sipUri, bob.id);
275
- assert.exists(alice.meeting.members.locusUrl);
276
- assert.equal(alice.meeting.type, 'CALL');
277
- assert.equal(bob.meeting.type, 'CALL');
278
- assert(enumerateSpy.called);
279
- })
280
- .then(function bobState() {
281
- testUtils.waitForStateChange(bob.meeting, 'JOINED');
282
- })
283
- .then(function aliceState() {
284
- testUtils.waitForStateChange(alice.meeting, 'JOINED');
285
- })
286
- .catch((e) => {
287
- console.error('Error bob joins the meeting ', e);
288
- throw e;
289
- }));
331
+ it('bob adds media to the meeting', () =>
332
+ Promise.all([
333
+ testUtils.addMedia(bob),
334
+ testUtils
335
+ .waitForEvents([
336
+ {scope: bob.meeting, event: 'meeting:media:local:start', user: bob},
337
+ {scope: alice.meeting, event: 'meeting:media:remote:start', user: alice},
338
+ ])
339
+ .catch((e) => {
340
+ console.error('Error on remote and local start event', e);
341
+ throw e;
342
+ }),
343
+ ])
344
+ .then(() => {
345
+ assert.equal(bob.meeting.sipUri, alice.id);
346
+ assert.equal(alice.meeting.sipUri, bob.id);
347
+ assert.exists(alice.meeting.members.locusUrl);
348
+ assert.equal(alice.meeting.type, 'CALL');
349
+ assert.equal(bob.meeting.type, 'CALL');
350
+ assert(enumerateSpy.called);
351
+ })
352
+ .then(function bobState() {
353
+ testUtils.waitForStateChange(bob.meeting, 'JOINED');
354
+ })
355
+ .then(function aliceState() {
356
+ testUtils.waitForStateChange(alice.meeting, 'JOINED');
357
+ })
358
+ .catch((e) => {
359
+ console.error('Error bob joins the meeting ', e);
360
+ throw e;
361
+ }));
290
362
 
291
363
  it('check for meeting properties', () => {
292
364
  assert.exists(alice.meeting.userId, 'userId not present');
@@ -301,136 +373,186 @@ skipInNode(describe)('plugin-meetings', () => {
301
373
  });
302
374
 
303
375
  it('alice Audio Mute ', () => {
304
- const checkEvent = (event) => !!event.delta.updated.find((member) => alice.meeting.members.selfId === member.id && member.isAudioMuted === true);
305
-
376
+ const checkEvent = (event) =>
377
+ !!event.delta.updated.find(
378
+ (member) => alice.meeting.members.selfId === member.id && member.isAudioMuted === true
379
+ );
306
380
 
307
381
  return Promise.all([
308
382
  testUtils.delayedPromise(alice.meeting.muteAudio()),
309
- testUtils.waitForEvents([{scope: bob.meeting.members, event: 'members:update', match: checkEvent}])
310
- ])
311
- .then(() => {
312
- assert.equal(alice.meeting.audio.muted, true);
313
- assert.equal(alice.meeting.isAudioMuted(), true);
314
- });
383
+ testUtils.waitForEvents([
384
+ {scope: bob.meeting.members, event: 'members:update', match: checkEvent},
385
+ ]),
386
+ ]).then(() => {
387
+ assert.equal(alice.meeting.audio.muted, true);
388
+ assert.equal(alice.meeting.isAudioMuted(), true);
389
+ });
315
390
  });
316
391
 
317
392
  it('alice Audio unMute ', () => {
318
- const checkEvent = (event) => !!event.delta.updated.find((member) => alice.meeting.members.selfId === member.id && member.isAudioMuted === false);
393
+ const checkEvent = (event) =>
394
+ !!event.delta.updated.find(
395
+ (member) => alice.meeting.members.selfId === member.id && member.isAudioMuted === false
396
+ );
319
397
 
320
398
  return Promise.all([
321
399
  testUtils.delayedPromise(alice.meeting.unmuteAudio()),
322
- testUtils.waitForEvents([{scope: bob.meeting.members, event: 'members:update', match: checkEvent}])
323
- ])
324
- .then(() => {
325
- assert.equal(alice.meeting.audio.muted, false);
326
- assert.equal(alice.meeting.isAudioMuted(), false);
327
- });
400
+ testUtils.waitForEvents([
401
+ {scope: bob.meeting.members, event: 'members:update', match: checkEvent},
402
+ ]),
403
+ ]).then(() => {
404
+ assert.equal(alice.meeting.audio.muted, false);
405
+ assert.equal(alice.meeting.isAudioMuted(), false);
406
+ });
328
407
  });
329
408
 
330
409
  it('alice Video Mute', () => {
331
- const checkEvent = (event) => !!event.delta.updated.find((member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === true);
410
+ const checkEvent = (event) =>
411
+ !!event.delta.updated.find(
412
+ (member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === true
413
+ );
332
414
 
333
415
  return Promise.all([
334
416
  testUtils.delayedPromise(alice.meeting.muteVideo()),
335
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update', match: checkEvent}])
336
- ])
337
- .then(() => {
338
- assert.equal(alice.meeting.video.muted, true);
339
- assert.equal(alice.meeting.isVideoMuted(), true);
340
- });
417
+ testUtils.waitForEvents([
418
+ {scope: alice.meeting.members, event: 'members:update', match: checkEvent},
419
+ ]),
420
+ ]).then(() => {
421
+ assert.equal(alice.meeting.video.muted, true);
422
+ assert.equal(alice.meeting.isVideoMuted(), true);
423
+ });
341
424
  });
342
425
 
343
426
  it('alice video unMute', () => {
344
- const checkEvent = (event) => !!event.delta.updated.find((member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === false);
427
+ const checkEvent = (event) =>
428
+ !!event.delta.updated.find(
429
+ (member) => alice.meeting.members.selfId === member.id && member.isVideoMuted === false
430
+ );
345
431
 
346
432
  return Promise.all([
347
433
  testUtils.delayedPromise(alice.meeting.unmuteVideo()),
348
- testUtils.waitForEvents([{scope: bob.meeting.members, event: 'members:update', match: checkEvent}])
349
- ])
350
- .then(() => {
351
- assert.equal(alice.meeting.video.muted, false);
352
- assert.equal(alice.meeting.isVideoMuted(), false);
353
- });
434
+ testUtils.waitForEvents([
435
+ {scope: bob.meeting.members, event: 'members:update', match: checkEvent},
436
+ ]),
437
+ ]).then(() => {
438
+ assert.equal(alice.meeting.video.muted, false);
439
+ assert.equal(alice.meeting.isVideoMuted(), false);
440
+ });
354
441
  });
355
442
 
356
443
  it('alice update Audio', () => {
357
444
  const oldVideoTrackId = alice.meeting.mediaProperties.videoTrack.id;
358
445
 
359
- return alice.meeting.getMediaStreams({sendAudio: true})
360
- .then((response) => Promise.all([
361
- testUtils.delayedPromise(alice.meeting.updateAudio({
362
- sendAudio: true,
363
- receiveAudio: true,
364
- stream: response[0]
365
- })
366
- .then(() => {
367
- console.log('AUDIO ', alice.meeting.mediaProperties.peerConnection.audioTransceiver.sender.track);
368
- assert.equal(alice.meeting.mediaProperties.audioTrack.id, response[0].getAudioTracks()[0].id);
369
- assert.equal(alice.meeting.mediaProperties.videoTrack.id, oldVideoTrackId);
370
- })),
371
- testUtils.waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
446
+ return alice.meeting.getMediaStreams({sendAudio: true}).then((response) =>
447
+ Promise.all([
448
+ testUtils.delayedPromise(
449
+ alice.meeting
450
+ .updateAudio({
451
+ sendAudio: true,
452
+ receiveAudio: true,
453
+ stream: response[0],
454
+ })
455
+ .then(() => {
456
+ console.log(
457
+ 'AUDIO ',
458
+ alice.meeting.mediaProperties.peerConnection.audioTransceiver.sender.track
459
+ );
460
+ assert.equal(
461
+ alice.meeting.mediaProperties.audioTrack.id,
462
+ response[0].getAudioTracks()[0].id
463
+ );
464
+ assert.equal(alice.meeting.mediaProperties.videoTrack.id, oldVideoTrackId);
465
+ })
466
+ ),
467
+ testUtils
468
+ .waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
372
469
  .then((response) => {
373
470
  console.log('MEDIA:READY event ', response[0].result);
374
471
  assert.equal(response[0].result.type === 'local', true);
375
- })
376
- ]));
472
+ }),
473
+ ])
474
+ );
377
475
  });
378
476
 
379
477
  it('alice update video', () => {
380
478
  const oldAudioTrackId = alice.meeting.mediaProperties.audioTrack.id;
381
479
 
382
- return alice.meeting.getMediaStreams({sendVideo: true})
383
- .then((response) => Promise.all([
384
- testUtils.delayedPromise(alice.meeting.updateVideo({
385
- sendVideo: true,
386
- receiveVideo: true,
387
- stream: response[0]
388
- })
389
- .then(() => {
390
- assert.equal(alice.meeting.mediaProperties.videoTrack.id, response[0].getVideoTracks()[0].id);
391
- assert.equal(alice.meeting.mediaProperties.audioTrack.id, oldAudioTrackId);
392
- })),
393
- testUtils.waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
480
+ return alice.meeting.getMediaStreams({sendVideo: true}).then((response) =>
481
+ Promise.all([
482
+ testUtils.delayedPromise(
483
+ alice.meeting
484
+ .updateVideo({
485
+ sendVideo: true,
486
+ receiveVideo: true,
487
+ stream: response[0],
488
+ })
489
+ .then(() => {
490
+ assert.equal(
491
+ alice.meeting.mediaProperties.videoTrack.id,
492
+ response[0].getVideoTracks()[0].id
493
+ );
494
+ assert.equal(alice.meeting.mediaProperties.audioTrack.id, oldAudioTrackId);
495
+ })
496
+ ),
497
+ testUtils
498
+ .waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
394
499
  .then((response) => {
395
500
  console.log('MEDIA:READY event ', response[0].result);
396
501
  assert.equal(response[0].result.type === 'local', true);
397
- })
398
- ]));
502
+ }),
503
+ ])
504
+ );
399
505
  });
400
506
 
401
- it('alice mutes bob', () => Promise.all([
402
- testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, true)),
403
- testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:self:mutedByOthers'}])
404
- .then((response) => {
405
- console.log('meeting:self:mutedByOthers event ', response[0].result);
406
- assert.equal(response[0].result.payload.unmuteAllowed, true);
407
- })
408
- ]));
409
-
410
- it('alice unmutes bob', () => Promise.all([
411
- testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, false)),
412
- testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:self:unmutedByOthers'}])
413
- .then((response) => {
414
- console.log('meeting:self:unmutedByOthers event ', response[0].result);
415
- })
416
- ]));
507
+ it('alice mutes bob', () =>
508
+ Promise.all([
509
+ testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, true)),
510
+ testUtils
511
+ .waitForEvents([{scope: bob.meeting, event: 'meeting:self:mutedByOthers'}])
512
+ .then((response) => {
513
+ console.log('meeting:self:mutedByOthers event ', response[0].result);
514
+ assert.equal(response[0].result.payload.unmuteAllowed, true);
515
+ }),
516
+ ]));
517
+
518
+ it('alice unmutes bob', () =>
519
+ Promise.all([
520
+ testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, false)),
521
+ testUtils
522
+ .waitForEvents([{scope: bob.meeting, event: 'meeting:self:unmutedByOthers'}])
523
+ .then((response) => {
524
+ console.log('meeting:self:unmutedByOthers event ', response[0].result);
525
+ }),
526
+ ]));
417
527
 
418
528
  it('bob audio mute, so alice cannot unmute bob', (done) => {
419
- const checkEvent = (event) => !!event.delta.updated.find((member) => bob.meeting.members.selfId === member.id && member.isAudioMuted === true);
529
+ const checkEvent = (event) =>
530
+ !!event.delta.updated.find(
531
+ (member) => bob.meeting.members.selfId === member.id && member.isAudioMuted === true
532
+ );
420
533
 
421
534
  // first bob mutes himself
422
535
  Promise.all([
423
536
  testUtils.delayedPromise(bob.meeting.muteAudio()),
424
- testUtils.waitForEvents([{scope: bob.meeting.members, event: 'members:update', match: checkEvent}])
537
+ testUtils.waitForEvents([
538
+ {scope: bob.meeting.members, event: 'members:update', match: checkEvent},
539
+ ]),
425
540
  ])
426
541
  .then(() => {
427
542
  assert.equal(bob.meeting.audio.muted, true);
428
543
  assert.equal(bob.meeting.isAudioMuted(), true);
429
544
  })
430
545
  // now alice tries to unmmut bob
431
- .then(() => testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, false)))
546
+ .then(() =>
547
+ testUtils.delayedPromise(alice.meeting.mute(bob.meeting.members.selfId, false))
548
+ )
432
549
  // expect the waitForEvents to timeout
433
- .then(() => testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:self:unmutedByOthers'}], 2000))
550
+ .then(() =>
551
+ testUtils.waitForEvents(
552
+ [{scope: bob.meeting, event: 'meeting:self:unmutedByOthers'}],
553
+ 2000
554
+ )
555
+ )
434
556
  .then(() => {
435
557
  assert.fail('bob received unexpected meeting:self:unmutedByOthers event');
436
558
  })
@@ -442,38 +564,48 @@ skipInNode(describe)('plugin-meetings', () => {
442
564
  });
443
565
 
444
566
  it('bob audio unmute ', () => {
445
- const checkEvent = (event) => !!event.delta.updated.find((member) => bob.meeting.members.selfId === member.id && member.isAudioMuted === false);
567
+ const checkEvent = (event) =>
568
+ !!event.delta.updated.find(
569
+ (member) => bob.meeting.members.selfId === member.id && member.isAudioMuted === false
570
+ );
446
571
 
447
572
  return Promise.all([
448
573
  testUtils.delayedPromise(bob.meeting.unmuteAudio()),
449
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update', match: checkEvent}])
450
- ])
451
- .then(() => {
452
- assert.equal(bob.meeting.audio.muted, false);
453
- assert.equal(bob.meeting.isAudioMuted(), false);
454
- });
574
+ testUtils.waitForEvents([
575
+ {scope: alice.meeting.members, event: 'members:update', match: checkEvent},
576
+ ]),
577
+ ]).then(() => {
578
+ assert.equal(bob.meeting.audio.muted, false);
579
+ assert.equal(bob.meeting.isAudioMuted(), false);
580
+ });
455
581
  });
456
582
 
457
- it('alice shares the screen with highFrameRate', () => Promise.all([
458
- testUtils.delayedPromise(alice.meeting.shareScreen({sharePreferences: {highFrameRate: true}})),
459
- testUtils.waitForEvents([
460
- {scope: alice.meeting, event: 'meeting:startedSharingLocal'}
461
- ]),
462
- testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingRemote'}])
463
- .then((response) => {
464
- assert.equal(response[0].result.memberId, alice.meeting.selfId);
465
- }),
466
- testUtils.waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
467
- .then((response) => {
468
- console.log('SCREEN SHARE RESPONSE ', JSON.stringify(response, testUtils.getCircularReplacer()));
469
- }),
470
- testUtils.waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
471
- .then((response) => {
472
- console.log('MEDIA:READY event ', response[0].result);
473
- assert.equal(response[0].result.type === 'localShare', true);
474
- })
475
- ])
476
- .then(() => {
583
+ it('alice shares the screen with highFrameRate', () =>
584
+ Promise.all([
585
+ testUtils.delayedPromise(
586
+ alice.meeting.shareScreen({sharePreferences: {highFrameRate: true}})
587
+ ),
588
+ testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingLocal'}]),
589
+ testUtils
590
+ .waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingRemote'}])
591
+ .then((response) => {
592
+ assert.equal(response[0].result.memberId, alice.meeting.selfId);
593
+ }),
594
+ testUtils
595
+ .waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
596
+ .then((response) => {
597
+ console.log(
598
+ 'SCREEN SHARE RESPONSE ',
599
+ JSON.stringify(response, testUtils.getCircularReplacer())
600
+ );
601
+ }),
602
+ testUtils
603
+ .waitForEvents([{scope: alice.meeting, event: 'media:ready'}])
604
+ .then((response) => {
605
+ console.log('MEDIA:READY event ', response[0].result);
606
+ assert.equal(response[0].result.type === 'localShare', true);
607
+ }),
608
+ ]).then(() => {
477
609
  // TODO: Re-eanable Safari when screensharing issues have been resolved
478
610
  if (!isBrowser('safari')) {
479
611
  assert.equal(alice.meeting.mediaProperties.shareTrack.getConstraints().height, 720);
@@ -481,35 +613,45 @@ skipInNode(describe)('plugin-meetings', () => {
481
613
  assert.equal(alice.meeting.isSharing, true);
482
614
  assert.equal(alice.meeting.shareStatus, 'local_share_active');
483
615
  assert.equal(bob.meeting.shareStatus, 'remote_share_active');
484
- console.log('SCREEN SHARE PARTICIPANTS ', JSON.stringify(alice.meeting.locusInfo.participants));
616
+ console.log(
617
+ 'SCREEN SHARE PARTICIPANTS ',
618
+ JSON.stringify(alice.meeting.locusInfo.participants)
619
+ );
485
620
 
486
621
  return testUtils.waitUntil(10000);
487
622
  }));
488
623
 
489
- it('bob steals the screen share from alice', () => Promise.all([
490
- testUtils.delayedPromise(bob.meeting.shareScreen()),
491
- testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingLocal'}]),
492
- testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]),
493
- testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
494
- .then((response) => {
495
- assert.equal(response[0].result.memberId, bob.meeting.selfId);
496
- }),
497
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
498
- .then((response) => {
499
- console.log('SCREEN SHARE RESPONSE ', JSON.stringify(response, testUtils.getCircularReplacer()));
500
- }),
501
- testUtils.waitForEvents([{scope: bob.meeting, event: 'media:ready'}])
502
- .then((response) => {
624
+ it('bob steals the screen share from alice', () =>
625
+ Promise.all([
626
+ testUtils.delayedPromise(bob.meeting.shareScreen()),
627
+ testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingLocal'}]),
628
+ testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]),
629
+ testUtils
630
+ .waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
631
+ .then((response) => {
632
+ assert.equal(response[0].result.memberId, bob.meeting.selfId);
633
+ }),
634
+ testUtils
635
+ .waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
636
+ .then((response) => {
637
+ console.log(
638
+ 'SCREEN SHARE RESPONSE ',
639
+ JSON.stringify(response, testUtils.getCircularReplacer())
640
+ );
641
+ }),
642
+ testUtils.waitForEvents([{scope: bob.meeting, event: 'media:ready'}]).then((response) => {
503
643
  console.log('MEDIA:READY event ', response[0].result);
504
644
  assert.equal(response[0].result.type === 'localShare', true);
505
- })
506
- ])
507
- .then(() => {
645
+ }),
646
+ ]).then(() => {
508
647
  const heightResolution = DEFAULT_RESOLUTIONS.meetings.screenResolution.idealHeight;
509
648
 
510
649
  // TODO: Re-eanable Safari when screensharing issues have been resolved
511
650
  if (!isBrowser('safari')) {
512
- assert.equal(bob.meeting.mediaProperties.shareTrack.getConstraints().height, heightResolution);
651
+ assert.equal(
652
+ bob.meeting.mediaProperties.shareTrack.getConstraints().height,
653
+ heightResolution
654
+ );
513
655
  }
514
656
  assert.equal(bob.meeting.isSharing, true);
515
657
  assert.equal(bob.meeting.shareStatus, 'local_share_active');
@@ -518,128 +660,158 @@ skipInNode(describe)('plugin-meetings', () => {
518
660
  return testUtils.waitUntil(10000);
519
661
  }));
520
662
 
521
- it('bob stops sharing ', () => Promise.all([
522
- // Wait for peerConnection to stabalize
523
- testUtils.waitUntil(20000),
524
- testUtils.delayedPromise(bob.meeting.updateShare({
525
- sendShare: false,
526
- receiveShare: true
527
- })),
528
- testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:stoppedSharingLocal'}]),
529
- testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingRemote'}])
530
- ])
531
- .then(() => {
663
+ it('bob stops sharing ', () =>
664
+ Promise.all([
665
+ // Wait for peerConnection to stabalize
666
+ testUtils.waitUntil(20000),
667
+ testUtils.delayedPromise(
668
+ bob.meeting.updateShare({
669
+ sendShare: false,
670
+ receiveShare: true,
671
+ })
672
+ ),
673
+ testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:stoppedSharingLocal'}]),
674
+ testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingRemote'}]),
675
+ ]).then(() => {
532
676
  assert.equal(bob.meeting.isSharing, false);
533
677
  assert.equal(bob.meeting.shareStatus, 'no_share');
534
678
  assert.equal(alice.meeting.shareStatus, 'no_share');
535
679
  }));
536
680
 
537
- it('alice shares whiteboard A', () => Promise.all([
538
- testUtils.delayedPromise(alice.meeting.startWhiteboardShare(channelUrlA)),
539
- testUtils.waitForEvents([
540
- {scope: alice.meeting, event: 'meeting:startedSharingWhiteboard'}
541
- ]),
542
- testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingWhiteboard'}])
543
- .then((response) => {
544
- const {memberId, resourceUrl} = response[0].result;
545
-
546
- assert.equal(memberId, alice.meeting.selfId);
547
- assert.equal(resourceUrl, channelUrlA);
548
- }),
549
- testUtils.waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
550
- .then((response) => {
551
- console.log('WHITEBOARD SHARE RESPONSE ', JSON.stringify(response, testUtils.getCircularReplacer()));
552
- })
553
- ])
554
- .then(() => {
681
+ it('alice shares whiteboard A', () =>
682
+ Promise.all([
683
+ testUtils.delayedPromise(alice.meeting.startWhiteboardShare(channelUrlA)),
684
+ testUtils.waitForEvents([
685
+ {scope: alice.meeting, event: 'meeting:startedSharingWhiteboard'},
686
+ ]),
687
+ testUtils
688
+ .waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingWhiteboard'}])
689
+ .then((response) => {
690
+ const {memberId, resourceUrl} = response[0].result;
691
+
692
+ assert.equal(memberId, alice.meeting.selfId);
693
+ assert.equal(resourceUrl, channelUrlA);
694
+ }),
695
+ testUtils
696
+ .waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
697
+ .then((response) => {
698
+ console.log(
699
+ 'WHITEBOARD SHARE RESPONSE ',
700
+ JSON.stringify(response, testUtils.getCircularReplacer())
701
+ );
702
+ }),
703
+ ]).then(() => {
555
704
  assert.equal(alice.meeting.isSharing, false);
556
705
  assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
557
706
  assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
558
707
  }));
559
708
 
560
- it('bob steals share from alice with whiteboard B', () => Promise.all([
561
- testUtils.delayedPromise(bob.meeting.startWhiteboardShare(channelUrlB)),
562
- testUtils.waitForEvents([
563
- {scope: bob.meeting, event: 'meeting:startedSharingWhiteboard'}
564
- ]),
565
- testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingWhiteboard'}])
566
- .then((response) => {
567
- const {memberId, resourceUrl} = response[0].result;
568
-
569
- assert.equal(memberId, bob.meeting.selfId);
570
- assert.equal(resourceUrl, channelUrlB);
571
- }),
572
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
573
- .then((response) => {
574
- console.log('WHITEBOARD SHARE RESPONSE ', JSON.stringify(response, testUtils.getCircularReplacer()));
575
- })
576
- ])
577
- .then(() => {
709
+ it('bob steals share from alice with whiteboard B', () =>
710
+ Promise.all([
711
+ testUtils.delayedPromise(bob.meeting.startWhiteboardShare(channelUrlB)),
712
+ testUtils.waitForEvents([
713
+ {scope: bob.meeting, event: 'meeting:startedSharingWhiteboard'},
714
+ ]),
715
+ testUtils
716
+ .waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingWhiteboard'}])
717
+ .then((response) => {
718
+ const {memberId, resourceUrl} = response[0].result;
719
+
720
+ assert.equal(memberId, bob.meeting.selfId);
721
+ assert.equal(resourceUrl, channelUrlB);
722
+ }),
723
+ testUtils
724
+ .waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
725
+ .then((response) => {
726
+ console.log(
727
+ 'WHITEBOARD SHARE RESPONSE ',
728
+ JSON.stringify(response, testUtils.getCircularReplacer())
729
+ );
730
+ }),
731
+ ]).then(() => {
578
732
  assert.equal(bob.meeting.isSharing, false);
579
733
  assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
580
734
  assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
581
735
  }));
582
736
 
583
- it('bob stops sharing ', () => Promise.all([
584
- // Wait for peerConnection to stabalize
585
- testUtils.waitUntil(20000),
586
- testUtils.delayedPromise(bob.meeting.stopWhiteboardShare(channelUrlB)),
587
- testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:stoppedSharingWhiteboard'}]),
588
- testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'}])
589
- ])
590
- .then(() => {
737
+ it('bob stops sharing ', () =>
738
+ Promise.all([
739
+ // Wait for peerConnection to stabalize
740
+ testUtils.waitUntil(20000),
741
+ testUtils.delayedPromise(bob.meeting.stopWhiteboardShare(channelUrlB)),
742
+ testUtils.waitForEvents([
743
+ {scope: bob.meeting, event: 'meeting:stoppedSharingWhiteboard'},
744
+ ]),
745
+ testUtils.waitForEvents([
746
+ {scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'},
747
+ ]),
748
+ ]).then(() => {
591
749
  assert.equal(bob.meeting.isSharing, false);
592
750
  assert.equal(bob.meeting.shareStatus, 'no_share');
593
751
  assert.equal(alice.meeting.shareStatus, 'no_share');
594
752
  }));
595
753
 
596
- it('alice shares whiteboard B', () => Promise.all([
597
- testUtils.delayedPromise(alice.meeting.startWhiteboardShare(channelUrlB)),
598
- testUtils.waitForEvents([
599
- {scope: alice.meeting, event: 'meeting:startedSharingWhiteboard'}
600
- ]),
601
- testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingWhiteboard'}])
602
- .then((response) => {
603
- const {memberId, resourceUrl} = response[0].result;
604
-
605
- assert.equal(memberId, alice.meeting.selfId);
606
- assert.equal(resourceUrl, channelUrlB);
607
- }),
608
- testUtils.waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
609
- .then((response) => {
610
- console.log('WHITEBOARD SHARE RESPONSE ', JSON.stringify(response, testUtils.getCircularReplacer()));
611
- })
612
- ])
613
- .then(() => {
754
+ it('alice shares whiteboard B', () =>
755
+ Promise.all([
756
+ testUtils.delayedPromise(alice.meeting.startWhiteboardShare(channelUrlB)),
757
+ testUtils.waitForEvents([
758
+ {scope: alice.meeting, event: 'meeting:startedSharingWhiteboard'},
759
+ ]),
760
+ testUtils
761
+ .waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingWhiteboard'}])
762
+ .then((response) => {
763
+ const {memberId, resourceUrl} = response[0].result;
764
+
765
+ assert.equal(memberId, alice.meeting.selfId);
766
+ assert.equal(resourceUrl, channelUrlB);
767
+ }),
768
+ testUtils
769
+ .waitForEvents([{scope: bob.meeting.members, event: 'members:update'}])
770
+ .then((response) => {
771
+ console.log(
772
+ 'WHITEBOARD SHARE RESPONSE ',
773
+ JSON.stringify(response, testUtils.getCircularReplacer())
774
+ );
775
+ }),
776
+ ]).then(() => {
614
777
  assert.equal(alice.meeting.isSharing, false);
615
778
  assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
616
779
  assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
617
780
  }));
618
781
 
619
- it('bob steals the share from alice with desktop share', () => Promise.all([
620
- testUtils.delayedPromise(bob.meeting.shareScreen()),
621
- testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'}]),
622
- testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]),
623
- testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
624
- .then((response) => {
625
- assert.equal(response[0].result.memberId, bob.meeting.selfId);
626
- }),
627
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
628
- .then((response) => {
629
- console.log('SCREEN SHARE RESPONSE ', JSON.stringify(response, testUtils.getCircularReplacer()));
630
- }),
631
- testUtils.waitForEvents([{scope: bob.meeting, event: 'media:ready'}])
632
- .then((response) => {
782
+ it('bob steals the share from alice with desktop share', () =>
783
+ Promise.all([
784
+ testUtils.delayedPromise(bob.meeting.shareScreen()),
785
+ testUtils.waitForEvents([
786
+ {scope: alice.meeting, event: 'meeting:stoppedSharingWhiteboard'},
787
+ ]),
788
+ testUtils.waitForEvents([{scope: bob.meeting, event: 'meeting:startedSharingLocal'}]),
789
+ testUtils
790
+ .waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingRemote'}])
791
+ .then((response) => {
792
+ assert.equal(response[0].result.memberId, bob.meeting.selfId);
793
+ }),
794
+ testUtils
795
+ .waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
796
+ .then((response) => {
797
+ console.log(
798
+ 'SCREEN SHARE RESPONSE ',
799
+ JSON.stringify(response, testUtils.getCircularReplacer())
800
+ );
801
+ }),
802
+ testUtils.waitForEvents([{scope: bob.meeting, event: 'media:ready'}]).then((response) => {
633
803
  console.log('MEDIA:READY event ', response[0].result);
634
804
  assert.equal(response[0].result.type === 'localShare', true);
635
- })
636
- ])
637
- .then(() => {
805
+ }),
806
+ ]).then(() => {
638
807
  const heightResolution = DEFAULT_RESOLUTIONS.meetings.screenResolution.idealHeight;
639
808
 
640
809
  // TODO: Re-eanable Safari when screensharing issues have been resolved
641
810
  if (!isBrowser('safari')) {
642
- assert.equal(bob.meeting.mediaProperties.shareTrack.getConstraints().height, heightResolution);
811
+ assert.equal(
812
+ bob.meeting.mediaProperties.shareTrack.getConstraints().height,
813
+ heightResolution
814
+ );
643
815
  }
644
816
  assert.equal(bob.meeting.isSharing, true);
645
817
  assert.equal(bob.meeting.shareStatus, 'local_share_active');
@@ -648,65 +820,94 @@ skipInNode(describe)('plugin-meetings', () => {
648
820
  return testUtils.waitUntil(10000);
649
821
  }));
650
822
 
651
- it('bob shares whiteboard B', () => Promise.all([
652
- testUtils.delayedPromise(bob.meeting.startWhiteboardShare(channelUrlB)),
653
- testUtils.waitForEvents([
654
- {scope: bob.meeting, event: 'meeting:startedSharingWhiteboard'}
655
- ]),
656
- testUtils.waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingWhiteboard'}])
657
- .then((response) => {
658
- const {memberId, resourceUrl} = response[0].result;
659
-
660
- assert.equal(memberId, bob.meeting.selfId);
661
- assert.equal(resourceUrl, channelUrlB);
662
- }),
663
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
664
- .then((response) => {
665
- console.log('WHITEBOARD SHARE RESPONSE ', JSON.stringify(response, testUtils.getCircularReplacer()));
666
- })
667
- ])
668
- .then(() => {
823
+ it('bob shares whiteboard B', () =>
824
+ Promise.all([
825
+ testUtils.delayedPromise(bob.meeting.startWhiteboardShare(channelUrlB)),
826
+ testUtils.waitForEvents([
827
+ {scope: bob.meeting, event: 'meeting:startedSharingWhiteboard'},
828
+ ]),
829
+ testUtils
830
+ .waitForEvents([{scope: alice.meeting, event: 'meeting:startedSharingWhiteboard'}])
831
+ .then((response) => {
832
+ const {memberId, resourceUrl} = response[0].result;
833
+
834
+ assert.equal(memberId, bob.meeting.selfId);
835
+ assert.equal(resourceUrl, channelUrlB);
836
+ }),
837
+ testUtils
838
+ .waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
839
+ .then((response) => {
840
+ console.log(
841
+ 'WHITEBOARD SHARE RESPONSE ',
842
+ JSON.stringify(response, testUtils.getCircularReplacer())
843
+ );
844
+ }),
845
+ ]).then(() => {
669
846
  assert.equal(bob.meeting.isSharing, false);
670
847
  assert.equal(alice.meeting.shareStatus, 'whiteboard_share_active');
671
848
  assert.equal(bob.meeting.shareStatus, 'whiteboard_share_active');
672
849
  }));
673
850
 
674
- it('alice adds chris as guest to 1:1 meeting', () => Promise.all([
675
- testUtils.delayedPromise(alice.meeting.invite({emailAddress: chris.emailAddress})),
676
- testUtils.waitForEvents([{scope: chris.webex.meetings, event: 'meeting:added', user: chris}]),
677
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
678
- .then((response) => {
679
- const chrisParticipant = response[0].result.delta.added.find((member) => member.participant.identity === chris.id);
680
-
681
- assert.equal(chrisParticipant.status, 'NOT_IN_MEETING');
851
+ it('alice adds chris as guest to 1:1 meeting', () =>
852
+ Promise.all([
853
+ testUtils.delayedPromise(alice.meeting.invite({emailAddress: chris.emailAddress})),
854
+ testUtils.waitForEvents([
855
+ {scope: chris.webex.meetings, event: 'meeting:added', user: chris},
856
+ ]),
857
+ testUtils
858
+ .waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
859
+ .then((response) => {
860
+ const chrisParticipant = response[0].result.delta.added.find(
861
+ (member) => member.participant.identity === chris.id
862
+ );
863
+
864
+ assert.equal(chrisParticipant.status, 'NOT_IN_MEETING');
865
+ }),
866
+ ])
867
+ .catch((e) => {
868
+ console.error('Error adding chris as guest ', e);
869
+ throw e;
682
870
  })
683
- ])
684
- .catch((e) => {
685
- console.error('Error adding chris as guest ', e);
686
- throw e;
687
- })
688
- .then(function memberUpdated() {
689
- assert.exists(chris.meeting);
690
-
691
- return Promise.all([
692
- testUtils.delayedPromise(chris.meeting.join()),
693
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update', match: testUtils.checkParticipantUpdatedStatus(chris, 'IN_MEETING')}])
694
- ])
695
- .then(() => {
696
- assert.equal(alice.meeting.members.membersCollection.get(chris.meeting.members.selfId).participant.state, 'JOINED');
697
- })
698
- .then(() => testUtils.waitForStateChange(chris.meeting, 'JOINED'))
699
- .then(() => testUtils.addMedia(chris))
700
- .then(() => assert(enumerateSpy.called));
701
- })
702
- .then(() => Promise.all([
703
- testUtils.delayedPromise(chris.meeting.leave()),
704
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update', match: testUtils.checkParticipantUpdatedStatus(chris, 'NOT_IN_MEETING')}])
705
- ]))
706
- .catch((e) => {
707
- console.error('Error chris joining the meeting ', e);
708
- throw e;
709
- }));
871
+ .then(function memberUpdated() {
872
+ assert.exists(chris.meeting);
873
+
874
+ return Promise.all([
875
+ testUtils.delayedPromise(chris.meeting.join()),
876
+ testUtils.waitForEvents([
877
+ {
878
+ scope: alice.meeting.members,
879
+ event: 'members:update',
880
+ match: testUtils.checkParticipantUpdatedStatus(chris, 'IN_MEETING'),
881
+ },
882
+ ]),
883
+ ])
884
+ .then(() => {
885
+ assert.equal(
886
+ alice.meeting.members.membersCollection.get(chris.meeting.members.selfId)
887
+ .participant.state,
888
+ 'JOINED'
889
+ );
890
+ })
891
+ .then(() => testUtils.waitForStateChange(chris.meeting, 'JOINED'))
892
+ .then(() => testUtils.addMedia(chris))
893
+ .then(() => assert(enumerateSpy.called));
894
+ })
895
+ .then(() =>
896
+ Promise.all([
897
+ testUtils.delayedPromise(chris.meeting.leave()),
898
+ testUtils.waitForEvents([
899
+ {
900
+ scope: alice.meeting.members,
901
+ event: 'members:update',
902
+ match: testUtils.checkParticipantUpdatedStatus(chris, 'NOT_IN_MEETING'),
903
+ },
904
+ ]),
905
+ ])
906
+ )
907
+ .catch((e) => {
908
+ console.error('Error chris joining the meeting ', e);
909
+ throw e;
910
+ }));
710
911
 
711
912
  it('leave on the meeting object', () => {
712
913
  const checkInactive = (result) => result.reason === 'CALL_INACTIVE';
@@ -716,10 +917,13 @@ skipInNode(describe)('plugin-meetings', () => {
716
917
  testUtils.waitForEvents([
717
918
  {scope: alice.meeting.members, event: 'members:update', user: alice},
718
919
  {
719
- scope: bob.webex.meetings, event: 'meeting:removed', user: bob, match: checkInactive
920
+ scope: bob.webex.meetings,
921
+ event: 'meeting:removed',
922
+ user: bob,
923
+ match: checkInactive,
720
924
  },
721
- {scope: alice.webex.meetings, event: 'meeting:removed', user: alice}
722
- ])
925
+ {scope: alice.webex.meetings, event: 'meeting:removed', user: alice},
926
+ ]),
723
927
  ])
724
928
  .then(() => {
725
929
  assert.equal(bob.meeting, null);