@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.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +24 -0
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/index.js +22 -5
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js +7 -0
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interceptors/locusRouteToken.js +116 -0
- package/dist/interceptors/locusRouteToken.js.map +1 -0
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +11 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +76 -322
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/parser.js +4 -1
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/media/properties.js +53 -5
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +14 -0
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +467 -277
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +177 -14
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/type.js +7 -0
- package/dist/meeting/type.js.map +1 -0
- package/dist/meeting/util.js +100 -3
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +29 -21
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meetings/index.js +20 -16
- package/dist/meetings/index.js.map +1 -1
- package/dist/member/index.js +9 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +10 -0
- package/dist/member/util.js.map +1 -1
- package/dist/members/index.js +10 -7
- package/dist/members/index.js.map +1 -1
- package/dist/members/util.js +7 -2
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +1 -1
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +34 -5
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +42 -2
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/reachability/index.js +3 -3
- package/dist/reachability/index.js.map +1 -1
- package/dist/types/constants.d.ts +23 -0
- package/dist/types/controls-options-manager/index.d.ts +9 -1
- package/dist/types/interceptors/index.d.ts +2 -1
- package/dist/types/interceptors/locusRouteToken.d.ts +38 -0
- package/dist/types/locus-info/index.d.ts +9 -54
- package/dist/types/media/properties.d.ts +21 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +14 -0
- package/dist/types/meeting/index.d.ts +64 -29
- package/dist/types/meeting/request.d.ts +42 -0
- package/dist/types/meeting/type.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +13 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +6 -3
- package/dist/types/meetings/index.d.ts +3 -1
- package/dist/types/member/index.d.ts +1 -0
- package/dist/types/member/util.d.ts +5 -0
- package/dist/types/members/index.d.ts +12 -11
- package/dist/types/members/util.d.ts +8 -4
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/types/multistream/remoteMedia.d.ts +20 -1
- package/dist/types/multistream/remoteMediaGroup.d.ts +11 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +25 -27
- package/src/constants.ts +26 -2
- package/src/controls-options-manager/index.ts +26 -5
- package/src/index.ts +2 -1
- package/src/interceptors/index.ts +2 -1
- package/src/interceptors/locusRouteToken.ts +80 -0
- package/src/locus-info/controlsUtils.ts +18 -0
- package/src/locus-info/index.ts +69 -357
- package/src/locus-info/parser.ts +5 -1
- package/src/media/properties.ts +43 -0
- package/src/meeting/in-meeting-actions.ts +29 -0
- package/src/meeting/index.ts +296 -87
- package/src/meeting/request.ts +141 -0
- package/src/meeting/type.ts +9 -0
- package/src/meeting/util.ts +107 -3
- package/src/meeting-info/meeting-info-v2.ts +24 -5
- package/src/meetings/index.ts +15 -22
- package/src/member/index.ts +10 -0
- package/src/member/util.ts +14 -0
- package/src/members/index.ts +20 -10
- package/src/members/util.ts +20 -3
- package/src/metrics/constants.ts +1 -0
- package/src/multistream/mediaRequestManager.ts +7 -7
- package/src/multistream/remoteMedia.ts +34 -4
- package/src/multistream/remoteMediaGroup.ts +37 -2
- package/src/reachability/index.ts +3 -3
- package/test/unit/spec/common/browser-detection.js +0 -24
- package/test/unit/spec/controls-options-manager/index.js +47 -0
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interceptors/locusRouteToken.ts +87 -0
- package/test/unit/spec/locus-info/index.js +80 -361
- package/test/unit/spec/locus-info/parser.js +3 -2
- package/test/unit/spec/media/properties.ts +137 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +14 -0
- package/test/unit/spec/meeting/index.js +637 -53
- package/test/unit/spec/meeting/muteState.js +32 -6
- package/test/unit/spec/meeting/request.js +21 -0
- package/test/unit/spec/meeting/utils.js +171 -18
- package/test/unit/spec/meeting-info/meetinginfov2.js +8 -3
- package/test/unit/spec/meetings/index.js +12 -5
- package/test/unit/spec/member/util.js +24 -0
- package/test/unit/spec/members/collection.js +120 -0
- package/test/unit/spec/members/index.js +107 -2
- package/test/unit/spec/members/request.js +55 -0
- package/test/unit/spec/members/utils.js +116 -14
- package/test/unit/spec/multistream/mediaRequestManager.ts +19 -6
- package/test/unit/spec/multistream/remoteMedia.ts +66 -2
- package/test/unit/spec/reachability/index.ts +158 -3
- package/test/unit/spec/roap/turnDiscovery.ts +3 -3
- package/dist/hashTree/constants.js +0 -23
- package/dist/hashTree/constants.js.map +0 -1
- package/dist/hashTree/hashTree.js +0 -516
- package/dist/hashTree/hashTree.js.map +0 -1
- package/dist/hashTree/hashTreeParser.js +0 -521
- package/dist/hashTree/hashTreeParser.js.map +0 -1
- package/dist/types/hashTree/constants.d.ts +0 -8
- package/dist/types/hashTree/hashTree.d.ts +0 -128
- package/dist/types/hashTree/hashTreeParser.d.ts +0 -152
- package/src/hashTree/constants.ts +0 -12
- package/src/hashTree/hashTree.ts +0 -460
- package/src/hashTree/hashTreeParser.ts +0 -556
- package/test/unit/spec/hashTree/hashTree.ts +0 -394
- 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
|
-
|
|
422
|
-
|
|
423
|
-
|
|
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 = (
|
|
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
|
|
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:
|
|
902
|
-
maxFs:
|
|
903
|
-
maxMbps:
|
|
914
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_540p,
|
|
915
|
+
maxFs: MAX_FS_VALUES['540p'],
|
|
916
|
+
maxMbps: MAX_MBPS_540p,
|
|
904
917
|
},
|
|
905
918
|
]);
|
|
906
919
|
});
|