2022-11-19 05:53:05 +08:00
|
|
|
const { expect } = require("@playwright/test");
|
|
|
|
|
|
|
|
const { Join } = require('../breakout/join');
|
|
|
|
const parameters = require('../core/parameters');
|
|
|
|
const { apiCall, createMeetingPromise } = require('../core/helpers');
|
|
|
|
|
|
|
|
function getMeetingInfo(meetingID) {
|
2023-02-14 21:59:46 +08:00
|
|
|
return apiCall('getMeetingInfo', { meetingID: meetingID });
|
2022-11-19 05:53:05 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
class APIBreakout extends Join {
|
|
|
|
constructor(browser, context) {
|
|
|
|
super(browser, context);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Attempt to use API to create a breakout room without a parent
|
|
|
|
async testBreakoutWithoutParent() {
|
|
|
|
const response = await createMeetingPromise(parameters, `isBreakout=true&sequence=1`)
|
2023-02-14 21:59:46 +08:00
|
|
|
.catch(error => error);
|
2022-11-19 05:53:05 +08:00
|
|
|
expect(response.response.status).toEqual(500);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Attempt to use API to create a break room without a sequence number
|
|
|
|
async testBreakoutWithoutSequenceNumber() {
|
|
|
|
const response = await createMeetingPromise(parameters, `isBreakout=true&parentMeetingID=${this.modPage.meetingId}`)
|
2023-02-14 21:59:46 +08:00
|
|
|
.catch(error => error);
|
2022-11-19 05:53:05 +08:00
|
|
|
expect(response.response.status).toEqual(500);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Attempt to use API to create a break room with a non-existent parent meeting
|
|
|
|
async testBreakoutWithNonexistentParent() {
|
|
|
|
const response = await createMeetingPromise(parameters, `isBreakout=true&parentMeetingID=0000000&sequence=1`)
|
2023-02-14 21:59:46 +08:00
|
|
|
.catch(error => error);
|
2022-11-19 05:53:05 +08:00
|
|
|
expect(response.response.status).toEqual(500);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check that breakout rooms created via the GUI appear properly in the API's meeting info
|
|
|
|
async testBreakoutMeetingInfoNoJoins() {
|
|
|
|
|
|
|
|
// We have two breakout rooms, but neither user has joined a breakout room.
|
|
|
|
// Make sure the API getMeetingInfo returns expected results
|
|
|
|
|
|
|
|
const response1 = await getMeetingInfo(this.modPage.meetingId);
|
|
|
|
expect(response1.response.returncode).toEqual(['SUCCESS']);
|
|
|
|
expect(response1.response.isBreakout).toEqual(['false']);
|
|
|
|
expect(response1.response.breakoutRooms[0].breakout.length).toEqual(2);
|
|
|
|
|
|
|
|
for (const breakoutRoom of response1.response.breakoutRooms[0].breakout) {
|
|
|
|
const response2 = await getMeetingInfo(breakoutRoom);
|
|
|
|
|
2023-02-14 21:59:46 +08:00
|
|
|
const expectedMeeting = {
|
|
|
|
meetingID: [breakoutRoom],
|
|
|
|
isBreakout: ['true'],
|
|
|
|
running: ['false'],
|
|
|
|
participantCount: ['0'],
|
|
|
|
hasUserJoined: ['false'],
|
|
|
|
attendees: ['\n'], /* no attendees; the newline is an artifact of xml2js */
|
|
|
|
freeJoin: ['false'],
|
|
|
|
sequence: [expect.stringMatching('[12]')],
|
|
|
|
parentMeetingID: response1.response.internalMeetingID,
|
|
|
|
};
|
2022-11-19 05:53:05 +08:00
|
|
|
|
|
|
|
expect(response2.response.returncode).toEqual(['SUCCESS']);
|
|
|
|
expect(response2.response).toMatchObject(expectedMeeting);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async testBreakoutMeetingInfoOneJoin() {
|
|
|
|
|
|
|
|
// We have two breakout rooms, and one user has joined a breakout room.
|
|
|
|
// Make sure the API getMeetingInfo returns expected results
|
|
|
|
|
|
|
|
// First, check that we can retrieve the parent meeting
|
|
|
|
|
|
|
|
const response1 = await getMeetingInfo(this.modPage.meetingId);
|
|
|
|
expect(response1.response.returncode).toEqual(['SUCCESS']);
|
|
|
|
expect(response1.response.isBreakout).toEqual(['false']);
|
|
|
|
|
|
|
|
// Then, check that the parent meeting lists two breakout rooms
|
|
|
|
|
|
|
|
const breakoutRooms = response1.response.breakoutRooms[0].breakout;
|
|
|
|
expect(breakoutRooms.length).toEqual(2);
|
|
|
|
|
|
|
|
// Retrieve meeting info for both breakout rooms
|
|
|
|
|
|
|
|
// Attendee, a VIEWER in the parent meeting, becomes a MODERATOR (and presenter) in the breakout room
|
|
|
|
|
2023-02-14 21:59:46 +08:00
|
|
|
const expectedUser = expect.objectContaining({
|
|
|
|
fullName: ['Attendee'],
|
|
|
|
role: ['MODERATOR'],
|
|
|
|
isPresenter: ['true'],
|
|
|
|
});
|
|
|
|
|
|
|
|
const expectedMeeting1 = {
|
|
|
|
isBreakout: ['true'],
|
|
|
|
running: ['true'],
|
|
|
|
participantCount: ['1'],
|
|
|
|
hasUserJoined: ['true'],
|
|
|
|
attendees: [{ attendee: [expectedUser] }],
|
|
|
|
freeJoin: ['false'],
|
|
|
|
sequence: ['1'],
|
|
|
|
parentMeetingID: response1.response.internalMeetingID,
|
|
|
|
};
|
|
|
|
|
|
|
|
const expectedMeeting2 = {
|
|
|
|
isBreakout: ['true'],
|
|
|
|
running: ['false'],
|
|
|
|
participantCount: ['0'],
|
|
|
|
hasUserJoined: ['false'],
|
|
|
|
attendees: ['\n'], /* no attendees; the newline is an artifact of xml2js */
|
|
|
|
freeJoin: ['false'],
|
|
|
|
sequence: ['2'],
|
|
|
|
parentMeetingID: response1.response.internalMeetingID,
|
|
|
|
};
|
|
|
|
|
|
|
|
const expectedResponse1 = { response: expect.objectContaining(expectedMeeting1) };
|
|
|
|
const expectedResponse2 = { response: expect.objectContaining(expectedMeeting2) };
|
2022-11-19 05:53:05 +08:00
|
|
|
|
|
|
|
// Note that this is an array of two responses from two API calls,
|
|
|
|
// not a single API call response containing two breakout rooms
|
|
|
|
|
|
|
|
const response2array = await Promise.all(breakoutRooms.map(getMeetingInfo));
|
|
|
|
expect(response2array).toEqual(expect.arrayContaining([expectedResponse1, expectedResponse2]));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
exports.APIBreakout = APIBreakout;
|