import { faker } from "@faker-js/faker"; import { commonSelectors, commonWidgetSelector } from "Selectors/common"; import { commonWidgetText, commonText, codeMirrorInputLabel, } from "Texts/common"; export const openAccordion = ( accordionName, acordionToBeClosed, index = "0" ) => { closeAccordions(acordionToBeClosed); cy.get(commonWidgetSelector.accordion(accordionName, index)) .scrollIntoView() .should("be.visible") .and("have.text", accordionName) .then(($accordion) => { if ($accordion.hasClass("collapsed")) { cy.get(commonWidgetSelector.accordion(accordionName, index)).click(); } }); }; export const verifyAndModifyParameter = (paramName, value) => { cy.get(commonWidgetSelector.parameterLabel(paramName)) .scrollIntoView() .should("have.text", paramName); cy.get( commonWidgetSelector.parameterInputField(paramName) ).clearAndTypeOnCodeMirror(value); }; export const openEditorSidebar = (widgetName = "") => { cy.get(`${commonWidgetSelector.draggableWidget(widgetName)}:eq(0)`).trigger( "mouseover" ); cy.get(commonWidgetSelector.widgetConfigHandle(widgetName)).click(); }; export const verifyAndModifyToggleFx = ( paramName, defaultValue, toggleModification = true ) => { cy.get(commonWidgetSelector.parameterLabel(paramName)).should( "have.text", paramName ); cy.get( commonWidgetSelector.parameterFxButton( paramName, "[class*='fx-button unselectable']" ) ) .should("have.text", "Fx") .click(); if (defaultValue) cy.get(commonWidgetSelector.parameterInputField(paramName)) .find("pre.CodeMirror-line") .should("have.text", defaultValue); cy.get(commonWidgetSelector.parameterFxButton(paramName)).click(); if (toggleModification == true) cy.get(commonWidgetSelector.parameterTogglebutton(paramName)).click(); }; export const addDefaultEventHandler = (message) => { cy.get(commonWidgetSelector.addEventHandlerLink) .should("contain.text", commonWidgetText.addEventHandlerLink) .click(); cy.get(commonWidgetSelector.eventHandlerCard).click(); cy.get(commonWidgetSelector.alertMessageInputField) .find('[data-cy*="-input-field"]') .eq(0) .clearAndTypeOnCodeMirror(message); }; export const addAndVerifyTooltip = (widgetSelector, message) => { cy.get(commonWidgetSelector.tooltipInputField).clearAndTypeOnCodeMirror( message ); verifyTooltip(widgetSelector, message); }; export const editAndVerifyWidgetName = ( name, accordion = ["General", "Properties", "Layout"] ) => { closeAccordions(accordion); cy.clearAndType(commonWidgetSelector.WidgetNameInputField, name); cy.get(commonWidgetSelector.buttonCloseEditorSideBar).click(); cy.get(commonWidgetSelector.draggableWidget(name)).trigger("mouseover"); cy.get(commonWidgetSelector.widgetConfigHandle(name)) .click() .should("have.text", name); }; export const verifyComponentValueFromInspector = ( componentName, value, openStatus = "closed" ) => { cy.get(commonWidgetSelector.sidebarinspector).click(); if (openStatus == "closed") { cy.get(commonWidgetSelector.inspectorNodeComponents).click(); cy.get(commonWidgetSelector.nodeComponent(componentName)).click(); } cy.get(commonWidgetSelector.nodeComponentValue).contains(value); }; export const verifyMultipleComponentValuesFromInspector = ( componentName, values = [], openStatus = "closed" ) => { cy.get(commonWidgetSelector.sidebarinspector).click(); if (openStatus == "closed") { cy.wait(100); cy.get(commonWidgetSelector.inspectorNodeComponents).realClick(); cy.get(commonWidgetSelector.nodeComponent(componentName)).click(); cy.get(commonWidgetSelector.nodeComponentValues).click(); } values.forEach((value, i) => cy .get(`[data-cy="inspector-node-${i}"] > .mx-2`) .should("have.text", `${value}`) ); cy.forceClickOnCanvas(); }; export const selectColourFromColourPicker = ( paramName, colour, index = 0, parent = commonWidgetSelector.colourPickerParent ) => { cy.get(commonWidgetSelector.stylePicker(paramName)).click(); cy.get(parent) .eq(index) .then(() => { colour.forEach((value, i) => cy .get(commonWidgetSelector.colourPickerInput(i + 1)) .click() .clear() .type(value) .then(($input) => { if (!$input.val(value)) { cy.get(commonWidgetSelector.colourPickerInput(i + 1)) .click() .clear() .type(value); } }) ); }); cy.waitForAutoSave(); }; export const fillBoxShadowParams = (paramLabels, values) => { paramLabels.forEach((label, i) => cy .get(commonWidgetSelector.boxShadowParamInput(label)) .click() .clear() .type(values[i]) .then(($input) => { if (!$input.val(values[i])) { cy.get(commonWidgetSelector.boxShadowParamInput(label)) .click() .clear() .type(values[i]); } }) ); }; export const verifyBoxShadowCss = ( widgetName, color, shadowParam, type = "component" ) => { cy.forceClickOnCanvas(); cy.get( type == "component" ? commonWidgetSelector.draggableWidget(widgetName) : widgetName ).should( "have.css", "box-shadow", `rgba(${color[0]}, ${color[1]}, ${color[2]}, ${color[3] / 100}) ${ shadowParam[0] }px ${shadowParam[1]}px ${shadowParam[2]}px ${shadowParam[3]}px` ); }; export const verifyComponentFromInspector = ( componentName, openStatus = "closed" ) => { cy.get(commonWidgetSelector.sidebarinspector).click(); if (openStatus == "closed") { cy.get(commonWidgetSelector.inspectorNodeComponents).click(); cy.get( commonWidgetSelector.nodeComponent(componentName) ).verifyVisibleElement("have.text", componentName); } }; export const verifyAndModifyStylePickerFx = ( paramName, defaultValue, value, index = 0 ) => { cy.get(commonWidgetSelector.parameterLabel(paramName)).should( "have.text", paramName ); cy.get(commonWidgetSelector.stylePicker(paramName)).should("be.visible"); cy.get(commonWidgetSelector.stylePickerValueIcon(paramName)).should( "be.visible" ); cy.get(commonWidgetSelector.stylePickerValue(paramName)) .should("be.visible") .verifyVisibleElement("have.text", defaultValue); cy.get( commonWidgetSelector.parameterFxButton( paramName, "[class*='fx-button unselectable']" ) ) .should("have.text", "Fx") .click(); cy.get(commonWidgetSelector.stylePickerFxInput(paramName)).within(() => { cy.get(".CodeMirror-line") .should("be.visible") .and("have.text", defaultValue); }); cy.get( commonWidgetSelector.stylePickerFxInput(paramName) ).clearAndTypeOnCodeMirror(value); cy.get(commonWidgetSelector.stylePickerFxInput(paramName)) .eq(index) .within(() => { cy.get(".CodeMirror-line").should("be.visible").and("have.text", value); }); }; export const verifyWidgetColorCss = ( widgetName, cssProperty, color, innerProp = false ) => { cy.forceClickOnCanvas(); cy.get( innerProp ? widgetName : commonWidgetSelector.draggableWidget(widgetName) ).should( "have.css", cssProperty, `rgba(${color[0]}, ${color[1]}, ${color[2]}, ${color[3] / 100})` ); }; export const verifyLoaderColor = (widgetName, color) => { //using only for button cy.forceClickOnCanvas(); cy.get(commonWidgetSelector.draggableWidget(widgetName)) .invoke("attr", "style") .then((style) => { const loaderColor = style.split(" ").join(""); expect(loaderColor).to.include( `--loader-color:rgba(${color[0]},${color[1]},${color[2]},${ color[3] / 100 })` ); }); }; export const verifyLayout = (widgetName) => { openEditorSidebar(widgetName); openAccordion(commonWidgetText.accordionLayout); verifyAndModifyToggleFx( commonWidgetText.parameterShowOnDesktop, commonWidgetText.codeMirrorLabelTrue ); cy.get(commonWidgetSelector.draggableWidget(widgetName)).should("not.exist"); verifyAndModifyToggleFx( commonWidgetText.parameterShowOnMobile, commonWidgetText.codeMirrorLabelFalse ); cy.get(commonWidgetSelector.changeLayoutToMobileButton).click(); cy.get(commonWidgetSelector.draggableWidget(widgetName)).should("exist"); }; export const verifyPropertiesGeneralAccordion = (widgetName, tooltipText) => { openEditorSidebar(widgetName); openAccordion(commonWidgetText.accordionGenaral); cy.wait(3000); addAndVerifyTooltip( commonWidgetSelector.draggableWidget(widgetName), tooltipText ); }; export const verifyStylesGeneralAccordion = ( widgetName, boxShadowParameter, hexColor, boxShadowColor, index = 0 ) => { openEditorSidebar(widgetName); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); openAccordion(commonWidgetText.accordionGenaral, []); verifyAndModifyStylePickerFx( commonWidgetText.parameterBoxShadow, commonWidgetText.boxShadowDefaultValue, `${boxShadowParameter[0]}px ${boxShadowParameter[1]}px ${boxShadowParameter[2]}px ${boxShadowParameter[3]}px ${hexColor}` ); cy.get( commonWidgetSelector.parameterFxButton(commonWidgetText.parameterBoxShadow) ).click(); cy.get( commonWidgetSelector.stylePicker(commonWidgetText.parameterBoxShadow) ).click(); fillBoxShadowParams( commonWidgetSelector.boxShadowDefaultParam, boxShadowParameter ); selectColourFromColourPicker( commonWidgetText.boxShadowColor, boxShadowColor, index ); verifyBoxShadowCss(widgetName, boxShadowColor, boxShadowParameter); }; export const addTextWidgetToVerifyValue = (customfunction) => { cy.forceClickOnCanvas(); cy.dragAndDropWidget("Text", 600, 80); openEditorSidebar("text1"); verifyAndModifyParameter("Text", codeMirrorInputLabel(customfunction)); cy.forceClickOnCanvas(); cy.waitForAutoSave(); }; export const verifyTooltip = (widgetSelector, message) => { cy.forceClickOnCanvas(); cy.get(widgetSelector).click(); cy.get(widgetSelector) .trigger("mouseover", { timeout: 2000 }) .trigger("mouseover") .then(() => { cy.get(commonWidgetSelector.tooltipLabel) .last() .should("have.text", message); }); }; export const verifyWidgetText = (widgetName, text) => { cy.get(commonWidgetSelector.draggableWidget(widgetName)).should( "have.text", text ); }; export const randomNumber = (x, y) => { return faker.datatype.number({ min: x, max: y }); }; export const pushIntoArrayOfObject = (arrayOne, arrayTwo) => { let arrayOfObj = "["; arrayOne.forEach((element, index) => { arrayOfObj += `{name: "${element}", mark: "${arrayTwo[index]}" },`; }); return arrayOfObj + "]"; }; export const closeAccordions = (accordionNames = [], index = "0") => { if (accordionNames) { accordionNames.forEach((accordionName) => { cy.get(commonWidgetSelector.accordion(accordionName, index)) .click() .scrollIntoView() .should("be.visible") .and("have.text", accordionName) .then(($accordion) => { if (!$accordion.hasClass("collapsed")) { cy.get( commonWidgetSelector.accordion(accordionName, index) ).click(); } }); }); } };