From 6c3ebf11b5c6e20fcda7f75fd5be522125f53fb8 Mon Sep 17 00:00:00 2001 From: Andrew Snaith Date: Mon, 30 May 2022 05:11:50 -0700 Subject: [PATCH] Add ui tests for change password (#2151) * add new test data * Add tests for change password (wip) * Additional test spec changes * fix check after pr feedback Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> --- .../cypress/fixtures/filesTestData.ts | 4 +- .../support/page-objects/settingsPage.ts | 5 ++ .../files-ui/cypress/tests/settings-spec.ts | 70 +++++++++++++++++-- .../Modules/Settings/SecurityTab/index.tsx | 7 +- 4 files changed, 80 insertions(+), 6 deletions(-) diff --git a/packages/files-ui/cypress/fixtures/filesTestData.ts b/packages/files-ui/cypress/fixtures/filesTestData.ts index ec53e20087..1dd141a5e2 100644 --- a/packages/files-ui/cypress/fixtures/filesTestData.ts +++ b/packages/files-ui/cypress/fixtures/filesTestData.ts @@ -7,4 +7,6 @@ export const sharedFolderEditedName = "Edited" export const validEthAddress = "0x2eab9cfa0b5e8e82a73da026254d50567f52d3ce" export const validUsernameA = "filesusera" export const validUsernameB = "filesuserb" -export const validShareKey = "0x02c62b63ef1bd5ead99deb91a74bc7db4bc60d64a6d65a68461f3cf03d8c75da40" \ No newline at end of file +export const validShareKey = "0x02c62b63ef1bd5ead99deb91a74bc7db4bc60d64a6d65a68461f3cf03d8c75da40" +export const complexPassword = "4utom4t3P455w0rd!" +export const simplePassword = "basic" diff --git a/packages/files-ui/cypress/support/page-objects/settingsPage.ts b/packages/files-ui/cypress/support/page-objects/settingsPage.ts index eeb62881d8..b4a3f18add 100644 --- a/packages/files-ui/cypress/support/page-objects/settingsPage.ts +++ b/packages/files-ui/cypress/support/page-objects/settingsPage.ts @@ -25,6 +25,11 @@ export const settingsPage = { // security tab securityTabButton: () => cy.get("[data-testid=tab-security]"), securityTabHeader: () => cy.get("[data-cy=label-security-header]"), + changePasswordLink: () => cy.get("[data-cy=link-change-password]"), + passwordInput: () => cy.get("[data-cy=input-sign-in-password]"), + confirmPasswordInput: () => cy.get("[data-cy=input-sign-in-password-verification]"), + changePasswordButton: () => cy.get("[data-cy=button-sign-in-password]"), + changePasswordErrorLabel: () => cy.get("[data-cy=form-change-password] span.default.error"), // subscription tab subscriptionTabButton: () => cy.get("[data-testid=tab-subscription]"), diff --git a/packages/files-ui/cypress/tests/settings-spec.ts b/packages/files-ui/cypress/tests/settings-spec.ts index 6491f166de..5d055a30bb 100644 --- a/packages/files-ui/cypress/tests/settings-spec.ts +++ b/packages/files-ui/cypress/tests/settings-spec.ts @@ -1,16 +1,15 @@ import { navigationMenu } from "../support/page-objects/navigationMenu" import { settingsPage } from "../support/page-objects/settingsPage" import { homePage } from "../support/page-objects/homePage" +import { complexPassword, simplePassword } from "../fixtures/filesTestData" // import { profileUpdateSuccessToast } from "../support/page-objects/toasts/profileUpdateSuccessToast" describe("Settings", () => { context("desktop", () => { - beforeEach(() => { - cy.web3Login() - navigationMenu.settingsNavButton().click() - }) it("can navigate to settings profile page", () => { + cy.web3Login() + navigationMenu.settingsNavButton().click() settingsPage.profileTabHeader().should("be.visible") cy.url().should("include", "/settings") settingsPage.profileTabButton().click() @@ -19,6 +18,8 @@ describe("Settings", () => { }) // it("save changes button should be disabled without first and last name", () => { + // cy.web3Login() + // navigationMenu.settingsNavButton().click() // settingsPage.signOutDropdown().should("be.visible") // settingsPage.firstNameInput().clear() // settingsPage.lastNameInput().clear() @@ -43,6 +44,8 @@ describe("Settings", () => { const newUserName = Date.now().toString() it("can add a username", () => { + cy.web3Login({ withNewSession: true }) + navigationMenu.settingsNavButton().click() settingsPage.signOutDropdown().should("be.visible") settingsPage.addUsernameButton().should("be.visible") settingsPage.addUsernameButton().click() @@ -55,12 +58,71 @@ describe("Settings", () => { }) it("can navigate to settings security page", () => { + cy.web3Login() + navigationMenu.settingsNavButton().click() settingsPage.securityTabButton().click() cy.url().should("include", "/settings") settingsPage.securityTabButton().click() cy.url().should("include", "/settings/security") settingsPage.securityTabHeader().should("be.visible") }) + + it("can change the account password", () => { + cy.web3Login({ withNewSession: true }) + navigationMenu.settingsNavButton().click() + settingsPage.securityTabButton().click() + settingsPage.securityTabButton().click() + settingsPage.changePasswordLink().click() + + // change password + settingsPage.passwordInput().type(complexPassword) + settingsPage.confirmPasswordInput().type(complexPassword) + settingsPage.changePasswordButton().click() + + // ensure change password elements are not displayed after change + settingsPage.passwordInput().should("not.exist") + settingsPage.confirmPasswordInput().should("not.exist") + settingsPage.changePasswordButton().should("not.exist") + }) + + it("can see error messages when password doesn't meet critieria", () => { + cy.web3Login() + navigationMenu.settingsNavButton().click() + settingsPage.securityTabButton().click() + settingsPage.securityTabButton().click() + settingsPage.changePasswordLink().click() + + // ensure errors are displayed if password fields are blank + settingsPage.passwordInput().type("{selectall}{del}{esc}") + settingsPage.confirmPasswordInput().type("{selectall}{del}{esc}") + settingsPage.changePasswordButton().click() + settingsPage.changePasswordErrorLabel() + .should("be.visible") + .should("have.length", 2) + + // ensure an error displayed if password is not complex enough + settingsPage.passwordInput().type(simplePassword) + settingsPage.changePasswordButton().click() + settingsPage.changePasswordErrorLabel() + .should("be.visible") + .should("have.length", 2) + + // should see an error if confirm password is missing + settingsPage.passwordInput().type(complexPassword) + settingsPage.confirmPasswordInput().type("{selectall}{del}{esc}") + settingsPage.changePasswordButton().click() + settingsPage.changePasswordErrorLabel() + .should("be.visible") + .should("have.length", 1) + + // should see an error if confirm password does not match password + settingsPage.passwordInput().type(complexPassword) + settingsPage.confirmPasswordInput().type(simplePassword) + settingsPage.changePasswordButton().click() + settingsPage.changePasswordErrorLabel() + .should("be.visible") + .should("have.length", 1) + }) }) context("mobile", () => { diff --git a/packages/files-ui/src/Components/Modules/Settings/SecurityTab/index.tsx b/packages/files-ui/src/Components/Modules/Settings/SecurityTab/index.tsx index 1296e14064..a193a0d144 100644 --- a/packages/files-ui/src/Components/Modules/Settings/SecurityTab/index.tsx +++ b/packages/files-ui/src/Components/Modules/Settings/SecurityTab/index.tsx @@ -242,7 +242,10 @@ const Security = ({ className }: SecurityProps) => { )} { isChangingPassword ? ( -
+
{
) @@ -274,6 +278,7 @@ const Security = ({ className }: SecurityProps) => { {setIsChangingPassword(true)}} + data-cy="link-change-password" > Change Password