@webex/plugin-meetings 3.0.0-beta.115 → 3.0.0-beta.117

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 (53) hide show
  1. package/dist/breakouts/breakout.js +23 -6
  2. package/dist/breakouts/breakout.js.map +1 -1
  3. package/dist/breakouts/index.js +178 -139
  4. package/dist/breakouts/index.js.map +1 -1
  5. package/dist/constants.js +1 -0
  6. package/dist/constants.js.map +1 -1
  7. package/dist/locus-info/mediaSharesUtils.js +15 -1
  8. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  9. package/dist/meeting/index.js +73 -103
  10. package/dist/meeting/index.js.map +1 -1
  11. package/dist/meeting/locusMediaRequest.js +3 -0
  12. package/dist/meeting/locusMediaRequest.js.map +1 -1
  13. package/dist/meeting/muteState.js +1 -1
  14. package/dist/meeting/muteState.js.map +1 -1
  15. package/dist/meeting/request.js +27 -20
  16. package/dist/meeting/request.js.map +1 -1
  17. package/dist/meeting/util.js +463 -426
  18. package/dist/meeting/util.js.map +1 -1
  19. package/dist/members/index.js +4 -1
  20. package/dist/members/index.js.map +1 -1
  21. package/dist/members/request.js +75 -45
  22. package/dist/members/request.js.map +1 -1
  23. package/dist/members/util.js +308 -317
  24. package/dist/members/util.js.map +1 -1
  25. package/dist/types/constants.d.ts +1 -0
  26. package/dist/types/meeting/index.d.ts +20 -21
  27. package/dist/types/meeting/locusMediaRequest.d.ts +2 -0
  28. package/dist/types/meeting/request.d.ts +16 -8
  29. package/dist/types/meeting/util.d.ts +75 -1
  30. package/dist/types/members/request.d.ts +56 -11
  31. package/dist/types/members/util.d.ts +209 -1
  32. package/package.json +19 -19
  33. package/src/breakouts/breakout.ts +26 -4
  34. package/src/breakouts/index.ts +32 -17
  35. package/src/constants.ts +1 -0
  36. package/src/locus-info/mediaSharesUtils.ts +16 -0
  37. package/src/meeting/index.ts +20 -42
  38. package/src/meeting/locusMediaRequest.ts +6 -0
  39. package/src/meeting/muteState.ts +1 -1
  40. package/src/meeting/request.ts +26 -17
  41. package/src/meeting/util.ts +446 -410
  42. package/src/members/index.ts +7 -1
  43. package/src/members/request.ts +61 -21
  44. package/src/members/util.ts +316 -326
  45. package/test/unit/spec/breakouts/breakout.ts +26 -7
  46. package/test/unit/spec/breakouts/index.ts +48 -3
  47. package/test/unit/spec/meeting/index.js +53 -33
  48. package/test/unit/spec/meeting/locusMediaRequest.ts +25 -3
  49. package/test/unit/spec/meeting/muteState.js +5 -2
  50. package/test/unit/spec/meeting/request.js +215 -42
  51. package/test/unit/spec/meeting/utils.js +151 -7
  52. package/test/unit/spec/members/index.js +22 -1
  53. package/test/unit/spec/members/request.js +167 -35
