ToolJet/cypress-tests/cypress/e2e/happyPath/appbuilder/commonTestcases/components/buttonHappyPath.cy.js
2025-08-03 12:39:18 +05:30

478 lines
15 KiB
JavaScript

import { commonSelectors, commonWidgetSelector } from "Selectors/common";
import { buttonText } from "Texts/button";
import { fake } from "Fixtures/fake";
import { commonWidgetText } from "Texts/common";
import { verifyControlComponentAction } from "Support/utils/button";
import { resizeQueryPanel } from "Support/utils/dataSource";
import {
openAccordion,
verifyAndModifyParameter,
openEditorSidebar,
verifyAndModifyToggleFx,
addDefaultEventHandler,
addAndVerifyTooltip,
verifyComponentFromInspector,
verifyAndModifyStylePickerFx,
verifyWidgetColorCss,
selectColourFromColourPicker,
verifyLoaderColor,
fillBoxShadowParams,
verifyBoxShadowCss,
verifyLayout,
verifyTooltip,
editAndVerifyWidgetName,
verifyPropertiesGeneralAccordion,
verifyStylesGeneralAccordion,
} from "Support/utils/commonWidget";
import {
selectCSA,
selectEvent,
addSupportCSAData,
} from "Support/utils/events";
describe("Editor- Test Button widget ", () => {
beforeEach(() => {
cy.apiLogin();
cy.apiCreateApp(`${fake.companyName}-button-App`);
cy.openApp();
cy.dragAndDropWidget(buttonText.defaultWidgetText, 500, 500);
});
it("should verify position of component after dragging", () => {
const data = {};
data.widgetName = buttonText.defaultWidgetName;
resizeQueryPanel(0);
cy.getPosition(data.widgetName).then((position) => {
const [clientX, clientY] = position;
expect(clientX).not.to.be.closeTo(100, 10);
expect(clientY).not.to.be.closeTo(100, 10);
});
cy.moveComponent(data.widgetName, 100, 100);
cy.waitForAutoSave();
cy.getPosition(data.widgetName).then((position) => {
const [clientX, clientY] = position;
expect(clientX).to.be.closeTo(100, 20);
expect(clientY).to.be.closeTo(100, 10);
});
cy.reload();
resizeQueryPanel(0);
cy.get(commonWidgetSelector.draggableWidget(data.widgetName)).should(
"be.visible"
);
cy.getPosition(data.widgetName).then((position) => {
const [clientX, clientY] = position;
expect(clientX).to.be.closeTo(100, 20);
expect(clientY).to.be.closeTo(100, 10);
});
cy.moveComponent(data.widgetName, 750, 750);
cy.getPosition(data.widgetName).then((position) => {
const [clientX, clientY] = position;
expect(clientX).to.be.closeTo(750, 20);
expect(clientY).to.be.closeTo(750, 10);
});
cy.apiDeleteApp(data.appName);
});
it("should verify the properties of the button widget", () => {
const data = {};
data.appName = `${fake.companyName}-App`;
data.alertMessage = fake.randomSentence;
data.widgetName = fake.widgetName;
data.customMessage = fake.randomSentence;
data.tooltipText = fake.randomSentence;
cy.renameApp(data.appName);
openEditorSidebar(buttonText.defaultWidgetName);
editAndVerifyWidgetName(data.widgetName);
openAccordion(commonWidgetText.accordionProperties);
verifyAndModifyParameter(buttonText.buttonTextLabel, data.widgetName);
verifyComponentFromInspector(data.widgetName);
verifyAndModifyToggleFx(
buttonText.loadingState,
commonWidgetText.codeMirrorLabelFalse
);
cy.get(commonWidgetSelector.draggableWidget(data.widgetName)).should(
"have.class",
"btn-loading"
);
cy.get(
commonWidgetSelector.parameterTogglebutton(buttonText.loadingState)
).click();
cy.get(commonWidgetSelector.draggableWidget(data.widgetName)).should(
"not.have.class",
"btn-loading"
);
openEditorSidebar(data.widgetName);
openAccordion(commonWidgetText.accordionEvents);
addDefaultEventHandler(data.alertMessage);
cy.forceClickOnCanvas();
cy.waitForAutoSave();
cy.get(commonWidgetSelector.draggableWidget(data.widgetName)).click();
cy.verifyToastMessage(commonSelectors.toastMessage, data.alertMessage);
verifyPropertiesGeneralAccordion(data.widgetName, data.tooltipText);
verifyLayout(data.widgetName);
cy.get(commonWidgetSelector.changeLayoutToDesktopButton).click();
cy.get(
commonWidgetSelector.parameterTogglebutton(
commonWidgetText.parameterShowOnDesktop
)
).click();
cy.get(commonWidgetSelector.widgetDocumentationLink).should(
"have.text",
buttonText.buttonDocumentationLink
);
verifyControlComponentAction(data.widgetName, data.customMessage);
cy.apiDeleteApp(data.appName);
});
it("should verify the styles of the button component", () => {
const data = {};
data.appName = `${fake.companyName}-App`;
data.backgroundColor = fake.randomRgba;
data.textColor = fake.randomRgba;
data.loaderColor = fake.randomRgba;
data.boxShadowColor = fake.randomRgba;
data.colourHex = fake.randomRgbaHex;
data.boxShadowParam = fake.boxShadowParam;
cy.renameApp(data.appName);
openEditorSidebar(buttonText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
verifyAndModifyStylePickerFx(
buttonText.backgroundColor,
buttonText.defaultBackgroundColor,
data.colourHex
);
cy.get(
commonWidgetSelector.parameterFxButton(buttonText.backgroundColor)
).click();
selectColourFromColourPicker(
buttonText.backgroundColor,
data.backgroundColor
);
verifyWidgetColorCss(
buttonText.defaultWidgetName,
"background-color",
data.backgroundColor
);
openEditorSidebar(buttonText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
data.colourHex = fake.randomRgbaHex;
verifyAndModifyStylePickerFx(
buttonText.textColor,
buttonText.defaultTextColor,
data.colourHex
);
cy.get(
commonWidgetSelector.parameterFxButton(buttonText.textColor)
).click();
selectColourFromColourPicker(buttonText.textColor, data.textColor, 1);
verifyWidgetColorCss(buttonText.defaultWidgetName, "color", data.textColor);
openEditorSidebar(buttonText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
data.colourHex = fake.randomRgbaHex;
verifyAndModifyStylePickerFx(
buttonText.loaderColor,
buttonText.defaultLoaderColor,
data.colourHex
);
cy.get(
commonWidgetSelector.parameterFxButton(buttonText.loaderColor)
).click();
selectColourFromColourPicker(buttonText.loaderColor, data.loaderColor, 2);
verifyLoaderColor(buttonText.defaultWidgetName, data.loaderColor);
openEditorSidebar(buttonText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
verifyAndModifyToggleFx(
commonWidgetText.parameterVisibility,
commonWidgetText.codeMirrorLabelTrue
);
cy.get(
commonWidgetSelector.draggableWidget(buttonText.defaultWidgetName)
).should("not.be.visible");
cy.get(commonWidgetSelector.parameterTogglebutton("Visibility")).click();
verifyAndModifyToggleFx(
commonWidgetText.parameterDisable,
commonWidgetText.codeMirrorLabelFalse
);
cy.waitForAutoSave();
cy.get(
commonWidgetSelector.draggableWidget(buttonText.defaultWidgetName)
).should("have.attr", "disabled");
cy.get(commonWidgetSelector.parameterTogglebutton("Disable")).click();
cy.get('[data-cy="border-radius-input-field"]').realHover();
cy.get(
commonWidgetSelector.parameterFxButton(
commonWidgetText.parameterBorderRadius
)
)
.last()
.click();
verifyAndModifyParameter(
commonWidgetText.parameterBorderRadius,
buttonText.borderRadiusInput
);
cy.get(commonWidgetSelector.buttonCloseEditorSideBar).click({
force: true,
});
cy.get(
commonWidgetSelector.draggableWidget(buttonText.defaultWidgetName)
).should("have.css", "border-radius", "20px");
openEditorSidebar(buttonText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
data.colourHex = fake.randomRgbaHex;
verifyStylesGeneralAccordion(
buttonText.defaultWidgetName,
data.boxShadowParam,
data.colourHex,
data.boxShadowColor,
4
);
cy.apiDeleteApp(data.appName);
});
it("should verify the app preview", () => {
const data = {};
data.appName = `${fake.companyName}-App`;
data.alertMessage = fake.randomSentence;
data.widgetName = fake.widgetName;
data.customMessage = fake.randomSentence;
data.backgroundColor = fake.randomRgba;
data.textColor = fake.randomRgba;
data.loaderColor = fake.randomRgba;
data.boxShadowColor = fake.randomRgba;
data.boxShadowParam = fake.boxShadowParam;
data.tooltipText = fake.randomSentence;
cy.renameApp(data.appName);
openEditorSidebar(buttonText.defaultWidgetName);
verifyAndModifyParameter(buttonText.buttonTextLabel, data.widgetName);
openAccordion(commonWidgetText.accordionEvents);
addDefaultEventHandler(data.alertMessage);
verifyPropertiesGeneralAccordion(
buttonText.defaultWidgetName,
data.tooltipText
);
openEditorSidebar(buttonText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
selectColourFromColourPicker(
buttonText.backgroundColor,
data.backgroundColor
);
cy.forceClickOnCanvas();
openEditorSidebar(buttonText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
selectColourFromColourPicker(buttonText.textColor, data.textColor, 1);
cy.forceClickOnCanvas();
openEditorSidebar(buttonText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
selectColourFromColourPicker(buttonText.loaderColor, data.loaderColor, 2);
cy.forceClickOnCanvas();
openEditorSidebar(buttonText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
cy.get(
commonWidgetSelector.parameterInputField(
commonWidgetText.parameterBorderRadius
)
)
.first()
.clear()
.type(buttonText.borderRadiusInput);
verifyStylesGeneralAccordion(
buttonText.defaultWidgetName,
data.boxShadowParam,
data.colourHex,
data.boxShadowColor,
4
);
verifyControlComponentAction(
buttonText.defaultWidgetName,
data.customMessage
);
cy.waitForAutoSave();
cy.openInCurrentTab(commonWidgetSelector.previewButton);
cy.wait(4000);
cy.get(
commonWidgetSelector.draggableWidget(buttonText.defaultWidgetName)
).verifyVisibleElement("have.text", data.widgetName);
cy.get(
commonWidgetSelector.draggableWidget(buttonText.defaultWidgetName)
).click();
cy.wait(500);
cy.verifyToastMessage(commonSelectors.toastMessage, data.alertMessage);
cy.get(commonWidgetSelector.draggableWidget('textinput1')).should(
"have.value",
data.customMessage
);
verifyTooltip(
commonWidgetSelector.draggableWidget(buttonText.defaultWidgetName),
data.tooltipText
);
verifyWidgetColorCss(
buttonText.defaultWidgetName,
"background-color",
data.backgroundColor
);
verifyWidgetColorCss(buttonText.defaultWidgetName, "color", data.textColor);
verifyLoaderColor(buttonText.defaultWidgetName, data.loaderColor);
cy.get(
commonWidgetSelector.draggableWidget(buttonText.defaultWidgetName)
).should("have.css", "border-radius", "20px");
verifyBoxShadowCss(
buttonText.defaultWidgetName,
data.boxShadowColor,
data.boxShadowParam
);
cy.apiDeleteApp(data.appName);
});
it("Should verify csa", () => {
cy.get('[data-tooltip-content="Hide query panel"]').click();
// cy.dragAndDropWidget(buttonText.defaultWidgetText);
selectEvent("On click", "Show alert");
cy.get('[data-cy="real-canvas"]').click("topRight", { force: true });
cy.dragAndDropWidget("Text input", 500, 50);
selectEvent("On change", "Control Component");
selectCSA("button1", "Set text", "500");
addSupportCSAData("Text", "{{components.textinput1.value");
cy.get('[data-cy="real-canvas"]').click("topRight", { force: true });
cy.dragAndDropWidget(buttonText.defaultWidgetText, 500, 100);
selectEvent("On click", "Control Component");
selectCSA("button1", "Click");
cy.get('[data-cy="real-canvas"]').click("topRight", { force: true });
cy.dragAndDropWidget(buttonText.defaultWidgetText, 500, 150);
selectEvent("On click", "Control Component");
cy.wait("@events");
selectCSA("button1", "Disable");
cy.wait("@events");
cy.get('[data-cy="event-Value-fx-button"]').realClick();
cy.get('[data-cy="event-Value-input-field"]').clearAndTypeOnCodeMirror(
`{{true`
);
cy.get('[data-cy="real-canvas"]').click("topRight", { force: true });
cy.dragAndDropWidget(buttonText.defaultWidgetText, 500, 200);
selectEvent("On click", "Control Component");
selectCSA("button1", "Visibility");
cy.get('[data-cy="real-canvas"]').click("topRight", { force: true });
cy.dragAndDropWidget(buttonText.defaultWidgetText, 500, 250);
selectEvent("On click", "Control Component");
selectCSA("button1", "Loading");
cy.wait(500);
cy.get('[data-cy="event-Value-fx-button"]').realClick();
cy.get('[data-cy="event-Value-input-field"]').clearAndTypeOnCodeMirror(
`{{true`
);
cy.get(commonWidgetSelector.draggableWidget("textinput1")).type("testBtn");
cy.wait(500);
cy.get(commonWidgetSelector.draggableWidget("button1")).should(
"have.text",
"testBtn"
);
cy.get(commonWidgetSelector.draggableWidget("button2")).click();
cy.verifyToastMessage(commonSelectors.toastMessage, "Hello world!");
cy.get(commonWidgetSelector.draggableWidget("button5")).click();
cy.get(
commonWidgetSelector.draggableWidget(buttonText.defaultWidgetName)
).should("have.class", "btn-loading");
cy.get(commonWidgetSelector.draggableWidget("button3")).click();
cy.get(
commonWidgetSelector.draggableWidget(buttonText.defaultWidgetName)
).should("have.attr", "disabled");
cy.get(commonWidgetSelector.draggableWidget("button4")).click();
cy.get(
commonWidgetSelector.draggableWidget(buttonText.defaultWidgetName)
).should("not.be.visible");
cy.apiDeleteApp();
});
it("Should verify deletion of button component from right side panel", () => {
openEditorSidebar(buttonText.defaultWidgetName);
cy.get('[data-cy="component-inspector-options"]').click();
cy.get('[data-cy="component-inspector-delete-button"]').click();
cy.get('[data-cy="yes-button"]').click();
cy.verifyToastMessage(
`[class=go3958317564]`,
"Component deleted! (⌘ + Z to undo)"
);
cy.notVisible(commonWidgetSelector.draggableWidget("button1"));
cy.reload();
cy.notVisible(commonWidgetSelector.draggableWidget("button1"));
});
it("Should delete button via keyboard action", () => {
cy.realPress("Backspace");
cy.get('[data-cy="yes-button"]').click();
cy.verifyToastMessage(
`[class=go3958317564]`,
"Component deleted! (⌘ + Z to undo)"
);
cy.notVisible(commonWidgetSelector.draggableWidget("button1"));
cy.reload();
cy.notVisible(commonWidgetSelector.draggableWidget("button1"));
});
});