@webex/plugin-meetings 3.9.0-webinar5k.1 → 3.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/constants.js +24 -0
  4. package/dist/constants.js.map +1 -1
  5. package/dist/controls-options-manager/index.js +22 -5
  6. package/dist/controls-options-manager/index.js.map +1 -1
  7. package/dist/index.js +2 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/interceptors/index.js +7 -0
  10. package/dist/interceptors/index.js.map +1 -1
  11. package/dist/interceptors/locusRouteToken.js +116 -0
  12. package/dist/interceptors/locusRouteToken.js.map +1 -0
  13. package/dist/interpretation/index.js +1 -1
  14. package/dist/interpretation/siLanguage.js +1 -1
  15. package/dist/locus-info/controlsUtils.js +11 -2
  16. package/dist/locus-info/controlsUtils.js.map +1 -1
  17. package/dist/locus-info/index.js +76 -322
  18. package/dist/locus-info/index.js.map +1 -1
  19. package/dist/locus-info/parser.js +4 -1
  20. package/dist/locus-info/parser.js.map +1 -1
  21. package/dist/media/properties.js +53 -5
  22. package/dist/media/properties.js.map +1 -1
  23. package/dist/meeting/in-meeting-actions.js +14 -0
  24. package/dist/meeting/in-meeting-actions.js.map +1 -1
  25. package/dist/meeting/index.js +467 -277
  26. package/dist/meeting/index.js.map +1 -1
  27. package/dist/meeting/request.js +177 -14
  28. package/dist/meeting/request.js.map +1 -1
  29. package/dist/meeting/type.js +7 -0
  30. package/dist/meeting/type.js.map +1 -0
  31. package/dist/meeting/util.js +100 -3
  32. package/dist/meeting/util.js.map +1 -1
  33. package/dist/meeting-info/meeting-info-v2.js +29 -21
  34. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  35. package/dist/meetings/index.js +20 -16
  36. package/dist/meetings/index.js.map +1 -1
  37. package/dist/member/index.js +9 -0
  38. package/dist/member/index.js.map +1 -1
  39. package/dist/member/util.js +10 -0
  40. package/dist/member/util.js.map +1 -1
  41. package/dist/members/index.js +10 -7
  42. package/dist/members/index.js.map +1 -1
  43. package/dist/members/util.js +7 -2
  44. package/dist/members/util.js.map +1 -1
  45. package/dist/metrics/constants.js +2 -1
  46. package/dist/metrics/constants.js.map +1 -1
  47. package/dist/multistream/mediaRequestManager.js +1 -1
  48. package/dist/multistream/mediaRequestManager.js.map +1 -1
  49. package/dist/multistream/remoteMedia.js +34 -5
  50. package/dist/multistream/remoteMedia.js.map +1 -1
  51. package/dist/multistream/remoteMediaGroup.js +42 -2
  52. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  53. package/dist/reachability/index.js +3 -3
  54. package/dist/reachability/index.js.map +1 -1
  55. package/dist/types/constants.d.ts +23 -0
  56. package/dist/types/controls-options-manager/index.d.ts +9 -1
  57. package/dist/types/interceptors/index.d.ts +2 -1
  58. package/dist/types/interceptors/locusRouteToken.d.ts +38 -0
  59. package/dist/types/locus-info/index.d.ts +9 -54
  60. package/dist/types/media/properties.d.ts +21 -0
  61. package/dist/types/meeting/in-meeting-actions.d.ts +14 -0
  62. package/dist/types/meeting/index.d.ts +64 -29
  63. package/dist/types/meeting/request.d.ts +42 -0
  64. package/dist/types/meeting/type.d.ts +9 -0
  65. package/dist/types/meeting/util.d.ts +13 -0
  66. package/dist/types/meeting-info/meeting-info-v2.d.ts +6 -3
  67. package/dist/types/meetings/index.d.ts +3 -1
  68. package/dist/types/member/index.d.ts +1 -0
  69. package/dist/types/member/util.d.ts +5 -0
  70. package/dist/types/members/index.d.ts +12 -11
  71. package/dist/types/members/util.d.ts +8 -4
  72. package/dist/types/metrics/constants.d.ts +1 -0
  73. package/dist/types/multistream/remoteMedia.d.ts +20 -1
  74. package/dist/types/multistream/remoteMediaGroup.d.ts +11 -0
  75. package/dist/webinar/index.js +1 -1
  76. package/package.json +25 -27
  77. package/src/constants.ts +26 -2
  78. package/src/controls-options-manager/index.ts +26 -5
  79. package/src/index.ts +2 -1
  80. package/src/interceptors/index.ts +2 -1
  81. package/src/interceptors/locusRouteToken.ts +80 -0
  82. package/src/locus-info/controlsUtils.ts +18 -0
  83. package/src/locus-info/index.ts +69 -357
  84. package/src/locus-info/parser.ts +5 -1
  85. package/src/media/properties.ts +43 -0
  86. package/src/meeting/in-meeting-actions.ts +29 -0
  87. package/src/meeting/index.ts +296 -87
  88. package/src/meeting/request.ts +141 -0
  89. package/src/meeting/type.ts +9 -0
  90. package/src/meeting/util.ts +107 -3
  91. package/src/meeting-info/meeting-info-v2.ts +24 -5
  92. package/src/meetings/index.ts +15 -22
  93. package/src/member/index.ts +10 -0
  94. package/src/member/util.ts +14 -0
  95. package/src/members/index.ts +20 -10
  96. package/src/members/util.ts +20 -3
  97. package/src/metrics/constants.ts +1 -0
  98. package/src/multistream/mediaRequestManager.ts +7 -7
  99. package/src/multistream/remoteMedia.ts +34 -4
  100. package/src/multistream/remoteMediaGroup.ts +37 -2
  101. package/src/reachability/index.ts +3 -3
  102. package/test/unit/spec/common/browser-detection.js +0 -24
  103. package/test/unit/spec/controls-options-manager/index.js +47 -0
  104. package/test/unit/spec/fixture/locus.js +1 -0
  105. package/test/unit/spec/interceptors/locusRouteToken.ts +87 -0
  106. package/test/unit/spec/locus-info/index.js +80 -361
  107. package/test/unit/spec/locus-info/parser.js +3 -2
  108. package/test/unit/spec/media/properties.ts +137 -0
  109. package/test/unit/spec/meeting/in-meeting-actions.ts +14 -0
  110. package/test/unit/spec/meeting/index.js +637 -53
  111. package/test/unit/spec/meeting/muteState.js +32 -6
  112. package/test/unit/spec/meeting/request.js +21 -0
  113. package/test/unit/spec/meeting/utils.js +171 -18
  114. package/test/unit/spec/meeting-info/meetinginfov2.js +8 -3
  115. package/test/unit/spec/meetings/index.js +12 -5
  116. package/test/unit/spec/member/util.js +24 -0
  117. package/test/unit/spec/members/collection.js +120 -0
  118. package/test/unit/spec/members/index.js +107 -2
  119. package/test/unit/spec/members/request.js +55 -0
  120. package/test/unit/spec/members/utils.js +116 -14
  121. package/test/unit/spec/multistream/mediaRequestManager.ts +19 -6
  122. package/test/unit/spec/multistream/remoteMedia.ts +66 -2
  123. package/test/unit/spec/reachability/index.ts +158 -3
  124. package/test/unit/spec/roap/turnDiscovery.ts +3 -3
  125. package/dist/hashTree/constants.js +0 -23
  126. package/dist/hashTree/constants.js.map +0 -1
  127. package/dist/hashTree/hashTree.js +0 -516
  128. package/dist/hashTree/hashTree.js.map +0 -1
  129. package/dist/hashTree/hashTreeParser.js +0 -521
  130. package/dist/hashTree/hashTreeParser.js.map +0 -1
  131. package/dist/types/hashTree/constants.d.ts +0 -8
  132. package/dist/types/hashTree/hashTree.d.ts +0 -128
  133. package/dist/types/hashTree/hashTreeParser.d.ts +0 -152
  134. package/src/hashTree/constants.ts +0 -12
  135. package/src/hashTree/hashTree.ts +0 -460
  136. package/src/hashTree/hashTreeParser.ts +0 -556
  137. package/test/unit/spec/hashTree/hashTree.ts +0 -394
  138. package/test/unit/spec/hashTree/hashTreeParser.ts +0 -156
