@webex/plugin-meetings 2.20.1 → 2.20.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "2.20.1",
3
+ "version": "2.20.2",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "contributors": [
@@ -24,15 +24,15 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@babel/runtime-corejs2": "^7.14.8",
27
- "@webex/webex-core": "2.20.1",
28
- "@webex/internal-plugin-mercury": "2.20.1",
29
- "@webex/internal-plugin-conversation": "2.20.1",
27
+ "@webex/webex-core": "2.20.2",
28
+ "@webex/internal-plugin-mercury": "2.20.2",
29
+ "@webex/internal-plugin-conversation": "2.20.2",
30
30
  "webrtc-adapter": "^7.7.0",
31
31
  "lodash": "^4.17.21",
32
32
  "uuid": "^3.3.2",
33
33
  "global": "^4.4.0",
34
34
  "ip-anonymize": "^0.1.0",
35
- "@webex/common": "2.20.1",
35
+ "@webex/common": "2.20.2",
36
36
  "bowser": "^2.11.0",
37
37
  "sdp-transform": "^2.12.0",
38
38
  "btoa": "^1.2.1",
@@ -247,14 +247,14 @@ skipInNode(describe)('plugin-meetings', () => {
247
247
  .then(() => assert(enumerateSpy.called)));
248
248
 
249
249
  it('bob joins the meeting', () => {
250
- bob.meeting.acknowledge('INCOMING');
251
-
252
250
  const checkBobIsInMeeting = (event) => !!event.delta.updated.find((member) => bob.meeting.members.selfId === member.id && member.status === 'IN_MEETING');
253
251
 
254
- return bob.meeting.join()
255
- .then(() => testUtils.waitForEvents([{
252
+ return Promise.all([
253
+ bob.meeting.acknowledge('INCOMING').then(() => bob.meeting.join()),
254
+ testUtils.waitForEvents([{
256
255
  scope: alice.meeting.members, event: 'members:update', user: alice, match: checkBobIsInMeeting
257
- }]));
256
+ }])
257
+ ]);
258
258
  });
259
259
 
260
260
  it('bob adds media to the meeting', () => Promise.all([
@@ -688,12 +688,7 @@ skipInNode(describe)('plugin-meetings', () => {
688
688
 
689
689
  return Promise.all([
690
690
  testUtils.delayedPromise(chris.meeting.join()),
691
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
692
- .then((response) => {
693
- const chrisParticipant = response[0].result.delta.updated.find((member) => member.participant.identity === chris.id);
694
-
695
- assert.equal(chrisParticipant.status, 'IN_MEETING');
696
- })
691
+ testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update', match: testUtils.checkParticipantUpdatedStatus(chris, 'IN_MEETING')}])
697
692
  ])
698
693
  .then(() => {
699
694
  assert.equal(alice.meeting.members.membersCollection.get(chris.meeting.members.selfId).participant.state, 'JOINED');
@@ -704,12 +699,7 @@ skipInNode(describe)('plugin-meetings', () => {
704
699
  })
705
700
  .then(() => Promise.all([
706
701
  testUtils.delayedPromise(chris.meeting.leave()),
707
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
708
- .then((response) => {
709
- const chrisParticipant = response[0].result.delta.updated.find((member) => member.participant.identity === chris.id);
710
-
711
- assert.equal(chrisParticipant.status, 'NOT_IN_MEETING');
712
- })
702
+ testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update', match: testUtils.checkParticipantUpdatedStatus(chris, 'NOT_IN_MEETING')}])
713
703
  ]))
714
704
  .catch((e) => {
715
705
  console.error('Error chris joining the meeting ', e);
@@ -2,6 +2,7 @@
2
2
  import {assert} from '@webex/test-helper-chai';
3
3
  import {skipInNode, jenkinsOnly} from '@webex/test-helper-mocha';
4
4
  import {patterns} from '@webex/common';
5
+
5
6
  import MeetingInfoUtil from '@webex/plugin-meetings/src/meeting-info/utilv2';
6
7
 
7
8
  import CMR from '../../utils/cmr';
@@ -152,32 +153,18 @@ skipInNode(describe)('plugin-meetings', () => {
152
153
  .then(() => testUtils.addMedia(guest))
153
154
  .catch((e) => { console.error('Error chris joining the meeting ', e); throw e; }));
154
155
 
155
- it('alice Leaves the meeting', () =>
156
- Promise.all([
157
- testUtils.delayedPromise(alice.meeting.leave()),
158
- testUtils.waitForEvents([{scope: chris.meeting.members, event: 'members:update'}])
159
- .then((response) => {
160
- const aliceParticipant = response[0].result.delta.updated.find((member) => alice.meeting.members.selfId === member.id);
161
-
162
- assert.equal(aliceParticipant.status, 'NOT_IN_MEETING');
163
- })
164
- ]).then(() => testUtils.waitForStateChange(alice.meeting, 'LEFT')));
165
-
166
- it('bob and chris leave meeting', () => Promise.all([
167
- testUtils.delayedPromise(bob.meeting.leave()),
168
- testUtils.waitForEvents([{scope: chris.meeting.members, event: 'members:update'}])
169
- .then((response) => {
170
- const bobParticipant = response[0].result.delta.updated.find((member) => bob.meeting.members.selfId === member.id);
171
-
172
- assert.equal(bobParticipant.status, 'NOT_IN_MEETING');
173
- })
174
- ]).then(() => testUtils.waitForStateChange(bob.meeting, 'LEFT'))
175
- .then(() => {
176
- console.log('CHRIS MEETING', chris.meeting.locusInfo);
156
+ it('alice Leaves the meeting', () => Promise.all([
157
+ testUtils.delayedPromise(alice.meeting.leave()),
158
+ testUtils.waitForEvents([{scope: chris.meeting.members, event: 'members:update', match: testUtils.checkParticipantUpdatedStatus(alice, 'NOT_IN_MEETING')}])
159
+ ]).then(() => testUtils.waitForStateChange(alice.meeting, 'LEFT')));
177
160
 
178
- return chris.meeting.leave();
179
- })
180
- .then(() => testUtils.waitUntil(4000)));
161
+ it('bob and chris leave meeting', () =>
162
+ Promise.all([
163
+ testUtils.delayedPromise(bob.meeting.leave()),
164
+ testUtils.waitForEvents([{scope: chris.meeting.members, event: 'members:update', match: testUtils.checkParticipantUpdatedStatus(bob, 'NOT_IN_MEETING')}])
165
+ ]).then(() => testUtils.waitForStateChange(bob.meeting, 'LEFT'))
166
+ .then(() => chris.meeting.leave())
167
+ .then(() => testUtils.waitUntil(4000)));
181
168
 
182
169
 
183
170
  it('check for meeting cleanup', () => {
@@ -323,13 +310,10 @@ skipInNode(describe)('plugin-meetings', () => {
323
310
  return Promise.all([
324
311
  testUtils.delayedPromise(guest.meeting.join()),
325
312
  testUtils.waitForEvents([{scope: guest.meeting, event: 'meeting:self:lobbyWaiting'}]),
326
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
327
- .then((response) => {
328
- const guestParticipant = response[0].result.delta.updated.find((member) => guest.meeting.members.selfId === member.id);
329
-
330
- assert.equal(guestParticipant.status, 'IN_LOBBY');
313
+ testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update', match: testUtils.checkParticipantUpdatedStatus(guest, 'IN_LOBBY')}])
314
+ .then(() => {
331
315
  Promise.all([
332
- testUtils.delayedPromise(alice.meeting.admit(guestParticipant.id)),
316
+ testUtils.delayedPromise(alice.meeting.admit(guest.meeting.members.selfId)),
333
317
  testUtils.waitForEvents([{scope: guest.meeting, event: 'meeting:self:guestAdmitted'}])
334
318
  ]);
335
319
  })
@@ -337,17 +321,12 @@ skipInNode(describe)('plugin-meetings', () => {
337
321
  .then(() => testUtils.waitForStateChange(guest.meeting, 'JOINED'))
338
322
  .then(() => testUtils.addMedia(guest));
339
323
  })
324
+ .catch((e) => { console.error('Error guest joining the meeting ', e); throw e; })
340
325
  .then(() => Promise.all([
341
326
  testUtils.delayedPromise(chris.meeting.leave()),
342
- testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update'}])
343
- .then((response) => {
344
- console.log('CHRIS RESPONSE ', response[0]);
345
- const chrisParticipant = response[0].result.delta.updated.find((member) => chris.meeting.members.selfId === member.id);
346
-
347
- assert.equal(chrisParticipant.status, 'NOT_IN_MEETING');
348
- })
327
+ testUtils.waitForEvents([{scope: alice.meeting.members, event: 'members:update', match: testUtils.checkParticipantUpdatedStatus(chris, 'NOT_IN_MEETING')}])
349
328
  ]))
350
- .catch((e) => { console.error('Error chris joining the meeting ', e); throw e; }));
329
+ .catch((e) => { console.error('Error chris leaving the meeting ', e); throw e; }));
351
330
 
352
331
  it('leave claimed PMR', () => alice.meeting.leave()
353
332
  .then(() => bob.meeting.leave())
@@ -1,4 +1,5 @@
1
1
  import {assert} from '@webex/test-helper-chai';
2
+ import {Defer} from '@webex/common';
2
3
 
3
4
  const max = 30000;
4
5
  const waitForSpy = (spy, event) => {
@@ -192,12 +193,18 @@ const delayedTest = (callback, timeout) => new Promise((resolve) => {
192
193
  });
193
194
 
194
195
  const addMedia = (user) => {
195
- const mediaReadyEvent = {};
196
+ const mediaReadyPromises = {
197
+ local: new Defer(),
198
+ remoteAudio: new Defer(),
199
+ remoteVideo: new Defer(),
200
+ };
196
201
  const mediaReady = (media) => {
197
202
  if (!media) {
198
203
  return;
199
204
  }
200
- mediaReadyEvent[media.type] = media.type;
205
+ if (mediaReadyPromises[media.type]) {
206
+ mediaReadyPromises[media.type].resolve();
207
+ }
201
208
  };
202
209
 
203
210
  user.meeting.on('media:ready', mediaReady);
@@ -219,13 +226,11 @@ const addMedia = (user) => {
219
226
  localShare,
220
227
  localStream
221
228
  }))
222
- .then(() => delayedTest(() => {
223
- assert.exists(mediaReadyEvent.local, 'local stream event not triggered');
224
- assert.exists(mediaReadyEvent.remoteAudio, 'remoteAudio event not triggered');
225
- assert.exists(mediaReadyEvent.remoteVideo, 'remoteVideo event not triggered');
229
+ .then(() => Promise.all(Object.values(mediaReadyPromises).map((defer) => defer.promise)))
230
+ .then(() => {
226
231
  assert.exists(user.meeting.mediaProperties.audioTrack, 'audioTrack not present');
227
232
  assert.exists(user.meeting.mediaProperties.videoTrack, 'videoTrack not present');
228
- }, 10000));
233
+ });
229
234
  };
230
235
 
231
236
  const waitUntil = (waitTime) => new Promise((resolve) => {
@@ -252,12 +257,17 @@ const getCircularReplacer = () => {
252
257
  };
253
258
  };
254
259
 
260
+ // this function is meant to be used as the "match" callback with waitForEvents()
261
+ // when you want to wait for a particular users's status to reach a certain value
262
+ const checkParticipantUpdatedStatus = (user, expectedStatus) => (event) => !!event.delta.updated.find((member) => user.meeting.members.selfId === member.id && member.status === expectedStatus);
263
+
255
264
  export default {
256
265
  waitForSpy,
257
266
  waitForStateChange,
258
267
  waitForCallEnded,
259
268
  syncAndEndMeeting,
260
269
  waitForEvents,
270
+ checkParticipantUpdatedStatus,
261
271
  delayedPromise,
262
272
  addMedia,
263
273
  waitUntil,