ToolJet/cypress-tests/cypress/e2e/happyPath/appbuilder/commonTestcases/components/tableRegression.cy.js

1370 lines
50 KiB
JavaScript
Raw Normal View History

import { fake } from "Fixtures/fake";
import {
commonText,
commonWidgetText,
codeMirrorInputLabel,
} from "Texts/common";
import { commonWidgetSelector, commonSelectors } from "Selectors/common";
import { tableText } from "Texts/table";
import { tableSelector } from "Selectors/table";
import {
searchOnTable,
verifyTableElements,
selectDropdownOption,
deleteAndVerifyColumn,
addAndOpenColumnOption,
verifyAndEnterColumnOptionInput,
verifyInvalidFeedback,
addInputOnTable,
verifySingleValueOnTable,
verifyAndModifyToggleFx,
selectFromSidebarDropdown,
dataPdfAssertionHelper,
dataCsvAssertionHelper,
addFilter,
addNewRow,
} from "Support/utils/table";
import {
selectCSA,
selectEvent,
addSupportCSAData,
2023-07-03 10:50:29 +00:00
selectSupportCSAData,
} from "Support/utils/events";
import {
openAccordion,
verifyAndModifyParameter,
openEditorSidebar,
// verifyAndModifyToggleFx,
verifyComponentValueFromInspector,
verifyBoxShadowCss,
verifyLayout,
verifyTooltip,
editAndVerifyWidgetName,
addTextWidgetToVerifyValue,
verifyPropertiesGeneralAccordion,
verifyStylesGeneralAccordion,
randomNumber,
fillBoxShadowParams,
selectColourFromColourPicker,
closeAccordions,
} from "Support/utils/commonWidget";
import { verifyNodeData, openNode, verifyValue } from "Support/utils/inspector";
import { textInputText } from "Texts/textInput";
2023-07-03 10:50:29 +00:00
import { deleteDownloadsFolder } from "Support/utils/common";
import { resizeQueryPanel } from "Support/utils/dataSource";
import { waitForQueryAction } from "Support/utils/queries";
describe("Table", () => {
beforeEach(() => {
cy.apiLogin();
cy.apiCreateApp(`${fake.companyName}-table-App`);
cy.openApp();
2023-07-03 10:50:29 +00:00
deleteDownloadsFolder();
cy.viewport(1400, 2200);
2023-07-03 10:50:29 +00:00
cy.modifyCanvasSize(900, 800);
cy.dragAndDropWidget("Table", 50, 50);
cy.resizeWidget(tableText.defaultWidgetName, 750, 600);
resizeQueryPanel("1");
2023-06-20 13:50:49 +00:00
cy.get(`[data-cy="allow-selection-toggle-button"]`).click({ force: true });
});
afterEach(() => {
cy.apiDeleteApp();
});
it("Should verify the table components and labels", () => {
cy.get(
commonWidgetSelector.draggableWidget(tableText.defaultWidgetName)
).should("be.visible");
cy.get(tableSelector.searchInputField)
.should("be.visible")
.invoke("attr", "placeholder")
.should("contain", tableText.placeHolderSearch);
searchOnTable(tableText.defaultInput[0].email);
cy.get(tableSelector.column(2))
.eq("0")
.should("have.text", tableText.defaultInput[0].email);
searchOnTable();
cy.get(tableSelector.pageIndexDetails).verifyVisibleElement(
"have.text",
tableText.defaultPageIndexDetails
);
cy.get(`${tableSelector.pageIndexDetails}>input`)
.invoke("val")
.should("equal", "1");
cy.get(tableSelector.paginationButtonToFirst).should("be.visible");
cy.get(tableSelector.paginationButtonToPrevious).should("be.visible");
cy.get(tableSelector.paginationButtonToNext).should("be.visible");
cy.get(tableSelector.paginationButtonToLast).should("be.visible");
cy.get(tableSelector.labelNumberOfRecords).verifyVisibleElement(
"have.text",
tableText.defaultNumberOfRecords
);
cy.get(tableSelector.buttonDownloadDropdown).should("be.visible").click();
cy.get(tableSelector.optionDownloadCSV).verifyVisibleElement(
"have.text",
tableText.optionDownloadCSV
);
cy.get(tableSelector.optionDownloadExcel).verifyVisibleElement(
"have.text",
tableText.optionDownloadExcel
);
cy.get(tableSelector.selectColumnDropdown).should("be.visible").click();
cy.get(tableSelector.selectColumnCheckbox(tableText.id))
.should("be.visible")
.and("be.checked");
cy.get(tableSelector.selectColumnCheckbox(tableText.name))
.should("be.visible")
.and("be.checked");
cy.get(tableSelector.selectColumnCheckbox(tableText.email))
.should("be.visible")
.and("be.checked");
cy.get(tableSelector.selectAllOption).verifyVisibleElement(
"have.text",
tableText.oprionSelectAll
);
cy.get(tableSelector.selectColumnOption(tableText.id)).verifyVisibleElement(
"have.text",
` ${tableText.id}`
);
cy.get(
tableSelector.selectColumnOption(tableText.name)
).verifyVisibleElement("have.text", ` ${tableText.name}`);
cy.get(
tableSelector.selectColumnOption(tableText.email)
).verifyVisibleElement("have.text", ` ${tableText.email}`);
cy.get(tableSelector.selectColumnCheckbox(tableText.id)).click();
cy.notVisible(tableSelector.columnHeader(tableText.id));
cy.get(tableSelector.selectColumnCheckbox(tableText.id)).click();
2023-05-30 19:19:14 +00:00
cy.get(".canvas-container").click();
cy.get(tableSelector.columnHeader(tableText.id)).should("be.visible");
cy.get(tableSelector.filterButton).click();
cy.get(tableSelector.headerFilters).verifyVisibleElement(
"have.text",
tableText.headerFilters
);
cy.get(tableSelector.labelNoFilters).verifyVisibleElement(
"have.text",
tableText.labelNoFilters
);
cy.get(tableSelector.buttonAddFilter).verifyVisibleElement(
"have.text",
tableText.buttonLabelAddFilter
);
cy.get(tableSelector.buttonClearFilter).verifyVisibleElement(
"have.text",
tableText.buttonLabelClearFilters
);
cy.get(tableSelector.buttonCloseFilters).should("be.visible");
cy.get(tableSelector.buttonAddFilter).realClick().realClick();
cy.get(tableSelector.labelColumn).verifyVisibleElement(
"have.text",
tableText.labelColumn
);
cy.get(tableSelector.labelAnd()).verifyVisibleElement(
"have.text",
tableText.labelAnd
);
cy.get(tableSelector.filterSelectColumn(0)).should("be.visible");
cy.get(tableSelector.filterSelectOperation(0)).should("be.visible");
cy.get(tableSelector.filterInput(0)).should("be.visible");
cy.get(tableSelector.filterClose(0)).should("be.visible");
cy.get(tableSelector.filterSelectColumn(0))
.click()
.type(`${tableText.email}{enter}`);
cy.get(tableSelector.filterSelectOperation(0))
.click()
.type(`${tableText.optionEquals}{enter}`);
cy.get(tableSelector.filterInput(0)).type(tableText.defaultInput[1].email);
cy.get(tableSelector.filterClose(1)).click();
cy.notVisible(tableSelector.filterClose(1));
cy.get(tableSelector.buttonCloseFilters).click();
cy.get(tableSelector.column(2)).each(($el) => {
cy.wrap($el).should("have.text", tableText.defaultInput[1].email);
});
cy.get(tableSelector.filterButton).click();
cy.get(tableSelector.filterClose(0)).click();
cy.get(tableSelector.buttonCloseFilters).click();
cy.get(tableSelector.column(2))
.eq(0)
.should("have.text", tableText.defaultInput[0].email);
cy.get(tableSelector.column(0)).each(($el, index) => {
cy.wrap($el).should("have.text", index + 1);
});
cy.get(tableSelector.columnHeader(tableText.id)).dblclick();
cy.get(tableSelector.column(0)).each(($el, index) => {
cy.wrap($el).should("have.text", 4 - index);
});
});
it("should verify the sidebar element", () => {
const data = {};
data.widgetName = fake.widgetName;
openEditorSidebar(tableText.defaultWidgetName);
editAndVerifyWidgetName(data.widgetName, []);
cy.forceClickOnCanvas();
openEditorSidebar(data.widgetName);
cy.get('[data-cy="table-data-input-field"]').clearAndTypeOnCodeMirror(
codeMirrorInputLabel(`[{id:1,name:"Mike",email:"[email protected]" },{id:2,name:"Nina",email:"[email protected]" },{id:3,name:"Steph",email:"[email protected]" },{id:4,name:"Oliver",email:"[email protected]" },
]`)
);
// cy.get('[data-cy="inspector-close-icon"]').click();
cy.forceClickOnCanvas();
cy.waitForAutoSave();
verifyTableElements([
{ id: 1, name: "Mike", email: "[email protected]" },
{ id: 2, name: "Nina", email: "[email protected]" },
{ id: 3, name: "Steph", email: "[email protected]" },
{ id: 4, name: "Oliver", email: "[email protected]" },
]);
2023-05-30 19:19:14 +00:00
//cy.get('[data-cy="inspector-close-icon"]').click();
openEditorSidebar(data.widgetName);
openAccordion("Columns", []);
deleteAndVerifyColumn("email");
openEditorSidebar(data.widgetName);
openAccordion("Action buttons");
cy.get('[data-cy="no-items-banner-action-button"]').should(
"have.text",
"There are no action buttons"
);
cy.get('[data-cy="button-add-new-action-button"]')
.should("have.text", "New action button")
.click();
cy.get('[data-cy="action-button-button-0"]').verifyVisibleElement(
"have.text",
"Button"
);
// cy.get('[data-cy="real-canvas"]').scrollTo("right");
// cy.pause();
// cy.get('[data-cy="real-canvas"]').scrollTo("right");
// cy.pause();
// cy.get(tableSelector.columnHeader("Actions"))
// .scrollIntoView()
// .verifyVisibleElement("have.text", "Actions");
cy.get('[data-cy="action-button-button-0"]').click();
cy.get('[data-cy="label-action-button-text"]').verifyVisibleElement(
"have.text",
"Button text"
);
cy.get('[data-cy="action-button-text-input-field"]').type(
"{selectAll}{backspace}FakeName1"
);
cy.get('[data-cy="action-button-fakename1-0"]').should(
"have.text",
"FakeName1"
);
cy.get('[data-cy="label-action-button-position"]').verifyVisibleElement(
"have.text",
"Button position"
); // dropdown_type
Release : Appbuilder - appdefinition architecture revamp (#7448) * importing service: updated * import service, categorize and update events with associations * fix: deleting events associated with pages on page delete * handle app version: creation, updates, switching versions from app builder * on version switch: no updates should be triggeted to server * versioning for query events * fixes: new components db transaction fails for newly created pages * fixes: query chaining with events * map older query ids to new for event action: run query * fixes: multi-editor support * fixes/multi-editor: users should be able to edit different version of the app at real time without sync * minor fixes * fixes: undo/redo savings with latest app def updates * fixes: execution of page switch action * fixes: csa events * fixes: csa selection dropdown * fixes: on csa action changed, the action params should also be updated correctly * fixes: event rendering actions * fixes: table event - row hovered * fixes: table event - on search * fixes: table event - onNewRowsAdded * fixes: table event - onBulkUpdate * fixes: table column updates * fixes: table column updates to component definition * re-order events * handle adding widgets to sub containers * fixes: csa for modals * fixes: deletes children components on deleting parent * fixes: components with default children * fixed events for imported app * gs- crash fix * fixes: global settings UI * fixes: header and user * fixes: page switch event * fixes: adapts to new event manager ui * import app * add event index for creating app versions * fixes: table rendering on viewer * fixes: event execution for viewer * fixes: loading app with slug * fixes: Page side bar is not rendered in viewer * fixes: version manager ui for released versions * fixes: tabs default children saving * fixes: app resource mapping for parent-child components * fixes: duplicate pages * fixes: page load events for viewer * fixes: enable and disable pages * fixes: hide and show pages * fixes: on maintaince toggle button * fixes: new version child components are not tied to its parent * fixes: redo breaks- on deleting a component and undo then redo (editor) * new export schema and handling apps impport with new and older schemas * table events: column and actions events * fixes: query confirmations popup * fixes: copy/paste * fixes: cut/paste * fixes: event mapping for newer versions for new components, pages and queries id * fixes: app resource mapping for imported apps * fixes: cascade events for table actions and colulmns * Migrates the existing JSON-based app definition schema to a structured table-based architecture. This enhancement introduces component and page-specific permissions, improves data organization, and enables fine-grained access control. Additionally, it adds the 'globalSettings' column to the 'appVersion' table. * cleanup * fixes: enable and disable pages * fixes: hide/show page and set saving state for cloning pages * cleanup * fixes: page disable menu * fixes: migrations for data query events * fixes: switching app version from version creation modal results in editor loading state * fixes: setting up the page title * fixes: Page duplication has same page handler name. * fixes: updating general styles of a component * fixes: delete component should trigger confirmations box for one widget and for multiple should process deletion * fixes: CSA for button(component) does not work for page event handler. * fixes: component name update [calendar] * fixes: Duplicating pages do not create child components * improves copy-paste mechanism of widgets * fix: calendar subcontainer components comes out of the parent container on copy/paste * fix:Form properties, no option for selecting submit button. * fixes: Dark mode issue with event handler. * fixes: display preferences for components * fixes:have to select the selected version again to create a new * fixes: Pages menu is not getting disabled when enabled and vice-versa * fixes: correct naming of duplicating pages * fixes: 2 action button even with no event attached to one, it gets attached to both. * fixes: event deletion for action btn removal * fixes: Keyboard action to move component is not saving * reduce outbound calls when widget re-positioned with keyboard * fixes: Not able to delete component from Inspector * fixes: cloning of widgets * fixes: Request confirmation before query run toggle is not visible on viewer mode. (can't run query if confirmation toggle is on) * fixes: event sorting * fixes: events mapping for versioning: queries and components * fixes: importing app bug - query running issue when importing apps * [appdef-2.0] fixes: event action linking for imported apps (#7627) * fixes: event action linking for imported apps * cleanup * fixes: Toggling display preferences is not saving for components. (#7629) * fixes: dnd issue for mobile view (#7632) * default page menu settings should be true * [appdef-2] event manager selector bug (#7631) * fixes: on selecting query - 3 outbound calls are done to the server, and event manager re-renders 3times resulting in flikering ui * reduces outbound calls for updating csa actions to 1 * [appdef] - copy associated events for cloned components (#7634) * fixes: Copying component is not coping the events associated with the component. * cleanup * [appdef-2] : Fixes frontend issues (#7636) * Fix UI issues * Fix Scrollbar is not available after we pin the inspector. * Fix button jumping places if switched from extended monitor to laptop. * Fix white background around canvas * fixes: Component inspector go blank after switching to different pages after dropping components (#7637) * fixes: general properties of widgets are not getting saved (#7638) * fixes: selecting the components via selecto (#7653) * fixes: multiple undo-redo simlut. (#7656) * fixes: copy associated events for cloned queries (#7657) * Fixes not able toggle of Listview pagination toggle (#7701) * Fix UI issues * Fix Scrollbar is not available after we pin the inspector. * Fix button jumping places if switched from extended monitor to laptop. * fix enable pagination not getting toggled in listview * Fix form children not being displayed * fixes: dnd fix for widgets dropped inside subcontainer (#7691) * [Appdef-2] copy-paste, cut and clone fix for widgets (#7687) * fixes: copy/cut/paste and cloning of widgets * cleanup * can copy/paste-clone in listview * fixes: on mulit-widget selected via mouse area selection: widget manager should be rendered (#7688) * fixes: on deleting tabs widgets should delete its children (#7692) * fixes: column data generated from restapi does not render correct columns in viewer (#7695) * [appdef-2] fixes: multiple query confirmations trigger (#7704) * fixes: multiple query confirmations trigger * fixes: multiple outbound calls in the inital load, run queries on app load with confirmations:editor&viewer * fixes: correct confirmations list to the stote * [appdef-2] fixes:Event handler are running twice for page load (#7705) * fixes:Event handler are running twice for page load(eg- add 2 show alert and change the page). * fixes: for viewer page events * fixes: container widget is not getting saved on drop (#7718) * fixes: Create app version from is empty if we delete another version. (#7720) * [appdef-2] fixes: on versioned app (switching or creating) version, the componet layout is wrongly updated to the container dnd (#7721) * fixes: on versioned app (switching or creating) version, the component layout is wrongly updated to the container dnd * fixes: container widget is not saving * fixes: triggering confirmation box for every query with on load trigger (#7728) * Fixes canvas background and go to app crashing (#7725) * Fix UI issues * Fix Scrollbar is not available after we pin the inspector. * Fix button jumping places if switched from extended monitor to laptop. * fix enable pagination not getting toggled in listview * Fix form children not being displayed * Fix Go to app is crashing the application. * Fix fx for canvas background color is not working. * fixes: cloned/copied table with actions (#7758) * fixes: calendar and form widgets (#7735) * fixes: rendering of components in viewer for mobile (#7759) * fixes: toggling, resizing, dropping widgets in both display preferences (#7760) * fixes: page switch action via runjs actions (#7762) * fixes: component validations do not get saved (#7766) * [appdef-2] subcontainer dnd height outbound fix (#7767) * fixes: listview children can be dragged outside its outbound limit * cleanup * fixes: widget inspector going to empty component (#7768) * fixes: goToApp not running from runjs in viewer mode (#7770) * fixes: multi-components cloning or copy/paste have same name (#7761) * Fix disabled page is being displayed on switch page event dropdown (#7769) * Fix kanban rendering leading to infinite look * Fix disabled page is being displayed on switch page event dropdown * Fix Kanban widget getting into infinite loop (#7808) * Fix kanban rendering leading to infinite look * Fix disabled page is being displayed on switch page event dropdown * Fix kanban getting into infinite loop * adds support of constants to current state of the ediotr (#7821) * removes loader added for testing (#7822) * [appdef] fixes - dnd container cloning edge cases (#7820) * fixes: copy/pasting components updating wrong display preferences * fixes: copy/pasting tabs and cloning components inside tabs * fixes: duplication of calendar component bug * if components in subcontainer(children) are selected via selecto along with its parent, children should not be going through duplication * if components in subcontainer(children) are selected via selecto along with its parent, children should not be going through duplication * fixes: Resolving App Version and Timestamp Update Challenges (#7863) * Fixes query confirmation issue on viewer (#7862) * [appdef ]fixes: components copied from template app to a new page or app do not render in canvas (#7867) * fixes: components copied from template app to a new page or app does not render in canvas * fixes: table crash on coping from other pages with columns * adds the column exists check * fixes: tables crash for imported apps with auto generated cols * appdefinition refactor/cleanup (#7872) * cleanup controllers and request calls from frontend * removing unwanted console logs and unused variables * revering v1 apis og * adding length validation for page dto * adding dtos for components * updated dtos for components and pages * added dto for event handlers * fixes event handler dto * fixes: page dto * adds/fixes event handlers creating dtp * fixes: event handler service and dtos * [appdef] fixes: Creating page not changing the slug (#7873) * fixes: Creating page not changing the slug * removes extra whitespace * [appdef] fixes: on importing a exported app child components are not present in the parent component (#7864) * fixes: on importing a exported app child components are not present in the parent component * handles parent component mapping for tabs and calendar component * handles parent component mapping for tabs and calendar component for new versions * [appdef] api endpoint fixes (#7888) * fixes: moved fetching app version to v2 api * fixes: app slug api * Fixes CurrentUser & Mode not present in globals in inspector (#7812) * Fix current user not being present in inspector * Add Mode in globas in inspector * Fix creating page not changing the slug. * Revert "Fix creating page not changing the slug." This reverts commit 0ff9c18ab8b622a0fa96f6d7b200898c19b060f4. * Fixes on adding query params in event handler, breaking the app (#7889) * Fix on version change if left sidebar is open canvas not scrolling right * Fix on adding query params in event handler, breaking the app * Fix * Fix on version change if left sidebar is open canvas not scrolling right (#7884) * fixes: fixes on on app load switch page action via run queires (#7858) * fixes: fixes on on app load switch page action via run queires * Fix * refactor * Fix on load event not appearing on viewer --------- Co-authored-by: Nakul Nagargade <[email protected]> * [appdef] fixes: event actions mapping for import-export (#7895) * fixes: event actions mapping for import-export * fixes: updates organisation id * fixes: templates event mapping * do not app again for not normalized apps * [appdef]migrations fix (#7910) * fixes: page attributes * fixes: table action and column events for imported apps (prev) and app migrations * adds processDataInBatches * fixes: app data migrations * create a new queryBuilder instance for each batch to ensure that there's no interference between batches * fix: app migration * cleanup * cleanup * fixes: table column data not updated on boxes changes in container (#7919) * fixes: creating all pages from all versions (#7905) * Fix state not changing in chart (#7900) * Fix in chart, toggles are not working * Update Chart.jsx --------- Co-authored-by: Arpit <[email protected]> * fix event param not updating (#7902) * [appdef] Pages attributes are missing on versioning or imported app (#7904) * fixes: on creating new version pages attributes are not copied * fixes: on importing apps with pages attributes are not copied * fixes: component double duplication issues * fixes: deleting children components via selecto (#7915) * fixes: component deletion fixes * fixes: cloning components to a new version should also create associated events * fixes: creating components on cloning with general styles or properties * fixes: creatinng general properties on version * fixes: imported app * fixes added to app migrations * fixes: mobile view * fixes: Created a new version with multiple pages from second page, the new version shows the homepage with second page URL * fixes: table crash due to columnDeletionHistory saved as an object instead of an array * fixes: on creating new version, data_queries should be created (#7975) * [appdef] fixes: migrations (#7951) * refactor migrations with batching * event actions: switch page should be mapped to correct new page id * fixes: importing json-schema app with multiple version: same components do not get render in the canvas * fixes: import/export of legecy apps * event actions mapping to correct page ids: migrations * fixes: migrations children not rendered in subcontainer components * adapts to main/viewer changes * fixes: viewer with #6698 * fixes: viewer route * fixes: page switch via validateRoutes * fixes: on delete version fetchApp fails * handle error on saving changes * skip name opts * typo fix * Instead of relying on the schema, we choose to use the Tooljet version as the determining factor for decoupling import flows * fixes: slug updates from global settings * fixes: slug app link (#8008) * fixes: on version changed the preview link should also update (#8009) * fixes: on cut and paste events should not cascade (#8010) * fixes: query options to new mapped ids * [appdef] fixes: cloning apps (#8012) * fixes: cloning apps * fixes: slug status from share modal * fixes: query confirmations list on viewer (#8017) * undo-fix * fixes: updates current state with page data on creating new page * Fix failing specs (#8031) * [appdef] fixes : ghost child components are being created on imported/cloned apps and while migrating (#8026) * fixes: ignore ghost components while importing * added the fix in migrations * fixes: adding other components * fixes: table column resizes * updates layout dto * update component dto * fixes: tabs children are not rendered as the are not in their repsective parent container (#8036) * moving editorFunc to Editor.jsx * cleanup * fixes: e2e test for clone * cleanup * fixes: toggle maintaince * bumping version * multi-edit: ymap-fix-1 * Revert "multi-edit: ymap-fix-1" This reverts commit 8b799c3c51bc45179d2ad4ef405d6a234083d475. * [appdef] fixes: viewer route: keeps on reloading for private apps (#8051) * fixes: viewer route: keeps on reloading for pribate apps * should return the response * test: ymap updates-1 * fixes: v1 apps with dq queries resuts in app crash * Updated import spec * Revert "Updated import spec" This reverts commit 802136cdc3f06ee6debe3612999593a872b65bb1. * Fixed failed platform test cases for app desinition re-design (#8053) * Fix failed platform test cases * Modify user permission test cases * fixes: trial-5: fixing vanishing of components * Revert "fixes: trial-5: fixing vanishing of components" This reverts commit a22aec12c789d5bd1c9c1e9cea7d9fb1eef87bfb. * fixes: trail-6: fix * fixes: trail-7: fix * Revert "fixes: trail-7: fix" This reverts commit 08f373c415b9f1599eff9e397f7c4ffbc3f364b8. * Revert "fixes: trail-6: fix" This reverts commit c4e19b5d05c94d8c1d5a6ad37263bcec7dcdccb1. * multi-edit: ymap-fix * Revert "multi-edit: ymap-fix" This reverts commit 92f49c0cde33818c9a85478f8dfc3b59a629c3d7. * fixes: multi-user updates: adding or removing * event handlers sycned for multi-user * should take slug instead of appid if slug is present * updating adding ymap logic * versioning with multi-user * fixes: saving issue * dont skip ymap * adds delay to ymap * ymap-update-order-fixed * ymap-update-order-fixed-1.1 * ymap-update-order-fixed-1.2 * test=fix * Updated import spec (#8061) * cleanup * lint fixed * fixes: cloning apps with tabs * veiwer on event should return * fixes: event should map with show/hide modal component id * Fix failing appbuilder specs (#8117) * cherrypicked ee/00195c064 * bumping version to v2.24.0 * fixed modal actionid typo * fixes: slugs issues for released an public apps (#8119) * Fix failed test cases (#8121) * reverting global slug input * fixes: versioning with cloned page and ghost components (#8122) --------- Co-authored-by: Nakul Nagargade <133095394+[email protected]> Co-authored-by: Kavin Venkatachalam <50441969+[email protected]> Co-authored-by: Nakul Nagargade <[email protected]> Co-authored-by: Midhun Kumar E <[email protected]> Co-authored-by: nandinisaha13 <[email protected]> Co-authored-by: Mekhla Asopa <[email protected]> Co-authored-by: Ajith KV <[email protected]> Co-authored-by: Mekhla Asopa <59684099+[email protected]>
2023-11-08 05:39:47 +00:00
cy.forceClickOnCanvas();
cy.waitForAutoSave();
openEditorSidebar(data.widgetName);
cy.get('[data-cy="pages-name-fakename1"]').click();
cy.get('[data-cy="rightActions-cell-2"]')
.eq(0)
.should("have.text", "FakeName1");
cy.get(`[data-cy="dropdown-action-button-position"]>>:eq(0)`).click();
cy.get('[data-index="0"] > .select-search-option').click();
cy.get('[data-cy="leftActions-cell-0"]')
.eq(0)
.should("have.text", "FakeName1");
cy.get('[data-cy*="action-button-fakename1"]').verifyVisibleElement(
"have.text",
"FakeName1"
);
cy.get('[data-cy="add-event-handler"]').eq(1).click();
Release : Appbuilder - appdefinition architecture revamp (#7448) * importing service: updated * import service, categorize and update events with associations * fix: deleting events associated with pages on page delete * handle app version: creation, updates, switching versions from app builder * on version switch: no updates should be triggeted to server * versioning for query events * fixes: new components db transaction fails for newly created pages * fixes: query chaining with events * map older query ids to new for event action: run query * fixes: multi-editor support * fixes/multi-editor: users should be able to edit different version of the app at real time without sync * minor fixes * fixes: undo/redo savings with latest app def updates * fixes: execution of page switch action * fixes: csa events * fixes: csa selection dropdown * fixes: on csa action changed, the action params should also be updated correctly * fixes: event rendering actions * fixes: table event - row hovered * fixes: table event - on search * fixes: table event - onNewRowsAdded * fixes: table event - onBulkUpdate * fixes: table column updates * fixes: table column updates to component definition * re-order events * handle adding widgets to sub containers * fixes: csa for modals * fixes: deletes children components on deleting parent * fixes: components with default children * fixed events for imported app * gs- crash fix * fixes: global settings UI * fixes: header and user * fixes: page switch event * fixes: adapts to new event manager ui * import app * add event index for creating app versions * fixes: table rendering on viewer * fixes: event execution for viewer * fixes: loading app with slug * fixes: Page side bar is not rendered in viewer * fixes: version manager ui for released versions * fixes: tabs default children saving * fixes: app resource mapping for parent-child components * fixes: duplicate pages * fixes: page load events for viewer * fixes: enable and disable pages * fixes: hide and show pages * fixes: on maintaince toggle button * fixes: new version child components are not tied to its parent * fixes: redo breaks- on deleting a component and undo then redo (editor) * new export schema and handling apps impport with new and older schemas * table events: column and actions events * fixes: query confirmations popup * fixes: copy/paste * fixes: cut/paste * fixes: event mapping for newer versions for new components, pages and queries id * fixes: app resource mapping for imported apps * fixes: cascade events for table actions and colulmns * Migrates the existing JSON-based app definition schema to a structured table-based architecture. This enhancement introduces component and page-specific permissions, improves data organization, and enables fine-grained access control. Additionally, it adds the 'globalSettings' column to the 'appVersion' table. * cleanup * fixes: enable and disable pages * fixes: hide/show page and set saving state for cloning pages * cleanup * fixes: page disable menu * fixes: migrations for data query events * fixes: switching app version from version creation modal results in editor loading state * fixes: setting up the page title * fixes: Page duplication has same page handler name. * fixes: updating general styles of a component * fixes: delete component should trigger confirmations box for one widget and for multiple should process deletion * fixes: CSA for button(component) does not work for page event handler. * fixes: component name update [calendar] * fixes: Duplicating pages do not create child components * improves copy-paste mechanism of widgets * fix: calendar subcontainer components comes out of the parent container on copy/paste * fix:Form properties, no option for selecting submit button. * fixes: Dark mode issue with event handler. * fixes: display preferences for components * fixes:have to select the selected version again to create a new * fixes: Pages menu is not getting disabled when enabled and vice-versa * fixes: correct naming of duplicating pages * fixes: 2 action button even with no event attached to one, it gets attached to both. * fixes: event deletion for action btn removal * fixes: Keyboard action to move component is not saving * reduce outbound calls when widget re-positioned with keyboard * fixes: Not able to delete component from Inspector * fixes: cloning of widgets * fixes: Request confirmation before query run toggle is not visible on viewer mode. (can't run query if confirmation toggle is on) * fixes: event sorting * fixes: events mapping for versioning: queries and components * fixes: importing app bug - query running issue when importing apps * [appdef-2.0] fixes: event action linking for imported apps (#7627) * fixes: event action linking for imported apps * cleanup * fixes: Toggling display preferences is not saving for components. (#7629) * fixes: dnd issue for mobile view (#7632) * default page menu settings should be true * [appdef-2] event manager selector bug (#7631) * fixes: on selecting query - 3 outbound calls are done to the server, and event manager re-renders 3times resulting in flikering ui * reduces outbound calls for updating csa actions to 1 * [appdef] - copy associated events for cloned components (#7634) * fixes: Copying component is not coping the events associated with the component. * cleanup * [appdef-2] : Fixes frontend issues (#7636) * Fix UI issues * Fix Scrollbar is not available after we pin the inspector. * Fix button jumping places if switched from extended monitor to laptop. * Fix white background around canvas * fixes: Component inspector go blank after switching to different pages after dropping components (#7637) * fixes: general properties of widgets are not getting saved (#7638) * fixes: selecting the components via selecto (#7653) * fixes: multiple undo-redo simlut. (#7656) * fixes: copy associated events for cloned queries (#7657) * Fixes not able toggle of Listview pagination toggle (#7701) * Fix UI issues * Fix Scrollbar is not available after we pin the inspector. * Fix button jumping places if switched from extended monitor to laptop. * fix enable pagination not getting toggled in listview * Fix form children not being displayed * fixes: dnd fix for widgets dropped inside subcontainer (#7691) * [Appdef-2] copy-paste, cut and clone fix for widgets (#7687) * fixes: copy/cut/paste and cloning of widgets * cleanup * can copy/paste-clone in listview * fixes: on mulit-widget selected via mouse area selection: widget manager should be rendered (#7688) * fixes: on deleting tabs widgets should delete its children (#7692) * fixes: column data generated from restapi does not render correct columns in viewer (#7695) * [appdef-2] fixes: multiple query confirmations trigger (#7704) * fixes: multiple query confirmations trigger * fixes: multiple outbound calls in the inital load, run queries on app load with confirmations:editor&viewer * fixes: correct confirmations list to the stote * [appdef-2] fixes:Event handler are running twice for page load (#7705) * fixes:Event handler are running twice for page load(eg- add 2 show alert and change the page). * fixes: for viewer page events * fixes: container widget is not getting saved on drop (#7718) * fixes: Create app version from is empty if we delete another version. (#7720) * [appdef-2] fixes: on versioned app (switching or creating) version, the componet layout is wrongly updated to the container dnd (#7721) * fixes: on versioned app (switching or creating) version, the component layout is wrongly updated to the container dnd * fixes: container widget is not saving * fixes: triggering confirmation box for every query with on load trigger (#7728) * Fixes canvas background and go to app crashing (#7725) * Fix UI issues * Fix Scrollbar is not available after we pin the inspector. * Fix button jumping places if switched from extended monitor to laptop. * fix enable pagination not getting toggled in listview * Fix form children not being displayed * Fix Go to app is crashing the application. * Fix fx for canvas background color is not working. * fixes: cloned/copied table with actions (#7758) * fixes: calendar and form widgets (#7735) * fixes: rendering of components in viewer for mobile (#7759) * fixes: toggling, resizing, dropping widgets in both display preferences (#7760) * fixes: page switch action via runjs actions (#7762) * fixes: component validations do not get saved (#7766) * [appdef-2] subcontainer dnd height outbound fix (#7767) * fixes: listview children can be dragged outside its outbound limit * cleanup * fixes: widget inspector going to empty component (#7768) * fixes: goToApp not running from runjs in viewer mode (#7770) * fixes: multi-components cloning or copy/paste have same name (#7761) * Fix disabled page is being displayed on switch page event dropdown (#7769) * Fix kanban rendering leading to infinite look * Fix disabled page is being displayed on switch page event dropdown * Fix Kanban widget getting into infinite loop (#7808) * Fix kanban rendering leading to infinite look * Fix disabled page is being displayed on switch page event dropdown * Fix kanban getting into infinite loop * adds support of constants to current state of the ediotr (#7821) * removes loader added for testing (#7822) * [appdef] fixes - dnd container cloning edge cases (#7820) * fixes: copy/pasting components updating wrong display preferences * fixes: copy/pasting tabs and cloning components inside tabs * fixes: duplication of calendar component bug * if components in subcontainer(children) are selected via selecto along with its parent, children should not be going through duplication * if components in subcontainer(children) are selected via selecto along with its parent, children should not be going through duplication * fixes: Resolving App Version and Timestamp Update Challenges (#7863) * Fixes query confirmation issue on viewer (#7862) * [appdef ]fixes: components copied from template app to a new page or app do not render in canvas (#7867) * fixes: components copied from template app to a new page or app does not render in canvas * fixes: table crash on coping from other pages with columns * adds the column exists check * fixes: tables crash for imported apps with auto generated cols * appdefinition refactor/cleanup (#7872) * cleanup controllers and request calls from frontend * removing unwanted console logs and unused variables * revering v1 apis og * adding length validation for page dto * adding dtos for components * updated dtos for components and pages * added dto for event handlers * fixes event handler dto * fixes: page dto * adds/fixes event handlers creating dtp * fixes: event handler service and dtos * [appdef] fixes: Creating page not changing the slug (#7873) * fixes: Creating page not changing the slug * removes extra whitespace * [appdef] fixes: on importing a exported app child components are not present in the parent component (#7864) * fixes: on importing a exported app child components are not present in the parent component * handles parent component mapping for tabs and calendar component * handles parent component mapping for tabs and calendar component for new versions * [appdef] api endpoint fixes (#7888) * fixes: moved fetching app version to v2 api * fixes: app slug api * Fixes CurrentUser & Mode not present in globals in inspector (#7812) * Fix current user not being present in inspector * Add Mode in globas in inspector * Fix creating page not changing the slug. * Revert "Fix creating page not changing the slug." This reverts commit 0ff9c18ab8b622a0fa96f6d7b200898c19b060f4. * Fixes on adding query params in event handler, breaking the app (#7889) * Fix on version change if left sidebar is open canvas not scrolling right * Fix on adding query params in event handler, breaking the app * Fix * Fix on version change if left sidebar is open canvas not scrolling right (#7884) * fixes: fixes on on app load switch page action via run queires (#7858) * fixes: fixes on on app load switch page action via run queires * Fix * refactor * Fix on load event not appearing on viewer --------- Co-authored-by: Nakul Nagargade <[email protected]> * [appdef] fixes: event actions mapping for import-export (#7895) * fixes: event actions mapping for import-export * fixes: updates organisation id * fixes: templates event mapping * do not app again for not normalized apps * [appdef]migrations fix (#7910) * fixes: page attributes * fixes: table action and column events for imported apps (prev) and app migrations * adds processDataInBatches * fixes: app data migrations * create a new queryBuilder instance for each batch to ensure that there's no interference between batches * fix: app migration * cleanup * cleanup * fixes: table column data not updated on boxes changes in container (#7919) * fixes: creating all pages from all versions (#7905) * Fix state not changing in chart (#7900) * Fix in chart, toggles are not working * Update Chart.jsx --------- Co-authored-by: Arpit <[email protected]> * fix event param not updating (#7902) * [appdef] Pages attributes are missing on versioning or imported app (#7904) * fixes: on creating new version pages attributes are not copied * fixes: on importing apps with pages attributes are not copied * fixes: component double duplication issues * fixes: deleting children components via selecto (#7915) * fixes: component deletion fixes * fixes: cloning components to a new version should also create associated events * fixes: creating components on cloning with general styles or properties * fixes: creatinng general properties on version * fixes: imported app * fixes added to app migrations * fixes: mobile view * fixes: Created a new version with multiple pages from second page, the new version shows the homepage with second page URL * fixes: table crash due to columnDeletionHistory saved as an object instead of an array * fixes: on creating new version, data_queries should be created (#7975) * [appdef] fixes: migrations (#7951) * refactor migrations with batching * event actions: switch page should be mapped to correct new page id * fixes: importing json-schema app with multiple version: same components do not get render in the canvas * fixes: import/export of legecy apps * event actions mapping to correct page ids: migrations * fixes: migrations children not rendered in subcontainer components * adapts to main/viewer changes * fixes: viewer with #6698 * fixes: viewer route * fixes: page switch via validateRoutes * fixes: on delete version fetchApp fails * handle error on saving changes * skip name opts * typo fix * Instead of relying on the schema, we choose to use the Tooljet version as the determining factor for decoupling import flows * fixes: slug updates from global settings * fixes: slug app link (#8008) * fixes: on version changed the preview link should also update (#8009) * fixes: on cut and paste events should not cascade (#8010) * fixes: query options to new mapped ids * [appdef] fixes: cloning apps (#8012) * fixes: cloning apps * fixes: slug status from share modal * fixes: query confirmations list on viewer (#8017) * undo-fix * fixes: updates current state with page data on creating new page * Fix failing specs (#8031) * [appdef] fixes : ghost child components are being created on imported/cloned apps and while migrating (#8026) * fixes: ignore ghost components while importing * added the fix in migrations * fixes: adding other components * fixes: table column resizes * updates layout dto * update component dto * fixes: tabs children are not rendered as the are not in their repsective parent container (#8036) * moving editorFunc to Editor.jsx * cleanup * fixes: e2e test for clone * cleanup * fixes: toggle maintaince * bumping version * multi-edit: ymap-fix-1 * Revert "multi-edit: ymap-fix-1" This reverts commit 8b799c3c51bc45179d2ad4ef405d6a234083d475. * [appdef] fixes: viewer route: keeps on reloading for private apps (#8051) * fixes: viewer route: keeps on reloading for pribate apps * should return the response * test: ymap updates-1 * fixes: v1 apps with dq queries resuts in app crash * Updated import spec * Revert "Updated import spec" This reverts commit 802136cdc3f06ee6debe3612999593a872b65bb1. * Fixed failed platform test cases for app desinition re-design (#8053) * Fix failed platform test cases * Modify user permission test cases * fixes: trial-5: fixing vanishing of components * Revert "fixes: trial-5: fixing vanishing of components" This reverts commit a22aec12c789d5bd1c9c1e9cea7d9fb1eef87bfb. * fixes: trail-6: fix * fixes: trail-7: fix * Revert "fixes: trail-7: fix" This reverts commit 08f373c415b9f1599eff9e397f7c4ffbc3f364b8. * Revert "fixes: trail-6: fix" This reverts commit c4e19b5d05c94d8c1d5a6ad37263bcec7dcdccb1. * multi-edit: ymap-fix * Revert "multi-edit: ymap-fix" This reverts commit 92f49c0cde33818c9a85478f8dfc3b59a629c3d7. * fixes: multi-user updates: adding or removing * event handlers sycned for multi-user * should take slug instead of appid if slug is present * updating adding ymap logic * versioning with multi-user * fixes: saving issue * dont skip ymap * adds delay to ymap * ymap-update-order-fixed * ymap-update-order-fixed-1.1 * ymap-update-order-fixed-1.2 * test=fix * Updated import spec (#8061) * cleanup * lint fixed * fixes: cloning apps with tabs * veiwer on event should return * fixes: event should map with show/hide modal component id * Fix failing appbuilder specs (#8117) * cherrypicked ee/00195c064 * bumping version to v2.24.0 * fixed modal actionid typo * fixes: slugs issues for released an public apps (#8119) * Fix failed test cases (#8121) * reverting global slug input * fixes: versioning with cloned page and ghost components (#8122) --------- Co-authored-by: Nakul Nagargade <133095394+[email protected]> Co-authored-by: Kavin Venkatachalam <50441969+[email protected]> Co-authored-by: Nakul Nagargade <[email protected]> Co-authored-by: Midhun Kumar E <[email protected]> Co-authored-by: nandinisaha13 <[email protected]> Co-authored-by: Mekhla Asopa <[email protected]> Co-authored-by: Ajith KV <[email protected]> Co-authored-by: Mekhla Asopa <59684099+[email protected]>
2023-11-08 05:39:47 +00:00
cy.waitForAutoSave();
openEditorSidebar(data.widgetName);
cy.get('[data-cy="pages-name-fakename1"]').click();
cy.get('[data-cy="leftActions-cell-0"]').eq(0).find("button").click();
cy.verifyToastMessage(commonSelectors.toastMessage, "Hello world!");
openEditorSidebar(data.widgetName);
openAccordion(commonWidgetText.accordionEvents, []);
cy.get('[data-cy="add-event-handler"]').click();
cy.get('[data-cy="event-handler-card"]').click();
cy.get('[data-cy="event-selection"]>')
.click()
.find("input")
.type(`Row clicked{enter}`);
cy.get('[data-cy*="-cell-1"]').eq(0).click();
cy.verifyToastMessage(commonSelectors.toastMessage, "Hello world!");
cy.get('[data-cy="inspector-close-icon"]').click();
openEditorSidebar(data.widgetName);
openAccordion('Layout', []);
verifyAndModifyToggleFx(
"Show on desktop",
commonWidgetText.codeMirrorLabelTrue
);
cy.get(commonWidgetSelector.draggableWidget(data.widgetName)).should(
"not.exist"
);
verifyAndModifyToggleFx(
commonWidgetText.parameterShowOnMobile,
commonWidgetText.codeMirrorLabelFalse
);
cy.get('[data-cy="button-change-layout-to-mobile"]').click();
cy.get(commonWidgetSelector.draggableWidget(data.widgetName)).should(
"exist"
);
});
it("should verify column options", () => {
const data = {};
data.widgetName = fake.widgetName;
openEditorSidebar(tableText.defaultWidgetName);
editAndVerifyWidgetName(data.widgetName, []);
openEditorSidebar(data.widgetName);
cy.wait(500);
addAndOpenColumnOption("Fake-Link", `link`);
verifyAndEnterColumnOptionInput("key", "name");
cy.get('[data-cy="dropdown-link-target"] >>:eq(0)')
.click()
.find("input")
.type(`{selectAll}{backspace}new window{enter}`);
cy.forceClickOnCanvas();
cy.get('[data-cy="linksarah-cell-3"]')
.contains("a", "Sarah")
.should("have.attr", "target", "_blank");
openEditorSidebar(data.widgetName);
cy.get('[data-cy*="column-Fake-Link"]').click();
cy.get('[data-cy="dropdown-link-target"] >>:eq(0)')
.click()
.find("input")
.type(`{selectAll}{backspace}same window{enter}`);
cy.forceClickOnCanvas();
cy.get('[data-cy="linksarah-cell-3"]')
.contains("a", "Sarah")
.should("have.attr", "target", "_self");
//String/default
openEditorSidebar(data.widgetName);
cy.wait(500);
deleteAndVerifyColumn("id");
deleteAndVerifyColumn("name");
deleteAndVerifyColumn("email");
deleteAndVerifyColumn("fake-link");
cy.wait(500);
addAndOpenColumnOption("Fake-String", `string`);
selectDropdownOption('[data-cy="input-overflow"] >>:eq(0)', `wrap`);
cy.get('[data-index="0"]>.select-search-option:eq(1)').realClick();
verifyAndEnterColumnOptionInput("key", "name");
verifyAndEnterColumnOptionInput("Text color", "red");
2023-12-12 04:24:25 +00:00
verifyAndEnterColumnOptionInput("Cell background color", "yellow");
cy.get(
'[data-cy="input-and-label-cell-background-color"] > .form-label'
).click();
cy.wait(500);
cy.get(tableSelector.column(0))
.eq(0)
.should("have.css", "background-color", "rgb(255, 255, 0)", {
timeout: 10000,
});
cy.get(tableSelector.column(0))
.eq(0)
.find(".align-items-center")
.last()
.should("have.text", "Sarah")
.and("have.css", "color", "rgb(255, 0, 0)");
cy.get('[data-cy="make-editable-toggle-button"]').click();
cy.get('[data-cy="header-validation"]').verifyVisibleElement(
"have.text",
"Validation"
);
verifyAndEnterColumnOptionInput("Regex", "AABb");
verifyAndEnterColumnOptionInput("Min length", "4");
verifyAndEnterColumnOptionInput("Max length", "5");
verifyAndEnterColumnOptionInput("Custom rule", " ");
verifyInvalidFeedback(0, 0, "The input should match pattern");
addInputOnTable(0, 0, "AABb");
// cy.notVisible('[data-cy="stringsarah-cell-0"] >>>.invalid-feedback');
openEditorSidebar(data.widgetName);
deleteAndVerifyColumn("fake-string");
openEditorSidebar(data.widgetName);
addAndOpenColumnOption("fake-number", `number`);
// cy.intercept("PUT", "/api/apps/**").as("appSave");
// cy.wait("@appSave");
// cy.wait(1000);
verifyAndEnterColumnOptionInput("key", "id");
// cy.wait("@appSave");
// verifyAndEnterColumnOptionInput("Cell Background Color", "black");
cy.get('[data-cy="make-editable-toggle-button"]').click();
cy.get('[data-cy="header-validation"]').verifyVisibleElement(
"have.text",
"Validation"
);
verifyAndEnterColumnOptionInput("Min value", "2");
verifyAndEnterColumnOptionInput("Max value", "3");
addInputOnTable(0, 0, "0");
verifyInvalidFeedback(0, 0, "Minimum value is 2");
verifyInvalidFeedback(0, 3, "Maximum value is 3");
openEditorSidebar(data.widgetName);
deleteAndVerifyColumn("fake-number");
openEditorSidebar(data.widgetName);
addAndOpenColumnOption("fake-text", `text`);
verifyAndEnterColumnOptionInput("key", "email");
// verifyAndEnterColumnOptionInput("Cell Background Color", "");
cy.get('[data-cy="make-editable-toggle-button"]').click();
verifySingleValueOnTable(0, 0, "[email protected]");
addInputOnTable(0, 0, "[email protected]", "textarea");
openEditorSidebar(data.widgetName);
deleteAndVerifyColumn("fake-text");
openEditorSidebar(data.widgetName);
addAndOpenColumnOption("fake-badge", `badge`);
verifyAndEnterColumnOptionInput("key", " ");
verifyAndEnterColumnOptionInput("Values", "{{[1,2,3]");
verifyAndEnterColumnOptionInput("Labels", '{{["One","Two","Three"]');
// verifyAndEnterColumnOptionInput("Cell Background Color", "fakeString");
cy.get('[data-cy="make-editable-toggle-button"]').click();
selectDropdownOption(`${tableSelector.column(0)}:eq(0) .badge`, 1);
cy.get(`${tableSelector.column(0)}:eq(0) .badge`).should(
"have.text",
"Two"
);
deleteAndVerifyColumn("fake-badge");
openEditorSidebar(data.widgetName);
addAndOpenColumnOption("fake-multiple-badge", `multipleBadges`);
verifyAndEnterColumnOptionInput("key", "id");
verifyAndEnterColumnOptionInput("Values", "{{[1,2,3]");
cy.wait(500);
verifyAndEnterColumnOptionInput("Labels", '{{["One","Two","Three"]');
// verifyAndEnterColumnOptionInput("Cell Background Color", "fakeString");
cy.get('[data-cy="make-editable-toggle-button"]').click();
selectDropdownOption(`${tableSelector.column(0)}:eq(0) .badge`, 1); // WIP (workaround needed)
cy.get(`${tableSelector.column(0)}:eq(1) .badge`).should(
"have.text",
"Two"
);
selectDropdownOption(`${tableSelector.column(0)}:eq(0) .badge`, 0);
cy.get(`${tableSelector.column(0)}:eq(0) .badge`).should(
"have.text",
"TwoOne"
);
selectDropdownOption(`${tableSelector.column(0)}:eq(1) .badge`, 1);
cy.get(`${tableSelector.column(0)}:eq(0) .badge`).should(
"have.text",
"One"
);
deleteAndVerifyColumn("fake-multiple-badge");
openEditorSidebar(data.widgetName);
cy.get('[data-cy="table-data-input-field"]').clearAndTypeOnCodeMirror(
codeMirrorInputLabel(`[{id:1,name:"Mike",email:"[email protected]", tags:['One','Two','Three'] },{id:2,name:"Nina",email:"[email protected]" },{id:3,name:"Steph",email:"[email protected]", tags:['One','Two','Three'] },{id:4,name:"Oliver",email:"[email protected]" },
]`)
);
// closeAccordions(["Options"]);
cy.get('[data-cy="widget-accordion-data"]').click();
deleteAndVerifyColumn("tags");
addAndOpenColumnOption("fake-tags", `tags`);
verifyAndEnterColumnOptionInput("key", "tags");
// verifyAndEnterColumnOptionInput("Cell Background Color", "fakeString");
//WIP Not editble verify
cy.get('[data-cy="make-editable-toggle-button"]').click();
cy.forceClickOnCanvas();
cy.get(`${tableSelector.column(0)}:eq(0) .badge`)
.eq(0)
.should("have.text", "Onex")
.next()
.should("have.text", "Twox")
.next()
.should("have.text", "Threex");
cy.get(`${tableSelector.column(0)}:eq(0) .badge`)
.first()
.click({ force: true })
.trigger("mouseover")
.trigger("mouseenter")
.find(`[class="badge badge-pill bg-red-lt remove-tag-button"]`)
.invoke("show")
.dblclick();
cy.wait(5000);
deleteAndVerifyColumn("fake-tags");
openEditorSidebar(data.widgetName);
// verifyAndModifyParameter(
// "Table data",
// codeMirrorInputLabel(`[{id:1,name:"Mike",email:"[email protected]", tags:['One','Two','Three'] },{id:2,name:"Nina",email:"[email protected]" },{id:3,name:"Steph",email:"[email protected]", tags:['One','Two','Three'] },{id:4,name:"Oliver",email:"[email protected]" },
// ]`)
// );
// closeAccordions(["Properties"]);
addAndOpenColumnOption("fake-dropdown", `dropdown`);
verifyAndEnterColumnOptionInput("key", "fakeString");
verifyAndEnterColumnOptionInput("Values", "{{[1,2,3]");
verifyAndEnterColumnOptionInput("Labels", '{{["One","Two","Three"]');
// verifyAndEnterColumnOptionInput("Cell Background Color", "fakeString");
cy.get('[data-cy="make-editable-toggle-button"]').click();
verifyAndEnterColumnOptionInput("Custom rule", "fakeString");
deleteAndVerifyColumn("fake-dropdown");
//VerifyDropdown
openEditorSidebar(data.widgetName);
addAndOpenColumnOption("fake-radio", `radio`);
verifyAndEnterColumnOptionInput("key", " ");
verifyAndEnterColumnOptionInput("Values", "{{[1,2,3]");
verifyAndEnterColumnOptionInput("Labels", '{{["One","Two","Three"]');
// verifyAndEnterColumnOptionInput("Cell Background Color", "fakeString");
cy.get('[data-cy="make-editable-toggle-button"]').click();
//verifyRadio
deleteAndVerifyColumn("fake-radio");
// openEditorSidebar(data.widgetName);
addAndOpenColumnOption("fake-multiselect", `multiselect`);
verifyAndEnterColumnOptionInput("key", "fakeString");
verifyAndEnterColumnOptionInput("Values", "{{[1,2,3]");
verifyAndEnterColumnOptionInput("Labels", '{{["One","Two","Three"]');
// verifyAndEnterColumnOptionInput("Cell Background Color", "fakeString");
cy.get('[data-cy="make-editable-toggle-button"]').click();
//verify multiselect
deleteAndVerifyColumn("fake-multiselect");
// openEditorSidebar(data.widgetName);
addAndOpenColumnOption("fake-toggleswitch", `toggleSwitch`);
verifyAndEnterColumnOptionInput("key", "fakeString");
// verifyAndEnterColumnOptionInput("Active color", "green"); //use color Picker
// verifyAndEnterColumnOptionInput("Cell Background Color", "fakeString");
cy.get('[data-cy="make-editable-toggle-button"]').click();
deleteAndVerifyColumn("fake-toggleswitch");
openEditorSidebar(data.widgetName);
addAndOpenColumnOption("fake-datepicker", `datePicker`);
2023-05-30 19:19:14 +00:00
verifyAndEnterColumnOptionInput("key", "fakeString");
// verifyAndEnterColumnOptionInput("Date Display format", "fakeString");
// verifyAndEnterColumnOptionInput("Cell Background Color", "blue");
cy.get('[data-cy="make-editable-toggle-button"]').click();
2023-05-30 19:19:14 +00:00
// verifyAndEnterColumnOptionInput("Date Parse Format", "fakeString");
// verifyAndEnterColumnOptionInput("Parse in timezone", "fakeString");
// verifyAndEnterColumnOptionInput("Display in timezone", "fakeString");
deleteAndVerifyColumn("fake-datepicker");
2023-05-30 19:19:14 +00:00
verifyAndModifyToggleFx(
tableText.labelDynamicColumn,
2023-05-30 19:19:14 +00:00
commonWidgetText.codeMirrorLabelFalse
);
cy.get('[data-cy*="-cell-1"]').should("have.class", "has-text");
cy.get('[data-cy="column-data-input-field"] ').clearAndTypeOnCodeMirror(
2023-05-30 19:19:14 +00:00
codeMirrorInputLabel(
`[{name: 'User email', key: 'email'}, {name: 'Full name', key: 'name', isEditable: false}]`
2023-05-30 19:19:14 +00:00
)
);
cy.forceClickOnCanvas();
cy.get(tableSelector.columnHeader("user-email"))
.scrollIntoView()
.verifyVisibleElement("have.text", "User email");
cy.get('[data-cy*="-cell-1"]').should("not.have.class", "has-text");
2023-07-03 10:50:29 +00:00
openEditorSidebar(data.widgetName);
cy.get('[data-cy="column-data-input-field"] ').clearAndTypeOnCodeMirror(
codeMirrorInputLabel(
`[{name: 'User email', key: 'email'}, {name: 'Full name', key: 'name', isEditable: true}]`
)
);
cy.forceClickOnCanvas();
cy.waitForAutoSave();
2023-05-30 19:19:14 +00:00
cy.get('[data-cy*="-cell-1"]')
.eq(0)
.find("input")
.click()
.type(`{selectAll}{backspace}Mike Jon`);
cy.forceClickOnCanvas();
cy.get('[data-cy*="-cell-1"]').should("have.class", "has-text");
cy.get('[data-cy*="-cell-1"] [type="text"]')
.eq(0)
.verifyVisibleElement("have.value", "Mike Jon");
cy.get('[data-cy="table-button-save-changes"]').should("be.visible");
openEditorSidebar(data.widgetName);
cy.get('[data-cy="column-data-input-field"] ').clearAndTypeOnCodeMirror(
codeMirrorInputLabel(
`[{name: 'email', key: 'email', cellBackgroundColor: '#000', textColor: '#fff'}, {name: 'Full name', key: 'name', minLength: 5, maxLength: 6, isEditable: true}]`
)
);
cy.forceClickOnCanvas();
cy.get('[data-cy*="-cell-0"]')
.eq(0)
.should("have.css", "background-color", "rgb(0, 0, 0)");
cy.get('[data-cy*="-cell-0"] > .td-container > .w-100 > .d-flex')
.eq(0)
.should("have.css", "color", "rgb(255, 255, 255)");
verifyInvalidFeedback(1, 1, "Minimum 5 characters is needed");
verifyInvalidFeedback(1, 0, "Maximum 6 characters is allowed");
});
it("should verify styles", () => {
cy.get(
commonWidgetSelector.draggableWidget(tableText.defaultWidgetName)
).should("be.visible");
const data = {};
data.color = fake.randomRgba;
data.boxShadowParam = fake.boxShadowParam;
openEditorSidebar(tableText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
verifyAndModifyToggleFx(
commonWidgetText.parameterVisibility,
commonWidgetText.codeMirrorLabelTrue
);
cy.get(
commonWidgetSelector.draggableWidget(tableText.defaultWidgetName)
).should("not.be.visible");
cy.get(
commonWidgetSelector.parameterTogglebutton(
commonWidgetText.parameterVisibility
)
).click();
verifyAndModifyToggleFx(
commonWidgetText.parameterDisable,
commonWidgetText.codeMirrorLabelFalse
);
cy.waitForAutoSave();
cy.get(
commonWidgetSelector.draggableWidget(tableText.defaultWidgetName)
).should("have.attr", "data-disabled", "true");
cy.get("[data-cy='disable-toggle-button']").click();
// cy.get("[data-cy='border-radius-fx-button']:eq(1)").click();
verifyAndModifyParameter(
"Action button radius",
commonWidgetText.borderRadiusInput
);
cy.get(commonWidgetSelector.buttonCloseEditorSideBar).click({
force: true,
});
openEditorSidebar(tableText.defaultWidgetName);
openAccordion("Columns");
deleteAndVerifyColumn("email");
openEditorSidebar(tableText.defaultWidgetName);
openAccordion("Action buttons");
cy.get('[data-cy="button-add-new-action-button"]').click();
cy.get('[data-cy="rightActions-cell-2"]')
.eq(0)
.find("button")
.should("have.css", "border-radius", "20px");
openEditorSidebar(tableText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
verifyAndModifyParameter(
"Border radius",
commonWidgetText.borderRadiusInput
);
cy.get(commonWidgetSelector.buttonCloseEditorSideBar).click({
force: true,
});
cy.get(
commonWidgetSelector.draggableWidget(tableText.defaultWidgetName)
).should("have.css", "border-radius", "20px");
openEditorSidebar(tableText.defaultWidgetName);
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
openAccordion(commonWidgetText.accordionGenaral, []);
verifyAndModifyToggleFx(
commonWidgetText.parameterBoxShadow,
commonWidgetText.boxShadowDefaultValue,
false,
"0px 0px 0px 0px ",
false
);
cy.get(commonWidgetSelector.boxShadowColorPicker).click();
fillBoxShadowParams(
commonWidgetSelector.boxShadowDefaultParam,
data.boxShadowParam
);
selectColourFromColourPicker(commonWidgetText.boxShadowColor, data.color);
verifyBoxShadowCss(
tableText.defaultWidgetName,
data.color,
data.boxShadowParam
);
cy.get(
commonWidgetSelector.draggableWidget(tableText.defaultWidgetName)
).click();
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
cy.get('[data-cy="label-table-type"]').verifyVisibleElement(
"have.text",
"Table type"
);
cy.get('[data-cy="dropdown-table-type"]').realHover();
cy.get('[data-cy="table-type-fx-button"] > svg').click();
cy.get('[data-cy="table-type-input-field"]').clearAndTypeOnCodeMirror(
`randomText`
);
cy.forceClickOnCanvas();
cy.get(commonWidgetSelector.draggableWidget(tableText.defaultWidgetName))
.find("table")
.invoke("attr", "class")
.and("contain", "randomText");
cy.get(
commonWidgetSelector.draggableWidget(tableText.defaultWidgetName)
).click();
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
cy.get('[data-cy="table-type-fx-button"]>svg').click();
cy.get('[data-cy="dropdown-table-type"]').click();
selectFromSidebarDropdown('[data-cy="dropdown-table-type"]', "Classic");
cy.forceClickOnCanvas();
cy.get(commonWidgetSelector.draggableWidget(tableText.defaultWidgetName))
.click()
.find("table")
.invoke("attr", "class")
.and("contain", "classic");
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
selectFromSidebarDropdown('[data-cy="dropdown-table-type"]', "Striped");
cy.forceClickOnCanvas();
cy.get(commonWidgetSelector.draggableWidget(tableText.defaultWidgetName))
.click()
.find("table")
.invoke("attr", "class")
.and("contain", "table-striped");
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
cy.get('[data-cy="label-cell-size"]').verifyVisibleElement(
"have.text",
"Cell size"
);
cy.get('[data-cy="cell-size-fx-button"] > svg').click();
cy.get('[data-cy="cell-size-input-field"]').clearAndTypeOnCodeMirror(
`randomText`
);
cy.forceClickOnCanvas();
cy.get(
commonWidgetSelector.draggableWidget(tableText.defaultWidgetName)
).click();
cy.get(tableSelector.column(0))
.eq(0)
.invoke("attr", "class")
.and("contain", "randomText");
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
cy.get('[data-cy="cell-size-fx-button"] >svg').click();
selectFromSidebarDropdown('[data-cy="dropdown-cell-size"]', "Condensed");
cy.forceClickOnCanvas();
cy.get(
commonWidgetSelector.draggableWidget(tableText.defaultWidgetName)
).click();
cy.get(tableSelector.column(0))
.eq(0)
.invoke("attr", "class")
.and("contain", "condensed");
cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click();
cy.get('[data-cy="label-text-color"]').verifyVisibleElement(
"have.text",
"Text color"
);
selectColourFromColourPicker(`Text color`, data.color);
cy.forceClickOnCanvas();
cy.get(commonWidgetSelector.draggableWidget(tableText.defaultWidgetName))
.click()
.find("tbody")
.should(
"have.css",
"color",
`rgba(${data.color[0]}, ${data.color[1]}, ${data.color[2]}, ${
data.color[3] / 100
})`
);
});
it("should verify table options", () => {
openEditorSidebar(tableText.defaultWidgetName);
verifyAndModifyToggleFx("Enable pagination", "{{true}}", true);
cy.get('[data-cy="enable-pagination-toggle-button"]').click();
cy.get(tableSelector.paginationButtonToPrevious).should("be.visible");
cy.get(tableSelector.paginationButtonToNext).should("be.visible");
cy.get("[data-state=off]:eq(3)").click();
cy.get('[data-cy="label-total-records-server-side"]').verifyVisibleElement(
"have.text",
"Total records server side"
);
// cy.get('[data-cy="enable-pagination-toggle-button"]').click();
cy.get("[data-state=off]:eq(3)").click();
cy.get('[data-cy="label-number-of-rows-per-page"]').verifyVisibleElement(
"have.text",
"Number of rows per page"
);
verifyAndModifyToggleFx("Enable column sorting", "{{true}}", true); //inputfield
cy.get('[data-cy="enable-column-sorting-toggle-button"]').click();
verifyAndModifyToggleFx("Show download button", "{{true}}", true);
cy.notVisible('[data-tooltip-id="tooltip-for-download"]');
verifyAndModifyToggleFx("Enable filtering", "{{true}}", true);
cy.notVisible('[data-tooltip-id="tooltip-for-filter-data"]');
// cy.get('[data-cy="show-filter-button-toggle-button"]').click();
// verifyAndModifyToggleFx("Server-side filter", "{{false}}", true);
// verifyAndModifyToggleFx("Show update buttons", "{{true}}", true);
2023-06-20 13:50:49 +00:00
cy.get(`[data-cy="allow-selection-toggle-button"]`).click({ force: true });
verifyAndModifyToggleFx("Bulk selection", "{{false}}", true);
cy.get('[data-cy="checkbox-input"]').should("be.visible");
verifyAndModifyToggleFx("Highlight selected row", "{{false}}", true);
verifyAndModifyToggleFx("Hide column selector button", "{{false}}", true);
cy.notVisible('[data-cy="select-column-icon"]');
verifyAndModifyToggleFx("Show search", "{{true}}", true);
cy.notVisible('[data-cy="search-input-field"]');
// cy.get('[data-cy="show-search-box-toggle-button"]').click();
// verifyAndModifyToggleFx("Server-side search", " ", true);
verifyAndModifyToggleFx("Loading state", "{{false}}", true);
});
it("should verify download", () => {
deleteDownloadsFolder();
cy.get(tableSelector.buttonDownloadDropdown).should("be.visible").click();
cy.get(tableSelector.optionDownloadPdf).click();
cy.task("readPdf", "cypress/downloads/all-data.pdf")
.should("contain", dataPdfAssertionHelper(tableText.defaultInput)[0])
.and("contain", dataPdfAssertionHelper(tableText.defaultInput)[1])
.and("contain", dataPdfAssertionHelper(tableText.defaultInput)[2]);
cy.get(tableSelector.optionDownloadCSV).click();
cy.readFile("cypress/downloads/all-data.csv", "utf-8")
.should("contain", dataCsvAssertionHelper(tableText.defaultInput)[0])
.and("contain", dataCsvAssertionHelper(tableText.defaultInput)[1])
.and("contain", dataCsvAssertionHelper(tableText.defaultInput)[2]);
cy.get(tableSelector.optionDownloadExcel).click();
cy.task("readXlsx", "cypress/downloads/all-data.xlsx")
.should("contain", dataCsvAssertionHelper(tableText.defaultInput)[0])
.and("contain", dataCsvAssertionHelper(tableText.defaultInput)[1])
.and("contain", dataCsvAssertionHelper(tableText.defaultInput)[2]);
});
it("Should verify the table filter options", () => {
cy.get(
commonWidgetSelector.draggableWidget(tableText.defaultWidgetName)
).should("be.visible");
// cy.get(tableSelector.filterButton).click();
addFilter(
[{ column: "name", operation: "contains", value: "Sarah" }],
true
);
verifyTableElements([{ id: 1, name: "Sarah", email: "[email protected]" }]);
addFilter([
{ column: "name", operation: "does not contains", value: "Sarah" },
]);
verifyTableElements([
{ id: 2, name: "Lisa", email: "[email protected]" },
{ id: 3, name: "Sam", email: "[email protected]" },
{ id: 4, name: "Jon", email: "[email protected]" },
]);
addFilter([
{ column: "email", operation: "matches", value: "[email protected]" },
]);
verifyTableElements([{ id: 4, name: "Jon", email: "[email protected]" }]);
addFilter([
{
column: "email",
operation: "does not match",
value: "[email protected]",
},
]);
verifyTableElements([
{ id: 1, name: "Sarah", email: "[email protected]" },
{ id: 2, name: "Lisa", email: "[email protected]" },
{ id: 3, name: "Sam", email: "[email protected]" },
]);
addFilter([{ column: "id", operation: "equals", value: "3" }]);
verifyTableElements([{ id: 3, name: "Sam", email: "[email protected]" }]);
addFilter([{ column: "id", operation: "does not equal", value: "3" }]);
verifyTableElements([
{ id: 1, name: "Sarah", email: "[email protected]" },
{ id: 2, name: "Lisa", email: "[email protected]" },
{ id: 4, name: "Jon", email: "[email protected]" },
]);
addFilter([{ column: "id", operation: "greater than", value: "1" }]);
verifyTableElements([
{ id: 2, name: "Lisa", email: "[email protected]" },
{ id: 3, name: "Sam", email: "[email protected]" },
{ id: 4, name: "Jon", email: "[email protected]" },
]);
addFilter([{ column: "id", operation: "less than", value: "3" }]);
verifyTableElements([
{ id: 1, name: "Sarah", email: "[email protected]" },
{ id: 2, name: "Lisa", email: "[email protected]" },
]);
addFilter([
{ column: "id", operation: "greater than or equals", value: "1" },
]);
verifyTableElements([
{ id: 1, name: "Sarah", email: "[email protected]" },
{ id: 2, name: "Lisa", email: "[email protected]" },
{ id: 3, name: "Sam", email: "[email protected]" },
{ id: 4, name: "Jon", email: "[email protected]" },
]);
addFilter([{ column: "id", operation: "less than or equals", value: "3" }]);
verifyTableElements([
{ id: 1, name: "Sarah", email: "[email protected]" },
{ id: 2, name: "Lisa", email: "[email protected]" },
{ id: 3, name: "Sam", email: "[email protected]" },
]);
addFilter(
[
{ column: "id", operation: "greater than or equals", value: "2" },
{ column: "email", operation: "contains", value: "Sa" },
],
true
);
verifyTableElements([
{ id: 2, name: "Lisa", email: "[email protected]" },
{ id: 3, name: "Sam", email: "[email protected]" },
]);
addFilter(
[
{ column: "id", operation: "greater than or equals", value: "1" },
{ column: "email", operation: "does not contains", value: "Sa" },
],
true
);
verifyTableElements([{ id: 4, name: "Jon", email: "[email protected]" }]);
addFilter([{ column: "id", operation: "is empty" }], true);
cy.notVisible('[data-cy*="-cell-"]');
addFilter([{ column: "id", operation: "is not empty" }], true);
verifyTableElements([
{ id: 1, name: "Sarah", email: "[email protected]" },
{ id: 2, name: "Lisa", email: "[email protected]" },
{ id: 3, name: "Sam", email: "[email protected]" },
{ id: 4, name: "Jon", email: "[email protected]" },
]);
});
it("should verify table CSA", () => {
deleteDownloadsFolder();
cy.get('[data-cy="column-id"]').click();
cy.get('[data-cy="make-editable-toggle-button"]').click();
2023-06-20 13:50:49 +00:00
cy.get(`[data-cy="allow-selection-toggle-button"]`).click({ force: true });
cy.get(
'[data-cy="number-of-rows-per-page-input-field"]'
).clearAndTypeOnCodeMirror("{{2");
verifyAndModifyToggleFx("Highlight selected row", "{{false}}", true);
cy.get('[data-cy="real-canvas"]').click("topRight");
cy.dragAndDropWidget("Button", 800, 50);
selectEvent("On click", "Control Component");
selectCSA("table1", "Set page");
addSupportCSAData("Page", "{{2");
cy.get('[data-cy="real-canvas"]').click("topRight");
cy.dragAndDropWidget("Button", 800, 100);
selectEvent("On click", "Control Component");
selectCSA("table1", "Select row");
addSupportCSAData("Key", "name");
addSupportCSAData("Value", "Lisa");
cy.get('[data-cy="real-canvas"]').click("topRight");
cy.dragAndDropWidget("Button", 800, 150);
selectEvent("On click", "Control Component");
selectCSA("table1", "Deselect row");
cy.get('[data-cy="real-canvas"]').click("topRight");
cy.dragAndDropWidget("Button", 800, 200);
selectEvent("On click", "Control Component");
selectCSA("table1", "Discard Changes");
2023-07-03 10:50:29 +00:00
cy.get('[data-cy="real-canvas"]').click("topRight");
cy.dragAndDropWidget("Button", 800, 250);
2023-07-03 10:50:29 +00:00
selectEvent("On click", "Control Component");
selectCSA("table1", "Discard newly added rows");
cy.get('[data-cy="real-canvas"]').click("topRight");
cy.dragAndDropWidget("Button", 800, 300);
2023-07-03 10:50:29 +00:00
selectEvent("On click", "Control Component");
selectCSA("table1", "Download table data");
selectSupportCSAData("Download as Excel");
cy.get('[data-cy="real-canvas"]').click("topRight");
cy.dragAndDropWidget("Button", 800, 350);
2023-07-03 10:50:29 +00:00
selectEvent("On click", "Control Component");
selectCSA("table1", "Download table data");
selectSupportCSAData("Download as CSV");
cy.get('[data-cy="real-canvas"]').click("topRight");
cy.dragAndDropWidget("Button", 800, 400);
2023-07-03 10:50:29 +00:00
selectEvent("On click", "Control Component");
selectCSA("table1", "Download table data");
selectSupportCSAData("Download as PDF");
cy.get(commonWidgetSelector.draggableWidget("button2")).click();
cy.get('[role="row"]').eq(2).should("have.class", "selected");
cy.get(commonWidgetSelector.draggableWidget("button3")).click();
cy.get('[role="row"]').eq(2).should("not.have.class", "selected");
cy.get(commonWidgetSelector.draggableWidget("button1")).click();
cy.get('[data-cy*="-cell-1"] ').eq(1).should("have.text", "Jon");
cy.get('[data-cy="page-index-details"]').should("have.text", "of 2");
cy.get(`${tableSelector.pageIndexDetails}>input`)
.invoke("val")
.should("equal", "2");
cy.get('[data-cy="3-cell-0"]')
.click()
.find("input")
.clear()
.type("test123");
cy.get('[data-cy*="-cell-0"]')
.eq(0)
.find("input")
.should("have.value", "test123");
cy.get(commonWidgetSelector.draggableWidget("button4")).click();
cy.get('[data-cy*="-cell-0"]').eq(0).should("have.text", "3");
2023-07-03 10:50:29 +00:00
addNewRow();
cy.get(commonWidgetSelector.draggableWidget("button5")).click();
cy.get(commonWidgetSelector.sidebarinspector).click();
cy.get(".tooltip-inner").invoke("hide");
verifyNodeData("components", "Object", "9 entries ");
openNode("components");
verifyNodeData(tableText.defaultWidgetName, "Object", "27 entries ");
2023-07-03 10:50:29 +00:00
openNode(tableText.defaultWidgetName);
verifyNodeData("newRows", "Array", "0 item ");
cy.get('[data-cy="real-canvas"]').click("topRight");
cy.get(commonWidgetSelector.draggableWidget("button6")).click();
cy.wait(500);
2023-07-03 10:50:29 +00:00
cy.task("readXlsx", "cypress/downloads/all-data.xlsx")
.should("contain", dataCsvAssertionHelper(tableText.defaultInput)[0])
.and("contain", dataCsvAssertionHelper(tableText.defaultInput)[1])
.and("contain", dataCsvAssertionHelper(tableText.defaultInput)[2]);
cy.get(commonWidgetSelector.draggableWidget("button7")).click();
cy.wait(500);
2023-07-03 10:50:29 +00:00
cy.readFile("cypress/downloads/all-data.csv", "utf-8")
.should("contain", dataCsvAssertionHelper(tableText.defaultInput)[0])
.and("contain", dataCsvAssertionHelper(tableText.defaultInput)[1])
.and("contain", dataCsvAssertionHelper(tableText.defaultInput)[2]);
cy.get(commonWidgetSelector.draggableWidget("button8")).click();
cy.wait(500);
2023-07-03 10:50:29 +00:00
cy.task("readPdf", "cypress/downloads/all-data.pdf")
.should("contain", dataPdfAssertionHelper(tableText.defaultInput)[0])
.and("contain", dataPdfAssertionHelper(tableText.defaultInput)[1])
.and("contain", dataPdfAssertionHelper(tableText.defaultInput)[2]);
});
2023-05-30 19:19:14 +00:00
it("should verify add new row", () => {
addNewRow();
2023-07-03 10:50:29 +00:00
cy.contains("Save").click();
cy.get(commonWidgetSelector.sidebarinspector).click();
cy.get(".tooltip-inner").invoke("hide");
verifyNodeData("components", "Object", "1 entry ");
openNode("components");
verifyNodeData(tableText.defaultWidgetName, "Object", "26 entries ");
cy.wait(1000);
openNode(tableText.defaultWidgetName, 0, 1);
Release : Appbuilder - appdefinition architecture revamp (#7448) * importing service: updated * import service, categorize and update events with associations * fix: deleting events associated with pages on page delete * handle app version: creation, updates, switching versions from app builder * on version switch: no updates should be triggeted to server * versioning for query events * fixes: new components db transaction fails for newly created pages * fixes: query chaining with events * map older query ids to new for event action: run query * fixes: multi-editor support * fixes/multi-editor: users should be able to edit different version of the app at real time without sync * minor fixes * fixes: undo/redo savings with latest app def updates * fixes: execution of page switch action * fixes: csa events * fixes: csa selection dropdown * fixes: on csa action changed, the action params should also be updated correctly * fixes: event rendering actions * fixes: table event - row hovered * fixes: table event - on search * fixes: table event - onNewRowsAdded * fixes: table event - onBulkUpdate * fixes: table column updates * fixes: table column updates to component definition * re-order events * handle adding widgets to sub containers * fixes: csa for modals * fixes: deletes children components on deleting parent * fixes: components with default children * fixed events for imported app * gs- crash fix * fixes: global settings UI * fixes: header and user * fixes: page switch event * fixes: adapts to new event manager ui * import app * add event index for creating app versions * fixes: table rendering on viewer * fixes: event execution for viewer * fixes: loading app with slug * fixes: Page side bar is not rendered in viewer * fixes: version manager ui for released versions * fixes: tabs default children saving * fixes: app resource mapping for parent-child components * fixes: duplicate pages * fixes: page load events for viewer * fixes: enable and disable pages * fixes: hide and show pages * fixes: on maintaince toggle button * fixes: new version child components are not tied to its parent * fixes: redo breaks- on deleting a component and undo then redo (editor) * new export schema and handling apps impport with new and older schemas * table events: column and actions events * fixes: query confirmations popup * fixes: copy/paste * fixes: cut/paste * fixes: event mapping for newer versions for new components, pages and queries id * fixes: app resource mapping for imported apps * fixes: cascade events for table actions and colulmns * Migrates the existing JSON-based app definition schema to a structured table-based architecture. This enhancement introduces component and page-specific permissions, improves data organization, and enables fine-grained access control. Additionally, it adds the 'globalSettings' column to the 'appVersion' table. * cleanup * fixes: enable and disable pages * fixes: hide/show page and set saving state for cloning pages * cleanup * fixes: page disable menu * fixes: migrations for data query events * fixes: switching app version from version creation modal results in editor loading state * fixes: setting up the page title * fixes: Page duplication has same page handler name. * fixes: updating general styles of a component * fixes: delete component should trigger confirmations box for one widget and for multiple should process deletion * fixes: CSA for button(component) does not work for page event handler. * fixes: component name update [calendar] * fixes: Duplicating pages do not create child components * improves copy-paste mechanism of widgets * fix: calendar subcontainer components comes out of the parent container on copy/paste * fix:Form properties, no option for selecting submit button. * fixes: Dark mode issue with event handler. * fixes: display preferences for components * fixes:have to select the selected version again to create a new * fixes: Pages menu is not getting disabled when enabled and vice-versa * fixes: correct naming of duplicating pages * fixes: 2 action button even with no event attached to one, it gets attached to both. * fixes: event deletion for action btn removal * fixes: Keyboard action to move component is not saving * reduce outbound calls when widget re-positioned with keyboard * fixes: Not able to delete component from Inspector * fixes: cloning of widgets * fixes: Request confirmation before query run toggle is not visible on viewer mode. (can't run query if confirmation toggle is on) * fixes: event sorting * fixes: events mapping for versioning: queries and components * fixes: importing app bug - query running issue when importing apps * [appdef-2.0] fixes: event action linking for imported apps (#7627) * fixes: event action linking for imported apps * cleanup * fixes: Toggling display preferences is not saving for components. (#7629) * fixes: dnd issue for mobile view (#7632) * default page menu settings should be true * [appdef-2] event manager selector bug (#7631) * fixes: on selecting query - 3 outbound calls are done to the server, and event manager re-renders 3times resulting in flikering ui * reduces outbound calls for updating csa actions to 1 * [appdef] - copy associated events for cloned components (#7634) * fixes: Copying component is not coping the events associated with the component. * cleanup * [appdef-2] : Fixes frontend issues (#7636) * Fix UI issues * Fix Scrollbar is not available after we pin the inspector. * Fix button jumping places if switched from extended monitor to laptop. * Fix white background around canvas * fixes: Component inspector go blank after switching to different pages after dropping components (#7637) * fixes: general properties of widgets are not getting saved (#7638) * fixes: selecting the components via selecto (#7653) * fixes: multiple undo-redo simlut. (#7656) * fixes: copy associated events for cloned queries (#7657) * Fixes not able toggle of Listview pagination toggle (#7701) * Fix UI issues * Fix Scrollbar is not available after we pin the inspector. * Fix button jumping places if switched from extended monitor to laptop. * fix enable pagination not getting toggled in listview * Fix form children not being displayed * fixes: dnd fix for widgets dropped inside subcontainer (#7691) * [Appdef-2] copy-paste, cut and clone fix for widgets (#7687) * fixes: copy/cut/paste and cloning of widgets * cleanup * can copy/paste-clone in listview * fixes: on mulit-widget selected via mouse area selection: widget manager should be rendered (#7688) * fixes: on deleting tabs widgets should delete its children (#7692) * fixes: column data generated from restapi does not render correct columns in viewer (#7695) * [appdef-2] fixes: multiple query confirmations trigger (#7704) * fixes: multiple query confirmations trigger * fixes: multiple outbound calls in the inital load, run queries on app load with confirmations:editor&viewer * fixes: correct confirmations list to the stote * [appdef-2] fixes:Event handler are running twice for page load (#7705) * fixes:Event handler are running twice for page load(eg- add 2 show alert and change the page). * fixes: for viewer page events * fixes: container widget is not getting saved on drop (#7718) * fixes: Create app version from is empty if we delete another version. (#7720) * [appdef-2] fixes: on versioned app (switching or creating) version, the componet layout is wrongly updated to the container dnd (#7721) * fixes: on versioned app (switching or creating) version, the component layout is wrongly updated to the container dnd * fixes: container widget is not saving * fixes: triggering confirmation box for every query with on load trigger (#7728) * Fixes canvas background and go to app crashing (#7725) * Fix UI issues * Fix Scrollbar is not available after we pin the inspector. * Fix button jumping places if switched from extended monitor to laptop. * fix enable pagination not getting toggled in listview * Fix form children not being displayed * Fix Go to app is crashing the application. * Fix fx for canvas background color is not working. * fixes: cloned/copied table with actions (#7758) * fixes: calendar and form widgets (#7735) * fixes: rendering of components in viewer for mobile (#7759) * fixes: toggling, resizing, dropping widgets in both display preferences (#7760) * fixes: page switch action via runjs actions (#7762) * fixes: component validations do not get saved (#7766) * [appdef-2] subcontainer dnd height outbound fix (#7767) * fixes: listview children can be dragged outside its outbound limit * cleanup * fixes: widget inspector going to empty component (#7768) * fixes: goToApp not running from runjs in viewer mode (#7770) * fixes: multi-components cloning or copy/paste have same name (#7761) * Fix disabled page is being displayed on switch page event dropdown (#7769) * Fix kanban rendering leading to infinite look * Fix disabled page is being displayed on switch page event dropdown * Fix Kanban widget getting into infinite loop (#7808) * Fix kanban rendering leading to infinite look * Fix disabled page is being displayed on switch page event dropdown * Fix kanban getting into infinite loop * adds support of constants to current state of the ediotr (#7821) * removes loader added for testing (#7822) * [appdef] fixes - dnd container cloning edge cases (#7820) * fixes: copy/pasting components updating wrong display preferences * fixes: copy/pasting tabs and cloning components inside tabs * fixes: duplication of calendar component bug * if components in subcontainer(children) are selected via selecto along with its parent, children should not be going through duplication * if components in subcontainer(children) are selected via selecto along with its parent, children should not be going through duplication * fixes: Resolving App Version and Timestamp Update Challenges (#7863) * Fixes query confirmation issue on viewer (#7862) * [appdef ]fixes: components copied from template app to a new page or app do not render in canvas (#7867) * fixes: components copied from template app to a new page or app does not render in canvas * fixes: table crash on coping from other pages with columns * adds the column exists check * fixes: tables crash for imported apps with auto generated cols * appdefinition refactor/cleanup (#7872) * cleanup controllers and request calls from frontend * removing unwanted console logs and unused variables * revering v1 apis og * adding length validation for page dto * adding dtos for components * updated dtos for components and pages * added dto for event handlers * fixes event handler dto * fixes: page dto * adds/fixes event handlers creating dtp * fixes: event handler service and dtos * [appdef] fixes: Creating page not changing the slug (#7873) * fixes: Creating page not changing the slug * removes extra whitespace * [appdef] fixes: on importing a exported app child components are not present in the parent component (#7864) * fixes: on importing a exported app child components are not present in the parent component * handles parent component mapping for tabs and calendar component * handles parent component mapping for tabs and calendar component for new versions * [appdef] api endpoint fixes (#7888) * fixes: moved fetching app version to v2 api * fixes: app slug api * Fixes CurrentUser & Mode not present in globals in inspector (#7812) * Fix current user not being present in inspector * Add Mode in globas in inspector * Fix creating page not changing the slug. * Revert "Fix creating page not changing the slug." This reverts commit 0ff9c18ab8b622a0fa96f6d7b200898c19b060f4. * Fixes on adding query params in event handler, breaking the app (#7889) * Fix on version change if left sidebar is open canvas not scrolling right * Fix on adding query params in event handler, breaking the app * Fix * Fix on version change if left sidebar is open canvas not scrolling right (#7884) * fixes: fixes on on app load switch page action via run queires (#7858) * fixes: fixes on on app load switch page action via run queires * Fix * refactor * Fix on load event not appearing on viewer --------- Co-authored-by: Nakul Nagargade <[email protected]> * [appdef] fixes: event actions mapping for import-export (#7895) * fixes: event actions mapping for import-export * fixes: updates organisation id * fixes: templates event mapping * do not app again for not normalized apps * [appdef]migrations fix (#7910) * fixes: page attributes * fixes: table action and column events for imported apps (prev) and app migrations * adds processDataInBatches * fixes: app data migrations * create a new queryBuilder instance for each batch to ensure that there's no interference between batches * fix: app migration * cleanup * cleanup * fixes: table column data not updated on boxes changes in container (#7919) * fixes: creating all pages from all versions (#7905) * Fix state not changing in chart (#7900) * Fix in chart, toggles are not working * Update Chart.jsx --------- Co-authored-by: Arpit <[email protected]> * fix event param not updating (#7902) * [appdef] Pages attributes are missing on versioning or imported app (#7904) * fixes: on creating new version pages attributes are not copied * fixes: on importing apps with pages attributes are not copied * fixes: component double duplication issues * fixes: deleting children components via selecto (#7915) * fixes: component deletion fixes * fixes: cloning components to a new version should also create associated events * fixes: creating components on cloning with general styles or properties * fixes: creatinng general properties on version * fixes: imported app * fixes added to app migrations * fixes: mobile view * fixes: Created a new version with multiple pages from second page, the new version shows the homepage with second page URL * fixes: table crash due to columnDeletionHistory saved as an object instead of an array * fixes: on creating new version, data_queries should be created (#7975) * [appdef] fixes: migrations (#7951) * refactor migrations with batching * event actions: switch page should be mapped to correct new page id * fixes: importing json-schema app with multiple version: same components do not get render in the canvas * fixes: import/export of legecy apps * event actions mapping to correct page ids: migrations * fixes: migrations children not rendered in subcontainer components * adapts to main/viewer changes * fixes: viewer with #6698 * fixes: viewer route * fixes: page switch via validateRoutes * fixes: on delete version fetchApp fails * handle error on saving changes * skip name opts * typo fix * Instead of relying on the schema, we choose to use the Tooljet version as the determining factor for decoupling import flows * fixes: slug updates from global settings * fixes: slug app link (#8008) * fixes: on version changed the preview link should also update (#8009) * fixes: on cut and paste events should not cascade (#8010) * fixes: query options to new mapped ids * [appdef] fixes: cloning apps (#8012) * fixes: cloning apps * fixes: slug status from share modal * fixes: query confirmations list on viewer (#8017) * undo-fix * fixes: updates current state with page data on creating new page * Fix failing specs (#8031) * [appdef] fixes : ghost child components are being created on imported/cloned apps and while migrating (#8026) * fixes: ignore ghost components while importing * added the fix in migrations * fixes: adding other components * fixes: table column resizes * updates layout dto * update component dto * fixes: tabs children are not rendered as the are not in their repsective parent container (#8036) * moving editorFunc to Editor.jsx * cleanup * fixes: e2e test for clone * cleanup * fixes: toggle maintaince * bumping version * multi-edit: ymap-fix-1 * Revert "multi-edit: ymap-fix-1" This reverts commit 8b799c3c51bc45179d2ad4ef405d6a234083d475. * [appdef] fixes: viewer route: keeps on reloading for private apps (#8051) * fixes: viewer route: keeps on reloading for pribate apps * should return the response * test: ymap updates-1 * fixes: v1 apps with dq queries resuts in app crash * Updated import spec * Revert "Updated import spec" This reverts commit 802136cdc3f06ee6debe3612999593a872b65bb1. * Fixed failed platform test cases for app desinition re-design (#8053) * Fix failed platform test cases * Modify user permission test cases * fixes: trial-5: fixing vanishing of components * Revert "fixes: trial-5: fixing vanishing of components" This reverts commit a22aec12c789d5bd1c9c1e9cea7d9fb1eef87bfb. * fixes: trail-6: fix * fixes: trail-7: fix * Revert "fixes: trail-7: fix" This reverts commit 08f373c415b9f1599eff9e397f7c4ffbc3f364b8. * Revert "fixes: trail-6: fix" This reverts commit c4e19b5d05c94d8c1d5a6ad37263bcec7dcdccb1. * multi-edit: ymap-fix * Revert "multi-edit: ymap-fix" This reverts commit 92f49c0cde33818c9a85478f8dfc3b59a629c3d7. * fixes: multi-user updates: adding or removing * event handlers sycned for multi-user * should take slug instead of appid if slug is present * updating adding ymap logic * versioning with multi-user * fixes: saving issue * dont skip ymap * adds delay to ymap * ymap-update-order-fixed * ymap-update-order-fixed-1.1 * ymap-update-order-fixed-1.2 * test=fix * Updated import spec (#8061) * cleanup * lint fixed * fixes: cloning apps with tabs * veiwer on event should return * fixes: event should map with show/hide modal component id * Fix failing appbuilder specs (#8117) * cherrypicked ee/00195c064 * bumping version to v2.24.0 * fixed modal actionid typo * fixes: slugs issues for released an public apps (#8119) * Fix failed test cases (#8121) * reverting global slug input * fixes: versioning with cloned page and ghost components (#8122) --------- Co-authored-by: Nakul Nagargade <133095394+[email protected]> Co-authored-by: Kavin Venkatachalam <50441969+[email protected]> Co-authored-by: Nakul Nagargade <[email protected]> Co-authored-by: Midhun Kumar E <[email protected]> Co-authored-by: nandinisaha13 <[email protected]> Co-authored-by: Mekhla Asopa <[email protected]> Co-authored-by: Ajith KV <[email protected]> Co-authored-by: Mekhla Asopa <59684099+[email protected]>
2023-11-08 05:39:47 +00:00
// openNode(tableText.defaultWidgetName, 0, 1);
verifyNodeData("newRows", "Array", "1 item ");
openNode("newRows");
verifyNodeData("0", "Object", "3 entries ");
openNode("0");
verifyValue("id", "String", `"5"`, "1");
verifyValue("name", "String", `"Nick"`);
verifyValue("email", "String", `"[email protected]"`);
});
it("should verify Disable action button", () => {
cy.get('[data-cy="button-add-new-action-button"]')
.should("have.text", "New action button")
.click();
cy.get('[data-cy="action-button-button-0"]').verifyVisibleElement(
"have.text",
"Button"
);
deleteAndVerifyColumn("name");
deleteAndVerifyColumn("email");
cy.get(tableSelector.columnHeader("actions"))
.scrollIntoView()
.verifyVisibleElement("have.text", "Actions");
cy.get(`${tableSelector.column(1)} > > > button`)
.eq("0")
.should("have.text", "Button")
.and("not.have.attr", "disabled");
cy.get('[data-cy="action-button-button-0"]').click();
cy.get('[data-cy="label-disable-action-button"]').should("be.visible");
cy.get('[data-cy="add-event-handler"]').eq(1).click();
cy.get('[data-cy="event-handler-card"]').click();
cy.forceClickOnCanvas();
2023-07-03 10:50:29 +00:00
cy.get(tableSelector.columnHeader("actions")).verifyVisibleElement(
"have.text",
"Actions"
);
cy.get(`${tableSelector.column(1)} > > > button`)
.eq("0")
.click();
cy.verifyToastMessage(commonSelectors.toastMessage, "Hello world!");
cy.get('[data-cy="action-button-button-0"]').click();
cy.get(tableSelector.fxButton(tableText.lableDisableActionButton)).should(
"be.visible"
);
verifyAndModifyToggleFx(
tableText.lableDisableActionButton,
"{{false}}",
true
);
2023-07-03 10:50:29 +00:00
cy.forceClickOnCanvas();
cy.get(tableSelector.columnHeader("actions"))
.scrollIntoView()
.verifyVisibleElement("have.text", "Actions");
cy.get(`${tableSelector.column(1)} > > > button`)
.eq("0")
.should("have.text", "Button")
.and("have.attr", "disabled");
cy.dragAndDropWidget("Toggle Switch", 800, 300);
openEditorSidebar(tableText.defaultWidgetName);
cy.get('[data-cy="action-button-button-0"]').click();
cy.get(tableSelector.fxButton(tableText.lableDisableActionButton))
.should("be.visible")
.eq(0)
.click();
cy.get(
commonWidgetSelector.parameterInputField(
tableText.lableDisableActionButton
)
)
.click()
.clearAndTypeOnCodeMirror(`{{components.toggleswitch1.value`);
cy.forceClickOnCanvas();
cy.get(tableSelector.columnHeader("actions"))
.scrollIntoView()
.verifyVisibleElement("have.text", "Actions");
cy.get(`${tableSelector.column(1)} > > > button`)
.eq("0")
.click();
cy.verifyToastMessage(commonSelectors.toastMessage, "Hello world!");
cy.get(
'[data-cy="draggable-widget-toggleswitch1"] [type="checkbox"]'
).click();
cy.get(tableSelector.columnHeader("actions"))
.scrollIntoView()
.verifyVisibleElement("have.text", "Actions");
cy.get(`${tableSelector.column(1)} > > > button`)
.eq("0")
.should("have.text", "Button")
.and("have.attr", "disabled");
});
it("should verify Programatically actions on table column", () => {
deleteAndVerifyColumn("id");
cy.get('[data-cy="inspector-close-icon"]').click();
cy.dragAndDropWidget("Text", 800, 200);
openEditorSidebar(commonWidgetText.text1);
cy.get(
'[data-cy="textcomponenttextinput-input-field"]'
).clearAndTypeOnCodeMirror("Column Email");
// verifyAndModifyParameter("Text", "Column Email");
cy.get('[data-cy="inspector-close-icon"]').click({ force: true });
cy.get(`[data-cy="draggable-widget-${commonWidgetText.text1}"]`).should(
"have.text",
"Column Email"
);
openEditorSidebar(tableText.defaultWidgetName);
cy.get('[data-cy="pages-name-email"]').should("be.visible").click();
cy.get(`[data-cy="input-and-label-column-name"]`)
.find("label")
.should("have.text", "Column name");
cy.get(`[data-cy="input-and-label-column-name"]`)
.find(".codehinter-default-input")
.click()
.clearAndTypeOnCodeMirror(`{{components.text1.text`);
cy.forceClickOnCanvas();
openEditorSidebar(tableText.defaultWidgetName);
cy.get('[data-cy="pages-name-column email"]')
.scrollIntoView()
.should("be.visible");
cy.get(tableSelector.columnHeader("column-email"))
.scrollIntoView()
.verifyVisibleElement("have.text", "Column Email");
cy.get('[data-cy="inspector-close-icon"]').click();
cy.dragAndDropWidget("Toggle Switch", 800, 300);
openEditorSidebar(tableText.defaultWidgetName);
cy.get('[data-cy="column-Column Email"]').should("be.visible").click();
verifyAndModifyToggleFx(tableText.makeEditable, "{{false}}", 0);
cy.get(tableSelector.toggleButton(tableText.makeEditable)).click();
cy.get(tableSelector.fxButton(tableText.makeEditable))
.should("be.visible")
.eq(0)
.click();
cy.get(commonWidgetSelector.parameterInputField(tableText.makeEditable))
.click()
.clearAndTypeOnCodeMirror(`{{components.toggleswitch1.value`);
cy.forceClickOnCanvas();
cy.waitForAutoSave();
cy.get('[data-cy*="-cell-1"]').eq(0).should("not.have.class", "has-text");
cy.get(
'[data-cy="draggable-widget-toggleswitch1"] [type="checkbox"]'
).click();
cy.get('[data-cy*="-cell-1"]')
.eq(0)
.click()
.find("input")
.type(`{selectAll}{backspace}{Enter}`)
.realType("Jack");
cy.get('[data-cy*="-cell-1"]').should("have.class", "has-text");
cy.get('[data-cy*="-cell-1"] [type="text"]')
.eq(0)
.verifyVisibleElement("have.value", "Jack");
2023-05-30 19:19:14 +00:00
});
it("should verify server-side paginaion", () => {
let dsName = fake.companyName;
cy.apiCreateGDS(
"http://localhost:3000/api/v2/data_sources",
`cypress-${dsName}-postgresql`,
"postgresql",
[
{ key: "host", value: Cypress.env("pg_host") },
{ key: "port", value: 5432 },
{ key: "database", value: Cypress.env("pg_user") },
{ key: "username", value: Cypress.env("pg_user") },
{ key: "password", value: Cypress.env("pg_password"), encrypted: true },
{ key: "ssl_enabled", value: false, encrypted: false },
{ key: "ssl_certificate", value: "none", encrypted: false },
]
);
cy.apiAddQueryToApp(
"q112",
{
mode: "sql",
transformationLanguage: "javascript",
enableTransformation: false,
query: `SELECT *
FROM server_side_pagination
ORDER BY id
LIMIT 10 OFFSET {{(components.table1.pageIndex-1)*10}};`,
},
`cypress-${dsName}-postgresql`,
"postgresql"
);
cy.reload();
openEditorSidebar(tableText.defaultWidgetName);
cy.get("[data-state=off]:eq(3)").click();
cy.get(
'[data-cy="total-records-server-side-input-field"]'
).clearAndTypeOnCodeMirror("50");
selectEvent("Page changed", "Run Query", 1);
cy.get('[data-cy="query-selection-field"]')
.click()
.find("input")
.type(`{selectAll}{backspace}q112{enter}`);
cy.get('[data-cy="table-data-input-field"]').clearAndTypeOnCodeMirror(
`{{queries.q112.data`
);
cy.get('[data-cy="pagination-button-to-next"]').click();
waitForQueryAction("run");
cy.get('[data-cy="11-cell-0"]').verifyVisibleElement("have.text", "11");
cy.get('[data-cy="pagination-button-to-previous"]').click();
waitForQueryAction("run");
cy.get('[data-cy="1-cell-0"]').verifyVisibleElement("have.text", "1");
cy.openInCurrentTab(commonWidgetSelector.previewButton);
cy.wait(4000);
cy.get('[data-cy="pagination-button-to-next"]').click();
cy.get('[data-cy="11-cell-0"]', { timeout: 10000 }).verifyVisibleElement(
"have.text",
"11"
);
cy.get('[data-cy="pagination-button-to-previous"]').click();
cy.get('[data-cy="1-cell-0"]', { timeout: 10000 }).verifyVisibleElement(
"have.text",
"1"
);
});
});