ToolJet/cypress-tests/cypress/support/utils/onboarding.js
Ajith KV b54c3e1afb
Modify apps cypress test cases for enterprise (#13078)
* Modify apps cypress test cases for enterprise

* Update cypress.Dockerfile

* cypress fix

---------

Co-authored-by: Adish M <[email protected]>
2025-06-30 15:11:11 +05:30

340 lines
11 KiB
JavaScript

import { commonSelectors } from "Selectors/common";
import { commonText } from "Texts/common";
import { dashboardText } from "Texts/dashboard";
import {
verifyandModifyUserRole,
verifyandModifySizeOftheCompany,
} from "Support/utils/selfHostSignUp";
import { navigateToManageUsers, logout } from "Support/utils/common";
import { ssoSelector } from "Selectors/manageSSO";
import { ssoText } from "Texts/manageSSO";
import { onboardingSelectors } from "Selectors/onboarding";
import { fetchAndVisitInviteLink } from "Support/utils/manageUsers";
export const verifyConfirmEmailPage = (email) => {
cy.get(commonSelectors.pageLogo).should("be.visible");
cy.get('[data-cy="check-your-mail-header"]').verifyVisibleElement(
"have.text",
commonText.emailPageHeader
);
cy.get(commonSelectors.onboardingPageDescription).verifyVisibleElement(
"have.text",
commonText.emailPageDescription(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.resendEmailButton).should("be.visible");
cy.get('[data-cy="back-to-signup"]').verifyVisibleElement(
"have.text",
"Back to sign up"
);
};
export const verifyOnboardingQuestions = (workspaceName) => {
bannerElementsVerification();
onboardingStepOne();
onboardingStepTwo(workspaceName);
onboardingStepThree();
};
export const verifyInvalidInvitationLink = () => {
cy.get(commonSelectors.pageLogo).should("be.visible");
// cy.get(commonSelectors.emailImage).should("be.visible");
cy.get(commonSelectors.onboardingPageHeader).verifyVisibleElement(
"have.text",
commonText.inalidInvitationLinkHeader
);
cy.get(commonSelectors.onboardingPageDescription).verifyVisibleElement(
"have.text",
commonText.inalidInvitationLinkDescription
);
// cy.get(commonSelectors.backtoSignUpButton).verifyVisibleElement(
// "have.text",
// commonText.backtoSignUpButton
// );
};
export const userSignUp = (fullName, email, workspaceName = "test") => {
let invitationLink;
cy.intercept("GET", "/api/login-configs/public").as("publicConfig");
cy.visit("/");
cy.wait("@publicConfig");
cy.wait(2000);
cy.get(commonSelectors.createAnAccountLink, { timout: 10000 }).click();
cy.wait(2000);
cy.get(onboardingSelectors.nameInput, { timeout: 1000 }).should(
"not.be.disabled"
);
cy.get(onboardingSelectors.nameInput).clear();
cy.get(onboardingSelectors.nameInput).type(fullName);
cy.clearAndType(onboardingSelectors.loginEmailInput, email);
cy.clearAndType(onboardingSelectors.loginPasswordInput, commonText.password);
cy.get(commonSelectors.signUpButton).click();
cy.wait(2500);
cy.task("dbConnection", {
dbconfig: Cypress.env("app_db"),
sql: `select invitation_token from users where email='${email}';`,
}).then((resp) => {
invitationLink = `/invitations/${resp.rows[0].invitation_token}`;
cy.visit(invitationLink);
cy.wait(2500);
});
if (Cypress.env("environment") == "Cloud") {
cy.clearAndType(
'[data-cy="onboarding-workspace-name-input"]',
workspaceName
);
cy.get('[data-cy="onboarding-submit-button"]').click();
}
};
export const inviteUser = (firstName, email) => {
cy.apiUserInvite(firstName, email);
fetchAndVisitInviteLink(email);
cy.wait(1000);
cy.get(onboardingSelectors.loginPasswordInput).should("be.visible");
cy.clearAndType(onboardingSelectors.loginPasswordInput, "password");
// cy.intercept("GET", "/api/organizations").as("org");
cy.get(commonSelectors.continueButton).click();
cy.wait(2000);
cy.get(commonSelectors.acceptInviteButton).click();
};
export const addNewUser = (firstName, email) => {
navigateToManageUsers();
inviteUser(firstName, email);
};
export const roleBasedOnboarding = (firstName, email, userRole) => {
navigateToManageUsers();
cy.apiUserInvite(firstName, email, userRole);
fetchAndVisitInviteLink(email);
cy.wait(1000);
cy.get(onboardingSelectors.loginPasswordInput).should("be.visible");
cy.clearAndType(onboardingSelectors.loginPasswordInput, "password");
// cy.intercept("GET", "/api/organizations").as("org");
cy.get(commonSelectors.continueButton).click();
cy.wait(2000);
cy.get(commonSelectors.acceptInviteButton).click();
};
export const visitWorkspaceInvitation = (email, workspaceName) => {
let workspaceId, userId, url, organizationToken;
cy.task("dbConnection", {
dbconfig: Cypress.env("app_db"),
sql: `select id from organizations where name='${workspaceName}';`,
}).then((resp) => {
workspaceId = resp.rows[0].id;
cy.task("dbConnection", {
dbconfig: Cypress.env("app_db"),
sql: `select id from users where email='${email}';`,
}).then((resp) => {
userId = resp.rows[0].id;
cy.task("dbConnection", {
dbconfig: Cypress.env("app_db"),
sql: `select invitation_token from organization_users where organization_id= '${workspaceId}' AND user_id='${userId}';`,
}).then((resp) => {
organizationToken = resp.rows[0].invitation_token;
url = `/organization-invitations/${organizationToken}?oid=${workspaceId}`;
logout();
cy.visit(url);
});
});
});
};
export const SignUpPageElements = () => {
cy.get(commonSelectors.pageLogo).should("be.visible");
cy.get(commonSelectors.signUpSectionHeader).verifyVisibleElement(
"have.text",
"Sign up"
);
cy.get(commonSelectors.signUpButton).verifyVisibleElement(
"have.text",
"Sign up"
);
// cy.get('[data-cy="signup-info"]').should(($el) => {
// expect($el.contents().first().text().trim()).to.eq(
// commonText.signInRedirectText
// );
// });
cy.get(onboardingSelectors.signupNameLabel).verifyVisibleElement(
"have.text",
"Name *"
);
cy.get(onboardingSelectors.nameInput).should("be.visible");
cy.get(onboardingSelectors.emailLabel).verifyVisibleElement(
"have.text",
"Email *"
);
// cy.get(commonSelectors.loginPasswordLabel).verifyVisibleElement("have.text", "Password *");
cy.get(onboardingSelectors.loginPasswordInput).should("be.visible");
cy.get(commonSelectors.signInRedirectLink).verifyVisibleElement(
"have.text",
commonText.signInRedirectLink
);
cy.get(commonSelectors.signUpTermsHelperText).should(($el) => {
expect($el.contents().first().text().trim()).to.eq(
commonText.signUpTermsHelperText
);
});
cy.get(commonSelectors.termsOfServiceLink)
.verifyVisibleElement("have.text", commonText.termsOfServiceLink)
.and("have.attr", "href")
.and("equal", "https://www.tooljet.com/terms");
cy.get(commonSelectors.privacyPolicyLink)
.verifyVisibleElement("have.text", commonText.privacyPolicyLink)
.and("have.attr", "href")
.and("equal", "https://www.tooljet.com/privacy");
cy.get("body").then(($el) => {
if ($el.text().includes("Google")) {
cy.get(ssoSelector.googleSSOText).verifyVisibleElement(
"have.text",
ssoText.googleSignUpText
);
cy.get(ssoSelector.gitSSOText).verifyVisibleElement(
"have.text",
ssoText.gitSignUpText
);
cy.get(commonSelectors.onboardingSeperator).should("be.visible");
cy.get(commonSelectors.onboardingSeperatorText).verifyVisibleElement(
"have.text",
commonText.onboardingSeperatorText
);
}
});
};
export const signUpLink = (email) => {
let invitationLink;
cy.task("dbConnection", {
dbconfig: Cypress.env("app_db"),
sql: `select invitation_token from users where email='${email}';`,
}).then((resp) => {
invitationLink = `/invitations/${resp.rows[0].invitation_token}`;
cy.visit(invitationLink);
cy.wait(3000);
});
};
export const bannerElementsVerification = () => {
const bannerElements = [
{ selector: commonSelectors.HostBanner },
{ selector: commonSelectors.pageLogo },
{ selector: onboardingSelectors.stepsDetails },
];
bannerElements.forEach((element) => {
cy.get(element.selector).should("be.visible");
});
};
export const enableInstanceSignUp = (allow = true) => {
const value = allow ? "true" : "false";
cy.task("dbConnection", {
dbconfig: Cypress.env("app_db"),
sql: `UPDATE instance_settings SET value = '${value}' WHERE key = 'ALLOW_PERSONAL_WORKSPACE';
UPDATE instance_settings SET value = '${value}' WHERE key = 'ENABLE_SIGNUP';`,
});
};
export const onboardingStepOne = () => {
const companyPageTexts = [
{
selector: onboardingSelectors.tellUsAbit,
text: "Tell us a bit about yourself",
},
{
selector: onboardingSelectors.pageDescription,
text: "This information will help us improve ToolJet",
},
{
selector: '[data-cy="onboarding-company-name-label"]',
text: "Company name *",
},
{
selector: '[data-cy="onboarding-build-purpose-label"]',
text: "What would you like to build on ToolJet? *",
},
];
companyPageTexts.forEach((item) => {
cy.get(item.selector).should("be.visible").and("have.text", item.text);
});
cy.get(onboardingSelectors.companyNameInput).should("be.visible");
cy.get(onboardingSelectors.buildPurposeInput).should("be.visible");
cy.get(onboardingSelectors.onboardingSubmitButton).verifyVisibleElement(
"have.attr",
"disabled"
);
cy.get(onboardingSelectors.companyNameInput).type("Tooljet");
cy.get(onboardingSelectors.onboardingSubmitButton).should(
"have.attr",
"disabled"
);
cy.get(onboardingSelectors.buildPurposeInput).type("Exploring");
cy.get(onboardingSelectors.onboardingSubmitButton).verifyVisibleElement(
"have.text",
"Continue"
);
cy.get(onboardingSelectors.onboardingSubmitButton)
.should("be.enabled")
.click();
};
export const onboardingStepTwo = (workspaceName = "My workspace") => {
cy.get(commonSelectors.setUpworkspaceCheckPoint)
.should("be.visible")
.and("have.text", "Set up your workspace!");
cy.get(onboardingSelectors.pageDescription).verifyVisibleElement(
"have.text",
"Set up workspaces to manage users, applications & resources across various teams"
);
cy.get(commonSelectors.workspaceNameInputLabel)
.should("be.visible")
.and("have.text", commonText.workspaceNameInputLabel);
cy.clearAndType(commonSelectors.workspaceNameInputField, workspaceName);
cy.get(commonSelectors.OnbordingContinue)
.verifyVisibleElement("have.text", "Continue")
.click();
};
export const onboardingStepThree = () => {
cy.get(
`[data-cy="we've-created-a-sample-application-for-you!-header"]`
).verifyVisibleElement(
"have.text",
"We've created a sample application for you!"
);
cy.get(onboardingSelectors.pageDescription).verifyVisibleElement(
"have.text",
"The sample application comes with a sample PostgreSQL database for you to play around with. You can also get started quickly with pre-built applications from our template collection!"
);
cy.get(onboardingSelectors.onboardingSubmitButton)
.verifyVisibleElement("have.text", "Continue")
.click();
};