Modified failed Platform cypress test cases for Tooljet V3 (#11486)

This commit is contained in:
Ajith KV 2024-12-03 12:18:49 +05:30 committed by GitHub
parent b87dbf304c
commit c4f3137feb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
22 changed files with 1187 additions and 1784 deletions

View file

@ -82,7 +82,7 @@ module.exports = defineConfig({
experimentalModfyObstructiveThirdPartyCode: true,
experimentalRunAllSpecs: true,
baseUrl: "http://localhost:8082",
specPattern: "cypress/e2e/happyPath/platform/commonTestcases/**/*.cy.js",
specPattern: "cypress/e2e/happyPath/platform/**/**/*.cy.js",
downloadsFolder: "cypress/downloads",
numTestsKeptInMemory: 0,
redirectionLimit: 10,

View file

@ -7,7 +7,7 @@ Cypress.Commands.add(
redirection = "/"
) => {
cy.request({
url: `http://localhost:3000/api/authenticate/${workspaceId}`,
url: `${Cypress.env("server_host")}/api/authenticate/${workspaceId}`,
method: "POST",
body: {
email: userEmail,
@ -273,3 +273,4 @@ Cypress.Commands.add(
});
}
);

View file

@ -5,16 +5,22 @@ import { commonText, createBackspaceText } from "Texts/common";
import { passwordInputText } from "Texts/passwordInput";
import { importSelectors } from "Selectors/exportImport";
import { importText } from "Texts/exportImport";
import { onboardingSelectors } from "Selectors/onboarding";
Cypress.Commands.add(
"login",
"appUILogin",
(email = "dev@tooljet.io", password = "password") => {
cy.visit("/");
cy.clearAndType(commonSelectors.workEmailInputField, email);
cy.clearAndType(commonSelectors.passwordInputField, password);
cy.get(commonSelectors.signInButton).click();
cy.wait(2000);
cy.get(commonSelectors.homePageLogo).should("be.visible");
cy.clearAndType(onboardingSelectors.emailInput, email);
cy.clearAndType(onboardingSelectors.passwordInput, password);
cy.get(onboardingSelectors.signInButton).click();
cy.intercept("GET", "api/library_apps").as(
"library_apps"
);
cy.get(commonSelectors.homePageLogo, { timeout: 10000 });
cy.wait("@library_apps");
}
);
@ -90,14 +96,6 @@ Cypress.Commands.add(
}
);
Cypress.Commands.add("appUILogin", () => {
cy.visit("/");
cy.clearAndType(commonSelectors.workEmailInputField, "dev@tooljet.io");
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.get(commonSelectors.signInButton).click();
cy.wait(2000);
cy.get(commonSelectors.homePageLogo).should("be.visible");
});
Cypress.Commands.add(
"clearAndTypeOnCodeMirror",
@ -365,7 +363,7 @@ Cypress.Commands.add("getPosition", (componentName) => {
Cypress.Commands.add("defaultWorkspaceLogin", () => {
cy.apiLogin();
cy.intercept("GET", "http://localhost:3000/api/library_apps").as(
cy.intercept("GET", "/api/library_apps").as(
"library_apps"
);
cy.visit("/my-workspace");

View file

@ -65,9 +65,9 @@ export const commonSelectors = {
signInHeader: '[data-cy="sign-in-header"]',
signInSubHeader: '[data-cy="sign-in-sub-header"]',
createAnAccountLink: '[data-cy="create-an-account-link"]',
SignUpSectionHeader: '[data-cy="signup-section-header"]',
SignUpSectionHeader: '[data-cy="sign-up-header"]',
signInRedirectText: '[data-cy="signin-redirect-text"]',
signInRedirectLink: '[data-cy="signin-redirect-link"]',
signInRedirectLink: '[data-cy="signin-link"]',
signUpTermsHelperText: '[data-cy="signup-terms-helper"]',
termsOfServiceLink: '[data-cy="terms-of-service-link"]',
privacyPolicyLink: '[data-cy="privacy-policy-link"]',
@ -120,7 +120,7 @@ export const commonSelectors = {
onboardingPageHeader: '[data-cy="onboarding-page-header"]',
onboardingPageSubHeader: '[data-cy="onboarding-page-sub-header"]',
onboardingPageDescription: '[data-cy="onboarding-page-description"]',
passwordHelperText: '[data-cy="password-helper-text"]',
passwordHelperText: '[data-cy="new-password-input-hint"]',
continueButton: '[data-cy="continue-button"]',
userAccountNameAvatar: '[data-cy="user-account-name-avatar"]',
workspaceNameInputLabel: '[data-cy="workspace-name-input-label"]',
@ -135,26 +135,26 @@ export const commonSelectors = {
emailInputField: '[data-cy="email-input-field"]',
signUpButton: '[data-cy="sign-up-button"]',
emailImage: '[data-cy="email-image"]',
spamMessage: '[data-cy="email-page-spam-msg"]',
resendEmailButton: '[data-cy="resend-email-button"]',
spamMessage: '[data-cy="info-message"]',
resendEmailButton: '[data-cy="resend-verification-email-button"]',
editEmailButton: '[data-cy="edit-email-button"]',
createAccountCheckMark: '[data-cy="create-account-check-mark"]',
createAccountCheckPoint: '[data-cy="create-account-check-point"]',
verifyEmailCheckMark: '[data-cy="verify-email-check-mark"]',
verifyEmailCheckPoint: '[data-cy="verify-email-check-point"]',
backtoSignUpButton: '[data-cy="back-to-signup-button"]',
forgotPasswordPageHeader: '[data-cy="forgot-password-page-header"]',
forgotPasswordPageSubHeader: '[data-cy="forgot-password-sub-header"]',
resetPasswordLinkButton: '[data-cy="reset-password-link"]',
forgotPasswordPageHeader: '[data-cy="forgot-password-header"]',
forgotPasswordPageSubHeader: '[data-cy="signup-redirect-text"]',
resetPasswordLinkButton: '[data-cy="send-a-reset-link-button"]',
enterIcon: '[data-cy="enter-icon"]',
passwordResetPageHeader: '[data-cy="reset-password-page-header"]',
passwordResetPageHeader: '[data-cy="reset-password-header"]',
newPasswordInputLabel: '[data-cy="new-password-input-label"]',
newPasswordInputField: '[data-cy="new-password-input-field"]',
newPasswordInputField: '[data-cy="new-password-input-input"]',
confirmPasswordInputFieldLabel: '[data-cy="confirm-password-input-label"]',
confirmPasswordInputField: '[data-cy="confirm-password-input-field"]',
confirmPasswordInputField: '[data-cy="confirm-password-input-input"]',
resetPasswordButton: '[data-cy="reset-password-button"]',
resetPasswordPageDescription: '[data-cy="reset-password-page-description"]',
backToLoginButton: '[data-cy="back-to-login-button"]',
backToLoginButton: '[data-cy="back-to-login"]',
breadcrumbTitle: '[data-cy="app-header-label"]>>',
breadcrumbPageTitle: '[data-cy="breadcrumb-page-title"]',
labelFullNameInput: '[data-cy="label-full-name-input-field"]',

View file

@ -33,7 +33,7 @@ export const ssoSelector = {
redirectUrl: "[data-cy=redirect-url]",
googleTile: '[data-cy="google-sign-in-text"]',
googleIcon: "[data-cy=google-sso-icon]",
googleSSOText: "[data-cy=google-sso-text]",
googleSSOText: "[data-cy=google-sso-button-text]",
git: '[data-cy="github-sso-card"]',
gitEnableToggle: '[data-cy="github-toggle-input"]',
githubLabel: '[data-cy="github-label"]',
@ -43,7 +43,7 @@ export const ssoSelector = {
gitTile: "[data-cy=git-tile]",
gitIcon: "[data-cy=git-sso-icon]",
gitSignInText: "[data-cy=git-sso-text]",
gitSSOText: "[data-cy=git-sso-text]",
gitSSOText: "[data-cy=git-sso-button-text]",
password: "[data-cy=left-menu-items] :eq(3)",
passwordEnableToggle: '[data-cy="password-enable-toggle"]',
loginHelpText: "[data-cy=login-help-text]",

View file

@ -0,0 +1,14 @@
export const cyParamName = (paramName = "") => {
return paramName.toLowerCase().replace(/\s+/g, "-");
};
export const onboardingSelectors = {
emailLabel: "[data-cy='email-label']",
emailInput: "[data-cy='email-input']",
passwordLabel: "[data-cy='password-label']",
passwordInput: "[data-cy='password-input']",
signInButton: "[data-cy='sign-in-button']",
passwordError: "[data-cy='password-error']",
nameInput: "[data-cy='name-input']",
nameLabel: '[data-cy="name-label"]'
}

View file

@ -52,7 +52,7 @@ export const commonText = {
},
closeButton: "modal close",
workEmailLabel: "Email",
emailInputError: "Invalid Email",
emailInputError: "Email is invalid",
passwordLabel: "Password",
forgotPasswordLink: "Forgot?",
loginButton: " Login",
@ -100,11 +100,11 @@ export const commonText = {
onboardingSeperatorText: "OR",
getStartedButton: "Get started for free",
emailPageHeader: "Check your mail",
spamMessage: "Did not receive an email? Check your spam folder.",
spamMessage: "Did not receive an email? Check your spam folder!",
resendEmailButton: "Resend verification mail",
editEmailButton: "Edit email address",
emailVerifiedText: "Successfully verified email",
continueToSetUp: "Continue to set up your workspace to start using ToolJet.",
continueToSetUp: "Set up workspaces to manage users, applications & resources across various teams",
createAccountCheckPoint: "Create account",
verifyEmailCheckPoint: "Verify email",
inalidInvitationLinkHeader: "Invalid verification link",
@ -114,15 +114,15 @@ export const commonText = {
forgotPasswordPageHeader: "Forgot Password",
newToTooljetText: "New to ToolJet?",
emailAddressLabel: "Email address",
resetPasswordLinkButton: " Send a reset link",
resetPasswordLinkButton: "Send a reset link",
passwordResetEmailToast:
"Please check your email/inbox for the password reset link",
"Please check your email for the password reset link",
passwordResetPageHeader: "Reset Password",
passwordResetSuccessPageHeader: "Password has been reset",
newPasswordInputLabel: "New Password",
confirmPasswordInputFieldLabel: "Re-enter the password",
newPasswordInputLabel: "New Password *",
confirmPasswordInputFieldLabel: "Re-enter the password *",
passwordResetSuccessToast: "Password reset successfully",
backToLoginButton: "Back to log in",
backToLoginButton: "Back to login",
resetPasswordPageDescription:
"Your password has been reset successfully, log into ToolJet to continue your session",
labelFullNameInput: "Enter full name",
@ -135,13 +135,13 @@ export const commonText = {
addNewDataSourceButton: "Add new datasource",
emailPageDescription: (email) => {
return `Weve sent an email to ${email} with a verification link. Please use that to verify your email address.`;
return `We've sent a verification email to ${email}. Click the link inside to confirm your email and continue. This helps us ensure account security.`
},
companyPageHeader: (userName) => {
return `Where do you work ${userName}?`;
},
resetPasswordEmailDescription: (email) => {
return `Weve sent an email to ${email} with a password reset link. Please click on that link to reset your password.`;
return `We've sent a password reset link to ${email}. Click the link inside to reset your password and continue.`;
},
userJobRole: {
HeadOfEngineering: "Head of engineering",

View file

@ -72,7 +72,7 @@ describe(
logout();
cy.wait(4000);
cy.get(commonSelectors.loginButton, { timeout: 20000 }).should(
cy.get(onboardingSelectors.signInButton, { timeout: 20000 }).should(
"be.visible"
);
cy.visitSlug({
@ -80,13 +80,13 @@ describe(
});
cy.wait(3000);
cy.get(commonSelectors.loginButton, { timeout: 20000 }).should(
cy.get(onboardingSelectors.signInButton, { timeout: 20000 }).should(
"be.visible"
);
cy.clearAndType(commonSelectors.workEmailInputField, "dev@tooljet.io");
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.get(commonSelectors.loginButton).click();
cy.clearAndType(onboardingSelectors.passwordInput, "password");
cy.get(onboardingSelectors.signInButton).click();
cy.wait(500);
cy.get('[data-cy="draggable-widget-table1"]').should("be.visible");
@ -104,7 +104,7 @@ describe(
logout();
cy.wait(4000);
cy.get(commonSelectors.loginButton, { timeout: 20000 }).should(
cy.get(onboardingSelectors.signInButton, { timeout: 20000 }).should(
"be.visible"
);
cy.visitSlug({
@ -149,13 +149,13 @@ describe(
logout();
cy.wait(4000);
cy.get(commonSelectors.loginButton, { timeout: 20000 }).should(
cy.get(onboardingSelectors.signInButton, { timeout: 20000 }).should(
"be.visible"
);
cy.visitSlug({ actualUrl: `/applications/${data.slug}` });
cy.login("test@tooljet.com", "password");
cy.appUILogin("test@tooljet.com", "password");
cy.get(commonSelectors.allApplicationLink).verifyVisibleElement(
"have.text",
commonText.allApplicationLink
@ -188,7 +188,7 @@ describe(
cy.wait(1000);
cy.clearAndType(commonSelectors.workEmailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.clearAndType(onboardingSelectors.passwordInput, "password");
cy.get(commonSelectors.signInButton).click();
cy.wait(1000);
cy.get(ssoSelector.workspaceSubHeader).verifyVisibleElement(
@ -211,7 +211,7 @@ describe(
logout();
cy.wait(4000);
cy.get(commonSelectors.loginButton, { timeout: 20000 }).should(
cy.get(onboardingSelectors.signInButton, { timeout: 20000 }).should(
"be.visible"
);
cy.visitSlug({ actualUrl: `/applications/${data.slug}` });
@ -258,8 +258,8 @@ describe(
cy.get(commonSelectors.createAnAccountLink).click();
cy.clearAndType(commonSelectors.nameInputField, data.firstName);
cy.clearAndType(commonSelectors.emailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, commonText.password);
cy.clearAndType(onboardingSelectors.emailInput, data.email);
cy.clearAndType(onboardingSelectors.passwordInput, commonText.password);
cy.get(commonSelectors.signUpButton).click();
cy.apiLogin();

View file

@ -40,12 +40,12 @@ describe("Self host onboarding", () => {
"have.text",
commonText.emailInputLabel
);
cy.get(commonSelectors.emailInputField).should("be.visible");
cy.get(onboardingSelectors.emailInput).should("be.visible");
cy.get(commonSelectors.passwordLabel).verifyVisibleElement(
"have.text",
commonText.passwordLabel
);
cy.get(commonSelectors.passwordInputField).should("be.visible");
cy.get(onboardingSelectors.passwordInput).should("be.visible");
cy.get(commonSelectors.passwordHelperText).verifyVisibleElement(
"have.text",
@ -67,8 +67,8 @@ describe("Self host onboarding", () => {
.and("equal", "https://www.tooljet.com/privacy");
cy.clearAndType(commonSelectors.nameInputField, "The Developer");
cy.clearAndType(commonSelectors.emailInputField, "dev@tooljet.io");
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.clearAndType(onboardingSelectors.emailInput, "dev@tooljet.io");
cy.clearAndType(onboardingSelectors.passwordInput, "password");
cy.get(commonSelectors.continueButton).click();
signup.selfHostCommonElements();

View file

@ -3,11 +3,13 @@ import { commonText } from "Texts/common";
import { fake } from "Fixtures/fake";
import { addNewUser } from "Support/utils/onboarding";
import { logout } from "Support/utils/common";
import { onboardingSelectors } from "Selectors/onboarding";
describe("Password reset functionality", () => {
const data = {};
let passwordResetLink = "";
it("Verify wrong password limit", () => {
data.firstName = fake.firstName;
data.email = fake.email.toLowerCase();
@ -17,22 +19,23 @@ describe("Password reset functionality", () => {
logout();
for (let i = 0; i < 5; i++) {
cy.clearAndType(commonSelectors.workEmailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, "passw");
cy.get(commonSelectors.loginButton).click();
cy.clearAndType(onboardingSelectors.emailInput, data.email);
cy.clearAndType(onboardingSelectors.passwordInput, "passw");
cy.get(onboardingSelectors.signInButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
"Invalid credentials"
);
}
cy.clearAndType(commonSelectors.workEmailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, "passw");
cy.get(commonSelectors.loginButton).click();
cy.clearAndType(onboardingSelectors.emailInput, data.email);
cy.clearAndType(onboardingSelectors.passwordInput, "passw");
cy.get(onboardingSelectors.signInButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
"Maximum password retry limit reached, please reset your password using forgot password option"
);
});
it("Verify forgot password page elements and functionality", () => {
cy.visit("/");
cy.get(commonSelectors.forgotPasswordLink).click();
@ -41,59 +44,57 @@ describe("Password reset functionality", () => {
"have.text",
commonText.forgotPasswordPageHeader
);
cy.get(commonSelectors.forgotPasswordPageSubHeader).should(($el) => {
expect($el.contents().first().text().trim()).to.eq(
"New to"
);
});
cy.get(commonSelectors.forgotPasswordPageSubHeader).verifyVisibleElement(
"have.text",
"New to ToolJet? Create an account"
);
cy.get(commonSelectors.createAnAccountLink).verifyVisibleElement(
"have.text",
commonText.createAnAccountLink
);
cy.get(commonSelectors.emailInputLabel).verifyVisibleElement(
cy.get('[data-cy="email-input-field-label"]').verifyVisibleElement(
"have.text",
commonText.emailAddressLabel
"Email address *"
);
cy.get(commonSelectors.emailInputField).should("be.visible");
cy.get('[data-cy="email-input-field-input"]').should("be.visible");
cy.get(commonSelectors.resetPasswordLinkButton)
.verifyVisibleElement("have.text", commonText.resetPasswordLinkButton)
.and("be.disabled");
cy.get(commonSelectors.enterIcon).should("be.visible");
cy.clearAndType(commonSelectors.emailInputField, data.email);
cy.clearAndType('[data-cy="email-input-field-input"]', data.email);
cy.get(commonSelectors.resetPasswordLinkButton).click();
cy.get("body").then(($title) => {
if (!$title.text().includes("Forgot Password")) {
cy.verifyToastMessage(
commonSelectors.toastMessage,
commonText.passwordResetEmailToast
);
cy.get(commonSelectors.pageLogo).should("be.visible");
cy.get(commonSelectors.emailImage).should("be.visible");
cy.get(commonSelectors.onboardingPageHeader).verifyVisibleElement(
"have.text",
commonText.emailPageHeader
);
cy.get(commonSelectors.onboardingPageDescription).verifyVisibleElement(
"have.text",
commonText.resetPasswordEmailDescription(data.email)
);
cy.get(commonSelectors.spamMessage).verifyVisibleElement(
"have.text",
commonText.spamMessage
);
cy.get(commonSelectors.onboardingSeperator).should("be.visible");
cy.get(commonSelectors.onboardingSeperatorText).verifyVisibleElement(
"have.text",
commonText.onboardingSeperatorText
);
cy.get(commonSelectors.backToLoginButton).verifyVisibleElement(
"have.text",
commonText.backToLoginButton
);
}
});
cy.verifyToastMessage(
commonSelectors.toastMessage,
commonText.passwordResetEmailToast
);
cy.get(commonSelectors.pageLogo).should("be.visible");
cy.get('[data-cy="check-your-mail-header"]').verifyVisibleElement(
"have.text",
"Check your mail"
);
cy.get(commonSelectors.onboardingPageDescription).verifyVisibleElement(
"have.text",
commonText.resetPasswordEmailDescription(data.email)
);
cy.get(commonSelectors.spamMessage).verifyVisibleElement(
"have.text",
commonText.spamMessage
);
cy.get(commonSelectors.onboardingSeperator).should("be.visible");
cy.get(commonSelectors.onboardingSeperatorText).verifyVisibleElement(
"have.text",
commonText.onboardingSeperatorText
);
cy.get(commonSelectors.backToLoginButton).verifyVisibleElement(
"have.text",
commonText.backToLoginButton
);
cy.task("updateId", {
dbconfig: Cypress.env("app_db"),
@ -123,13 +124,14 @@ describe("Password reset functionality", () => {
commonText.confirmPasswordInputFieldLabel
);
cy.get(commonSelectors.confirmPasswordInputField).should("be.visible");
cy.get(commonSelectors.passwordHelperText)
.eq(1)
.verifyVisibleElement("have.text", commonText.passwordHelperText);
cy.get(commonSelectors.passwordHelperText).verifyVisibleElement(
"have.text",
commonText.passwordHelperText
);
cy.get(commonSelectors.resetPasswordButton)
.verifyVisibleElement("have.text", commonText.resetPasswordButton)
.and("be.disabled");
cy.get(commonSelectors.enterIcon).should("be.visible");
// cy.get(commonSelectors.enterIcon).should("be.visible");
cy.clearAndType(commonSelectors.newPasswordInputField, "Pass");
cy.get(commonSelectors.resetPasswordButton).should("be.disabled");
@ -148,8 +150,10 @@ describe("Password reset functionality", () => {
cy.clearAndType(commonSelectors.newPasswordInputField, "Password");
cy.clearAndType(commonSelectors.confirmPasswordInputField, "password");
cy.get(commonSelectors.resetPasswordButton).click();
cy.verifyToastMessage(commonSelectors.toastMessage, "Password don't match");
cy.get('[data-cy="confirm-password-input-error"]').verifyVisibleElement(
"have.text",
"Passwords don't match"
);
cy.clearAndType(commonSelectors.newPasswordInputField, "Password");
cy.clearAndType(commonSelectors.confirmPasswordInputField, "Password");
@ -160,7 +164,7 @@ describe("Password reset functionality", () => {
);
cy.get(commonSelectors.pageLogo).should("be.visible");
cy.get(commonSelectors.passwordResetPageHeader).verifyVisibleElement(
cy.get('[data-cy="password-has-been-reset-header"]').verifyVisibleElement(
"have.text",
commonText.passwordResetSuccessPageHeader
);
@ -175,9 +179,9 @@ describe("Password reset functionality", () => {
});
it("Verify user login using new password", () => {
cy.visit("/");
cy.clearAndType(commonSelectors.workEmailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, "Password");
cy.get(commonSelectors.loginButton).click();
cy.clearAndType(onboardingSelectors.emailInput, data.email);
cy.clearAndType(onboardingSelectors.passwordInput, "Password");
cy.get(onboardingSelectors.signInButton).click();
cy.get(commonSelectors.workspaceName).should("be.visible");
});
});

View file

@ -1,6 +1,8 @@
import { commonSelectors } from "Selectors/common";
import { fake } from "Fixtures/fake";
import { commonText, path } from "Texts/common";
import { onboardingSelectors } from "Selectors/onboarding";
describe("Login functionality", () => {
let user;
@ -20,11 +22,11 @@ describe("Login functionality", () => {
"have.text",
commonText.signInHeader
);
cy.get(commonSelectors.workEmailLabel).verifyVisibleElement(
cy.get(onboardingSelectors.emailLabel).verifyVisibleElement(
"have.text",
commonText.workEmailLabel
"Email *"
);
cy.get(commonSelectors.passwordLabel).should(($el) => {
cy.get(onboardingSelectors.passwordLabel).should(($el) => {
expect($el.contents().first().text().trim()).to.eq(
commonText.passwordLabel
);
@ -33,53 +35,41 @@ describe("Login functionality", () => {
"have.text",
commonText.forgotPasswordLink
);
cy.get(commonSelectors.loginButton).verifyVisibleElement(
cy.get(onboardingSelectors.signInButton).verifyVisibleElement(
"have.text",
commonText.loginButton
"Sign in"
);
cy.get(onboardingSelectors.signInButton).should('be.disabled')
cy.get(commonSelectors.workEmailInputField).should("be.visible");
cy.get(commonSelectors.passwordInputField).should("be.visible");
cy.get(onboardingSelectors.emailInput).should("be.visible");
cy.get(onboardingSelectors.passwordInput).should("be.visible");
});
it("Should not be able to login with invalid credentials", () => {
cy.get(commonSelectors.loginButton).click();
cy.clearAndType(onboardingSelectors.emailInput,
"test"
);
cy.get(commonSelectors.emailInputError).verifyVisibleElement(
"have.text",
commonText.emailInputError
);
cy.get(onboardingSelectors.signInButton).should('be.disabled');
cy.clearAndType(commonSelectors.workEmailInputField, invalidEmail);
cy.get(commonSelectors.loginButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
commonText.loginErrorToast
);
cy.get(onboardingSelectors.emailInput).clear();
cy.clearAndType(onboardingSelectors.passwordInput, invalidPassword);
cy.get(onboardingSelectors.signInButton).should('be.disabled');
cy.get(commonSelectors.workEmailInputField).clear();
cy.clearAndType(commonSelectors.passwordInputField, invalidPassword);
cy.get(commonSelectors.loginButton).click();
cy.get(commonSelectors.emailInputError).verifyVisibleElement(
"have.text",
commonText.emailInputError
);
cy.clearAndType(onboardingSelectors.emailInput, user.email);
cy.get(onboardingSelectors.passwordInput).clear();
cy.get(onboardingSelectors.signInButton).should('be.disabled');
cy.clearAndType(commonSelectors.workEmailInputField, user.email);
cy.get(commonSelectors.passwordInputField).clear();
cy.get(commonSelectors.loginButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
commonText.loginErrorToast
);
cy.get(commonSelectors.workEmailInputField).clear();
cy.clearAndType(commonSelectors.passwordInputField, user.password);
cy.get(commonSelectors.loginButton).click();
cy.get(commonSelectors.emailInputError).verifyVisibleElement(
"have.text",
commonText.emailInputError
);
cy.clearAndType(onboardingSelectors.emailInput, user.email);
cy.clearAndType(onboardingSelectors.passwordInput, "Pass")
cy.get(onboardingSelectors.passwordError).verifyVisibleElement("have.text", "Password must be at least 5 characters long")
cy.clearAndType(onboardingSelectors.passwordInput, invalidPassword);
cy.get(onboardingSelectors.signInButton).click();
cy.verifyToastMessage(commonSelectors.toastMessage, "Invalid credentials")
});
it("Should be able to login with valid credentials", () => {
cy.login(user.email, user.password);
cy.appUILogin(user.email, user.password);
});
});

View file

@ -14,6 +14,8 @@ import {
verifyandModifyUserRole,
verifyandModifySizeOftheCompany,
} from "Support/utils/selfHostSignUp";
import { onboardingSelectors } from "Selectors/onboarding";
describe("User signup", () => {
const data = {};
@ -28,9 +30,10 @@ describe("User signup", () => {
cy.get(commonSelectors.createAnAccountLink).realClick();
SignUpPageElements();
cy.clearAndType(commonSelectors.nameInputField, data.fullName);
cy.clearAndType(commonSelectors.emailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, commonText.password);
cy.get(onboardingSelectors.nameInput).clear(); // Break the chain
cy.get(onboardingSelectors.nameInput).type(data.fullName); // Requery the element
cy.clearAndType(onboardingSelectors.emailInput, data.email);
cy.clearAndType(onboardingSelectors.passwordInput, commonText.password);
cy.get(commonSelectors.signUpButton).click();
cy.wait(500);
verifyConfirmEmailPage(data.email);
@ -43,19 +46,46 @@ describe("User signup", () => {
cy.visit(invitationLink);
});
verifyConfirmPageElements();
cy.get(commonSelectors.setUpToolJetButton).click();
cy.get(commonSelectors.pageLogo).should("be.visible");
cy.get('[data-cy="set-up-your-workspace!-header"]').verifyVisibleElement(
"have.text",
"Set up your workspace!"
);
cy.get(commonSelectors.onboardingPageDescription).verifyVisibleElement(
"have.text",
commonText.continueToSetUp
);
cy.get('[data-cy="onboarding-workspace-name-label"]').verifyVisibleElement(
"have.text",
"Workspace name *"
);
cy.get('[data-cy="onboarding-workspace-name-input"]').should('be.visible')
cy.wait(1000)
cy.clearAndType('[data-cy="onboarding-workspace-name-input"]', data.workspaceName)
cy.get('[data-cy="onboarding-submit-button"]').verifyVisibleElement(
"have.text",
"Continue"
);
cy.get('[data-cy="onboarding-submit-button"]').click();
cy.wait(4000);
verifyOnboardingQuestions(data.fullName, data.workspaceName);
cy.skipWalkthrough();
//verifyOnboardingQuestions(data.fullName, data.workspaceName); Add env flags for EE and Cloud
//Add validation for the application
});
it("Verify invalid invitation link", () => {
cy.log(invitationLink)
cy.visit(invitationLink);
verifyInvalidInvitationLink();
cy.get(commonSelectors.backtoSignUpButton).click();
// cy.get(commonSelectors.backtoSignUpButton).click();
cy.get(commonSelectors.pageLogo).click()
cy.get(commonSelectors.SignUpSectionHeader).should("be.visible");
});
it("Verify onboarding flow", () => {
it.skip("Verify onboarding flow", () => {
// rewrite for for EE and cloud
data.fullName = fake.fullName;
data.email = fake.email.toLowerCase().replaceAll("[^A-Za-z]", "");
data.workspaceName = fake.companyName;
@ -63,16 +93,17 @@ describe("User signup", () => {
cy.visit("/");
cy.get(commonSelectors.createAnAccountLink).realClick();
cy.clearAndType(commonSelectors.nameInputField, data.fullName);
cy.clearAndType(commonSelectors.emailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, commonText.password);
cy.get(onboardingSelectors.nameInput).clear();
cy.get(onboardingSelectors.nameInput).type(data.fullName);
cy.clearAndType(onboardingSelectors.emailInput, data.email);
cy.clearAndType(onboardingSelectors.passwordInput, commonText.password);
cy.get(commonSelectors.signUpButton).click();
cy.wait(8000);
cy.get(commonSelectors.resendEmailButton).click();
cy.get(commonSelectors.editEmailButton).click();
cy.get(commonSelectors.nameInputField).verifyVisibleElement("have.value", data.fullName)
cy.get(commonSelectors.emailInputField).verifyVisibleElement("have.value", data.email);
cy.get(commonSelectors.passwordInputField).verifyVisibleElement("have.value", "");
cy.get(onboardingSelectors.nameInput).verifyVisibleElement("have.value", data.fullName)
cy.get(onboardingSelectors.emailInput).verifyVisibleElement("have.value", data.email);
cy.get(onboardingSelectors.passwordInput).verifyVisibleElement("have.value", "");
cy.task("updateId", {
dbconfig: Cypress.env("app_db"),

View file

@ -31,12 +31,27 @@ describe("dashboard", () => {
data.cloneAppName = `cloned-${data.appName}`;
data.updatedFolderName = `new-${data.folderName}`;
beforeEach(() => {
cy.intercept("GET", "/api/library_apps").as("appLibrary");
cy.intercept("DELETE", "/api/folders/*").as("folderDeleted");
cy.skipWalkthrough();
});
it.only("", () => {
const customLayout = {
desktop: { top: 100, left: 20 },
mobile: { width: 8, height: 50 },
};
cy.apiLogin();
cy.apiCreateApp(data.appName);
cy.openApp();
console.log(Cypress.env("appId"))
cy.pause()
cy.addComponentToApp(Cypress.env("appId"), customLayout)
})
it("should verify the elements on empty dashboard", () => {
cy.intercept("GET", "/api/apps?page=1&folder=&searchKey=", {
fixture: "intercept/emptyDashboard.json",
@ -59,7 +74,7 @@ describe("dashboard", () => {
"My workspace"
);
cy.get(commonSelectors.workspaceName).click();
cy.get(commonSelectors.editRectangleIcon).should("be.visible");
// cy.get(commonSelectors.editRectangleIcon).should("be.visible");
cy.get(commonSelectors.appCreateButton).verifyVisibleElement(
"have.text",
"Create an app"

View file

@ -53,16 +53,16 @@ describe("user invite flow cases", () => {
SignUpPageElements();
cy.clearAndType(commonSelectors.nameInputField, data.signUpName);
cy.clearAndType(commonSelectors.emailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, commonText.password);
cy.clearAndType(onboardingSelectors.emailInput, data.email);
cy.clearAndType(onboardingSelectors.passwordInput, commonText.password);
cy.get(commonSelectors.signUpButton).click();
signUpLink(data.email);
cy.get(commonSelectors.setUpToolJetButton).click();
verifyOnboardingQuestions(data.signUpName, data.workspaceName);
visitWorkspaceInvitation(data.email, "My workspace");
cy.clearAndType(commonSelectors.workEmailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, usersText.password);
cy.get(commonSelectors.loginButton).click();
cy.clearAndType(onboardingSelectors.passwordInput, usersText.password);
cy.get(onboardingSelectors.signInButton).click();
cy.get(commonSelectors.invitedUserName).verifyVisibleElement(
"have.text",
@ -99,8 +99,8 @@ describe("user invite flow cases", () => {
);
cy.clearAndType(commonSelectors.nameInputField, data.signUpName);
cy.clearAndType(commonSelectors.emailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, commonText.password);
cy.clearAndType(onboardingSelectors.emailInput, data.email);
cy.clearAndType(onboardingSelectors.passwordInput, commonText.password);
cy.get(commonSelectors.signUpButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
@ -121,8 +121,8 @@ describe("user invite flow cases", () => {
cy.get(commonSelectors.createAnAccountLink).click();
cy.clearAndType(commonSelectors.nameInputField, data.firstName);
cy.clearAndType(commonSelectors.emailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, commonText.password);
cy.clearAndType(onboardingSelectors.emailInput, data.email);
cy.clearAndType(onboardingSelectors.passwordInput, commonText.password);
cy.get(commonSelectors.signUpButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
@ -137,8 +137,8 @@ describe("user invite flow cases", () => {
cy.get(commonSelectors.createAnAccountLink).click();
cy.clearAndType(commonSelectors.nameInputField, data.firstName);
cy.clearAndType(commonSelectors.emailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, commonText.password);
cy.clearAndType(onboardingSelectors.emailInput, data.email);
cy.clearAndType(onboardingSelectors.passwordInput, commonText.password);
cy.get(commonSelectors.signUpButton).click();
cy.defaultWorkspaceLogin();

View file

@ -22,6 +22,8 @@ import { groupsSelector } from "Selectors/manageGroups";
import { groupsText } from "Texts/manageGroups";
import { addNewUser, visitWorkspaceInvitation } from "Support/utils/onboarding";
import { commonText } from "Texts/common";
import { onboardingSelectors } from "Selectors/onboarding";
const data = {};
@ -72,7 +74,7 @@ describe("Manage Users", () => {
});
it("Should verify the confirm invite page and new user account", () => {
it.only("Should verify the confirm invite page and new user account", () => {
data.firstName = fake.firstName;
data.email = fake.email.toLowerCase().replaceAll("[^A-Za-z]", "");
// cy.removeAssignedApps();
@ -84,9 +86,9 @@ describe("Manage Users", () => {
fetchAndVisitInviteLink(data.email);
confirmInviteElements(data.email);
cy.clearAndType(commonSelectors.passwordInputField, "pass");
cy.clearAndType(onboardingSelectors.passwordInput, "pass");
cy.get(commonSelectors.signUpButton).should("be.disabled");
cy.clearAndType(commonSelectors.passwordInputField, usersText.password);
cy.clearAndType(onboardingSelectors.passwordInput, usersText.password);
cy.get(commonSelectors.signUpButton).should("not.be.disabled");
cy.get(commonSelectors.signUpButton).click();
@ -156,8 +158,8 @@ describe("Manage Users", () => {
logout();
cy.visit("/");
cy.clearAndType(commonSelectors.workEmailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, usersText.password);
cy.get(commonSelectors.loginButton).click();
cy.clearAndType(onboardingSelectors.passwordInput, usersText.password);
cy.get(onboardingSelectors.signInButton).click();
updateWorkspaceName(data.email);
cy.get(commonSelectors.workspaceName).click();
@ -178,7 +180,7 @@ describe("Manage Users", () => {
visitWorkspaceInvitation(data.email, "My workspace");
cy.clearAndType(commonSelectors.workEmailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.clearAndType(onboardingSelectors.passwordInput, "password");
cy.get(commonSelectors.signInButton).click();
cy.get(usersSelector.acceptInvite).click();
cy.verifyToastMessage(commonSelectors.toastMessage, usersText.inviteToast);
@ -406,7 +408,7 @@ describe("Manage Users", () => {
visitWorkspaceInvitation(data.email, workspaceName);
cy.clearAndType(commonSelectors.workEmailInputField, data.email);
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.clearAndType(onboardingSelectors.passwordInput, "password");
cy.get(commonSelectors.signInButton).click();
cy.get(usersSelector.acceptInvite).click();
cy.verifyToastMessage(commonSelectors.toastMessage, usersText.inviteToast);

View file

@ -185,15 +185,15 @@ describe("Profile Settings", () => {
common.logout();
cy.clearAndType(commonSelectors.workEmailInputField, commonText.email);
cy.clearAndType(commonSelectors.passwordInputField, commonText.password);
cy.get(commonSelectors.loginButton).click();
cy.clearAndType(onboardingSelectors.passwordInput, commonText.password);
cy.get(onboardingSelectors.signInButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
profileText.loginErrorToast
);
cy.clearAndType(
commonSelectors.passwordInputField,
onboardingSelectors.passwordInput,
profileText.newPassword
);
cy.get(commonSelectors.signInButton).click();
@ -213,7 +213,7 @@ describe("Profile Settings", () => {
common.logout();
cy.login(commonText.email, profileText.password);
cy.appUILogin(commonText.email, profileText.password);
common.logout();
});
});

View file

@ -12,8 +12,8 @@ import {
export const login = () => {
cy.visit("/");
cy.clearAndType(commonSelectors.workEmailInputField, "dev@tooljet.io");
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.get(commonSelectors.loginButton).click();
cy.clearAndType(onboardingSelectors.passwordInput, "password");
cy.get(onboardingSelectors.signInButton).click();
};
export const modifyAndVerifyAppCardIcon = (appName) => {

View file

@ -236,8 +236,8 @@ export const workspaceLoginPageElements = (workspaceName) => {
export const passwordLoginVisible = () => {
cy.get(commonSelectors.workEmailInputField).should("be.visible");
cy.get(commonSelectors.passwordInputField).should("be.visible");
cy.get(commonSelectors.loginButton).verifyVisibleElement(
cy.get(onboardingSelectors.passwordInput).should("be.visible");
cy.get(onboardingSelectors.signInButton).verifyVisibleElement(
"have.text",
commonText.loginButton
);
@ -245,8 +245,8 @@ export const passwordLoginVisible = () => {
export const workspaceLogin = (workspaceName) => {
cy.clearAndType(commonSelectors.workEmailInputField, "dev@tooljet.io");
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.get(commonSelectors.loginButton).click();
cy.clearAndType(onboardingSelectors.passwordInput, "password");
cy.get(onboardingSelectors.signInButton).click();
cy.wait(2000);
cy.get(commonSelectors.homePageLogo).should("be.visible");
cy.get(commonSelectors.workspaceName).verifyVisibleElement(
@ -295,13 +295,13 @@ export const signInPageElements = () => {
"have.text",
commonText.forgotPasswordLink
);
cy.get(commonSelectors.loginButton).verifyVisibleElement(
cy.get(onboardingSelectors.signInButton).verifyVisibleElement(
"have.text",
commonText.loginButton
);
cy.get(commonSelectors.workEmailInputField).should("be.visible");
cy.get(commonSelectors.passwordInputField).should("be.visible");
cy.get(onboardingSelectors.passwordInput).should("be.visible");
cy.get("body").then(($el) => {
if ($el.text().includes("Google")) {
@ -477,7 +477,7 @@ export const invitePageElements = () => {
"have.text",
commonText.passwordLabel
);
cy.get(commonSelectors.passwordInputField).should("be.visible");
cy.get(onboardingSelectors.passwordInput).should("be.visible");
cy.get(commonSelectors.acceptInviteButton).verifyVisibleElement(
"have.text",
commonText.acceptInviteButton

View file

@ -6,6 +6,8 @@ import { ssoSelector } from "Selectors/manageSSO";
import { ssoText } from "Texts/manageSSO";
import * as common from "Support/utils/common";
import { commonText } from "Texts/common";
import { onboardingSelectors } from "Selectors/onboarding";
export const manageUsersElements = () => {
cy.get(commonSelectors.breadcrumbTitle).should(($el) => {
@ -150,7 +152,7 @@ export const manageUsersElements = () => {
export const inviteUser = (firstName, email) => {
cy.userInviteApi(firstName, email);
fetchAndVisitInviteLink(email);
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.clearAndType(onboardingSelectors.passwordInput, "password");
cy.get(commonSelectors.acceptInviteButton).click();
};
@ -242,8 +244,8 @@ export const copyInvitationLink = (firstName, email) => {
export const fillUserInviteForm = (firstName, email) => {
cy.get(usersSelector.buttonAddUsers).click();
cy.clearAndType(commonSelectors.inputFieldFullName, firstName);
cy.clearAndType(commonSelectors.inputFieldEmailAddress, email);
cy.clearAndType(onboardingSelectors.nameInput, firstName);
cy.clearAndType(onboardingSelectors.emailInput, email);
};
export const selectUserGroup = (groupName) => {
@ -293,7 +295,7 @@ export const inviteUserWithUserGroups = (
cy.wait(1000);
fetchAndVisitInviteLink(email);
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.clearAndType(onboardingSelectors.passwordInput, "password");
// cy.intercept('GET', '/api/organizations').as('org')
cy.get(commonSelectors.signUpButton).click();
cy.wait(2000);
@ -372,7 +374,7 @@ export const inviteUserWithUserRole = (
cy.wait(1000);
fetchAndVisitInviteLink(email);
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.clearAndType(onboardingSelectors.passwordInput, "password");
cy.get(commonSelectors.signUpButton).click();
cy.wait(2000);
cy.get(commonSelectors.acceptInviteButton).click();

View file

@ -8,11 +8,12 @@ import {
import { navigateToManageUsers, logout } from "Support/utils/common";
import { ssoSelector } from "Selectors/manageSSO";
import { ssoText } from "Texts/manageSSO";
import { onboardingSelectors } from "Selectors/onboarding";
export const verifyConfirmEmailPage = (email) => {
cy.get(commonSelectors.pageLogo).should("be.visible");
cy.get(commonSelectors.emailImage).should("be.visible");
cy.get(commonSelectors.onboardingPageHeader).verifyVisibleElement(
cy.get('[data-cy="check-your-mail-header"]').verifyVisibleElement(
"have.text",
commonText.emailPageHeader
);
@ -31,30 +32,14 @@ export const verifyConfirmEmailPage = (email) => {
"have.text",
commonText.onboardingSeperatorText
);
cy.get(commonSelectors.resendEmailButton).should("be.visible");
cy.get(commonSelectors.editEmailButton).verifyVisibleElement(
cy.get('[data-cy="back-to-signup"]').verifyVisibleElement(
"have.text",
commonText.editEmailButton
"Back to sign up"
);
};
export const verifyConfirmPageElements = () => {
cy.get(commonSelectors.pageLogo).should("be.visible");
cy.get(commonSelectors.emailImage).should("be.visible");
cy.get(commonSelectors.onboardingPageHeader).verifyVisibleElement(
"have.text",
commonText.emailVerifiedText
);
cy.get(commonSelectors.onboardingPageDescription).verifyVisibleElement(
"have.text",
commonText.continueToSetUp
);
cy.get(commonSelectors.setUpToolJetButton).verifyVisibleElement(
"have.text",
commonText.setUpToolJetButton
);
};
export const verifyOnboardingQuestions = (fullName, workspaceName) => {
cy.get(commonSelectors.pageLogo).should("be.visible");
@ -136,10 +121,10 @@ export const verifyInvalidInvitationLink = () => {
commonText.inalidInvitationLinkDescription
);
cy.get(commonSelectors.backtoSignUpButton).verifyVisibleElement(
"have.text",
commonText.backtoSignUpButton
);
// cy.get(commonSelectors.backtoSignUpButton).verifyVisibleElement(
// "have.text",
// commonText.backtoSignUpButton
// );
};
export const userSignUp = (fullName, email, workspaceName) => {
@ -147,9 +132,9 @@ export const userSignUp = (fullName, email, workspaceName) => {
cy.visit("/");
cy.wait(1000);
cy.get(commonSelectors.createAnAccountLink).realClick();
cy.clearAndType(commonSelectors.nameInputField, fullName);
cy.clearAndType(commonSelectors.emailInputField, email);
cy.clearAndType(commonSelectors.passwordInputField, commonText.password);
cy.clearAndType(onboardingSelectors.nameInput, fullName);
cy.clearAndType(onboardingSelectors.emailInput, email);
cy.clearAndType(onboardingSelectors.passwordInput, commonText.password);
cy.get(commonSelectors.signUpButton).click();
cy.wait(500);
@ -211,8 +196,8 @@ export const inviteUser = (firstName, email) => {
cy.userInviteApi(firstName, email);
fetchAndVisitInviteLink(email);
cy.wait(1000);
cy.get(commonSelectors.passwordInputField).should("be.visible");
cy.clearAndType(commonSelectors.passwordInputField, "password");
cy.get(onboardingSelectors.passwordInput).should("be.visible");
cy.clearAndType(onboardingSelectors.passwordInput, "password");
// cy.intercept("GET", "/api/organizations").as("org");
cy.get(commonSelectors.signUpButton).click();
cy.wait(2000);
@ -306,13 +291,30 @@ export const SignUpPageElements = () => {
);
cy.get(commonSelectors.signUpButton).verifyVisibleElement(
"have.text",
commonText.getStartedButton
"Sign up"
);
cy.get(commonSelectors.signInRedirectText).should(($el) => {
// cy.get('[data-cy="signup-info"]').should(($el) => {
// expect($el.contents().first().text().trim()).to.eq(
// commonText.signInRedirectText
// );
// });
cy.get(onboardingSelectors.nameLabel).verifyVisibleElement("have.text", "Name *");
cy.get(onboardingSelectors.nameInput).should('be.visible');
cy.get(onboardingSelectors.emailLabel).verifyVisibleElement(
"have.text",
"Email *"
);
cy.get(onboardingSelectors.passwordLabel).should(($el) => {
expect($el.contents().first().text().trim()).to.eq(
commonText.signInRedirectText
commonText.passwordLabel
);
});
cy.get(onboardingSelectors.passwordInput).should("be.visible");
cy.get(commonSelectors.signInRedirectLink).verifyVisibleElement(
"have.text",
commonText.signInRedirectLink

File diff suppressed because it is too large Load diff

View file

@ -10,7 +10,7 @@
"@cypress/code-coverage": "^3.12.12",
"@cypress/webpack-preprocessor": "^5.12.0",
"@faker-js/faker": "^7.3.0",
"cypress": "^12.5.1"
"cypress": "^13.16.0"
},
"dependencies": {
"cypress-real-events": "^1.7.6",