Some checks failed
Close stale issues and PRs / stale (push) Has been cancelled
286 lines
9.6 KiB
TypeScript
286 lines
9.6 KiB
TypeScript
import BasePageObject from './BasePageObject';
|
|
|
|
const ASK_TO_UNMUTE_NOTIFICATION_ID = 'notify.hostAskedUnmute';
|
|
const AV_MODERATION_MUTED_NOTIFICATION_ID = 'notify.moderationInEffectTitle';
|
|
const JOIN_MULTIPLE_TEST_ID = 'notify.connectedThreePlusMembers';
|
|
const JOIN_ONE_TEST_ID = 'notify.connectedOneMember';
|
|
const JOIN_TWO_TEST_ID = 'notify.connectedTwoMembers';
|
|
const LOBBY_ACCESS_DENIED_TEST_ID = 'lobby.joinRejectedMessage';
|
|
const LOBBY_ENABLED_TEST_ID = 'lobby.notificationLobbyEnabled';
|
|
const LOBBY_KNOCKING_PARTICIPANT_NOTIFICATION_XPATH
|
|
= '//div[@data-testid="notify.participantWantsToJoin"]/div/div/span';
|
|
const LOBBY_NOTIFICATIONS_TITLE_TEST_ID = 'lobby.notificationTitle';
|
|
const LOBBY_PARTICIPANT_ACCESS_DENIED_TEST_ID = 'lobby.notificationLobbyAccessDenied';
|
|
const LOBBY_PARTICIPANT_ACCESS_GRANTED_TEST_ID = 'lobby.notificationLobbyAccessGranted';
|
|
const LOBBY_PARTICIPANT_ADMIT_TEST_ID = 'participantsPane.actions.admit';
|
|
const LOBBY_PARTICIPANT_REJECT_TEST_ID = 'participantsPane.actions.reject';
|
|
const RAISE_HAND_NOTIFICATION_ID = 'notify.raisedHand';
|
|
const REENABLE_SELF_VIEW_CLOSE_NOTIFICATION = 'notify.selfViewTitle-dismiss';
|
|
const REENABLE_SELF_VIEW_NOTIFICATION_ID = 'notify.selfViewTitle';
|
|
const YOU_ARE_MUTED_TEST_ID = 'notify.mutedTitle';
|
|
|
|
export const MAX_USERS_TEST_ID = 'dialog.maxUsersLimitReached';
|
|
export const TOKEN_AUTH_FAILED_TEST_ID = 'dialog.tokenAuthFailed';
|
|
export const TOKEN_AUTH_FAILED_TITLE_TEST_ID = 'dialog.tokenAuthFailedTitle';
|
|
|
|
/**
|
|
* Gathers all notifications logic in the UI and obtaining those.
|
|
*/
|
|
export default class Notifications extends BasePageObject {
|
|
/**
|
|
* Waits for the raised hand notification to be displayed.
|
|
* The notification on moderators page when the participant tries to unmute.
|
|
*/
|
|
async waitForRaisedHandNotification() {
|
|
const displayNameEl
|
|
= this.participant.driver.$(`div[data-testid="${RAISE_HAND_NOTIFICATION_ID}"]`);
|
|
|
|
await displayNameEl.waitForExist({ timeout: 2000 });
|
|
await displayNameEl.waitForDisplayed();
|
|
}
|
|
|
|
/**
|
|
* The notification on participants page when the moderator asks to unmute.
|
|
*/
|
|
async waitForAskToUnmuteNotification() {
|
|
const displayNameEl
|
|
= this.participant.driver.$(`div[data-testid="${ASK_TO_UNMUTE_NOTIFICATION_ID}"]`);
|
|
|
|
await displayNameEl.waitForExist({ timeout: 2000 });
|
|
await displayNameEl.waitForDisplayed();
|
|
}
|
|
|
|
/**
|
|
* Closes the muted notification.
|
|
*/
|
|
async closeAVModerationMutedNotification(skipNonExisting = false) {
|
|
return this.closeNotification(AV_MODERATION_MUTED_NOTIFICATION_ID, skipNonExisting);
|
|
}
|
|
|
|
/**
|
|
* Closes the ask to unmute notification.
|
|
*/
|
|
async closeAskToUnmuteNotification(skipNonExisting = false) {
|
|
return this.closeNotification(ASK_TO_UNMUTE_NOTIFICATION_ID, skipNonExisting);
|
|
}
|
|
|
|
/**
|
|
* Dismisses any join notifications.
|
|
*/
|
|
dismissAnyJoinNotification() {
|
|
return Promise.allSettled(
|
|
[ `${JOIN_ONE_TEST_ID}-dismiss`, `${JOIN_TWO_TEST_ID}-dismiss`, `${JOIN_MULTIPLE_TEST_ID}-dismiss` ]
|
|
.map(id => this.participant.driver.$(`#${id}"]`).click()));
|
|
}
|
|
|
|
/**
|
|
* Waits for the self view notification to be displayed.
|
|
*/
|
|
async waitForReEnableSelfViewNotification() {
|
|
const el
|
|
= this.participant.driver.$(`div[data-testid="${REENABLE_SELF_VIEW_NOTIFICATION_ID}"]`);
|
|
|
|
await el.waitForExist({ timeout: 2000 });
|
|
await el.waitForDisplayed();
|
|
|
|
}
|
|
|
|
/**
|
|
* Closes the self view notification.
|
|
*/
|
|
closeReEnableSelfViewNotification() {
|
|
return this.participant.driver.$(`div[data-testid="${REENABLE_SELF_VIEW_CLOSE_NOTIFICATION}"]`).click();
|
|
}
|
|
|
|
/**
|
|
* The notification on participants page when Lobby is being enabled or disabled.
|
|
*/
|
|
getLobbyEnabledText() {
|
|
return this.waitForNotificationText(LOBBY_ENABLED_TEST_ID);
|
|
}
|
|
|
|
/**
|
|
* Closes a specific lobby notification.
|
|
* @param testId
|
|
* @param skipNonExisting
|
|
* @private
|
|
*/
|
|
private async closeNotification(testId: string, skipNonExisting = false) {
|
|
const notification = this.participant.driver.$(`[data-testid="${testId}"]`);
|
|
|
|
if (skipNonExisting && !await notification.isExisting()) {
|
|
return Promise.resolve();
|
|
}
|
|
|
|
await notification.waitForExist();
|
|
await notification.waitForStable();
|
|
|
|
const closeButton = notification.$('#close-notification');
|
|
|
|
await closeButton.moveTo();
|
|
await closeButton.click();
|
|
}
|
|
|
|
/**
|
|
* Closes a specific lobby notification.
|
|
* @param testId
|
|
* @private
|
|
*/
|
|
private async closeLobbyNotification(testId: string) {
|
|
const notification = this.participant.driver.$(`[data-testid="${testId}"]`);
|
|
|
|
await notification.waitForExist();
|
|
await notification.waitForStable();
|
|
|
|
const closeButton
|
|
= this.participant.driver.$(`[data-testid="${LOBBY_NOTIFICATIONS_TITLE_TEST_ID}"]`)
|
|
.$('#close-notification');
|
|
|
|
await closeButton.moveTo();
|
|
await closeButton.click();
|
|
}
|
|
|
|
/**
|
|
* Closes the notification.
|
|
*/
|
|
closeLobbyEnabled() {
|
|
return this.closeLobbyNotification(LOBBY_ENABLED_TEST_ID);
|
|
}
|
|
|
|
/**
|
|
* Returns the name of the knocking participant (the only one) that is displayed on the notification.
|
|
*/
|
|
async getKnockingParticipantName() {
|
|
const knockingParticipantNotification
|
|
= this.participant.driver.$('//div[@data-testid="notify.participantWantsToJoin"]/div/div/span');
|
|
|
|
await knockingParticipantNotification.waitForDisplayed({
|
|
timeout: 3000,
|
|
timeoutMsg: 'Knocking participant notification not displayed'
|
|
});
|
|
|
|
return await knockingParticipantNotification.getText();
|
|
}
|
|
|
|
/**
|
|
* Admits the last knocking participant (it is the only one).
|
|
*/
|
|
async allowLobbyParticipant() {
|
|
const admitButton
|
|
= this.participant.driver.$(`[data-testid="${LOBBY_PARTICIPANT_ADMIT_TEST_ID}"]`);
|
|
|
|
await admitButton.waitForExist();
|
|
await admitButton.waitForClickable();
|
|
await admitButton.click();
|
|
}
|
|
|
|
/**
|
|
* The notification that someone's access was approved.
|
|
*/
|
|
getLobbyParticipantAccessGranted() {
|
|
return this.waitForNotificationText(LOBBY_PARTICIPANT_ACCESS_GRANTED_TEST_ID);
|
|
}
|
|
|
|
/**
|
|
* Closes the notification.
|
|
*/
|
|
closeLobbyParticipantAccessGranted() {
|
|
return this.closeLobbyNotification(LOBBY_PARTICIPANT_ACCESS_GRANTED_TEST_ID);
|
|
}
|
|
|
|
/**
|
|
* Waits until a notifications with the given testId is found and returns its text.
|
|
* @return the notification text.
|
|
*/
|
|
private async waitForNotificationText(testId: string) {
|
|
const notificationElement = this.participant.driver.$(`[data-testid="${testId}"]`);
|
|
|
|
await notificationElement.waitForExist({ timeout: 2_000 });
|
|
|
|
return await notificationElement.getText();
|
|
}
|
|
|
|
/**
|
|
* Gets the text from the notification with the given testId, if the notification exists (otherwise returns
|
|
* undefined).
|
|
* @param testId
|
|
* @return the notification text.
|
|
*/
|
|
async getNotificationText(testId: string) {
|
|
const notificationElement = this.participant.driver.$(`[data-testid="${testId}"]`);
|
|
|
|
if (await notificationElement.isExisting()) {
|
|
return await notificationElement.getText();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Rejects the last knocking participant (it is the only one).
|
|
*/
|
|
async rejectLobbyParticipant() {
|
|
const admitButton
|
|
= this.participant.driver.$(`[data-testid="${LOBBY_PARTICIPANT_REJECT_TEST_ID}"]`);
|
|
|
|
await admitButton.waitForExist();
|
|
await admitButton.waitForClickable();
|
|
await admitButton.click();
|
|
}
|
|
|
|
/**
|
|
* The notification test that someone's access was denied.
|
|
*/
|
|
getLobbyParticipantAccessDenied() {
|
|
return this.waitForNotificationText(LOBBY_PARTICIPANT_ACCESS_DENIED_TEST_ID);
|
|
}
|
|
|
|
/**
|
|
* Closes the notification.
|
|
*/
|
|
closeLobbyParticipantAccessDenied() {
|
|
return this.closeLobbyNotification(LOBBY_PARTICIPANT_ACCESS_DENIED_TEST_ID);
|
|
}
|
|
|
|
/**
|
|
* Waits for the notification for access denied for entering the lobby is shown.
|
|
*/
|
|
async waitForLobbyAccessDeniedNotification() {
|
|
const displayNameEl
|
|
= this.participant.driver.$(`div[data-testid="${LOBBY_ACCESS_DENIED_TEST_ID}"]`);
|
|
|
|
await displayNameEl.waitForExist({ timeout: 2000 });
|
|
await displayNameEl.waitForDisplayed();
|
|
}
|
|
|
|
/**
|
|
* Will wait 3 seconds for the knocking participants to disappear and return true or will return false.
|
|
* @return <tt>true</tt> if the knocking participants list was not displayed.
|
|
*/
|
|
waitForHideOfKnockingParticipants() {
|
|
return this.participant.driver.$(LOBBY_KNOCKING_PARTICIPANT_NOTIFICATION_XPATH)
|
|
.waitForDisplayed({
|
|
timeout: 3000,
|
|
reverse: true
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Closes local notification, for the participant that was denied.
|
|
*/
|
|
async closeLocalLobbyAccessDenied() {
|
|
await this.participant.driver.$('[data-testid="lobby.joinRejectedMessage"').waitForExist();
|
|
|
|
const dismissButton
|
|
= this.participant.driver.$('[data-testid="lobby.joinRejectedTitle-dismiss"]');
|
|
|
|
await dismissButton.moveTo();
|
|
await dismissButton.click();
|
|
}
|
|
|
|
/**
|
|
* Closes the `you are muted` notification.
|
|
*/
|
|
async closeYouAreMutedNotification() {
|
|
return this.closeNotification(YOU_ARE_MUTED_TEST_ID, true);
|
|
}
|
|
}
|