import { commonEeSelectors, ssoEeSelector, instanceSettingsSelector, multiEnvSelector, workspaceSelector, } from "Selectors/eeCommon"; import { ssoEeText } from "Texts/eeCommon"; import { commonSelectors, commonWidgetSelector } from "Selectors/common"; import * as common from "Support/utils/common"; import { groupsSelector } from "Selectors/manageGroups"; import { groupsText } from "Texts/manageGroups"; import { eeGroupsSelector } from "Selectors/eeCommon"; import { eeGroupsText } from "Texts/eeCommon"; import { // verifyOnboardingQuestions, // verifyCloudOnboardingQuestions, fetchAndVisitInviteLink, } from "Support/utils/manageUsers"; import { commonText } from "Texts/common"; import { dashboardText } from "Texts/dashboard"; import { usersText } from "Texts/manageUsers"; import { usersSelector } from "Selectors/manageUsers"; import { ssoSelector } from "Selectors/manageSSO"; import { ssoText } from "Texts/manageSSO"; // import { appPromote } from "Support/utils/multiEnv"; export const oidcSSOPageElements = () => { cy.get(ssoEeSelector.oidcToggle).click(); cy.get(ssoSelector.saveButton).eq(1).click(); cy.get('[data-cy="modal-title"]').verifyVisibleElement( "have.text", "Enable OpenID Connect" ); cy.get('[data-cy="modal-close-button"]').should("be.visible"); cy.get('[data-cy="modal-message"]').verifyVisibleElement( "have.text", "Enabling OpenID Connect at the workspace level will override any OpenID Connect configurations set at the instance level." ); cy.get('[data-cy="confirmation-text"]').verifyVisibleElement( "have.text", "Are you sure you want to continue?" ); cy.get('[data-cy="cancel-button"]') .eq(2) .verifyVisibleElement("have.text", "Cancel"); cy.get('[data-cy="enable-button"]').verifyVisibleElement( "have.text", "Enable" ); cy.get('[data-cy="cancel-button"]').eq(2).click(); cy.get('[data-cy="status-label"]').verifyVisibleElement( "have.text", ssoText.disabledLabel ); cy.get(ssoEeSelector.oidcToggle).click(); cy.get(ssoSelector.saveButton).eq(1).click(); cy.get('[data-cy="enable-button"]').click(); cy.verifyToastMessage( commonSelectors.toastMessage, ssoText.toggleUpdateToast("OpenID") ); cy.get(ssoEeSelector.statusLabel).verifyVisibleElement( "have.text", ssoEeText.enabledLabel ); cy.get('[data-cy="redirect-url-label"]').verifyVisibleElement( "have.text", ssoText.redirectUrlLabel ); cy.get('[data-cy="redirect-url"]').should("be.visible"); cy.get('[data-cy="copy-icon"]').should("be.visible"); cy.get(ssoEeSelector.oidcToggle).click(); cy.get(ssoSelector.saveButton).eq(1).click(); // cy.get('[data-cy="enable-button"]').click(); cy.verifyToastMessage( commonSelectors.toastMessage, ssoText.toggleUpdateToast("OpenID") ); cy.get(ssoSelector.statusLabel).verifyVisibleElement( "have.text", ssoText.disabledLabel ); cy.get(ssoEeSelector.oidcToggle).click(); cy.clearAndType(ssoEeSelector.nameInput, ssoEeText.testName); cy.clearAndType(ssoEeSelector.clientIdInput, ssoEeText.testclientId); cy.clearAndType(ssoEeSelector.clientSecretInput, ssoEeText.testclientSecret); cy.clearAndType(ssoEeSelector.WellKnownUrlInput, ssoEeText.testWellknownUrl); cy.get(ssoSelector.saveButton).eq(1).click(); cy.get('[data-cy="enable-button"]').click(); cy.verifyToastMessage( commonSelectors.toastMessage, ssoText.toggleUpdateToast("OpenID") ); cy.get(ssoEeSelector.nameInput).should("have.value", ssoEeText.testName); cy.get(ssoEeSelector.clientIdInput).should( "have.value", ssoEeText.testclientId ); cy.get(ssoEeSelector.clientSecretInput).should( "have.value", ssoEeText.testclientSecret ); cy.get(ssoEeSelector.WellKnownUrlInput).should( "have.value", ssoEeText.testWellknownUrl ); }; export const resetDsPermissions = () => { common.navigateToManageGroups(); cy.wait(200); cy.get(groupsSelector.permissionsLink).click(); cy.get(groupsSelector.appsCreateCheck).then(($el) => { if ($el.is(":checked")) { cy.get(groupsSelector.appsCreateCheck).uncheck(); } }); cy.get(eeGroupsSelector.dsCreateCheck).then(($el) => { if ($el.is(":checked")) { cy.get(eeGroupsSelector.dsCreateCheck).uncheck(); } }); cy.get(eeGroupsSelector.dsDeleteCheck).then(($el) => { if ($el.is(":checked")) { cy.get(eeGroupsSelector.dsDeleteCheck).uncheck(); } }); }; export const deleteAssignedDatasources = () => { common.navigateToManageGroups(); cy.get('[data-cy="datasource-link"]').click(); cy.get("body").then(($body) => { const removeAllButtons = $body.find('[data-cy="remove-button"]'); if (removeAllButtons.length > 0) { cy.get('[data-cy="remove-button"]').click({ multiple: true }); } }); }; export const userSignUp = (fullName, email, workspaceName) => { const verificationFunction = Cypress.env("environment") === "Enterprise" ? verifyOnboardingQuestions : verifyCloudOnboardingQuestions; let invitationLink = ""; cy.visit("/"); cy.wait(500); cy.get(commonSelectors.createAnAccountLink).realClick(); cy.clearAndType(commonSelectors.nameInputField, fullName); cy.clearAndType(commonSelectors.emailInputField, email); cy.clearAndType(commonSelectors.passwordInputField, commonText.password); cy.get(commonSelectors.signUpButton).click(); cy.wait(500); 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.get(commonSelectors.setUpToolJetButton).click(); cy.wait(4000); verificationFunction(fullName, workspaceName); }); }; export const allowPersonalWorkspace = (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';`, }); }; export const addNewUserEE = (firstName, email) => { common.navigateToManageUsers(); cy.get(usersSelector.buttonAddUsers).click(); cy.get(commonSelectors.inputFieldFullName).type(firstName); cy.get(commonSelectors.inputFieldEmailAddress).type(email); cy.get(usersSelector.buttonInviteUsers).click(); cy.verifyToastMessage( commonSelectors.toastMessage, usersText.userCreatedToast ); WorkspaceInvitationLink(email); cy.clearAndType(commonSelectors.passwordInputField, usersText.password); cy.get(commonSelectors.signUpButton).click(); cy.wait(2000); cy.get(commonSelectors.acceptInviteButton).click(); cy.get(commonSelectors.workspaceName).verifyVisibleElement( "have.text", "My workspace" ); }; export const inviteUser = (firstName, email) => { cy.get(usersSelector.buttonAddUsers).click(); cy.get(commonSelectors.inputFieldFullName).type(firstName); cy.get(commonSelectors.inputFieldEmailAddress).type(email); cy.get(usersSelector.buttonInviteUsers).click(); cy.verifyToastMessage( commonSelectors.toastMessage, usersText.userCreatedToast ); fetchAndVisitInviteLink(email); }; export const defaultWorkspace = () => { cy.get(".org-select-container").then(($title) => { if (!$title.text().includes("My workspace")) { cy.get(commonSelectors.workspaceName).realClick(); cy.contains("My workspace").realClick(); cy.wait(2000); defaultWorkspace(); } }); }; export const trunOffAllowPersonalWorkspace = () => { cy.get(commonSelectors.settingsIcon).click(); cy.get(commonEeSelectors.instanceSettingIcon).click(); cy.get(instanceSettingsSelector.manageInstanceSettings).click(); cy.get(instanceSettingsSelector.allowWorkspaceToggle) .eq(0) .then(($el) => { if ($el.is(":checked")) { cy.get(instanceSettingsSelector.allowWorkspaceToggle).eq(0).uncheck(); cy.get(commonEeSelectors.saveButton).click(); cy.verifyToastMessage( commonSelectors.toastMessage, "Instance settings have been updated" ); } }); }; export const verifySSOSignUpPageElements = () => { cy.get(commonSelectors.invitePageHeader).verifyVisibleElement( "have.text", "Join ToolJet" ); cy.get(commonSelectors.invitePageSubHeader).verifyVisibleElement( "have.text", "You are invited to ToolJet." ); cy.get(commonSelectors.userNameInputLabel).verifyVisibleElement( "have.text", commonText.userNameInputLabel ); cy.get(commonSelectors.invitedUserName).should("be.visible"); cy.get(commonSelectors.emailInputLabel).verifyVisibleElement( "have.text", commonText.emailInputLabel ); cy.get(commonSelectors.invitedUserEmail).should("be.visible"); cy.get(commonSelectors.acceptInviteButton).verifyVisibleElement( "have.text", commonText.acceptInviteButton ); 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"); }; export const VerifyWorkspaceInvitePageElements = () => { cy.get(commonSelectors.invitePageHeader).verifyVisibleElement( "have.text", commonText.invitePageHeader ); cy.get(commonSelectors.invitePageSubHeader).verifyVisibleElement( "have.text", commonText.invitePageSubHeader ); cy.verifyLabel(commonText.userNameInputLabel); cy.get(commonSelectors.invitedUserName).should("be.visible"); cy.verifyLabel(commonText.emailInputLabel); cy.get(commonSelectors.invitedUserEmail).should("be.visible"); cy.get(commonSelectors.acceptInviteButton).verifyVisibleElement( "have.text", commonText.acceptInviteButton ); 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"); } }); }; export const WorkspaceInvitationLink = (email) => { let invitationToken, organizationToken, workspaceId, userId, url = ""; cy.task("dbConnection", { dbconfig: Cypress.env("app_db"), sql: `select invitation_token from users where email='${email}';`, }).then((resp) => { invitationToken = resp.rows[0].invitation_token; cy.task("dbConnection", { dbconfig: Cypress.env("app_db"), sql: "select id from organizations where name='My workspace';", }).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 user_id='${userId}';`, }).then((resp) => { organizationToken = resp.rows[0].invitation_token; url = `/invitations/${invitationToken}/workspaces/${organizationToken}?oid=${workspaceId}`; common.logout(); cy.visit(url); }); }); }); }); }; export const enableDefaultSSO = () => { common.navigateToManageSSO(); cy.get("body").then(($el) => { if (!$el.text().includes("Allowed domains")) { cy.get(ssoSelector.generalSettingsElements.generalSettings).click(); } }); cy.get(ssoSelector.allowDefaultSSOToggle).then(($el) => { if (!$el.is(":checked")) { cy.get(ssoSelector.allowDefaultSSOToggle).check(); cy.get(ssoSelector.saveButton).click(); cy.verifyToastMessage(commonSelectors.toastMessage, ssoText.ssoToast); } }); }; export const disableSSO = (ssoSelector, toggleSelector) => { cy.wait(1000); cy.get(ssoSelector).click(); cy.get(toggleSelector).then(($el) => { if ($el.is(":checked")) { cy.get(toggleSelector).uncheck(); } }); }; export const AddDataSourceToGroup = (groupName, dsName) => { common.navigateToManageGroups(); cy.get(groupsSelector.groupLink(groupName)).click(); cy.get(eeGroupsSelector.datasourceLink).click(); cy.wait(500); cy.get( '[data-cy="datasource-select-search"] >> .rmsc > .dropdown-container > .dropdown-heading > .dropdown-heading-value > .gray' ).click(); cy.contains(dsName).realClick(); cy.get(eeGroupsSelector.AddDsButton).click(); cy.verifyToastMessage( commonSelectors.toastMessage, "Datasources added to the group" ); }; export const enableToggle = (toggleSelector) => { cy.get(toggleSelector).then(($el) => { if (!$el.is(":checked")) { cy.get(toggleSelector).check(); } }); }; export const disableToggle = (toggleSelector) => { cy.get(toggleSelector).then(($el) => { if ($el.is(":checked")) { cy.get(toggleSelector).uncheck(); } }); }; export const verifyPromoteModalUI = (versionName, currEnv, targetEnv) => { cy.get(commonEeSelectors.promoteButton) .verifyVisibleElement("have.text", " Promote ") .click(); cy.get(commonEeSelectors.modalTitle).verifyVisibleElement( "have.text", `Promote ${versionName}` ); cy.get(commonSelectors.closeButton).should("be.visible"); cy.get(multiEnvSelector.fromLabel).verifyVisibleElement("have.text", "FROM"); cy.get(multiEnvSelector.toLabel).verifyVisibleElement("have.text", "TO"); cy.get(multiEnvSelector.currEnvName).verifyVisibleElement( "have.text", currEnv ); cy.get('[data-cy="target-env-name"]').verifyVisibleElement( "have.text", targetEnv ); cy.get('[data-cy="cancel-button"]').verifyVisibleElement( "have.text", "Cancel" ); cy.get(commonEeSelectors.promoteButton) .eq(1) .verifyVisibleElement("have.text", "Promote "); }; export const resetPassword = (email) => { cy.visit("/"); cy.get(commonSelectors.forgotPasswordLink).click(); cy.clearAndType(commonSelectors.emailInputField, email); cy.get(commonSelectors.resetPasswordLinkButton).click(); cy.task("dbConnection", { dbconfig: Cypress.env("app_db"), sql: `select forgot_password_token from users where email='${email}';`, }).then((resp) => { const passwordResetLink = `/reset-password/${resp.rows[0].forgot_password_token}`; cy.visit(passwordResetLink); }); cy.wait(500); cy.clearAndType(commonSelectors.newPasswordInputField, "Password"); cy.clearAndType(commonSelectors.confirmPasswordInputField, "Password"); cy.wait(4000); cy.get(commonSelectors.resetPasswordButton).click(); cy.get(commonSelectors.backToLoginButton).click(); }; export const verifyTooltipDisabled = (selector, message) => { cy.get(selector) .trigger("mouseover", { force: true }) .then(() => { cy.get(".tooltip-inner").last().should("have.text", message); }); }; export const createAnAppWithSlug = (appName, slug) => { cy.apiCreateApp(appName); cy.openApp(); cy.dragAndDropWidget("Table", 250, 250); appPromote("development", "release"); cy.get(commonWidgetSelector.shareAppButton).click(); cy.clearAndType(commonWidgetSelector.appNameSlugInput, `${slug}`); cy.wait(2000); cy.get(commonWidgetSelector.modalCloseButton).click(); }; export const openInstanceSettings = () => { cy.get(commonSelectors.settingsIcon).click(); cy.get(commonEeSelectors.instanceSettingIcon).click(); }; export const openUserActionMenu = (email) => { cy.clearAndType(commonSelectors.inputUserSearch, email); cy.wait(1000); cy.get('[data-cy="user-actions-button"]').eq(0).click(); cy.wait(2000); }; export const archiveWorkspace = (workspaceName) => { cy.get(instanceSettingsSelector.allWorkspaceTab).click(); cy.clearAndType(commonEeSelectors.searchBar, workspaceName); cy.get(workspaceSelector.workspaceStatusChange).eq(0).click(); cy.get(commonEeSelectors.confirmButton).click(); }; export const passwordToggle = (enable) => { cy.getCookie("tj_auth_token").then((cookie) => { cy.request( { method: "PATCH", url: "http://localhost:3000/api/organizations/configs", headers: { "Tj-Workspace-Id": Cypress.env("workspaceId"), Cookie: `tj_auth_token=${cookie.value}`, }, body: { type: "form", enabled: enable }, }, { log: false } ).then((response) => { expect(response.status).to.equal(200); }); }); }; export const InstanceSSO = (personalWorkspace, enableSignup, workspaceSSO) => { allowPersonalWorkspace(personalWorkspace); cy.task("dbConnection", { dbconfig: Cypress.env("app_db"), sql: `UPDATE instance_settings SET value = '${enableSignup}' WHERE key = 'ENABLE_SIGNUP';UPDATE instance_settings SET value = '${workspaceSSO}' WHERE key = 'ENABLE_WORKSPACE_LOGIN_CONFIGURATION';`, }); }; export const resetInstanceDomain = () => { cy.getCookie("tj_auth_token").then((cookie) => { cy.request( { method: "PATCH", url: "http://localhost:3000/api/instance-login-configs", headers: { "Tj-Workspace-Id": Cypress.env("workspaceId"), Cookie: `tj_auth_token=${cookie.value}`, }, body: { allowedDomains: "" }, }, { log: false } ).then((response) => { expect(response.status).to.equal(200); }); }); }; export const instanceSSOConfig = (allow = true) => { const value = allow ? "true" : "false"; cy.task("dbConnection", { dbconfig: Cypress.env("app_db"), sql: `UPDATE sso_configs SET enabled = ${allow} WHERE sso IN ('google', 'git', 'openid')AND organization_id IS NULL;`, }); }; export const updateInstanceSettings = (key, value) => { cy.task("updateSetting", { dbconfig: Cypress.env("app_db"), sql: `UPDATE instance_settings SET value = ${value} WHERE key = ${key};`, }); }; export const updateLicense = (keyType = 'valid') => { const query = Cypress.env('queries').updateLicense.replace( '%KEY%', Cypress.env('license_keys')[keyType] ); cy.task("dbConnection", { dbconfig: Cypress.env("app_db"), sql: query }); };