Skip to content

Commit

Permalink
Cypress test for the manage users page in the single workspace. (Tool…
Browse files Browse the repository at this point in the history
…Jet#3256)

* Added cypress test for manage users page in the single workspace

* Updated user selectors and user text file

* Added data-cy attributes for the elements

* Updated the folder structure
  • Loading branch information
ajith-k-v authored Jun 14, 2022
1 parent c2dfe4e commit a6c0277
Show file tree
Hide file tree
Showing 5 changed files with 215 additions and 6 deletions.
9 changes: 8 additions & 1 deletion cypress/constants/selectors/manageUsers.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export const usersSelector ={
firstNameLabel: "[data-cy=first-name-label]",
lastNameLabel:"[data-cy=last-name-label]",
companyLabel: "[data-cy=company-label]",
roleLable: "[data-cy=role-label]",
roleLabel: "[data-cy=role-label]",
passwordLabel: "[data-cy=password-label]",
confirmpasswordLabel: "[data-cy=confirm-password-label]",
termsInfo: "[data-cy=terms-and-condition-info]",
Expand All @@ -47,4 +47,11 @@ export const usersSelector ={
createNewApp: "[data-cy=create-new-application]",
dropdownText: "[data-cy=dropdown-organization-list]>>:eq(0)",
arrowIcon: "[data-cy=workspace-arrow-icon]",
singleWorkspaceElements:{
cardTitle: "[data-cy=card-title]",
passwordLabel: "[data-cy=password-label]",
confirmpasswordLabel: "[data-cy=confirm-password-label]",
termsInfo: "[data-cy=terms-and-condition-info]",
}

}
10 changes: 9 additions & 1 deletion cypress/constants/texts/manageUsers.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,13 @@ export const usersText = {
archivedStatus: "archived",
invitedStatus: "invited",
archivedToast: "The user has been archived",
inviteToast: "Added to the workspace successfully."
inviteToast: "Added to the workspace successfully.",
singleWorkspaceElements:{
cardTitle: "Set up your account",
passwordLabel: "Password",
confirmpasswordLabel: "Confirm Password",
termsInfo: "By clicking the button below, you agree to our Terms and Conditions.",
},
swPasswordSuccessToast: "Added to the workspace and password has been set successfully."

}
185 changes: 185 additions & 0 deletions cypress/integration/dashboard/single-workspace/manageUsers.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
import {commonSelectors} from "Selectors/common";
import { fake } from "Fixtures/fake";
import { usersSelector } from "Selectors/manageUsers";
import { usersText } from "Texts/manageUsers";
import * as users from "Support/utils/manageUsers";
import * as common from "Support/utils/common";
import { path } from "Texts/common";
import { commonText } from "Texts/common";

const firstName = fake.firstName;
const lastName = fake.lastName.replaceAll("[^A-Za-z]", "");
const email = (`${firstName}@example.com`).toLowerCase();

describe("Manage Users for single workspace", ()=>{
before(()=>{
cy.appUILogin();
});
it("Should verify the Manage users page", ()=>{
common.navigateToManageUsers();
users.manageUsersElements();

cy.get(usersSelector.cancelButton).click();
cy.get(usersSelector.usersElements.nameTitile).should("be.visible");
cy.get(usersSelector.inviteUserButton).click();

cy.get(usersSelector.createUserButton).click();
cy.get(usersSelector.fisrtNameError).should("be.visible").and("have.text", usersText.fieldRequired);
cy.get(usersSelector.lastNameError).should("be.visible").and("have.text", usersText.fieldRequired);
cy.get(usersSelector.emailError).should("be.visible").and("have.text", usersText.fieldRequired);

cy.clearAndType(usersSelector.firstNameInput, firstName);
cy.get(usersSelector.lastNameInput).clear();
cy.get(usersSelector.emailInput).clear();
cy.get(usersSelector.createUserButton).click();
cy.get(usersSelector.lastNameError).should("be.visible").and("have.text", usersText.fieldRequired);
cy.get(usersSelector.emailError).should("be.visible").and("have.text", usersText.fieldRequired);

cy.get(usersSelector.firstNameInput).clear();
cy.get(usersSelector.emailInput).clear();
cy.clearAndType(usersSelector.lastNameInput, lastName);
cy.get(usersSelector.createUserButton).click();
cy.get(usersSelector.fisrtNameError).should("be.visible").and("have.text", usersText.fieldRequired);
cy.get(usersSelector.emailError).should("be.visible").and("have.text", usersText.fieldRequired);

cy.get(usersSelector.firstNameInput).clear();
cy.get(usersSelector.lastNameInput).clear();
cy.clearAndType(usersSelector.emailInput, email);
cy.get(usersSelector.createUserButton).click();
cy.get(usersSelector.fisrtNameError).should("be.visible").and("have.text", usersText.fieldRequired);
cy.get(usersSelector.lastNameError).should("be.visible").and("have.text", usersText.fieldRequired);

cy.get(usersSelector.firstNameInput).clear();
cy.clearAndType(usersSelector.lastNameInput, lastName);
cy.clearAndType(usersSelector.emailInput, email);
cy.get(usersSelector.createUserButton).click();
cy.get(usersSelector.fisrtNameError).should("be.visible").and("have.text", usersText.fieldRequired);

cy.get(usersSelector.lastNameInput).clear();
cy.clearAndType(usersSelector.firstNameInput, firstName);
cy.clearAndType(usersSelector.emailInput, email);
cy.get(usersSelector.createUserButton).click();
cy.get(usersSelector.lastNameError).should("be.visible").and("have.text", usersText.fieldRequired);

cy.get(usersSelector.emailInput).clear();
cy.clearAndType(usersSelector.firstNameInput, firstName);
cy.clearAndType(usersSelector.lastNameInput, lastName);
cy.get(usersSelector.createUserButton).click();
cy.get(usersSelector.emailError).should("be.visible").and("have.text", usersText.fieldRequired);

cy.clearAndType(usersSelector.firstNameInput, firstName);
cy.clearAndType(usersSelector.lastNameInput, lastName);
cy.clearAndType(usersSelector.emailInput, usersText.usersElements.userEmail);
cy.get(usersSelector.createUserButton).click();
cy.verifyToastMessage(commonSelectors.toastMessage, usersText.exsitingEmail);
});

it("Should verify the confirm invite page", ()=>{
users.inviteUser(firstName,lastName,email);

cy.get(usersSelector.confirmInvitePage).should("be.visible");
cy.get(usersSelector.pageLogo).should("be.visible");
for( const element in usersSelector.singleWorkspaceElements){
cy.get(usersSelector.singleWorkspaceElements[element]).should("be.visible").and("have.text", usersText.singleWorkspaceElements[element]);
}
cy.get(usersSelector.finishSetup).click();
cy.verifyToastMessage(commonSelectors.toastMessage, usersText.passwordErrToast);
cy.get(usersSelector.passwordInput).should("have.value", "");
cy.get(usersSelector.confirmPasswordInput).should("have.value", "");

cy.clearAndType(usersSelector.passwordInput, usersText.password);
cy.wait(1000);
cy.get(usersSelector.finishSetup).click();
cy.verifyToastMessage(commonSelectors.toastMessage, usersText.passwordErrToast);
cy.get(usersSelector.passwordInput).should("have.value", usersText.password);
cy.get(usersSelector.confirmPasswordInput).should("have.value", "");

cy.get(usersSelector.passwordInput).clear();
cy.clearAndType(usersSelector.confirmPasswordInput, usersText.password);
cy.get(usersSelector.finishSetup).click();
cy.verifyToastMessage(commonSelectors.toastMessage, usersText.passwordErrToast);
cy.get(usersSelector.passwordInput).should("have.value", "");
cy.get(usersSelector.confirmPasswordInput).should("have.value", usersText.password);

cy.clearAndType(usersSelector.passwordInput, usersText.password);
cy.clearAndType(usersSelector.confirmPasswordInput, usersText.mismatchPassword);
cy.get(usersSelector.finishSetup).click();
cy.verifyToastMessage(commonSelectors.toastMessage, usersText.passwordMismatchToast);
cy.get(usersSelector.passwordInput).should("have.value", usersText.password);
cy.get(usersSelector.confirmPasswordInput).should("have.value", usersText.mismatchPassword);

cy.clearAndType(usersSelector.passwordInput, usersText.password);
cy.clearAndType(usersSelector.confirmPasswordInput, usersText.password);
cy.get(usersSelector.finishSetup).click();
cy.verifyToastMessage(commonSelectors.toastMessage, usersText.swPasswordSuccessToast);
cy.url().should("include",path.loginPath);
});

it("should verify the new user account", ()=>{
cy.login(email,usersText.password);
cy.get(usersSelector.dropdownText).should('be.visible').and('have.text', "My workspace");
common.logout();

cy.appUILogin();
common.navigateToManageUsers();
cy.contains('td', email).parent().within(() => {
cy.get('td small').should("have.text", usersText.activeStatus);
});
});

it("Should verify the archive functionality",()=>{
cy.contains('td', email).parent().within(() => {
cy.get('td button').click();
});
cy.verifyToastMessage(commonSelectors.toastMessage,usersText.archivedToast);

cy.contains('td', email).parent().within(() => {
cy.get(usersSelector.userStatus, { timeout: 9000 }).should("have.text", usersText.archivedStatus);
});

common.logout();
cy.clearAndType(commonSelectors.emailField, email);
cy.clearAndType(commonSelectors.passwordField, usersText.password);
cy.get(commonSelectors.signInButton).click();
cy.verifyToastMessage(commonSelectors.toastMessage, commonText.loginErrorToast);

cy.appUILogin();
common.navigateToManageUsers();
cy.contains('td', email).parent().within(() => {
cy.get('td button').click();
});

cy.wait(2000);
cy.window().then(win => {
cy.stub(win, 'prompt').returns(win.prompt).as('copyToClipboardPrompt');
});
cy.contains('td', email).parent().within(() => {
cy.get('td img').click();
});
cy.verifyToastMessage(commonSelectors.toastMessage, usersText.inviteCopiedToast);

cy.contains('td', email).parent().within(() => {
cy.get(usersSelector.userStatus, { timeout: 9000 }).should("have.text", usersText.invitedStatus);
});

cy.get('@copyToClipboardPrompt').then(prompt => {
common.logout();
cy.visit(prompt.args[0][1]);
cy.url().should("include",path.confirmInvite);
});

cy.get(usersSelector.confirmInvitePage).should("be.visible");
cy.get(usersSelector.pageLogo).should("be.visible");
cy.clearAndType(usersSelector.passwordInput, usersText.password);
cy.clearAndType(usersSelector.confirmPasswordInput, usersText.password);
cy.get(usersSelector.finishSetup).click();
cy.verifyToastMessage(commonSelectors.toastMessage, usersText.swPasswordSuccessToast);
cy.url().should("include",path.loginPath);

cy.appUILogin();
common.navigateToManageUsers();
cy.contains('td', email).parent().within(() => {
cy.get('td small').should("have.text", usersText.activeStatus);
});
});
});
17 changes: 13 additions & 4 deletions frontend/src/ConfirmationPage/OrganizationInvitationPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -92,42 +92,51 @@ class OrganizationInvitationPage extends React.Component {
</>
) : (
<>
<h2 className="card-title text-center mb-4">Set up your account</h2>
<h2 className="card-title text-center mb-4" data-cy="card-title">
Set up your account
</h2>
<div className="mb-3">
<label className="form-label">Password</label>
<label className="form-label" data-cy="password-label">
Password
</label>
<div className="input-group input-group-flat">
<input
onChange={this.handleChange}
name="password"
type="password"
className="form-control"
autoComplete="off"
data-cy="password-input"
/>
<span className="input-group-text"></span>
</div>
</div>
<div className="mb-3">
<label className="form-label">Confirm Password</label>
<label className="form-label" data-cy="confirm-password-label">
Confirm Password
</label>
<div className="input-group input-group-flat">
<input
onChange={this.handleChange}
name="password_confirmation"
type="password"
className="form-control"
autoComplete="off"
data-cy="confirm-password-input"
/>
<span className="input-group-text"></span>
</div>
</div>
<div className="form-footer">
<p>
<p data-cy="terms-and-condition-info">
By clicking the button below, you agree to our{' '}
<a href="https://tooljet.io/terms">Terms and Conditions</a>.
</p>
<button
className={`btn mt-2 btn-primary w-100 ${isLoading ? ' btn-loading' : ''}`}
onClick={(e) => this.acceptInvite(e, true)}
disabled={isLoading}
data-cy="finish-setup-button"
>
Finish account setup and accept invite
</button>
Expand Down

0 comments on commit a6c0277

Please sign in to comment.