From cf1af677b5e2660556d41934a3ce77a4a451466f Mon Sep 17 00:00:00 2001 From: Kamil Chudy Date: Thu, 10 Aug 2023 15:16:21 +0200 Subject: [PATCH 1/5] Added test for changing user password --- e2e/tests/auth.spec.ts | 13 +++++++++++++ e2e/utils/controllers/profile.ts | 18 ++++++++++++++++++ .../UserAuthInfo/UserAuthInfoPassword.tsx | 1 + .../components/ChangeSelfPasswordForm.tsx | 5 ++++- 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 e2e/utils/controllers/profile.ts diff --git a/e2e/tests/auth.spec.ts b/e2e/tests/auth.spec.ts index 39f98110fc..5ffbcdc130 100644 --- a/e2e/tests/auth.spec.ts +++ b/e2e/tests/auth.spec.ts @@ -5,7 +5,9 @@ import { defaultUserAdmin, routes } from '../config'; import { acceptRecovery } from '../utils/controllers/acceptRecovery'; import { createUser } from '../utils/controllers/createUser'; import { loginBasic, loginRecoveryCodes, loginTOTP } from '../utils/controllers/login'; +import { logout } from '../utils/controllers/logout'; import { enableTOTP } from '../utils/controllers/mfa/enableTOTP'; +import { changePassword } from '../utils/controllers/profile'; import { dockerRestart } from '../utils/docker'; import { waitForBase } from '../utils/waitForBase'; import { waitForRoute } from '../utils/waitForRoute'; @@ -74,3 +76,14 @@ test('Add user to admin group', async ({ page, context }) => { await waitForRoute(page, routes.admin.wizard); expect(page.url()).toBe(routes.base + routes.admin.wizard); }); + +test('Change user password', async ({ page, context }) => { + await waitForBase(page); + const testUser = await createUser(context, faker.person.lastName().toLowerCase()); + await loginBasic(page, testUser); + testUser.password = await changePassword(page, testUser.password); + await logout(page); + await loginBasic(page, testUser); + await waitForRoute(page, routes.me); + expect(page.url()).toBe(routes.base + routes.me); +}); diff --git a/e2e/utils/controllers/profile.ts b/e2e/utils/controllers/profile.ts new file mode 100644 index 0000000000..b5dab069f8 --- /dev/null +++ b/e2e/utils/controllers/profile.ts @@ -0,0 +1,18 @@ +import { Page } from 'playwright'; + +import { routes } from '../../config'; + +export const changePassword = async (page: Page, currentPassword: string) => { + await page.goto(routes.base + routes.me); + await page.getByTestId('edit-user').click(); + await page.getByTestId('button-change-password').click(); + const formElement = page.getByTestId('change-self-password-form'); + await formElement.waitFor({ state: 'visible' }); + await formElement.getByTestId('field-old_password').type(currentPassword); + const newPassword = 'Test1234#$%'; + await formElement.getByTestId('field-new_password').type(newPassword); + await formElement.getByTestId('field-repeat').type(newPassword); + await formElement.locator('button[type="submit"]').click(); + await formElement.waitFor({ state: 'hidden', timeout: 2000 }); + return newPassword; +}; diff --git a/web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfoPassword.tsx b/web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfoPassword.tsx index f839f7d554..fc73eb04cc 100644 --- a/web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfoPassword.tsx +++ b/web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfoPassword.tsx @@ -45,6 +45,7 @@ export const UserAuthInfoPassword = () => { } } }} + data-testid="button-change-password" /> diff --git a/web/src/pages/users/UserProfile/UserAuthInfo/modals/ChangeSelfPasswordModal/components/ChangeSelfPasswordForm.tsx b/web/src/pages/users/UserProfile/UserAuthInfo/modals/ChangeSelfPasswordModal/components/ChangeSelfPasswordForm.tsx index 1385f72c4d..f92f076296 100644 --- a/web/src/pages/users/UserProfile/UserAuthInfo/modals/ChangeSelfPasswordModal/components/ChangeSelfPasswordForm.tsx +++ b/web/src/pages/users/UserProfile/UserAuthInfo/modals/ChangeSelfPasswordModal/components/ChangeSelfPasswordForm.tsx @@ -77,7 +77,10 @@ export const ChangeSelfPasswordForm = () => { }; return ( -
+ Date: Thu, 10 Aug 2023 16:32:38 +0200 Subject: [PATCH 2/5] Added test for changing password by admin user --- e2e/tests/auth.spec.ts | 16 ++++++++++++++-- e2e/utils/controllers/profile.ts | 13 +++++++++++++ .../components/UsersList/UsersList.tsx | 6 +++++- .../ChangePasswordForm.tsx | 2 +- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/e2e/tests/auth.spec.ts b/e2e/tests/auth.spec.ts index 5ffbcdc130..2baf8f5b48 100644 --- a/e2e/tests/auth.spec.ts +++ b/e2e/tests/auth.spec.ts @@ -7,7 +7,7 @@ import { createUser } from '../utils/controllers/createUser'; import { loginBasic, loginRecoveryCodes, loginTOTP } from '../utils/controllers/login'; import { logout } from '../utils/controllers/logout'; import { enableTOTP } from '../utils/controllers/mfa/enableTOTP'; -import { changePassword } from '../utils/controllers/profile'; +import { changePassword, changePasswordByAdmin } from '../utils/controllers/profile'; import { dockerRestart } from '../utils/docker'; import { waitForBase } from '../utils/waitForBase'; import { waitForRoute } from '../utils/waitForRoute'; @@ -79,7 +79,7 @@ test('Add user to admin group', async ({ page, context }) => { test('Change user password', async ({ page, context }) => { await waitForBase(page); - const testUser = await createUser(context, faker.person.lastName().toLowerCase()); + const testUser = await createUser(context, faker.person.firstName().toLowerCase()); await loginBasic(page, testUser); testUser.password = await changePassword(page, testUser.password); await logout(page); @@ -87,3 +87,15 @@ test('Change user password', async ({ page, context }) => { await waitForRoute(page, routes.me); expect(page.url()).toBe(routes.base + routes.me); }); + +test('Change user password by admin', async ({ page, context }) => { + await loginBasic(page, defaultUserAdmin); + const user = await createUser(context, faker.person.firstName().toLowerCase()); + await page.goto(routes.base + routes.admin.users); + await page.getByText(user.username).click(); + user.password = await changePasswordByAdmin(page); + await logout(page); + await loginBasic(page, user); + await waitForRoute(page, routes.me); + expect(page.url()).toBe(routes.base + routes.me); +}); diff --git a/e2e/utils/controllers/profile.ts b/e2e/utils/controllers/profile.ts index b5dab069f8..e3e00e60aa 100644 --- a/e2e/utils/controllers/profile.ts +++ b/e2e/utils/controllers/profile.ts @@ -16,3 +16,16 @@ export const changePassword = async (page: Page, currentPassword: string) => { await formElement.waitFor({ state: 'hidden', timeout: 2000 }); return newPassword; }; + +export const changePasswordByAdmin = async (page: Page) => { + await page.getByTestId('edit-user').click(); + await page.getByTestId('button-change-password').click(); + const formElement = page.getByTestId('change-password-admin-form'); + await formElement.waitFor({ state: 'visible' }); + const newPassword = 'Test1234#$%'; + await formElement.getByTestId('field-new_password').type(newPassword); + await formElement.getByTestId('field-repeat').type(newPassword); + await formElement.locator('button[type="submit"]').click(); + await formElement.waitFor({ state: 'hidden', timeout: 2000 }); + return newPassword; +}; diff --git a/web/src/pages/users/UsersOverview/components/UsersList/UsersList.tsx b/web/src/pages/users/UsersOverview/components/UsersList/UsersList.tsx index 66b274d243..dbcb0acded 100644 --- a/web/src/pages/users/UsersOverview/components/UsersList/UsersList.tsx +++ b/web/src/pages/users/UsersOverview/components/UsersList/UsersList.tsx @@ -84,7 +84,11 @@ export const UsersList = ({ users }: Props) => { }, { key: 'username', - render: (user: User) => {user.username}, + render: (user: User) => ( + + {user.username} + + ), }, { key: 'phone', diff --git a/web/src/pages/users/shared/modals/ChangeUserPasswordModal/ChangePasswordForm.tsx b/web/src/pages/users/shared/modals/ChangeUserPasswordModal/ChangePasswordForm.tsx index 877bf97df7..691c8d347d 100644 --- a/web/src/pages/users/shared/modals/ChangeUserPasswordModal/ChangePasswordForm.tsx +++ b/web/src/pages/users/shared/modals/ChangeUserPasswordModal/ChangePasswordForm.tsx @@ -94,7 +94,7 @@ export const ChangePasswordForm = () => { }; return ( - + Date: Fri, 11 Aug 2023 11:09:14 +0200 Subject: [PATCH 3/5] Fixed test --- e2e/tests/auth.spec.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/e2e/tests/auth.spec.ts b/e2e/tests/auth.spec.ts index 2baf8f5b48..ae6fc9ce3b 100644 --- a/e2e/tests/auth.spec.ts +++ b/e2e/tests/auth.spec.ts @@ -89,13 +89,14 @@ test('Change user password', async ({ page, context }) => { }); test('Change user password by admin', async ({ page, context }) => { + await waitForBase(page); + const testUser = await createUser(context, faker.person.firstName().toLowerCase()); await loginBasic(page, defaultUserAdmin); - const user = await createUser(context, faker.person.firstName().toLowerCase()); await page.goto(routes.base + routes.admin.users); - await page.getByText(user.username).click(); - user.password = await changePasswordByAdmin(page); + await page.getByText(testUser.username).click(); + testUser.password = await changePasswordByAdmin(page); await logout(page); - await loginBasic(page, user); + await loginBasic(page, testUser); await waitForRoute(page, routes.me); expect(page.url()).toBe(routes.base + routes.me); }); From 46c99a075889a11a085706bb2f3c4ee365048968 Mon Sep 17 00:00:00 2001 From: Kamil Chudy Date: Fri, 11 Aug 2023 11:11:01 +0200 Subject: [PATCH 4/5] Removed unused id --- .../users/UsersOverview/components/UsersList/UsersList.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/web/src/pages/users/UsersOverview/components/UsersList/UsersList.tsx b/web/src/pages/users/UsersOverview/components/UsersList/UsersList.tsx index dbcb0acded..66b274d243 100644 --- a/web/src/pages/users/UsersOverview/components/UsersList/UsersList.tsx +++ b/web/src/pages/users/UsersOverview/components/UsersList/UsersList.tsx @@ -84,11 +84,7 @@ export const UsersList = ({ users }: Props) => { }, { key: 'username', - render: (user: User) => ( - - {user.username} - - ), + render: (user: User) => {user.username}, }, { key: 'phone', From acaf913375a382d95d5e974149e5e9ed8a3d9213 Mon Sep 17 00:00:00 2001 From: Kamil Chudy Date: Fri, 11 Aug 2023 12:37:14 +0200 Subject: [PATCH 5/5] Review fixes --- .../users/UserProfile/UserAuthInfo/UserAuthInfoPassword.tsx | 2 +- .../components/ChangeSelfPasswordForm.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfoPassword.tsx b/web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfoPassword.tsx index fc73eb04cc..687952322c 100644 --- a/web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfoPassword.tsx +++ b/web/src/pages/users/UserProfile/UserAuthInfo/UserAuthInfoPassword.tsx @@ -30,6 +30,7 @@ export const UserAuthInfoPassword = () => {
diff --git a/web/src/pages/users/UserProfile/UserAuthInfo/modals/ChangeSelfPasswordModal/components/ChangeSelfPasswordForm.tsx b/web/src/pages/users/UserProfile/UserAuthInfo/modals/ChangeSelfPasswordModal/components/ChangeSelfPasswordForm.tsx index f92f076296..2a426f2a06 100644 --- a/web/src/pages/users/UserProfile/UserAuthInfo/modals/ChangeSelfPasswordModal/components/ChangeSelfPasswordForm.tsx +++ b/web/src/pages/users/UserProfile/UserAuthInfo/modals/ChangeSelfPasswordModal/components/ChangeSelfPasswordForm.tsx @@ -78,8 +78,8 @@ export const ChangeSelfPasswordForm = () => { return (