@@ -417,6 +417,30 @@ describe('plugin-meetings', () => {
417
417
  });
418
418
  });
419
419
 
420
+ describe('MemberUtil.isSupportsSingleUserAutoEndMeeting', () => {
421
+ it('throws an error when there is no participant', () => {
422
+ assert.throws(() => {
423
+ MemberUtil.isSupportsSingleUserAutoEndMeeting();
424
+ }, 'Single user auto end meeting support could not be processed, participant is undefined.');
425
+ });
426
+
427
+ it('returns true when single user auto end meeting is supported', () => {
428
+ const participant = {
429
+ supportsSingleUserAutoEndMeeting: {},
430
+ };
431
+ assert.isTrue(MemberUtil.isSupportsSingleUserAutoEndMeeting(participant));
432
+ });
433
+
434
+ it('returns false when single user auto end meeting is not supported', () => {
435
+ const participant = {
436
+ doesNotSupportSingleUserAutoEndMeeting: {},
437
+ };
438
+
439
+ assert.isFalse(MemberUtil.isSupportsSingleUserAutoEndMeeting(participant));
440
+ });
441
+ });
442
+
443
+
420
444
  describe('MemberUtil.isLiveAnnotationSupported', () => {
421
445
  it('throws an error when there is no participant', () => {
422
446
  assert.throws(() => {
@@ -0,0 +1,120 @@
1
+ const { default: MembersCollection } = require("../../../../src/members/collection");
2
+ const { default: Member } = require("../../../../src/member");
3
+ const { assert } = require('@webex/test-helper-chai');
4
+
5
+
6
+ describe('plugin-meetings', () => {
7
+ describe('MembersCollection', () => {
8
+ let collection;
9
+ let member1;
10
+ let member2;
11
+ const participant1 = { controls: {}, status: {} };
12
+ const participant2 = { controls: {}, status: {} };
13
+
14
+ beforeEach(() => {
15
+ collection = new MembersCollection();
16
+ member1 = new Member(participant1);
17
+ member2 = new Member(participant2);
18
+ });
19
+
20
+ it('starts with no members', () => {
21
+ assert.equal(Object.keys(collection.getAll()).length, 0);
22
+ });
23
+
24
+ it('can add members', () => {
25
+ collection.set('member1', member1);
26
+ assert.equal(Object.keys(collection.getAll()).length, 1);
27
+ assert.equal(collection.get('member1'), member1);
28
+
29
+ collection.set('member2', member2);
30
+ assert.equal(Object.keys(collection.getAll()).length, 2);
31
+ assert.equal(collection.get('member2'), member2);
32
+ });
33
+
34
+ it('can remove members', () => {
35
+ // Add some members first
36
+ collection.set('member1', member1);
37
+ collection.set('member2', member2);
38
+ assert.equal(Object.keys(collection.getAll()).length, 2);
39
+
40
+ // Remove one member
41
+ collection.remove('member1');
42
+ assert.equal(Object.keys(collection.getAll()).length, 1);
43
+ assert.equal(collection.get('member1'), undefined);
44
+ assert.equal(collection.get('member2'), member2);
45
+
46
+ // Remove another member
47
+ collection.remove('member2');
48
+ assert.equal(Object.keys(collection.getAll()).length, 0);
49
+ assert.equal(collection.get('member2'), undefined);
50
+
51
+ // Removing non-existent member should not cause errors
52
+ collection.remove('nonExistent');
53
+ assert.equal(Object.keys(collection.getAll()).length, 0);
54
+ });
55
+
56
+ describe('reset', () => {
57
+ it('removes all members', () => {
58
+ // Add some members first
59
+ collection.set('member1', member1);
60
+ collection.set('member2', member2);
61
+ assert.equal(Object.keys(collection.getAll()).length, 2);
62
+
63
+ // Reset should clear all members
64
+ collection.reset();
65
+ assert.equal(Object.keys(collection.getAll()).length, 0);
66
+ assert.equal(collection.get('member1'), undefined);
67
+ assert.equal(collection.get('member2'), undefined);
68
+ });
69
+ });
70
+
71
+ describe('setAll', () => {
72
+ it('replaces all members with new collection', () => {
73
+ // Add initial member
74
+ collection.set('member1', member1);
75
+ assert.equal(Object.keys(collection.getAll()).length, 1);
76
+
77
+ // Set all with new collection
78
+ const newMembers = {
79
+ 'member2': member2,
80
+ 'member3': new Member(participant1)
81
+ };
82
+ collection.setAll(newMembers);
83
+
84
+ assert.equal(Object.keys(collection.getAll()).length, 2);
85
+ assert.equal(collection.get('member1'), undefined);
86
+ assert.equal(collection.get('member2'), member2);
87
+ assert.exists(collection.get('member3'));
88
+ });
89
+ });
90
+
91
+ describe('get', () => {
92
+ it('returns undefined for non-existent members', () => {
93
+ assert.equal(collection.get('nonExistent'), undefined);
94
+ });
95
+
96
+ it('returns correct member for existing id', () => {
97
+ collection.set('member1', member1);
98
+ assert.equal(collection.get('member1'), member1);
99
+ });
100
+ });
101
+
102
+ describe('getAll', () => {
103
+ it('returns empty object when no members', () => {
104
+ const allMembers = collection.getAll();
105
+ assert.isObject(allMembers);
106
+ assert.equal(Object.keys(allMembers).length, 0);
107
+ });
108
+
109
+ it('returns all members', () => {
110
+ collection.set('member1', member1);
111
+ collection.set('member2', member2);
112
+
113
+ const allMembers = collection.getAll();
114
+ assert.equal(Object.keys(allMembers).length, 2);
115
+ assert.equal(allMembers.member1, member1);
116
+ assert.equal(allMembers.member2, member2);
117
+ });
118
+ });
119
+ });
120
+ });
@@ -177,6 +177,26 @@ describe('plugin-meetings', () => {
177
177
  assert.isFalse(MembersUtil.isInvalidInvitee({email: 'sip:test@cisco.com'}), 'SIP email should be valid');
178
178
  });
179
179
 
180
+ it('should skip email validation if skipEmailValidation is true', async () => {
181
+ sandbox.spy(MembersUtil, 'isInvalidInvitee');
182
+
183
+ const members = createMembers({url: true});
184
+
185
+ await members.addMember({email: '8618578675309', skipEmailValidation: true});
186
+
187
+ assert.notCalled(MembersUtil.isInvalidInvitee);
188
+ });
189
+
190
+ it('should not skip email validation if skipEmailValidation is not equal true', async () => {
191
+ sandbox.spy(MembersUtil, 'isInvalidInvitee');
192
+
193
+ const members = createMembers({url: true});
194
+
195
+ await members.addMember({email: '86185786@ds.com'});
196
+
197
+ assert.called(MembersUtil.isInvalidInvitee);
198
+ });
199
+
180
200
  it('should accept valid phone with isInternalNumber', async () => {
181
201
  sandbox.spy(MembersUtil, 'isInvalidInvitee');
182
202
 
@@ -190,6 +210,22 @@ describe('plugin-meetings', () => {
190
210
  assert.isFalse(MembersUtil.isInvalidInvitee({phoneNumber: '18578675309', isInternalNumber: true}));
191
211
  assert.isTrue(MembersUtil.isInvalidInvitee({phoneNumber: '+8618578675309', isInternalNumber: true}));
192
212
  });
213
+
214
+ it('should not crash if params is undefined', async () => {
215
+ sandbox.spy(MembersUtil, 'isInvalidInvitee');
216
+
217
+ const members = createMembers({url: true});
218
+
219
+ try {
220
+ await members.addMember(undefined);
221
+ } catch (err) {
222
+ assert.instanceOf(err, ParameterError);
223
+
224
+ assert.equal(err.message, 'The invitee must be defined with either a valid email, emailAddress or phoneNumber property.');
225
+ }
226
+
227
+ assert.called(MembersUtil.isInvalidInvitee);
228
+ });
193
229
  });
194
230
 
195
231
  describe('#admitMembers', () => {
@@ -284,9 +320,18 @@ describe('plugin-meetings', () => {
284
320
  EVENT_TRIGGERS.MEMBERS_CLEAR,
285
321
  {}
286
322
  );
323
+ sinon.restore();
287
324
  });
288
325
  });
289
326
  describe('#locusParticipantsUpdate', () => {
327
+ beforeEach(() => {
328
+ sinon.stub(Trigger, 'trigger');
329
+ });
330
+
331
+ afterEach(() => {
332
+ sinon.restore();
333
+ });
334
+
290
335
  it('should send member update event with session info', () => {
291
336
  const members = createMembers({url: url1});
292
337
  const fakePayload = {
@@ -314,6 +359,38 @@ describe('plugin-meetings', () => {
314
359
  );
315
360
  });
316
361
 
362
+ it('should handle participants being removed', () => {
363
+ const members = createMembers({url: url1});
364
+
365
+ // setup the collection with a fake member
366
+ members.membersCollection.setAll(fakeMembersCollection);
367
+ assert.equal(Object.keys(members.membersCollection.getAll()).length, 1);
368
+
369
+ // remove the member
370
+ members.locusParticipantsUpdate({
371
+ participants: [],
372
+ removedParticipantIds: ['test1'],
373
+ });
374
+
375
+ assert.equal(Object.keys(members.membersCollection.getAll()).length, 0);
376
+
377
+ // check that the event was emitted
378
+ assert.calledWith(
379
+ Trigger.trigger,
380
+ members,
381
+ {
382
+ file: 'members',
383
+ function: 'locusParticipantsUpdate',
384
+ },
385
+ EVENT_TRIGGERS.MEMBERS_UPDATE,
386
+ {
387
+ delta: {added: [], updated: [], removedIds: ['test1']},
388
+ full: {},
389
+ isReplace: false,
390
+ }
391
+ );
392
+ });
393
+
317
394
  describe('handles members with paired devices correctly', () => {
318
395
  const runCheck = (propsForUpdate, expectedPropsOnPairedMember) => {
319
396
  const members = createMembers({url: url1});
@@ -937,7 +1014,8 @@ describe('plugin-meetings', () => {
937
1014
  expectedMemberId,
938
1015
  expectedRequestingParticipantId,
939
1016
  expectedAlias,
940
- expectedLocusUrl
1017
+ expectedLocusUrl,
1018
+ expectedSuffix
941
1019
  ) => {
942
1020
  await assert.isFulfilled(resultPromise);
943
1021
  assert.calledOnceWithExactly(
@@ -945,13 +1023,15 @@ describe('plugin-meetings', () => {
945
1023
  expectedMemberId,
946
1024
  expectedRequestingParticipantId,
947
1025
  expectedAlias,
948
- expectedLocusUrl
1026
+ expectedLocusUrl,
1027
+ expectedSuffix
949
1028
  );
950
1029
  assert.calledOnceWithExactly(spies.editDisplayNameMember, {
951
1030
  memberId: expectedMemberId,
952
1031
  requestingParticipantId: expectedRequestingParticipantId,
953
1032
  alias: expectedAlias,
954
1033
  locusUrl: expectedLocusUrl,
1034
+ suffix: expectedSuffix,
955
1035
  });
956
1036
  assert.strictEqual(resultPromise, spies.editDisplayNameMember.getCall(0).returnValue);
957
1037
  };
@@ -981,6 +1061,31 @@ describe('plugin-meetings', () => {
981
1061
  });
982
1062
 
983
1063
  it('should make the correct request when called with respective parameters', async () => {
1064
+ const requestingParticipantId = uuid.v4();
1065
+ const memberId = uuid.v4();
1066
+ const alias = 'aliasName';
1067
+ const suffix = 'suffixName';
1068
+ const {members, spies} = setup(url1);
1069
+
1070
+ const resultPromise = members.editDisplayName(
1071
+ memberId,
1072
+ requestingParticipantId,
1073
+ alias,
1074
+ suffix
1075
+ );
1076
+
1077
+ await checkValid(
1078
+ resultPromise,
1079
+ spies,
1080
+ memberId,
1081
+ requestingParticipantId,
1082
+ alias,
1083
+ url1,
1084
+ suffix
1085
+ );
1086
+ });
1087
+
1088
+ it('should make the correct request when called with respective parameters - no suffix', async () => {
984
1089
  const requestingParticipantId = uuid.v4();
985
1090
  const memberId = uuid.v4();
986
1091
  const alias = 'aliasName';
@@ -429,6 +429,61 @@ describe('plugin-meetings', () => {
429
429
  },
430
430
  });
431
431
  });
432
+
433
+ it('sends a POST request to the locus endpoint with suffix empty string', async () => {
434
+ const locusUrl = url1;
435
+ const memberId = 'test1';
436
+ const requestingParticipantId = 'test2';
437
+ const aliasValue = 'alias';
438
+
439
+ const options = {
440
+ memberId,
441
+ requestingParticipantId,
442
+ alias: aliasValue,
443
+ locusUrl,
444
+ suffix: '',
445
+ };
446
+
447
+ await membersRequest.editDisplayNameMember(options);
448
+
449
+ checkRequest({
450
+ method: 'POST',
451
+ uri: `${locusUrl}/participant/${memberId}/alias`,
452
+ body: {
453
+ aliasValue,
454
+ requestingParticipantId,
455
+ suffixValue: '',
456
+ },
457
+ });
458
+ });
459
+
460
+ it('sends a POST request to the locus endpoint with suffixValue', async () => {
461
+ const locusUrl = url1;
462
+ const memberId = 'test1';
463
+ const requestingParticipantId = 'test2';
464
+ const aliasValue = 'alias';
465
+ const suffixValue = 'suffix';
466
+
467
+ const options = {
468
+ memberId,
469
+ requestingParticipantId,
470
+ alias: aliasValue,
471
+ locusUrl,
472
+ suffix: suffixValue,
473
+ };
474
+
475
+ await membersRequest.editDisplayNameMember(options);
476
+
477
+ checkRequest({
478
+ method: 'POST',
479
+ uri: `${locusUrl}/participant/${memberId}/alias`,
480
+ body: {
481
+ aliasValue,
482
+ requestingParticipantId,
483
+ suffixValue,
484
+ },
485
+ });
486
+ });
432
487
  });
433
488
 
434
489
  describe('#moveToLobby', () => {
@@ -129,7 +129,32 @@ describe('plugin-meetings', () => {
129
129
  });
130
130
  });
131
131
  describe('#generateEditDisplayNameMemberOptions', () => {
132
- it('returns the correct options', () => {
132
+ it('returns the correct options with suffix when suffix is there', () => {
133
+ const locusUrl = 'urlTest1';
134
+ const memberId = 'test1';
135
+ const requestingParticipantId = 'test2';
136
+ const alias = 'alias';
137
+ const suffix = 'suffix';
138
+
139
+ assert.deepEqual(
140
+ MembersUtil.generateEditDisplayNameMemberOptions(
141
+ memberId,
142
+ requestingParticipantId,
143
+ alias,
144
+ locusUrl,
145
+ suffix
146
+ ),
147
+ {
148
+ memberId,
149
+ requestingParticipantId,
150
+ alias,
151
+ locusUrl,
152
+ suffix,
153
+ }
154
+ );
155
+ });
156
+
157
+ it('returns the correct options without suffix when suffix is not there', () => {
133
158
  const locusUrl = 'urlTest1';
134
159
  const memberId = 'test1';
135
160
  const requestingParticipantId = 'test2';
@@ -147,6 +172,7 @@ describe('plugin-meetings', () => {
147
172
  requestingParticipantId,
148
173
  alias,
149
174
  locusUrl,
175
+ suffix: undefined,
150
176
  }
151
177
  );
152
178
  });
@@ -306,7 +332,7 @@ describe('plugin-meetings', () => {
306
332
  const options = {
307
333
  invitee: {
308
334
  phoneNumber: '1234567890',
309
- isInternalNumber: false
335
+ isInternalNumber: false,
310
336
  },
311
337
  alertIfActive: false,
312
338
  };
@@ -315,7 +341,7 @@ describe('plugin-meetings', () => {
315
341
  invitees: [
316
342
  {
317
343
  address: '1234567890',
318
- isInternalNumber: false
344
+ isInternalNumber: false,
319
345
  },
320
346
  ],
321
347
  alertIfActive: false,
@@ -417,16 +443,10 @@ describe('plugin-meetings', () => {
417
443
  const memberId = 'test';
418
444
  const invitee = {memberId, isInternalNumber: false};
419
445
 
420
- assert.deepEqual(
421
- MembersUtil.cancelInviteByMemberIdOptions(
422
- invitee,
423
- locusUrl
424
- ),
425
- {
426
- invitee,
427
- locusUrl,
428
- }
429
- );
446
+ assert.deepEqual(MembersUtil.cancelInviteByMemberIdOptions(invitee, locusUrl), {
447
+ invitee,
448
+ locusUrl,
449
+ });
430
450
  });
431
451
  });
432
452
 
@@ -436,7 +456,7 @@ describe('plugin-meetings', () => {
436
456
  const memberId = 'test';
437
457
  const options = {
438
458
  locusUrl,
439
- invitee: {memberId, isInternalNumber: false}
459
+ invitee: {memberId, isInternalNumber: false},
440
460
  };
441
461
  const body = {
442
462
  actionType: 'REMOVE',
@@ -452,5 +472,87 @@ describe('plugin-meetings', () => {
452
472
  });
453
473
  });
454
474
  });
475
+
476
+ describe('#editDisplayNameMemberRequestParams', () => {
477
+ it('returns the correct params when suffix is available', () => {
478
+ const locusUrl = 'TestLocusUrl1';
479
+ const memberId = 'test1';
480
+ const alias = 'alias1';
481
+ const requestingParticipantId = '23131';
482
+ const suffix = 'suffix1';
483
+ const options = {
484
+ locusUrl: locusUrl,
485
+ memberId,
486
+ alias,
487
+ requestingParticipantId,
488
+ suffix,
489
+ };
490
+
491
+ const uri = `${locusUrl}/participant/${memberId}/alias`;
492
+
493
+ assert.deepEqual(MembersUtil.editDisplayNameMemberRequestParams(options), {
494
+ method: HTTP_VERBS.POST,
495
+ uri,
496
+ body: {
497
+ aliasValue: alias,
498
+ requestingParticipantId,
499
+ suffixValue: suffix,
500
+ },
501
+ });
502
+ });
503
+
504
+ it('returns the correct params when suffix is not available', () => {
505
+ const locusUrl = 'TestLocusUrl2';
506
+ const memberId = 'test2';
507
+ const alias = 'alias2';
508
+ const requestingParticipantId = '12345';
509
+
510
+ const options = {
511
+ locusUrl: locusUrl,
512
+ memberId,
513
+ alias,
514
+ requestingParticipantId,
515
+ };
516
+
517
+ const uri = `${locusUrl}/participant/${memberId}/alias`;
518
+
519
+ assert.deepEqual(MembersUtil.editDisplayNameMemberRequestParams(options), {
520
+ method: HTTP_VERBS.POST,
521
+ uri,
522
+ body: {
523
+ aliasValue: alias,
524
+ requestingParticipantId,
525
+ },
526
+ });
527
+ });
528
+
529
+ it('returns the correct params when suffix is empty string', () => {
530
+ const locusUrl = 'TestLocusUrl3';
531
+ const memberId = 'test3';
532
+ const alias = 'alias3';
533
+ const requestingParticipantId = '322424';
534
+ const suffix = '';
535
+
536
+ const options = {
537
+ locusUrl: locusUrl,
538
+ memberId,
539
+ alias,
540
+ suffix,
541
+ requestingParticipantId,
542
+ };
543
+
544
+ const uri = `${locusUrl}/participant/${memberId}/alias`;
545
+
546
+ assert.deepEqual(MembersUtil.editDisplayNameMemberRequestParams(options), {
547
+ method: HTTP_VERBS.POST,
548
+ uri,
549
+ body: {
550
+ aliasValue: alias,
551
+ requestingParticipantId,
552
+ suffixValue: suffix,
553
+ },
554
+ });
555
+ });
556
+ });
455
557
  });
456
558
  });
@@ -3,7 +3,7 @@ import {MediaRequestManager} from '@webex/plugin-meetings/src/multistream/mediaR
3
3
  import {ReceiveSlot} from '@webex/plugin-meetings/src/multistream/receiveSlot';
4
4
  import sinon from 'sinon';
5
5
  import {assert} from '@webex/test-helper-chai';
6
- import {getMaxFs} from '@webex/plugin-meetings/src/multistream/remoteMedia';
6
+ import {getMaxFs, MAX_FS_VALUES} from '@webex/plugin-meetings/src/multistream/remoteMedia';
7
7
  import FakeTimers from '@sinonjs/fake-timers';
8
8
  import * as InternalMediaCoreModule from '@webex/internal-media-core';
9
9
  import { expect } from 'chai';
@@ -36,12 +36,15 @@ describe('MediaRequestManager', () => {
36
36
  const CROSS_POLICY_DUPLICATION = true;
37
37
  const MAX_FPS = 3000;
38
38
  const MAX_FS_360p = 920;
39
+ const MAX_FS_540p = 2040;
39
40
  const MAX_FS_720p = 3600;
40
41
  const MAX_FS_1080p = 8192;
41
42
  const MAX_MBPS_360p = 27600;
43
+ const MAX_MBPS_540p = 61200;
42
44
  const MAX_MBPS_720p = 108000;
43
45
  const MAX_MBPS_1080p = 245760;
44
46
  const MAX_PAYLOADBITSPS_360p = 640000;
47
+ const MAX_PAYLOADBITSPS_540p = 880000;
45
48
  const MAX_PAYLOADBITSPS_720p = 2500000;
46
49
  const MAX_PAYLOADBITSPS_1080p = 4000000;
47
50
 
@@ -82,7 +85,14 @@ describe('MediaRequestManager', () => {
82
85
  });
83
86
 
84
87
  // helper function for adding an active speaker request
85
- const addActiveSpeakerRequest = (priority, receiveSlots, maxFs, commit = false, preferLiveVideo = true, namedMediaGroups = undefined) =>
88
+ const addActiveSpeakerRequest = (
89
+ priority,
90
+ receiveSlots,
91
+ maxFs,
92
+ commit = false,
93
+ preferLiveVideo = true,
94
+ namedMediaGroups = undefined
95
+ ) =>
86
96
  mediaRequestManager.addRequest(
87
97
  {
88
98
  policyInfo: {
@@ -216,6 +226,9 @@ describe('MediaRequestManager', () => {
216
226
  },
217
227
  false
218
228
  );
229
+
230
+
231
+
219
232
  mediaRequestManager.addRequest(
220
233
  {
221
234
  policyInfo: {
@@ -892,15 +905,15 @@ describe('MediaRequestManager', () => {
892
905
  // request 10 "large" 1080p streams
893
906
  addActiveSpeakerRequest(255, fakeReceiveSlots.slice(0, 10), getMaxFs('large'), true);
894
907
 
895
- // check that resulting requests are 10 "small" 360p streams
908
+ // check that resulting requests are 10 540p streams
896
909
  checkMediaRequestsSent([
897
910
  {
898
911
  policy: 'active-speaker',
899
912
  priority: 255,
900
913
  receiveSlots: fakeWcmeSlots.slice(0, 10),
901
- maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_360p,
902
- maxFs: getMaxFs('small'),
903
- maxMbps: MAX_MBPS_360p,
914
+ maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_540p,
915
+ maxFs: MAX_FS_VALUES['540p'],
916
+ maxMbps: MAX_MBPS_540p,
904
917
  },
905
918
  ]);
906
919
  });