ToolJet/cypress-tests/cypress/e2e/workspace/dashboard.cy.js
Ajith KV a4dd90d309
Fixed failed test cases for platform/v3.0 release (#7270)
* fix failed test cases

* Add check for cypress first render
2023-08-16 15:48:43 +05:30

495 lines
17 KiB
JavaScript

import { fake } from "Fixtures/fake";
import {
createFolder,
deleteFolder,
deleteDownloadsFolder,
navigateToAppEditor,
viewAppCardOptions,
verifyModal,
verifyConfirmationModal,
viewFolderCardOptions,
closeModal,
cancelModal,
verifyTooltip,
} from "Support/utils/common";
import {
modifyAndVerifyAppCardIcon,
login,
verifyAppDelete,
} from "Support/utils/dashboard";
import { profileSelector } from "Selectors/profile";
import { profileText } from "Texts/profile";
import { commonSelectors } from "Selectors/common";
import { dashboardSelector } from "Selectors/dashboard";
import { commonText } from "Texts/common";
import { dashboardText } from "Texts/dashboard";
describe("dashboard", () => {
const data = {};
data.appName = `${fake.companyName}-App`;
data.folderName = `${fake.companyName.toLowerCase()}-folder`;
data.cloneAppName = `cloned-${data.appName}`;
data.updatedFolderName = `new-${data.folderName}`;
beforeEach(() => {
cy.intercept("DELETE", "/api/folders/*").as("folderDeleted");
// cy.intercept("GET", "/api/apps").as("appEditor");
cy.intercept("GET", "/api/library_apps").as("appLibrary");
});
before(() => {
cy.intercept("GET", "/api/apps?page=1&folder=&searchKey=", {
fixture: "intercept/emptyDashboard.json",
}).as("emptyDashboard");
cy.intercept("GET", "/api/folders?searchKey=", { folders: [] }).as(
"folders"
);
cy.intercept("GET", "api/metadata", {
installed_version: "2.9.2",
version_ignored: false,
}).as("version");
login();
cy.wait("@emptyDashboard");
cy.wait("@folders");
cy.wait("@version");
// deleteDownloadsFolder();
cy.visitTheWorkspace('My workspace')
});
it("should verify the elements on empty dashboard", () => {
cy.get(commonSelectors.homePageLogo).should("be.visible");
cy.get(commonSelectors.workspaceName).verifyVisibleElement(
"have.text",
"My workspace"
);
cy.get(commonSelectors.workspaceName).click();
cy.get(commonSelectors.editRectangleIcon).should("be.visible");
cy.get(commonSelectors.appCreateButton).verifyVisibleElement(
"have.text",
"Create new app"
);
cy.get(dashboardSelector.folderLabel).should("be.visible");
cy.get(dashboardSelector.folderLabel).should(($el) => {
expect($el.contents().first().text().trim()).to.eq("Folders");
});
cy.get(commonSelectors.createNewFolderButton).should("be.visible");
cy.get(commonSelectors.allApplicationLink).verifyVisibleElement(
"have.text",
commonText.allApplicationLink
);
cy.get(commonSelectors.notificationsIcon).should("be.visible").click();
cy.get(commonSelectors.notificationsCard).should("be.visible");
cy.get(commonSelectors.notificationsCardTitle).verifyVisibleElement(
"have.text",
commonText.notificationsCardTitle
);
cy.get(commonSelectors.emptyNotificationIcon).should("be.visible");
cy.get(commonSelectors.emptyNotificationTitle).verifyVisibleElement(
"have.text",
commonText.emptyNotificationTitle
);
cy.get(commonSelectors.emptyNotificationSubtitle)
.should("be.visible")
.and(($el) => {
expect($el.contents().first().text().trim()).to.eq(
commonText.emptyNotificationSubtitle
);
});
cy.get(commonSelectors.notificationsCardFooter).verifyVisibleElement(
"have.text",
commonText.viewReadNotifications
);
cy.get(dashboardSelector.modeToggle).should("be.visible").click();
cy.get(commonSelectors.mainWrapper)
.should("have.attr", "class")
.and("contain", "theme-dark");
cy.get(dashboardSelector.modeToggle).click();
cy.get(dashboardSelector.homePageContent)
.should("have.attr", "class")
.and("contain", "bg-light-gray");
cy.get(commonSelectors.profileSettings).should("be.visible").click();
cy.get(profileSelector.profileLink).verifyVisibleElement(
"have.text",
profileText.profileLink
);
cy.get(commonSelectors.logoutLink).verifyVisibleElement(
"have.text",
commonText.logoutLink
);
cy.get(commonSelectors.breadcrumbTitle).should(($el) => {
expect($el.contents().first().text().trim()).to.eq(
commonText.breadcrumbApplications
);
});
cy.get(commonSelectors.breadcrumbPageTitle).verifyVisibleElement(
"have.text",
dashboardText.dashboardAppsHeaderLabel
);
cy.get(dashboardSelector.versionLabel).verifyVisibleElement(
"have.text",
"Version 2.9.2"
);
cy.get(dashboardSelector.emptyPageImage).should("be.visible");
cy.get(dashboardSelector.emptyPageHeader).verifyVisibleElement(
"have.text",
dashboardText.emptyPageHeader
);
cy.get(dashboardSelector.emptyPageDescription).verifyVisibleElement(
"have.text",
dashboardText.emptyPageDescription
);
cy.get(dashboardSelector.dashboardAppCreateButton).verifyVisibleElement(
"have.text",
dashboardText.createAppButton
);
cy.get(dashboardSelector.importAppButton).should("be.visible");
cy.get(dashboardSelector.importAppButton)
.invoke("text")
.then((text) => {
expect(text.trim()).equal(dashboardText.importAppButton);
});
cy.get(dashboardSelector.appTemplateRow).should("be.visible");
cy.reload();
verifyTooltip(commonSelectors.dashboardIcon, "Dashboard");
verifyTooltip(commonSelectors.databaseIcon, "Database");
verifyTooltip(commonSelectors.globalDataSourceIcon, "Global Datasources");
verifyTooltip(commonSelectors.workspaceSettingsIcon, "Workspace settings");
verifyTooltip(commonSelectors.notificationsIcon, "Comment notifications");
verifyTooltip(dashboardSelector.modeToggle, "Mode");
verifyTooltip(commonSelectors.avatarImage, "Profile");
});
it("Should verify app card elements and app card operations", () => {
cy.appUILogin();
cy.createApp();
cy.renameApp(data.appName);
cy.dragAndDropWidget("Table", 250, 250);
cy.get(commonSelectors.editorPageLogo).click();
cy.wait(500);
cy.reloadAppForTheElement(data.appName);
cy.get(commonSelectors.appCard(data.appName))
.parent()
.within(() => {
cy.get(commonSelectors.appCard(data.appName)).should("be.visible");
cy.get(commonSelectors.appTitle(data.appName)).verifyVisibleElement(
"have.text",
data.appName
);
cy.get(commonSelectors.appCreationDetails).should("be.visible");
cy.get(commonSelectors.appCreationDetails)
.should("be.visible")
.and(($el) => {
expect($el.contents().last().text().trim()).to.eq("The Developer");
});
});
cy.reloadAppForTheElement(data.appName);
viewAppCardOptions(data.appName);
cy.get(
commonSelectors.appCardOptions(commonText.changeIconOption)
).verifyVisibleElement("have.text", commonText.changeIconOption);
cy.get(
commonSelectors.appCardOptions(commonText.addToFolderOption)
).verifyVisibleElement("have.text", commonText.addToFolderOption);
cy.get(
commonSelectors.appCardOptions(commonText.cloneAppOption)
).verifyVisibleElement("have.text", commonText.cloneAppOption);
cy.get(
commonSelectors.appCardOptions(commonText.exportAppOption)
).verifyVisibleElement("have.text", commonText.exportAppOption);
cy.get(
commonSelectors.appCardOptions(commonText.deleteAppOption)
).verifyVisibleElement("have.text", commonText.deleteAppOption);
modifyAndVerifyAppCardIcon(data.appName);
createFolder(data.folderName);
cy.reloadAppForTheElement(data.appName);
viewAppCardOptions(data.appName);
cy.get(
commonSelectors.appCardOptions(commonText.addToFolderOption)
).click();
verifyModal(
dashboardText.addToFolderTitle,
dashboardText.addToFolderButton,
dashboardSelector.selectFolder
);
cy.get(dashboardSelector.moveAppText).verifyVisibleElement(
"have.text",
dashboardText.moveAppText(data.appName)
);
cy.get(dashboardSelector.selectFolder).click();
cy.get(commonSelectors.folderList).contains(data.folderName).click();
cy.get(dashboardSelector.addToFolderButton).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
commonText.AddedToFolderToast
);
cy.get(dashboardSelector.folderName(data.folderName)).verifyVisibleElement(
"have.text",
dashboardText.folderName(`${data.folderName} (1)`)
);
cy.get(dashboardSelector.folderName(data.folderName)).click();
cy.get(commonSelectors.appCard(data.appName))
.contains(data.appName)
.should("be.visible");
cy.reloadAppForTheElement(data.appName);
viewAppCardOptions(data.appName);
cy.get(commonSelectors.appCardOptions(commonText.removeFromFolderOption))
.verifyVisibleElement("have.text", commonText.removeFromFolderOption)
.click();
verifyConfirmationModal(commonText.appRemovedFromFolderMessage);
cancelModal(commonText.cancelButton);
cy.reloadAppForTheElement(data.appName);
viewAppCardOptions(data.appName);
cy.get(
commonSelectors.appCardOptions(commonText.removeFromFolderOption)
).click();
cy.get(commonSelectors.buttonSelector(commonText.modalYesButton)).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
commonText.appRemovedFromFolderTaost
);
cy.get(commonSelectors.modalComponent).should("not.exist");
cy.get(commonSelectors.empytyFolderImage).should("be.visible");
cy.get(commonSelectors.emptyFolderText).verifyVisibleElement(
"have.text",
commonText.emptyFolderText
);
cy.get(commonSelectors.allApplicationsLink).click();
deleteFolder(data.folderName);
cy.get(commonSelectors.allApplicationsLink).click();
cy.reloadAppForTheElement(data.appName);
viewAppCardOptions(data.appName);
cy.get(commonSelectors.appCardOptions(commonText.cloneAppOption)).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
dashboardText.appClonedToast
);
cy.waitForAppLoad();
cy.wait(2000);
cy.clearAndType(commonSelectors.appNameInput, data.cloneAppName);
cy.dragAndDropWidget("button", 25, 25);
cy.get(commonSelectors.editorPageLogo).click();
cy.wait("@appLibrary");
cy.wait(1000);
cy.reloadAppForTheElement(data.cloneAppName);
cy.get(commonSelectors.appCard(data.cloneAppName)).should("be.visible");
viewAppCardOptions(data.cloneAppName);
cy.get(commonSelectors.appCardOptions(commonText.exportAppOption)).click();
cy.get(commonSelectors.exportAllButton).click();
cy.exec("ls ./cypress/downloads/").then((result) => {
const downloadedAppExportFileName = result.stdout.split("\n")[0];
expect(downloadedAppExportFileName).to.contain.string("app");
});
cy.reloadAppForTheElement(data.cloneAppName);
viewAppCardOptions(data.cloneAppName);
cy.get(commonSelectors.deleteAppOption).click();
cy.get(commonSelectors.modalMessage).verifyVisibleElement(
"have.text",
commonText.deleteAppModalMessage(data.cloneAppName)
);
cy.get(
commonSelectors.buttonSelector(commonText.cancelButton)
).verifyVisibleElement("have.text", commonText.cancelButton);
cy.get(
commonSelectors.buttonSelector(commonText.modalYesButton)
).verifyVisibleElement("have.text", commonText.modalYesButton);
cancelModal(commonText.cancelButton);
cy.reloadAppForTheElement(data.cloneAppName);
viewAppCardOptions(data.cloneAppName);
cy.get(commonSelectors.deleteAppOption).click();
cy.get(commonSelectors.buttonSelector(commonText.modalYesButton)).click();
cy.verifyToastMessage(
commonSelectors.toastMessage,
commonText.appDeletedToast
);
verifyAppDelete(data.cloneAppName);
cy.wait("@appLibrary");
cy.deleteApp(data.appName);
cy.verifyToastMessage(
commonSelectors.toastMessage,
commonText.appDeletedToast
);
verifyAppDelete(data.appName);
});
it("Should verify the app CRUD operation", () => {
data.appName = `${fake.companyName}-App`;
cy.appUILogin();
cy.createApp();
cy.renameApp(data.appName);
cy.dragAndDropWidget("Button", 450, 450);
cy.get(commonSelectors.editorPageLogo).click();
cy.reloadAppForTheElement(data.appName);
cy.get(commonSelectors.appCard(data.appName)).should(
"contain.text",
data.appName
);
navigateToAppEditor(data.appName);
cy.get(commonSelectors.canvas).should("contain", "Button");
cy.get(commonSelectors.editorPageLogo).click();
cy.wait("@appLibrary");
cy.deleteApp(data.appName);
cy.verifyToastMessage(
commonSelectors.toastMessage,
commonText.appDeletedToast
);
verifyAppDelete(data.appName);
});
it("Should verify the folder CRUD operation", () => {
data.appName = `${fake.companyName}-App`;
cy.appUILogin();
cy.createApp();
cy.renameApp(data.appName);
cy.dragAndDropWidget("Button", 100, 100);
cy.get(commonSelectors.editorPageLogo).click();
cy.get(commonSelectors.createNewFolderButton).click();
verifyModal(
commonText.createFolder,
commonText.createFolderButton,
commonSelectors.folderNameInput
);
closeModal(commonText.closeButton);
cy.get(commonSelectors.createNewFolderButton).click();
cy.clearAndType(commonSelectors.folderNameInput, data.folderName);
cancelModal(commonText.cancelButton);
cy.contains(data.folderName).should("not.exist");
cy.get(commonSelectors.createNewFolderButton).click();
cy.clearAndType(commonSelectors.folderNameInput, data.folderName);
cy.get(
commonSelectors.buttonSelector(commonText.createFolderButton)
).click();
cy.get(commonSelectors.modalComponent).should("not.exist");
cy.get(dashboardSelector.folderName(data.folderName)).verifyVisibleElement(
"have.text",
dashboardText.folderName(data.folderName)
);
cy.get(dashboardSelector.folderName(data.folderName)).click();
cy.get(commonSelectors.empytyFolderImage).should("be.visible");
cy.get(commonSelectors.emptyFolderText).verifyVisibleElement(
"have.text",
commonText.emptyFolderText
);
cy.reloadAppForTheElement(data.folderName);
viewFolderCardOptions(data.folderName);
cy.get(commonSelectors.folderCard).should("be.visible");
cy.get(
commonSelectors.editFolderOption(data.folderName)
).verifyVisibleElement("have.text", commonText.editFolderOption);
cy.get(
commonSelectors.deleteFolderOption(data.folderName)
).verifyVisibleElement("have.text", commonText.deleteFolderOption);
cy.get(commonSelectors.editFolderOption(data.folderName)).click();
cy.get(commonSelectors.modalComponent).should("be.visible");
cy.get(commonSelectors.modalTitle(commonText.updateFolderTitle))
.should("be.visible")
.and("have.text", commonText.updateFolderTitle);
cy.get(commonSelectors.buttonSelector(commonText.closeButton)).should(
"be.visible"
);
cy.get(commonSelectors.buttonSelector(commonText.cancelButton))
.should("be.visible")
.and("have.text", commonText.cancelButton);
cy.get(commonSelectors.buttonSelector(commonText.updateFolderButton))
.should("be.visible")
.and("have.text", "Edit folder");
cy.get(commonSelectors.folderNameInput).should("be.visible")
// verifyModal(
// commonText.updateFolderTitle,
// commonText.updateFolderButton,
// commonSelectors.folderNameInput
// );
cy.clearAndType(commonSelectors.folderNameInput, data.updatedFolderName);
closeModal(commonText.closeButton);
cy.get(dashboardSelector.folderName(data.updatedFolderName)).should(
"not.exist"
);
cy.reloadAppForTheElement(data.folderName);
viewFolderCardOptions(data.folderName);
cy.get(commonSelectors.editFolderOption(data.folderName)).click();
cy.clearAndType(commonSelectors.folderNameInput, data.updatedFolderName);
cancelModal(commonText.cancelButton);
cy.get(dashboardSelector.folderName(data.updatedFolderName)).should(
"not.exist"
);
cy.reloadAppForTheElement(data.folderName);
viewFolderCardOptions(data.folderName);
cy.get(commonSelectors.editFolderOption(data.folderName)).click();
cy.clearAndType(commonSelectors.folderNameInput, data.updatedFolderName);
cy.get(
commonSelectors.buttonSelector(commonText.updateFolderButton)
).click();
cy.get(commonSelectors.modalComponent).should("not.exist");
cy.get(dashboardSelector.folderName(data.updatedFolderName))
.should("exist")
.and("be.visible");
cy.reloadAppForTheElement(data.folderName);
viewFolderCardOptions(data.updatedFolderName);
cy.get(commonSelectors.deleteFolderOption(data.updatedFolderName)).click();
cy.log(commonText.folderDeleteModalMessage(data.updatedFolderName));
verifyConfirmationModal(
`Are you sure you want to delete the folder ${data.updatedFolderName}? Apps within the folder will not be deleted.`
);
cancelModal(commonText.cancelButton);
cy.get(dashboardSelector.folderName(data.updatedFolderName))
.should("exist")
.and("be.visible");
deleteFolder(data.updatedFolderName);
cy.get(dashboardSelector.folderName(data.updatedFolderName)).should(
"not.exist"
);
cy.get(commonSelectors.allApplicationsLink).click();
cy.deleteApp(data.appName);
cy.verifyToastMessage(
commonSelectors.toastMessage,
commonText.appDeletedToast
);
verifyAppDelete(data.appName);
});
});