diff --git a/apps/meteor/tests/e2e/e2e-encryption.spec.ts b/apps/meteor/tests/e2e/e2e-encryption.spec.ts index b0d76a12cb53..f4191f39b797 100644 --- a/apps/meteor/tests/e2e/e2e-encryption.spec.ts +++ b/apps/meteor/tests/e2e/e2e-encryption.spec.ts @@ -69,8 +69,6 @@ test.describe('initial setup', () => { // Log out await sidenav.logout(); - await expect(loginPage.loginButton).toBeVisible(); - // Login again await loginPage.loginByUserState(Users.admin); @@ -100,12 +98,18 @@ test.describe('initial setup', () => { const enterE2EEPasswordModal = new EnterE2EEPasswordModal(page); const resetE2EEPasswordModal = new ResetE2EEPasswordModal(page); + // Logout await sidenav.logout(); + + // Login again await loginPage.loginByUserState(Users.admin); + + // Reset E2EE password await enterE2EEPasswordBanner.click(); await enterE2EEPasswordModal.forgotPassword(); await resetE2EEPasswordModal.confirmReset(); + // restore login await loginPage.loginByUserState(Users.admin); }); @@ -135,8 +139,6 @@ test.describe('initial setup', () => { await sidenav.logout(); // Login again - await expect(loginPage.loginButton).toBeVisible(); - await loginPage.loginByUserState(Users.admin); // Enter the saved password @@ -197,8 +199,10 @@ test.describe('basic features', () => { await expect(encryptedRoomPage.lastMessage.encryptedIcon).toBeVisible(); await expect(encryptedRoomPage.lastMessage.body).toHaveText(messageText); + // Log out await sidenav.logout(); + // Login again await loginPage.loginByUserState(Users.admin); // Navigate to the encrypted channel WITHOUT entering the password @@ -1005,8 +1009,6 @@ test.describe.serial('e2ee room setup', () => { // Logout to remove e2ee keys await poHomeChannel.sidenav.logout(); - await page.locator('role=button[name="Login"]').waitFor(); - await injectInitialData(); await restoreState(page, Users.admin, { except: ['private_key', 'public_key'] }); diff --git a/apps/meteor/tests/e2e/page-objects/fragments/e2ee.ts b/apps/meteor/tests/e2e/page-objects/fragments/e2ee.ts index 49386308a662..151915016bbc 100644 --- a/apps/meteor/tests/e2e/page-objects/fragments/e2ee.ts +++ b/apps/meteor/tests/e2e/page-objects/fragments/e2ee.ts @@ -3,6 +3,7 @@ import type { Locator, Page } from '@playwright/test'; import { Modal } from './modal'; import { ToastMessages } from './toast-messages'; import { expect } from '../../utils/test'; +import { LoginPage } from '../login'; abstract class E2EEBanner { constructor(protected root: Locator) {} @@ -96,8 +97,11 @@ export class EnterE2EEPasswordModal extends Modal { } export class ResetE2EEPasswordModal extends Modal { + private readonly login: LoginPage; + constructor(page: Page) { super(page.getByRole('dialog', { name: 'Reset E2EE password' })); + this.login = new LoginPage(page); } private get resetE2EEPasswordButton() { @@ -107,6 +111,7 @@ export class ResetE2EEPasswordModal extends Modal { async confirmReset() { await this.resetE2EEPasswordButton.click(); await this.waitForDismissal(); + await this.login.waitForIt(); } } diff --git a/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts b/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts index 2bd4cbac0ef5..86153c41ebb4 100644 --- a/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts +++ b/apps/meteor/tests/e2e/page-objects/fragments/home-sidenav.ts @@ -1,13 +1,17 @@ import type { Locator, Page } from '@playwright/test'; +import { LoginPage } from '../login'; import { ToastMessages } from './toast-messages'; import { expect } from '../../utils/test'; export class HomeSidenav { private readonly page: Page; + private readonly login: LoginPage; + constructor(page: Page) { this.page = page; + this.login = new LoginPage(page); } get advancedSettingsAccordion(): Locator { @@ -101,6 +105,10 @@ export class HomeSidenav { return this.page.locator('role=menuitemcheckbox[name="Preferences"]'); } + get accountLogoutOption(): Locator { + return this.userProfileMenu.getByRole('menuitemcheckbox', { name: 'Logout' }); + } + get searchList(): Locator { return this.page.getByRole('search').getByRole('listbox'); } @@ -165,7 +173,8 @@ export class HomeSidenav { async logout(): Promise { await this.btnUserProfileMenu.click(); - await this.page.locator('//*[contains(@class, "rcx-option__content") and contains(text(), "Logout")]').click(); + await this.accountLogoutOption.click(); + await this.login.waitForIt(); } async switchStatus(status: 'offline' | 'online'): Promise { diff --git a/apps/meteor/tests/e2e/page-objects/login.ts b/apps/meteor/tests/e2e/page-objects/login.ts index e440934e25fa..2b6449fd1f4e 100644 --- a/apps/meteor/tests/e2e/page-objects/login.ts +++ b/apps/meteor/tests/e2e/page-objects/login.ts @@ -13,7 +13,9 @@ export class LoginPage { return this.page.getByRole('button', { name: 'Login', exact: true }); } - /** @deprecated ideally the previous action should ensure the user is logged out and we should just assume to be at the login page */ + /** + * Ideally the previous action should ensure the user is logged out and we should just assume to be at the login page + * */ async waitForIt() { await this.loginButton.waitFor(); }