-
+
+
+
+
@@ -97,44 +192,42 @@
diff --git a/client/tests/e2e/helpers/fixtures.ts b/client/tests/e2e/helpers/fixtures.ts
index f24cff18bb3..231e77cabe8 100644
--- a/client/tests/e2e/helpers/fixtures.ts
+++ b/client/tests/e2e/helpers/fixtures.ts
@@ -51,7 +51,6 @@ export const msTest = base.extend<{
await home.locator('#password-input').locator('input').fill('P@ssw0rd.');
await expect(home.locator('.login-button')).toBeEnabled();
await home.locator('.login-button').click();
- await expect(home.locator('.loading-container')).toBeVisible();
await expect(home).toHaveURL(/\/loading\??.*$/);
await expect(home.locator('#connected-header')).toContainText('My workspaces');
await expect(home).toBeWorkspacePage();
@@ -145,7 +144,9 @@ export const msTest = base.extend<{
await myProfileButton.click();
await expect(connected).toHavePageTitle('My profile');
await expect(connected).toBeMyProfilePage();
- await connected.locator('.devices-header-button').click();
+ await expect(connected.locator('.menu-list__item').nth(1)).toHaveText('My devices');
+ await connected.locator('.menu-list__item').nth(1).click();
+ await connected.locator('#add-device-button').click();
const modal = connected.locator('.greet-organization-modal');
await expect(modal).toBeVisible();
await use(modal);
diff --git a/client/tests/e2e/specs/home_page.spec.ts b/client/tests/e2e/specs/home_page.spec.ts
index d4ca480ca7a..a8532d351ba 100644
--- a/client/tests/e2e/specs/home_page.spec.ts
+++ b/client/tests/e2e/specs/home_page.spec.ts
@@ -105,6 +105,7 @@ msTest('Check join link', async ({ home }) => {
});
msTest('Login', async ({ home }) => {
+ await expect(home.locator('.loading-container')).toBeVisible();
await home.locator('.organization-list').locator('.organization-card').nth(0).click();
await expect(home.locator('.login-header__title')).toHaveText('Log in');
const loginButton = home.locator('.login-card-footer').locator('.login-button');
diff --git a/client/tests/e2e/specs/my_profile_page.spec.ts b/client/tests/e2e/specs/my_profile_page.spec.ts
index b67724a6ada..07220649ae4 100644
--- a/client/tests/e2e/specs/my_profile_page.spec.ts
+++ b/client/tests/e2e/specs/my_profile_page.spec.ts
@@ -3,7 +3,9 @@
import { expect, fillIonInput, msTest } from '@tests/e2e/helpers';
msTest('Check devices list', async ({ myProfilePage }) => {
- await expect(myProfilePage.locator('#add-device-button')).toHaveText('Add');
+ await expect(myProfilePage.locator('.menu-list__item').nth(1)).toHaveText('My devices');
+ await myProfilePage.locator('.menu-list__item').nth(1).click();
+ await expect(myProfilePage.locator('#add-device-button')).toHaveText('Add a new device');
const devices = myProfilePage.locator('#devices-list').getByRole('listitem');
await expect(devices.locator('.device-name')).toHaveText([/^device\d$/, /^device\d$/]);
await expect(devices.locator('.join-date')).toHaveText(['Joined: Today', 'Joined: Today']);
@@ -12,29 +14,31 @@ msTest('Check devices list', async ({ myProfilePage }) => {
await expect(devices.nth(1).locator('.badge')).toBeHidden();
});
+msTest('Open authentication section', async ({ myProfilePage }) => {
+ await expect(myProfilePage.locator('.menu-list__item').nth(2)).toHaveText('Authentication');
+ await myProfilePage.locator('.menu-list__item').nth(2).click();
+ await expect(myProfilePage.locator('.profile-content-item').locator('.item-header__title')).toHaveText('Authentication');
+ await expect(myProfilePage.locator('#change-authentication-button')).toBeVisible();
+});
+
msTest('Check if restore-password section is displayed', async ({ myProfilePage }) => {
- const restorePassword = myProfilePage.locator('.restore-password');
+ await expect(myProfilePage.locator('.menu-list__item').nth(3)).toHaveText('Organization recovery');
+ await myProfilePage.locator('.menu-list__item').nth(3).click();
+ const restorePassword = myProfilePage.locator('.recovery');
await expect(restorePassword).toBeVisible();
- await expect(restorePassword.locator('.restore-password-header__title')).toHaveText('Create a recovery file');
- await expect(restorePassword.locator('.restore-password-subtitles')).toHaveText(
+ await expect(restorePassword.locator('.item-header__title')).toHaveText('Organization recovery files');
+ await expect(restorePassword.locator('.item-header__description')).toHaveText(
`A recovery file allows you to get back access to your data in case your forgot your password or lose your
devices.Without a recovery file, your account cannot be recovered and you will need to be re-invited to join the organization.`,
);
await expect(restorePassword.locator('.restore-password-button')).toHaveText('Create a recovery file');
});
-msTest('Open authentication section', async ({ myProfilePage }) => {
- await myProfilePage.locator('ion-radio').nth(1).click();
- await expect(myProfilePage.locator('.user-info').locator('.title')).toHaveText('Password');
- await expect(myProfilePage.locator('.user-info').locator('.input-container').locator('.user-info__input')).toHaveTheClass(
- 'input-disabled',
- );
- await expect(myProfilePage.locator('#change-authentication-button')).toBeVisible();
-});
-
msTest('Change password', async ({ home, myProfilePage }) => {
- await myProfilePage.locator('ion-radio').nth(1).click();
- await myProfilePage.locator('.user-info').locator('#change-authentication-button').click();
+ await expect(myProfilePage.locator('.menu-list__item').nth(2)).toHaveText('Authentication');
+ await myProfilePage.locator('.menu-list__item').nth(2).click();
+ await expect(myProfilePage.locator('.profile-content-item').locator('.item-header__title')).toHaveText('Authentication');
+ await myProfilePage.locator('#change-authentication-button').click();
const changePasswordModal = home.locator('.change-authentication-modal');
await expect(changePasswordModal).toBeVisible();
await expect(changePasswordModal.locator('.modal-header')).toHaveText('Enter your current password');
diff --git a/newsfragments/9470.bugfix.rst b/newsfragments/9470.bugfix.rst
new file mode 100644
index 00000000000..0d1a546e978
--- /dev/null
+++ b/newsfragments/9470.bugfix.rst
@@ -0,0 +1 @@
+Gathering all account settings and support content in Profile with tabs
+
+ {{ $msTranslate('MyProfilePage.tabs.account.title') }}
+
+
+
+
+
-
- {{ $msTranslate('MyProfilePage.tabs.devices') }}
+
+ {{ $msTranslate('MyProfilePage.tabs.account.devices') }}
+
+
+
+
+
+
+
+
+
+ {{ $msTranslate('MyProfilePage.tabs.account.settings') }}
+
+
+
-
-
- {{ $msTranslate('MyProfilePage.tabs.authentication') }}
+
+
+ {{ $msTranslate('MyProfilePage.tabs.account.authentication') }}
+
+
+
+
+
+ {{ $msTranslate('MyProfilePage.tabs.account.recovery') }}
+
+
+
+
+ {{ $msTranslate('MyProfilePage.tabs.support.title') }}
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+ {{ $msTranslate('MyProfilePage.tabs.support.documentation') }}
+
+
+
+
+
+
+ {{ $msTranslate('MyProfilePage.tabs.support.help') }}
+
+
+
+ {{ $msTranslate('MyProfilePage.tabs.support.about') }}
+
+
+
+
+
+
+ {{ clientInfo.humanHandle.label }}
+
+
+ {{ clientInfo.humanHandle.email }}
+
+
+
+
+
+
+
+
+ {{ $msTranslate('SettingsModal.pageTitle') }}
+ {{ $msTranslate('SettingsModal.description') }}
+
+
+
+
+ {{ $msTranslate('DevicesPage.title') }}
+ {{ $msTranslate('DevicesPage.description') }}
+
-
-
-
+
+
+
-
- {{ $msTranslate('MyProfilePage.password') }}
-
-
-
-
- {{ $msTranslate('MyProfilePage.changeAuthenticationButton') }}
-
-
-
-
-
-
-
-
-
- {{ $msTranslate('MyProfilePage.systemAuthentication') }}
-
-
-
-
- {{ $msTranslate('MyProfilePage.errors.failedToRetrieveInformation') }}
-
-
-
+
+ {{ $msTranslate('Authentication.title') }}
+ {{ $msTranslate('Authentication.description') }}
+
+
+
+
+
+
+ {{ $msTranslate('OrganizationRecovery.title') }}
+
+ {{ $msTranslate('OrganizationRecovery.done.subtitle') }}
+ {{ $msTranslate('OrganizationRecovery.done.subtitle2') }}
+
+
+
+
+ {{ $msTranslate('AboutPage.title') }}
+ {{ $msTranslate('AboutPage.description') }}
+
+