@@ -14,336 +14,326 @@ import {
14
14
 
15
15
  import {RoleAssignmentOptions, RoleAssignmentRequest, ServerRoleShape} from './types';
16
16
 
17
- const MembersUtil: any = {};
18
-
19
- /**
20
- * @param {Object} invitee with emailAddress, email or phoneNumber
21
- * @param {String} locusUrl
22
- * @param {Boolean} alertIfActive
23
- * @returns {Object} the format object
24
- */
25
- MembersUtil.generateAddMemberOptions = (
26
- invitee: object,
27
- locusUrl: string,
28
- alertIfActive: boolean
29
- ) => ({
30
- invitee,
31
- locusUrl,
32
- alertIfActive,
33
- });
34
-
35
- /**
36
- * @param {Array} memberIds
37
- * @param {String} locusUrl
38
- * @returns {Object} the format object
39
- */
40
- MembersUtil.generateAdmitMemberOptions = (memberIds: Array<any>, locusUrl: string) => ({
41
- locusUrl,
42
- memberIds,
43
- });
44
-
45
- /**
46
- * @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}
47
- * @returns {Object} with {invitees: [{address}], alertIfActive}
48
- */
49
- MembersUtil.getAddMemberBody = (options: any) => ({
50
- invitees: [
51
- {
52
- address: options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,
53
- },
54
- ],
55
- alertIfActive: options.alertIfActive,
56
- });
57
-
58
- /**
59
- * @param {Object} options with {memberIds, authorizingLocusUrl}
60
- * @returns {Object} admit with {memberIds}
61
- */
62
- MembersUtil.getAdmitMemberRequestBody = (options: any) => {
63
- const {memberIds, sessionLocusUrls} = options;
64
- const body: any = {admit: {participantIds: memberIds}};
65
- if (sessionLocusUrls) {
66
- const {authorizingLocusUrl} = sessionLocusUrls;
67
-
68
- return {authorizingLocusUrl, ...body};
69
- }
70
-
71
- return body;
72
- };
73
-
74
- /**
75
- * @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}
76
- * @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request
77
- * if a host/cohost is in a breakout session, the locus url should be the main session locus url
78
- */
79
- MembersUtil.getAdmitMemberRequestParams = (format: any) => {
80
- const body = MembersUtil.getAdmitMemberRequestBody(format);
81
- const {locusUrl, sessionLocusUrls} = format;
82
- const baseUrl = sessionLocusUrls?.mainLocusUrl || locusUrl;
83
- const uri = `${baseUrl}/${CONTROLS}`;
84
-
85
- return {
86
- method: HTTP_VERBS.PUT,
87
- uri,
88
- body,
89
- };
90
- };
91
-
92
- /**
93
- * @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}
94
- * @returns {Object} the request parameters (method, uri, body) needed to make a addMember request
95
- */
96
- MembersUtil.getAddMemberRequestParams = (format: any) => {
97
- const body = MembersUtil.getAddMemberBody(format);
98
- const requestParams = {
99
- method: HTTP_VERBS.PUT,
100
- uri: format.locusUrl,
101
- body,
102
- };
103
-
104
- return requestParams;
105
- };
106
-
107
- MembersUtil.isInvalidInvitee = (invitee) => {
108
- if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {
109
- return true;
110
- }
111
-
112
- if (invitee.phoneNumber) {
113
- return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);
114
- }
115
-
116
- return !VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress);
117
- };
118
-
119
- MembersUtil.getRemoveMemberRequestParams = (options) => {
120
- const body = {
121
- reason: options.reason,
122
- };
123
- const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${LEAVE}`;
124
-
125
- return {
126
- method: HTTP_VERBS.PUT,
127
- uri,
128
- body,
129
- };
130
- };
131
-
132
- MembersUtil.generateTransferHostMemberOptions = (transfer, moderator, locusUrl) => ({
133
- moderator,
134
- locusUrl,
135
- memberId: transfer,
136
- });
137
-
138
- MembersUtil.generateRemoveMemberOptions = (removal, locusUrl) => ({
139
- reason: _FORCED_,
140
- memberId: removal,
141
- locusUrl,
142
- });
143
-
144
- MembersUtil.generateMuteMemberOptions = (memberId, status, locusUrl, isAudio) => ({
145
- memberId,
146
- muted: status,
147
- locusUrl,
148
- isAudio,
149
- });
150
-
151
- MembersUtil.generateRaiseHandMemberOptions = (memberId, status, locusUrl) => ({
152
- memberId,
153
- raised: status,
154
- locusUrl,
155
- });
156
-
157
- /**
158
- * @param {String} memberId
159
- * @param {[ServerRoleShape]} roles
160
- * @param {String} locusUrl
161
- * @returns {RoleAssignmentOptions}
162
- */
163
- MembersUtil.generateRoleAssignmentMemberOptions = (
164
- memberId: string,
165
- roles: Array<ServerRoleShape>,
166
- locusUrl: string
167
- ): RoleAssignmentOptions => ({
168
- memberId,
169
- roles,
170
- locusUrl,
171
- });
172
-
173
- MembersUtil.generateLowerAllHandsMemberOptions = (requestingParticipantId, locusUrl) => ({
174
- requestingParticipantId,
175
- locusUrl,
176
- });
177
-
178
- /**
179
- * @param {String} memberId id of the participant who is receiving request
180
- * @param {String} requestingParticipantId id of the participant who is sending request (optional)
181
- * @param {String} alias alias name
182
- * @param {String} locusUrl url
183
- * @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}
184
- */
185
- MembersUtil.generateEditDisplayNameMemberOptions = (
186
- memberId,
187
- requestingParticipantId,
188
- alias,
189
- locusUrl
190
- ) => ({
191
- memberId,
192
- requestingParticipantId,
193
- alias,
194
- locusUrl,
195
- });
196
-
197
- MembersUtil.getMuteMemberRequestParams = (options) => {
198
- const property = options.isAudio === false ? 'video' : 'audio';
199
- const body = {
200
- [property]: {
201
- muted: options.muted,
202
- },
203
- };
204
- const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
205
-
206
- return {
207
- method: HTTP_VERBS.PATCH,
208
- uri,
209
- body,
210
- };
211
- };
212
-
213
- /**
214
- * @param {RoleAssignmentOptions} options
215
- * @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request
216
- */
217
- MembersUtil.getRoleAssignmentMemberRequestParams = (
218
- options: RoleAssignmentOptions
219
- ): RoleAssignmentRequest => {
220
- const body = {role: {roles: []}};
221
- options.roles.forEach((role) => {
222
- body.role.roles.push({type: role.type, hasRole: role.hasRole});
223
- });
224
-
225
- const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
226
-
227
- return {
228
- method: HTTP_VERBS.PATCH,
229
- uri,
230
- body,
231
- };
232
- };
233
-
234
- MembersUtil.getRaiseHandMemberRequestParams = (options) => {
235
- const body = {
236
- hand: {
237
- raised: options.raised,
238
- },
239
- };
240
- const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
241
-
242
- return {
243
- method: HTTP_VERBS.PATCH,
244
- uri,
245
- body,
246
- };
247
- };
248
-
249
- MembersUtil.getLowerAllHandsMemberRequestParams = (options) => {
250
- const body = {
251
- hand: {
252
- raised: false,
253
- },
254
- requestingParticipantId: options.requestingParticipantId,
255
- };
256
- const uri = `${options.locusUrl}/${CONTROLS}`;
257
-
258
- return {
259
- method: HTTP_VERBS.PATCH,
260
- uri,
261
- body,
262
- };
263
- };
264
-
265
- /**
266
- * @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}
267
- * @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request
268
- */
269
- MembersUtil.editDisplayNameMemberRequestParams = (options) => {
270
- const body = {
271
- aliasValue: options.alias,
272
- requestingParticipantId: options.requestingParticipantId,
273
- };
274
- const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${ALIAS}`;
275
-
276
- return {
277
- method: HTTP_VERBS.POST,
278
- uri,
279
- body,
280
- };
281
- };
282
-
283
- MembersUtil.getTransferHostToMemberRequestParams = (options) => {
284
- const body = {
285
- role: {
286
- moderator: options.moderator,
287
- },
288
- };
289
- const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
290
-
291
- return {
292
- method: HTTP_VERBS.PATCH,
293
- uri,
294
- body,
295
- };
296
- };
297
-
298
- MembersUtil.genderateSendDTMFOptions = (url, tones, memberId, locusUrl) => ({
299
- url,
300
- tones,
301
- memberId,
302
- locusUrl,
303
- });
304
-
305
- MembersUtil.generateSendDTMFRequestParams = ({url, tones, memberId, locusUrl}) => {
306
- const body = {
307
- device: {
308
- url,
309
- },
310
- memberId,
311
- dtmf: {
312
- correlationId: uuid.v4(),
313
- tones,
314
- direction: 'transmit',
315
- },
316
- };
317
- const uri = `${locusUrl}/${PARTICIPANT}/${memberId}/${SEND_DTMF_ENDPOINT}`;
318
-
319
- return {
320
- method: HTTP_VERBS.POST,
321
- uri,
322
- body,
323
- };
324
- };
325
-
326
- MembersUtil.cancelPhoneInviteOptions = (invitee, locusUrl) => ({
327
- invitee,
328
- locusUrl,
329
- });
330
-
331
- MembersUtil.generateCancelInviteRequestParams = (options) => {
332
- const body = {
333
- actionType: _REMOVE_,
17
+ const MembersUtil = {
18
+ /**
19
+ * @param {Object} invitee with emailAddress, email or phoneNumber
20
+ * @param {String} locusUrl
21
+ * @param {Boolean} alertIfActive
22
+ * @returns {Object} the format object
23
+ */
24
+ generateAddMemberOptions: (invitee: object, locusUrl: string, alertIfActive: boolean) => ({
25
+ invitee,
26
+ locusUrl,
27
+ alertIfActive,
28
+ }),
29
+
30
+ /**
31
+ * @param {Array} memberIds
32
+ * @param {String} locusUrl
33
+ * @returns {Object} the format object
34
+ */
35
+ generateAdmitMemberOptions: (memberIds: Array<any>, locusUrl: string) => ({
36
+ locusUrl,
37
+ memberIds,
38
+ }),
39
+
40
+ /**
41
+ * @param {Object} options with {invitee: {emailAddress, email, phoneNumber}, alertIfActive}
42
+ * @returns {Object} with {invitees: [{address}], alertIfActive}
43
+ */
44
+ getAddMemberBody: (options: any) => ({
334
45
  invitees: [
335
46
  {
336
- address: options.invitee.phoneNumber,
47
+ address:
48
+ options.invitee.emailAddress || options.invitee.email || options.invitee.phoneNumber,
337
49
  },
338
50
  ],
339
- };
340
- const requestParams = {
341
- method: HTTP_VERBS.PUT,
342
- uri: options.locusUrl,
343
- body,
344
- };
345
-
346
- return requestParams;
51
+ alertIfActive: options.alertIfActive,
52
+ }),
53
+
54
+ /**
55
+ * @param {Object} options with {memberIds, authorizingLocusUrl}
56
+ * @returns {Object} admit with {memberIds}
57
+ */
58
+ getAdmitMemberRequestBody: (options: any) => {
59
+ const {memberIds, sessionLocusUrls} = options;
60
+ const body: any = {admit: {participantIds: memberIds}};
61
+ if (sessionLocusUrls) {
62
+ const {authorizingLocusUrl} = sessionLocusUrls;
63
+
64
+ return {authorizingLocusUrl, ...body};
65
+ }
66
+
67
+ return body;
68
+ },
69
+
70
+ /**
71
+ * @param {Object} format with {memberIds, locusUrl, sessionLocusUrls}
72
+ * @returns {Object} the request parameters (method, uri, body) needed to make a admitMember request
73
+ * if a host/cohost is in a breakout session, the locus url should be the main session locus url
74
+ */
75
+ getAdmitMemberRequestParams: (format: any) => {
76
+ const body = MembersUtil.getAdmitMemberRequestBody(format);
77
+ const {locusUrl, sessionLocusUrls} = format;
78
+ const baseUrl = sessionLocusUrls?.mainLocusUrl || locusUrl;
79
+ const uri = `${baseUrl}/${CONTROLS}`;
80
+
81
+ return {
82
+ method: HTTP_VERBS.PUT,
83
+ uri,
84
+ body,
85
+ };
86
+ },
87
+
88
+ /**
89
+ * @param {Object} format with {invitee {emailAddress, email, phoneNumber}, locusUrl, alertIfActive}
90
+ * @returns {Object} the request parameters (method, uri, body) needed to make a addMember request
91
+ */
92
+ getAddMemberRequestParams: (format: any) => {
93
+ const body = MembersUtil.getAddMemberBody(format);
94
+ const requestParams = {
95
+ method: HTTP_VERBS.PUT,
96
+ uri: format.locusUrl,
97
+ body,
98
+ };
99
+
100
+ return requestParams;
101
+ },
102
+
103
+ isInvalidInvitee: (invitee) => {
104
+ if (!(invitee && (invitee.email || invitee.emailAddress || invitee.phoneNumber))) {
105
+ return true;
106
+ }
107
+
108
+ if (invitee.phoneNumber) {
109
+ return !DIALER_REGEX.E164_FORMAT.test(invitee.phoneNumber);
110
+ }
111
+
112
+ return !VALID_EMAIL_ADDRESS.test(invitee.email || invitee.emailAddress);
113
+ },
114
+
115
+ getRemoveMemberRequestParams: (options) => {
116
+ const body = {
117
+ reason: options.reason,
118
+ };
119
+ const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${LEAVE}`;
120
+
121
+ return {
122
+ method: HTTP_VERBS.PUT,
123
+ uri,
124
+ body,
125
+ };
126
+ },
127
+
128
+ generateTransferHostMemberOptions: (transfer, moderator, locusUrl) => ({
129
+ moderator,
130
+ locusUrl,
131
+ memberId: transfer,
132
+ }),
133
+
134
+ generateRemoveMemberOptions: (removal, locusUrl) => ({
135
+ reason: _FORCED_,
136
+ memberId: removal,
137
+ locusUrl,
138
+ }),
139
+
140
+ generateMuteMemberOptions: (memberId, status, locusUrl, isAudio) => ({
141
+ memberId,
142
+ muted: status,
143
+ locusUrl,
144
+ isAudio,
145
+ }),
146
+
147
+ generateRaiseHandMemberOptions: (memberId, status, locusUrl) => ({
148
+ memberId,
149
+ raised: status,
150
+ locusUrl,
151
+ }),
152
+
153
+ /**
154
+ * @param {String} memberId
155
+ * @param {[ServerRoleShape]} roles
156
+ * @param {String} locusUrl
157
+ * @returns {RoleAssignmentOptions}
158
+ */
159
+ generateRoleAssignmentMemberOptions: (
160
+ memberId: string,
161
+ roles: Array<ServerRoleShape>,
162
+ locusUrl: string
163
+ ): RoleAssignmentOptions => ({
164
+ memberId,
165
+ roles,
166
+ locusUrl,
167
+ }),
168
+
169
+ generateLowerAllHandsMemberOptions: (requestingParticipantId, locusUrl) => ({
170
+ requestingParticipantId,
171
+ locusUrl,
172
+ }),
173
+
174
+ /**
175
+ * @param {String} memberId id of the participant who is receiving request
176
+ * @param {String} requestingParticipantId id of the participant who is sending request (optional)
177
+ * @param {String} alias alias name
178
+ * @param {String} locusUrl url
179
+ * @returns {Object} consists of {memberID: string, requestingParticipantId: string, alias: string, locusUrl: string}
180
+ */
181
+ generateEditDisplayNameMemberOptions: (memberId, requestingParticipantId, alias, locusUrl) => ({
182
+ memberId,
183
+ requestingParticipantId,
184
+ alias,
185
+ locusUrl,
186
+ }),
187
+
188
+ getMuteMemberRequestParams: (options) => {
189
+ const property = options.isAudio === false ? 'video' : 'audio';
190
+ const body = {
191
+ [property]: {
192
+ muted: options.muted,
193
+ },
194
+ };
195
+ const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
196
+
197
+ return {
198
+ method: HTTP_VERBS.PATCH,
199
+ uri,
200
+ body,
201
+ };
202
+ },
203
+
204
+ /**
205
+ * @param {RoleAssignmentOptions} options
206
+ * @returns {RoleAssignmentRequest} the request parameters (method, uri, body) needed to make a addMember request
207
+ */
208
+ getRoleAssignmentMemberRequestParams: (options: RoleAssignmentOptions): RoleAssignmentRequest => {
209
+ const body = {role: {roles: []}};
210
+ options.roles.forEach((role) => {
211
+ body.role.roles.push({type: role.type, hasRole: role.hasRole});
212
+ });
213
+
214
+ const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
215
+
216
+ return {
217
+ method: HTTP_VERBS.PATCH,
218
+ uri,
219
+ body,
220
+ };
221
+ },
222
+
223
+ getRaiseHandMemberRequestParams: (options) => {
224
+ const body = {
225
+ hand: {
226
+ raised: options.raised,
227
+ },
228
+ };
229
+ const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
230
+
231
+ return {
232
+ method: HTTP_VERBS.PATCH,
233
+ uri,
234
+ body,
235
+ };
236
+ },
237
+
238
+ getLowerAllHandsMemberRequestParams: (options) => {
239
+ const body = {
240
+ hand: {
241
+ raised: false,
242
+ },
243
+ requestingParticipantId: options.requestingParticipantId,
244
+ };
245
+ const uri = `${options.locusUrl}/${CONTROLS}`;
246
+
247
+ return {
248
+ method: HTTP_VERBS.PATCH,
249
+ uri,
250
+ body,
251
+ };
252
+ },
253
+
254
+ /**
255
+ * @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}
256
+ * @returns {Object} request parameters (method, uri, body) needed to make a editDisplayName request
257
+ */
258
+ editDisplayNameMemberRequestParams: (options) => {
259
+ const body = {
260
+ aliasValue: options.alias,
261
+ requestingParticipantId: options.requestingParticipantId,
262
+ };
263
+ const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${ALIAS}`;
264
+
265
+ return {
266
+ method: HTTP_VERBS.POST,
267
+ uri,
268
+ body,
269
+ };
270
+ },
271
+
272
+ getTransferHostToMemberRequestParams: (options) => {
273
+ const body = {
274
+ role: {
275
+ moderator: options.moderator,
276
+ },
277
+ };
278
+ const uri = `${options.locusUrl}/${PARTICIPANT}/${options.memberId}/${CONTROLS}`;
279
+
280
+ return {
281
+ method: HTTP_VERBS.PATCH,
282
+ uri,
283
+ body,
284
+ };
285
+ },
286
+
287
+ genderateSendDTMFOptions: (url, tones, memberId, locusUrl) => ({
288
+ url,
289
+ tones,
290
+ memberId,
291
+ locusUrl,
292
+ }),
293
+
294
+ generateSendDTMFRequestParams: ({url, tones, memberId, locusUrl}) => {
295
+ const body = {
296
+ device: {
297
+ url,
298
+ },
299
+ memberId,
300
+ dtmf: {
301
+ correlationId: uuid.v4(),
302
+ tones,
303
+ direction: 'transmit',
304
+ },
305
+ };
306
+ const uri = `${locusUrl}/${PARTICIPANT}/${memberId}/${SEND_DTMF_ENDPOINT}`;
307
+
308
+ return {
309
+ method: HTTP_VERBS.POST,
310
+ uri,
311
+ body,
312
+ };
313
+ },
314
+
315
+ cancelPhoneInviteOptions: (invitee, locusUrl) => ({
316
+ invitee,
317
+ locusUrl,
318
+ }),
319
+
320
+ generateCancelInviteRequestParams: (options) => {
321
+ const body = {
322
+ actionType: _REMOVE_,
323
+ invitees: [
324
+ {
325
+ address: options.invitee.phoneNumber,
326
+ },
327
+ ],
328
+ };
329
+ const requestParams = {
330
+ method: HTTP_VERBS.PUT,
331
+ uri: options.locusUrl,
332
+ body,
333
+ };
334
+
335
+ return requestParams;
336
+ },
347
337
  };
348
338
 
349
339
  export default MembersUtil;
@@ -1,19 +1,19 @@
1
1
  import {assert, expect} from '@webex/test-helper-chai';
2
2
  import Breakout from '@webex/plugin-meetings/src/breakouts/breakout';
3
3
  import Breakouts from '@webex/plugin-meetings/src/breakouts';
4
- import Members from '@webex/plugin-meetings/src/members';
5
4
  import MockWebex from '@webex/test-helper-mock-webex';
6
- import Metrics from '@webex/plugin-meetings/src/metrics';
7
5
  import sinon from 'sinon';
8
- import {eventType} from '../../../../src/metrics/config';
9
6
  import uuid from 'uuid';
10
7
  import breakoutEvent from "../../../../src/breakouts/events";
11
- import SelfUtils from "../../../../src/locus-info/selfUtils";
8
+ import BreakoutRequest from '../../../../src/breakouts/request';
9
+ import Members from '../../../../src/members';
10
+
12
11
  describe('plugin-meetings', () => {
13
12
  describe('breakout', () => {
14
13
  let webex;
15
14
  let breakout;
16
15
  let breakouts;
16
+ let meeting;
17
17
 
18
18
  beforeEach(() => {
19
19
  // @ts-ignore
@@ -34,18 +34,38 @@ describe('plugin-meetings', () => {
34
34
  webex.request = sinon.stub().returns(Promise.resolve('REQUEST_RETURN_VALUE'));
35
35
  webex.meetings = {};
36
36
  webex.meetings.getMeetingByType = sinon.stub();
37
-
37
+ sinon.stub(uuid, 'v4').returns('breakoutMoveId');
38
38
  });
39
39
 
40
+ afterEach(() => {
41
+ // @ts-ignore
42
+ uuid.v4.restore();
43
+ })
44
+
40
45
  describe('initialize', () => {
41
46
  it('creates the object correctly', () => {
47
+ assert.instanceOf(breakout.breakoutRequest, BreakoutRequest);
48
+ });
49
+ });
50
+
51
+ describe('#initMembers', () => {
52
+ it('creates the Members instance for the breakout', () => {
53
+ assert.equal(breakout.members, undefined);
54
+
55
+ breakout.webex.meetings = {
56
+ getMeetingByType: sinon.stub().returns({
57
+ id: 'meeting-id',
58
+ }),
59
+ };
60
+
61
+ breakout.initMembers();
62
+
42
63
  assert.instanceOf(breakout.members, Members);
43
64
  });
44
65
  });
45
66
 
46
67
  describe('#join', () => {
47
68
  it('makes the request as expected', async () => {
48
- uuid.v4 = sinon.stub().returns('breakoutMoveId');
49
69
  const result = await breakout.join();
50
70
  assert.calledOnceWithExactly(webex.request, {
51
71
  method: 'POST',
@@ -71,7 +91,6 @@ describe('plugin-meetings', () => {
71
91
 
72
92
  let onBreakoutMoveRequestStub = sinon.stub(breakoutEvent, 'onBreakoutMoveRequest');
73
93
  let onBreakoutMoveResponseStub = sinon.stub(breakoutEvent, 'onBreakoutMoveResponse');
74
- uuid.v4 = sinon.stub().returns('breakoutMoveId');
75
94
  await breakout.join();
76
95
  assert.calledOnceWithExactly(breakoutEvent.onBreakoutMoveRequest,
77
96
  {currentSession: breakout, meeting: {id: 'meeting-id'}, breakoutMoveId: 'breakoutMoveId'}