jeffsi-meet/tests/specs/moderation/lockRoom.spec.ts

184 lines
6.1 KiB
TypeScript

import { Participant } from '../../helpers/Participant';
import { setTestProperties } from '../../helpers/TestProperties';
import { expectations } from '../../helpers/expectations';
import { ensureOneParticipant, ensureTwoParticipants, joinSecondParticipant } from '../../helpers/participants';
import type SecurityDialog from '../../pageobjects/SecurityDialog';
setTestProperties(__filename, {
description: '1. Set a room password (assert the image changes to locked). \
2. Join with a second participant. \
3. Assert password is required (and padlock is locked). \
4. Assert wrong password fails. \
5. Unlock the room (assert the padlock is unlocked) \
6. Assert room is unlocked and the padlock is unlocked.',
usesBrowsers: [ 'p1', 'p2' ]
});
describe('Lock room', () => {
let p1: Participant, p2: Participant;
let roomKey: string;
it('setup', async () => {
if (!expectations.moderation.setPasswordAvailable) {
ctx.skipSuiteTests = 'setPasswordAvailable is not expected to be available';
return;
}
await ensureOneParticipant();
p1 = ctx.p1;
roomKey = `${Math.trunc(Math.random() * 1_000_000)}`;
await setPassword(p1, roomKey);
});
it('enter participant in locked room', async () => {
// first enter wrong pin then correct one
await joinSecondParticipant({
skipWaitToJoin: true
});
p2 = ctx.p2;
const p2PasswordDialog = p2.getPasswordDialog();
// Submit a wrong password
await p2PasswordDialog.waitForDialog();
await p2PasswordDialog.submitPassword(`${roomKey}1234`);
// give some time to the password prompt to disappear and send the password
// TODO: wait until the dialog is not displayed? Assert the room is not joined?
await p2.driver.pause(500);
// Submit the correct password
await p2PasswordDialog.waitForDialog();
await p2PasswordDialog.submitPassword(roomKey);
await p2.waitToJoinMUC();
const p2SecurityDialog = p2.getSecurityDialog();
await p2.getToolbar().clickSecurityButton();
await p2SecurityDialog.waitForDisplay();
await waitForRoomLockState(p2SecurityDialog, true);
});
it('unlock room', async () => {
await p2.hangup();
await removePassword(p1);
});
it('join the unlocked room', async () => {
// Just enter the room and check that is not locked.
await ensureTwoParticipants();
p2 = ctx.p2;
const p2SecurityDialog = p2.getSecurityDialog();
await p2.getToolbar().clickSecurityButton();
await p2SecurityDialog.waitForDisplay();
await waitForRoomLockState(p2SecurityDialog, false);
await p2SecurityDialog.clickCloseButton();
});
it('set password while participants are in the room', async () => {
// Both participants are in unlocked room, lock it and see whether the
// change is reflected on the second participant icon.
roomKey = `${Math.trunc(Math.random() * 1_000_000)}`;
await setPassword(p1, roomKey);
const p2SecurityDialog = p2.getSecurityDialog();
await p2.getToolbar().clickSecurityButton();
await p2SecurityDialog.waitForDisplay();
await waitForRoomLockState(p2SecurityDialog, true);
await removePassword(p1);
await waitForRoomLockState(p2SecurityDialog, false);
});
it('unlock after participant enter wrong password', async () => {
// P1 locks the room. Participant tries to enter using wrong password.
// P1 unlocks the room and Participant submits the password prompt with no password entered and
// should enter of unlocked room.
await p2.hangup();
roomKey = `${Math.trunc(Math.random() * 1_000_000)}`;
await setPassword(p1, roomKey);
await joinSecondParticipant({
skipWaitToJoin: true
});
p2 = ctx.p2;
// wait for password prompt
const p2PasswordDialog = p2.getPasswordDialog();
await p2PasswordDialog.waitForDialog();
await p2PasswordDialog.submitPassword(`${roomKey}1234`);
// give sometime to the password prompt to disappear and send the password
await p2.driver.pause(500);
// wait for password prompt
await p2PasswordDialog.waitForDialog();
await removePassword(p1);
await p2PasswordDialog.clickOkButton();
await p2.waitToJoinMUC();
const p2SecurityDialog = p2.getSecurityDialog();
await p2.getToolbar().clickSecurityButton();
await p2SecurityDialog.waitForDisplay();
await waitForRoomLockState(p2SecurityDialog, false);
});
});
/**
* Set a room password via the UI.
*/
async function setPassword(p: Participant, password: string) {
const securityDialog = p.getSecurityDialog();
await p.getToolbar().clickSecurityButton();
await securityDialog.waitForDisplay();
await waitForRoomLockState(securityDialog, false);
await securityDialog.addPassword(password);
await securityDialog.clickCloseButton();
await p.getToolbar().clickSecurityButton();
await securityDialog.waitForDisplay();
await waitForRoomLockState(securityDialog, true);
await securityDialog.clickCloseButton();
}
/**
* Remove the room password via the UI.
*/
async function removePassword(p: Participant) {
const securityDialog = p.getSecurityDialog();
await p.getToolbar().clickSecurityButton();
await securityDialog.waitForDisplay();
await securityDialog.removePassword();
await waitForRoomLockState(securityDialog, false);
await securityDialog.clickCloseButton();
}
/**
* Waits for the room to be locked or unlocked.
* @param securityDialog
* @param locked
*/
function waitForRoomLockState(securityDialog: SecurityDialog, locked: boolean) {
return securityDialog.participant.driver.waitUntil(
async () => await securityDialog.isLocked() === locked,
{
timeout: 3_000, // 3 seconds
timeoutMsg: `Timeout waiting for the room to unlock for ${securityDialog.participant.name}.`
}
);
}