diff --git a/.version b/.version index 0e7079b691..d76bd2ba3e 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.16.1 +2.17.0 diff --git a/cypress-tests/cypress.config.js b/cypress-tests/cypress.config.js index b952ba7a0a..2321dc3cd4 100644 --- a/cypress-tests/cypress.config.js +++ b/cypress-tests/cypress.config.js @@ -19,9 +19,9 @@ module.exports = defineConfig({ trashAssetsBeforeRuns: true, e2e: { - setupNodeEvents (on, config) { + setupNodeEvents(on, config) { on("task", { - readPdf (pathToPdf) { + readPdf(pathToPdf) { return new Promise((resolve) => { const pdfPath = path.resolve(pathToPdf); let dataBuffer = fs.readFileSync(pdfPath); @@ -33,7 +33,7 @@ module.exports = defineConfig({ }); on("task", { - readXlsx (filePath) { + readXlsx(filePath) { return new Promise((resolve, reject) => { try { let dataBuffer = fs.readFileSync(filePath); @@ -48,7 +48,7 @@ module.exports = defineConfig({ }); on("task", { - deleteFolder (folderName) { + deleteFolder(folderName) { return new Promise((resolve, reject) => { if (fs.existsSync(folderName)) { rmdir(folderName, { maxRetries: 10, recursive: true }, (err) => { @@ -66,7 +66,7 @@ module.exports = defineConfig({ }); on("task", { - updateId ({ dbconfig, sql }) { + updateId({ dbconfig, sql }) { const client = new pg.Pool(dbconfig); return client.query(sql); }, @@ -79,8 +79,8 @@ module.exports = defineConfig({ baseUrl: "http://localhost:8082", specPattern: "cypress/e2e/**/*.cy.js", downloadsFolder: "cypress/downloads", - numTestsKeptInMemory: 25, - redirectionLimit: 10, + numTestsKeptInMemory: 10, + redirectionLimit: 5, experimentalRunAllSpecs: true, trashAssetsBeforeRuns: true, experimentalMemoryManagement: true, diff --git a/cypress-tests/cypress/commands/apiCommands.js b/cypress-tests/cypress/commands/apiCommands.js index 9ed158df30..d92f378b1e 100644 --- a/cypress-tests/cypress/commands/apiCommands.js +++ b/cypress-tests/cypress/commands/apiCommands.js @@ -1,8 +1,8 @@ Cypress.Commands.add( "apiLogin", - (userEmail = "dev@tooljet.io", userPassword = "password") => { + (userEmail = "dev@tooljet.io", userPassword = "password", workspaceId = '') => { cy.request({ - url: "http://localhost:3000/api/authenticate", + url: `http://localhost:3000/api/authenticate/${workspaceId}`, method: "POST", body: { email: userEmail, @@ -23,20 +23,23 @@ Cypress.Commands.add( Cypress.Commands.add("apiCreateGDS", (url, name, kind, options) => { cy.getCookie("tj_auth_token").then((cookie) => { - cy.request({ - method: "POST", - url: url, - headers: { - "Tj-Workspace-Id": Cypress.env("workspaceId"), - Cookie: `tj_auth_token=${cookie.value}`, + cy.request( + { + method: "POST", + url: url, + headers: { + "Tj-Workspace-Id": Cypress.env("workspaceId"), + Cookie: `tj_auth_token=${cookie.value}`, + }, + body: { + name: name, + kind: kind, + options: options, + scope: "global", + }, }, - body: { - name: name, - kind: kind, - options: options, - scope: "global", - }, - }).then((response) => { + { log: false } + ).then((response) => { expect(response.status).to.equal(201); Cypress.log({ @@ -49,10 +52,10 @@ Cypress.Commands.add("apiCreateGDS", (url, name, kind, options) => { }); Cypress.Commands.add("apiCreateApp", (appName = "testApp") => { - cy.window().then((win) => { + cy.window({ log: false }).then((win) => { win.localStorage.setItem("walkthroughCompleted", "true"); }); - cy.getCookie("tj_auth_token").then((cookie) => { + cy.getCookie("tj_auth_token", { log: false }).then((cookie) => { Cypress.env("authToken", `tj_auth_token=${cookie.value}`); cy.request({ method: "POST", @@ -84,14 +87,17 @@ Cypress.Commands.add("apiCreateApp", (appName = "testApp") => { }); Cypress.Commands.add("apiDeleteApp", (appId = Cypress.env("appId")) => { - cy.request({ - method: "DELETE", - url: `http://localhost:3000/api/apps/${Cypress.env("appId")}`, - headers: { - "Tj-Workspace-Id": Cypress.env("workspaceId"), - Cookie: Cypress.env("authToken"), + cy.request( + { + method: "DELETE", + url: `http://localhost:3000/api/apps/${Cypress.env("appId")}`, + headers: { + "Tj-Workspace-Id": Cypress.env("workspaceId"), + Cookie: Cypress.env("authToken"), + }, }, - }).then((response) => { + { log: false } + ).then((response) => { expect(response.status).to.equal(200); Cypress.log({ name: "App Delete", @@ -107,7 +113,7 @@ Cypress.Commands.add( appId = Cypress.env("appId"), componentSelector = "[data-cy='empty-editor-text']" ) => { - cy.window().then((win) => { + cy.window({ log: false }).then((win) => { win.localStorage.setItem("walkthroughCompleted", "true"); }); cy.visit(`/${Cypress.env("workspaceId")}/apps/${Cypress.env("appId")}`); @@ -131,3 +137,5 @@ Cypress.Commands.add( // { key: "ssl_certificate", value: "none", encrypted: false }, // ] // ); + + diff --git a/cypress-tests/cypress/commands/commands.js b/cypress-tests/cypress/commands/commands.js index b57f3a93d2..53ca1b7375 100644 --- a/cypress-tests/cypress/commands/commands.js +++ b/cypress-tests/cypress/commands/commands.js @@ -102,14 +102,14 @@ Cypress.Commands.add( }, (subject, value) => { cy.wrap(subject) - .click() + .realClick() .find("pre.CodeMirror-line") .invoke("text") .then((text) => { - cy.wrap(subject).type(createBackspaceText(text)), - { - delay: 0, - }; + cy.wrap(subject).type(createBackspaceText(text), { delay: 0 }), + { + delay: 0, + }; }); if (!Array.isArray(value)) { cy.wrap(subject).type(value, { @@ -184,9 +184,9 @@ Cypress.Commands.add( .invoke("text") .then((text) => { cy.wrap(subject).type(createBackspaceText(text)), - { - delay: 0, - }; + { + delay: 0, + }; }); } ); @@ -247,7 +247,7 @@ Cypress.Commands.add("reloadAppForTheElement", (elementText) => { }); Cypress.Commands.add("skipEditorPopover", () => { - cy.get(".text-muted"); + // cy.get(".text-muted"); cy.wait(1000); cy.get("body").then(($el) => { if ($el.text().includes("Skip", { timeout: 2000 })) { @@ -283,3 +283,11 @@ Cypress.Commands.add("visitTheWorkspace", (workspaceName) => { }); cy.wait(2000); }); + +Cypress.Commands.add("hideTooltip", () => { + cy.get("body").then(($body) => { + if ($body.find(".tooltip-inner").length > 0) { + cy.get(".tooltip-inner").invoke("css", "display", "none"); + } + }); +}); diff --git a/cypress-tests/cypress/constants/selectors/common.js b/cypress-tests/cypress/constants/selectors/common.js index 1462a72c92..e20cfb998d 100644 --- a/cypress-tests/cypress/constants/selectors/common.js +++ b/cypress-tests/cypress/constants/selectors/common.js @@ -9,7 +9,7 @@ export const commonSelectors = { '.drawer-container > [style="position: fixed; z-index: 9999; inset: 16px; pointer-events: none;"] > .go4109123758 > .go2072408551', toastCloseButton: '[data-cy="toast-close-button"]', editButton: "[data-cy=edit-button]", - searchField: "[data-cy=widget-search-box]", + searchField: "[data-cy='widget-search-box-search-bar']", firstWidget: "[data-cy=widget-list]:eq(0)", canvas: "[data-cy=real-canvas]", appCardOptionsButton: "[data-cy=app-card-menu-icon]", @@ -211,7 +211,7 @@ export const commonSelectors = { editFolderOption: (folderName) => { return `[data-cy="${cyParamName(folderName)}-edit-folder-option"]`; }, - inspectorPinIcon: '[data-cy="null-option-icon"]', + inspectorPinIcon: '.d-flex > [data-cy="left-sidebar-inspector"]', groupInputFieldLabel: '[data-cy="label-group-input-field"]', pageSectionHeader: '[data-cy="dashboard-section-header"]', yesButton: '[data-cy="yes-button"]', @@ -286,15 +286,15 @@ export const commonWidgetSelector = { }, buttonCloseEditorSideBar: "[data-cy='inspector-close-icon']", - buttonStylesEditorSideBar: "[data-cy='sidebar-option-styles']", + buttonStylesEditorSideBar: "#inspector-tab-styles", WidgetNameInputField: "[data-cy=edit-widget-name]", tooltipInputField: "[data-cy='tooltip-input-field']", tooltipLabel: "[id=button-tooltip]", - noEventHandlerMessage: "[data-cy='no-event-handler-message']", + noEventHandlerMessage: "[data-cy='no-items-banner']", addEventHandlerLink: "[data-cy='add-event-handler']", - addMoreEventHandlerLink: '[data-cy="add-more-event-handler"]', + addMoreEventHandlerLink: '[data-cy="add-event-handler"]', eventHandlerCard: "[data-cy='event-handler-card']", alertMessageInputField: "[data-cy='alert-message-input-field']", eventSelection: '[data-cy="event-selection"]', diff --git a/cypress-tests/cypress/constants/selectors/dataSource.js b/cypress-tests/cypress/constants/selectors/dataSource.js index c6017d4cd8..8a67e16e85 100644 --- a/cypress-tests/cypress/constants/selectors/dataSource.js +++ b/cypress-tests/cypress/constants/selectors/dataSource.js @@ -1,3 +1,5 @@ +import { cyParamName } from "../../constants/selectors/common"; + export const dataSourceSelector = { leftSidebarDatasourceButton: "[data-cy='left-sidebar-database-button']", labelDataSources: "[data-cy='label-datasources']", @@ -8,7 +10,7 @@ export const dataSourceSelector = { apiLabelAndCount: '[data-cy="apis-datasource-button"]', cloudStorageLabelAndCount: '[data-cy="cloudstorage-datasource-button"]', pluginsLabelAndCount: '[data-cy="plugins-datasource-button"]', - dataSourceSearchInputField: '[data-cy="datasource-search-input"]', + dataSourceSearchInputField: '[data-cy="home-page-search-bar"]', postgresDataSource: "[data-cy='data-source-postgresql']", dataSourceNameInputField: '[data-cy="data-source-name-input-filed"]', @@ -92,5 +94,7 @@ export const dataSourceSelector = { unSavedModalTitle: '[data-cy="unsaved-changes-title"]', eventQuerySelectionField: '[data-cy="query-selection-field"]', connectionAlertText: '[data-cy="connection-alert-text"]', + deleteDSButton: (datasourceName) => { + return `[data-cy="${cyParamName(datasourceName)}-delete-button"]` + }, }; - diff --git a/cypress-tests/cypress/constants/selectors/exportImport.js b/cypress-tests/cypress/constants/selectors/exportImport.js index 5de0135a1c..7112bbfc46 100644 --- a/cypress-tests/cypress/constants/selectors/exportImport.js +++ b/cypress-tests/cypress/constants/selectors/exportImport.js @@ -10,12 +10,12 @@ export const appVersionSelectors = { createNewVersion: '[data-cy="create-new-version-title"]', versionNamelabel: '[data-cy="version-name-label"]', appVersionMenuField: - '[data-cy="app-version-selector"] .undefined__indicators', + '[data-cy="app-version-selector"] .react-select__indicators', versionNameInputField: '[data-cy="version-name-input-field"]', createVersionFromLabel: '[data-cy="create-version-from-label"]', createVersionInputField: '[data-cy="create-version-from-input-field"]', createNewVersionButton: '[data-cy="create-new-version-button"]', - appVersionContentList: ".undefined__menu-list", + appVersionContentList: ".react-select__menu-list", }; export const exportAppModalSelectors = { selectVersionTitle: '[data-cy= "select-a-version-to-export-title"]', @@ -39,4 +39,4 @@ export const importSelectors = { importAnApplication: '[data-cy="import-an-application"]', importOptionLabel: '[data-cy="import-option-label"]', importOptionInput: '[data-cy="import-option-input"]', -}; \ No newline at end of file +}; diff --git a/cypress-tests/cypress/constants/selectors/multipage.js b/cypress-tests/cypress/constants/selectors/multipage.js index b2278925d9..87ab84b141 100644 --- a/cypress-tests/cypress/constants/selectors/multipage.js +++ b/cypress-tests/cypress/constants/selectors/multipage.js @@ -1,9 +1,9 @@ export const multipageSelector = { sidebarPageButton: '[data-cy="left-sidebar-page-button"]', pagesLabel: '[data-cy="label-pages"]', - addPageIcon: '[data-cy="add-page-option-icon"]', - searchPageIcon: '[data-cy="search-page-option-icon"]', - pagesPinIcon: '[data-cy="pin-panel-option-icon"]', + addPageIcon: '[title="Add Page"]', + searchPageIcon: '[title="Search"]', + pagesPinIcon: '[title="Pin"]', homePageLabel: '[data-cy="pages-name-home"]', homePageIcon: '[data-cy="home-page-icon"]', @@ -16,21 +16,21 @@ export const multipageSelector = { renameOptionButton: '[data-cy="rename-option-button"]', markHomePageIcon: '[data-cy="mark-home-option-icon"]', markHomePageOptionButton: '[data-cy="mark-home-option-button"]', - hidePageOptionIcon: '[data-cy="hide-page-option-icon"]', - hidePageOptionButton: '[data-cy="hide-page-option-button"]', + hidePageOptionIcon: '[data-cy="hide-page-on-app-menu-option-icon"]', + hidePageOptionButton: '[data-cy="hide-page-on-app-menu-option-button"]', eventHandlersOptionIcon: '[data-cy="event-handlers-option-icon"]', eventHandlerOptionButton: '[data-cy="event-handlers-option-button"]', disabledDeleteButton: ".menu-options > :nth-child(6)>.unstyled-button.disabled", - pagesMenuIcon: '[data-cy="menu-icon"]', + pagesMenuIcon: '[data-cy="page-global-settings"]', pageHeaderSettings: '[data-cy="page-settings-header"]', disableThePageMenuLabel: '[data-cy="disable-page-menu-label"]', disableMenuDescription: '[data-cy="disable-page-menu-description"]', disableMenuToggle: '[data-cy="disable-page-menu-toggle"]', - hidePageIcon: '[data-cy="hide-page-icon"]', + hidePageIcon: '[data-cy="icon-hidden"]', deletePageOptionButton: '[data-cy="delete-page-option-button"]', modalMessage: '[data-cy="modal-message"]', modalConfirmButton: '[data-cy="modal-confirm-button"]', @@ -39,7 +39,7 @@ export const multipageSelector = { modalTitlePageEvents: '[data-cy="modal-title-page-events"]', pageEventsLabel: '[data-cy="page-events-labe"]', addEventHandlerLink: '[data-cy="add-event-handler"]', - noEventHandlerMessage: '[data-cy="no-event-handler-message"]', + noEventHandlerMessage: '[data-cy="no-items-banner"]', closeModal: '[data-cy="close-option-button"]', closeIconEvents: '[data-cy="modal-close-button-page-events"]', eventName: '[data-cy="event-name"]', diff --git a/cypress-tests/cypress/constants/selectors/postgreSql.js b/cypress-tests/cypress/constants/selectors/postgreSql.js index 1b90f0177e..5784383b40 100644 --- a/cypress-tests/cypress/constants/selectors/postgreSql.js +++ b/cypress-tests/cypress/constants/selectors/postgreSql.js @@ -25,7 +25,7 @@ export const postgreSqlSelector = { buttonTestConnection: '[data-cy="test-connection-button"]', connectionFailedText: '[data-cy="test-connection-failed-text"]', buttonSave: '[data-cy="db-connection-save-button"] > .tj-base-btn', - dangerAlertNotSupportSSL: '.go3958317564', + dangerAlertNotSupportSSL: ".go3958317564", passwordTextField: '[data-cy="password-text-field"]', textConnectionVerified: '[data-cy="test-connection-verified-text"]', @@ -50,7 +50,7 @@ export const postgreSqlSelector = { toggleTransformation: '[data-cy="transformation-toggle-switch"]', inputFieldTransformation: '[data-cy="transformation-input-input-field"]', - headerQueryPreview: '.py-2', + headerQueryPreview: ".py-2", previewTabJson: '[data-cy="preview-tab-json"]', previewTabRaw: '[data-cy="preview-tab-raw"]', @@ -69,7 +69,7 @@ export const postgreSqlSelector = { labelSuccessMessageInput: '[data-cy="label-success-message-input"]', notificationDurationInput: '[data-cy="label-notification-duration-input"]', addEventHandler: '[data-cy="add-event-handler"]', - noEventHandlerMessage: '[data-cy="no-event-handler-message"]', + noEventHandlerMessage: '[data-cy="no-items-banner"]', postgresqlQueryRunButton: '[data-cy="postgresql1-query-run-button"]', psqlQueryLabel: '[data-cy="postgresql1-query-label"]', psqlQueryDeleteButton: '[data-cy="postgresql1-query-delete-button"]', diff --git a/cypress-tests/cypress/constants/selectors/table.js b/cypress-tests/cypress/constants/selectors/table.js index 934a376a2c..27c543ad2a 100644 --- a/cypress-tests/cypress/constants/selectors/table.js +++ b/cypress-tests/cypress/constants/selectors/table.js @@ -4,6 +4,7 @@ export const tableSelector = { return `[data-cy*="-cell-${index}"]`; }, pageIndexDetails: '[data-cy="page-index-details"]', + currentPageIndexDetails: '[data-cy="page-index-details"] > .form-control', paginationButtonToFirst: '[data-cy="pagination-button-to-first"]', paginationButtonToPrevious: '[data-cy="pagination-button-to-previous"]', @@ -48,7 +49,7 @@ export const tableSelector = { fxButton: (action) => { return `[data-cy="${String(action) .toLowerCase() - .replace(/\s+/g, "-")}-fx-button"]`; + .replace(/\s+/g, "-")}-fx-button"] > svg`; }, toggleButton: (action) => { @@ -76,4 +77,5 @@ export const tableSelector = { }, addNewRowTooltip: '[data-tooltip-id="tooltip-for-add-new-row"]', + manageColumns: '[data-tooltip-id="tooltip-for-manage-columns"]', }; diff --git a/cypress-tests/cypress/constants/texts/button.js b/cypress-tests/cypress/constants/texts/button.js index 99ac836880..9d2b3e4942 100644 --- a/cypress-tests/cypress/constants/texts/button.js +++ b/cypress-tests/cypress/constants/texts/button.js @@ -3,7 +3,7 @@ export const buttonText = { defaultWidgetName: "button1", buttonTextLabel: "Button Text", loadingState: "Loading State", - buttonDocumentationLink: "Button documentation", + buttonDocumentationLink: "Read documentation for Button", backgroundColor: "Background Color", textColor: "Text color", loaderColor: "Loader color", diff --git a/cypress-tests/cypress/constants/texts/common.js b/cypress-tests/cypress/constants/texts/common.js index ea0e6b5b5c..22699a00f3 100644 --- a/cypress-tests/cypress/constants/texts/common.js +++ b/cypress-tests/cypress/constants/texts/common.js @@ -10,7 +10,7 @@ export const path = { }; export const commonText = { - autoSave: "Saved changes", + autoSave: "Changes saved", email: "dev@tooljet.io", password: "password", loginErrorToast: "Invalid email or password", @@ -172,8 +172,10 @@ export const commonText = { }, groupInputFieldLabel: "Select Group", documentationLink: "Read Documentation", - constantsNameError: "Constant name should start with a letter or underscore and can only contain letters, numbers and underscores", - constantsValueError: "Value should be less than 10000 characters and cannot be empty" + constantsNameError: + "Constant name should start with a letter or underscore and can only contain letters, numbers and underscores", + constantsValueError: + "Value should be less than 10000 characters and cannot be empty", }; export const commonWidgetText = { @@ -182,6 +184,7 @@ export const commonWidgetText = { accordionGenaral: "General", accordionValidation: "Validation", accordionLayout: "Layout", + accordionDevices: "Devices", parameterCustomValidation: "Custom validation", parameterShowOnDesktop: "Show on desktop", @@ -192,7 +195,7 @@ export const commonWidgetText = { borderRadiusInput: ["{{", "20}}"], parameterOptionLabels: "Option labels", parameterBoxShadow: "Box Shadow", - boxShadowDefaultValue: "0px 0px 0px 0px #00000040", + boxShadowDefaultValue: "#00000040", parameterOptionvalues: "Option values", boxShadowColor: "Box Shadow Color", boxShadowFxValue: "-5px 6px 5px 8px #ee121240", @@ -202,7 +205,7 @@ export const commonWidgetText = { codeMirrorInputTrue: codeMirrorInputLabel(true), codeMirrorInputFalse: codeMirrorInputLabel("false"), - addEventHandlerLink: "Add handler", + addEventHandlerLink: "New event handler", inspectorComponentLabel: "components", componentValueLabel: "Value", labelDefaultValue: "Default Value", @@ -224,7 +227,7 @@ export const commonWidgetText = { return `Maximum ${value} characters is allowed`; }, - datepickerDocumentationLink: "Datepicker documentation", + datepickerDocumentationLink: "Read documentation for Datepicker", text1: "text1", textinput1: "textinput1", toggleswitch1: "toggleswitch1", diff --git a/cypress-tests/cypress/constants/texts/dataSource.js b/cypress-tests/cypress/constants/texts/dataSource.js index 1bdf3ae009..55f1dce0e9 100644 --- a/cypress-tests/cypress/constants/texts/dataSource.js +++ b/cypress-tests/cypress/constants/texts/dataSource.js @@ -1,74 +1,74 @@ export const dataSourceText = { - labelDataSources: "Datasources", - labelAddDataSource: "+ add data source", + labelDataSources: "Datasources", + labelAddDataSource: "+ add data source", - allDataSources: "All data sources (41)", - allDatabase: "Databases (17)", - allApis: "APIs (20)", - allCloudStorage: "Cloud Storage (4)", - pluginsLabelAndCount: "Plugins (0)", + allDataSources: "All data sources (41)", + allDatabase: "Databases (17)", + allApis: "APIs (20)", + allCloudStorage: "Cloud Storage (4)", + pluginsLabelAndCount: "Plugins (0)", - postgreSQL: "PostgreSQL", - labelHost: "Host", - labelPort: "Port", - labelSSL: "SSL", - labelDbName: "Database Name", - labelUserName: "Username", - labelPassword: "Password", - label: "Encrypted", - sslCertificate: "SSL Certificate", - whiteListIpText: - "Please white-list our IP address if the data source is not publicly accessible", - textCopy: "Copy", - readDocumentation: "Read documentation", - couldNotConnect: "could not connect", - buttonTextSave: "Save", - serverNotSuppotSsl: "The server does not support SSL connections", - psqlName: "cypress-postgresql", + postgreSQL: "PostgreSQL", + labelHost: "Host", + labelPort: "Port", + labelSSL: "SSL", + labelDbName: "Database Name", + labelUserName: "Username", + labelPassword: "Password", + label: "Encrypted", + sslCertificate: "SSL Certificate", + whiteListIpText: + "Please white-list our IP address if the data source is not publicly accessible", + textCopy: "Copy", + readDocumentation: "Read documentation", + couldNotConnect: "could not connect", + buttonTextSave: "Save", + serverNotSuppotSsl: "The server does not support SSL connections", + psqlName: "cypress-postgresql", - labelConnectionVerified: "connection verified", - toastDSAdded: "Data Source Added", - placeholderNameOfDB: "Name of the database", - placeholderEnterHost: "Enter host", - placeholderEnterPort: "Enter port", - placeholderEnterUserName: "Enter username", + labelConnectionVerified: "connection verified", + toastDSAdded: "Data Source Added", + placeholderNameOfDB: "Name of the database", + placeholderEnterHost: "Enter host", + placeholderEnterPort: "Enter port", + placeholderEnterUserName: "Enter username", - headerQueries: "Queries", - headerSelectDatasource: "Select Data Source", - noQueryText: "You haven't created queries yet.", - buttonLabelCreateQuery: "Create query", - tabGeneral: "General", - firstQueryName: "postgresql1", - buttonLabelPreview: "Preview", - buttonLabelCreateAndRun: "Create & Run", - buttonLabelCreate: "Create", - queryModeSql: "SQL mode", - queryModeGui: "GUI mode", + headerQueries: "Queries", + headerSelectDatasource: "Select Data Source", + noQueryText: "You haven't created queries yet.", + buttonLabelCreateQuery: "Create query", + tabGeneral: "General", + firstQueryName: "postgresql1", + buttonLabelPreview: "Preview", + buttonLabelCreateAndRun: "Create & Run", + buttonLabelCreate: "Create", + queryModeSql: "SQL mode", + queryModeGui: "GUI mode", - headerTransformations: "Enable Transformations", - json: "JSON", - raw: "Raw", + headerTransformations: "Enable Transformations", + json: "JSON", + raw: "Raw", - labelOperation: "Operation", - labelTable: "Table", - labelPrimaryKeyColumn: "Primary key column", - labelRecordsToUpdate: "Records to update", + labelOperation: "Operation", + labelTable: "Table", + labelPrimaryKeyColumn: "Primary key column", + labelRecordsToUpdate: "Records to update", - toggleLabelRunOnPageLoad: "Run this query on application load?", - toggleLabelconfirmation: "Request confirmation before running query?", - toggleLabelShowNotification: "Show notification on success?", - labelSuccessMessage: "Success Message", - labelNotificatioDuration: "Notification duration (s)", + toggleLabelRunOnPageLoad: "Run this query on application load?", + toggleLabelconfirmation: "Request confirmation before running query?", + toggleLabelShowNotification: "Show notification on success?", + labelSuccessMessage: "Success Message", + labelNotificatioDuration: "Notification duration (s)", - dialogueTextDelete: "Do you really want to delete this query?", - cancel: "Cancel", - yes: "Yes", + dialogueTextDelete: "Do you really want to delete this query?", + cancel: "Cancel", + yes: "Yes", - guiOptionBulkUpdate: "Bulk update using primary key", - buttonTextTestConnection: "Test Connection", + guiOptionBulkUpdate: "Bulk update using primary key", + buttonTextTestConnection: "Test Connection", - tabAdvanced: "Advanced", - labelNoEventhandler: "This query doesn't have any event handlers", - toastDSSaved: "Data Source Saved", - unSavedModalTitle: "Unsaved Changes" -}; \ No newline at end of file + tabAdvanced: "Advanced", + labelNoEventhandler: "No event handlers", + toastDSSaved: "Data Source Saved", + unSavedModalTitle: "Unsaved Changes", +}; diff --git a/cypress-tests/cypress/constants/texts/datePicker.js b/cypress-tests/cypress/constants/texts/datePicker.js index 758068341f..be2ea22cdc 100644 --- a/cypress-tests/cypress/constants/texts/datePicker.js +++ b/cypress-tests/cypress/constants/texts/datePicker.js @@ -13,6 +13,6 @@ export const datePickerText = { labelEnableTimeSection: "Enable time selection?", labelDisabledDates: "Disabled dates", - noEventMessage: "This datepicker doesn't have any event handlers", + noEventMessage: "No event handlers", defaultTime: "12:00 AM", }; diff --git a/cypress-tests/cypress/constants/texts/listview.js b/cypress-tests/cypress/constants/texts/listview.js index 8e77128f1d..b662a28916 100644 --- a/cypress-tests/cypress/constants/texts/listview.js +++ b/cypress-tests/cypress/constants/texts/listview.js @@ -2,6 +2,6 @@ export const listviewText = { defaultWidgetName: "Listview1", showBottomBorder: "Show bottom border", rowHeight: "Row height", - noEventHandlerMessage: "This listview doesn't have any event handlers", + noEventHandlerMessage: "No event handlers", listData: "List data", }; diff --git a/cypress-tests/cypress/constants/texts/multipage.js b/cypress-tests/cypress/constants/texts/multipage.js index e5779bf5b6..fde2a00631 100644 --- a/cypress-tests/cypress/constants/texts/multipage.js +++ b/cypress-tests/cypress/constants/texts/multipage.js @@ -1,6 +1,6 @@ export const multipageText = { labelPages: "Pages", - pageNameHome: "Home", + pageNameHome: "HomeHome", headerPageHandle: "Page Handle", pageHandleModalTitle: "Edit page handle", editPagehandleInfo: @@ -10,13 +10,13 @@ export const multipageText = { optionRename: "Rename", optionMarkHome: "Mark home", - optionHidePage: "Hide page", + optionHidePage: "Hide page on app menu", optionEventHandler: "Event Handlers", eventModalTitle: "Page Events", labelEvents: "Events", - addEventHandlerLink: "Add handler", - noEventHandlerInfo: "This page doesn't have any event handlers", + addEventHandlerLink: "New event handler", + noEventHandlerInfo: "No event handlers", optionDeletePage: "Delete Page", deleteModalMessage: "Do you really want to delete Home page?", diff --git a/cypress-tests/cypress/constants/texts/multiselect.js b/cypress-tests/cypress/constants/texts/multiselect.js index 4abac6556b..6d277e80bb 100644 --- a/cypress-tests/cypress/constants/texts/multiselect.js +++ b/cypress-tests/cypress/constants/texts/multiselect.js @@ -2,7 +2,7 @@ export const multiselectText = { multiselect: "Multiselect", defaultWidgetName: "Multiselect1", labelAllItemsSelected: "All items are selected.", - noEventsMessage: "This multiselect doesn't have any event handlers", + noEventsMessage: "No event handlers", dropdwonOptionSelectAll: "Select All", enableSelectAllOptions: "Enable select All option", diff --git a/cypress-tests/cypress/constants/texts/numberInput.js b/cypress-tests/cypress/constants/texts/numberInput.js index 6f8e8661d4..6a220fa8cf 100644 --- a/cypress-tests/cypress/constants/texts/numberInput.js +++ b/cypress-tests/cypress/constants/texts/numberInput.js @@ -1,4 +1,4 @@ export const numberInputText = { defaultWidgetName: "numberinput1", - numberInputDocumentationLink: "NumberInput documentation", -} \ No newline at end of file + numberInputDocumentationLink: "Read documentation for NumberInput", +}; diff --git a/cypress-tests/cypress/constants/texts/postgreSql.js b/cypress-tests/cypress/constants/texts/postgreSql.js index 1038710dc0..a71520410a 100644 --- a/cypress-tests/cypress/constants/texts/postgreSql.js +++ b/cypress-tests/cypress/constants/texts/postgreSql.js @@ -67,6 +67,6 @@ export const postgreSqlText = { buttonTextTestConnection: "Test Connection", tabAdvanced: "Advanced", - labelNoEventhandler: "This query doesn't have any event handlers", + labelNoEventhandler: "No event handlers", toastDSSaved: "Data Source Saved", }; diff --git a/cypress-tests/cypress/constants/texts/table.js b/cypress-tests/cypress/constants/texts/table.js index 533b88c178..275fdf358f 100644 --- a/cypress-tests/cypress/constants/texts/table.js +++ b/cypress-tests/cypress/constants/texts/table.js @@ -9,7 +9,9 @@ export const tableText = { ], placeHolderSearch: "Search", - defaultPageIndexDetails: "1 of 1", + defaultPageIndexDetails: "of 1", + currentPageIndexDetails: 1, + defaultNumberOfRecords: "4 Records", optionDownloadCSV: "Download as CSV", @@ -29,6 +31,6 @@ export const tableText = { optionEquals: "equals", labelDynamicColumn: "Use dynamic column", - makeEditable: "make editable", + makeEditable: "Make editable", lableDisableActionButton: "Disable action button", }; diff --git a/cypress-tests/cypress/constants/texts/textInput.js b/cypress-tests/cypress/constants/texts/textInput.js index 7a4700bb81..eec3bc78ce 100644 --- a/cypress-tests/cypress/constants/texts/textInput.js +++ b/cypress-tests/cypress/constants/texts/textInput.js @@ -1,4 +1,4 @@ export const textInputText = { defaultWidgetName: "textinput1", - textInputDocumentationLink: "TextInput documentation", -} \ No newline at end of file + textInputDocumentationLink: "Read documentation for TextInput", +}; diff --git a/cypress-tests/cypress/e2e/editor/data-source/snowflakeHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/data-source/snowflakeHappyPath.cy.js index 056a2713d0..379d3a834b 100644 --- a/cypress-tests/cypress/e2e/editor/data-source/snowflakeHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/data-source/snowflakeHappyPath.cy.js @@ -103,7 +103,7 @@ describe("Data sources", () => { ); cy.get('[data-cy="connection-alert-text"]').should( "have.text", - "A user name must be specified." + "Network error. Could not reach Snowflake." ); deleteDatasource(`cypress-${data.lastName}-snowflake`); }); diff --git a/cypress-tests/cypress/e2e/editor/globalSetingsHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/globalSetingsHappyPath.cy.js index 1a7c4ad13f..20ba9f4881 100644 --- a/cypress-tests/cypress/e2e/editor/globalSetingsHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/globalSetingsHappyPath.cy.js @@ -20,8 +20,9 @@ import { describe("Editor- Global Settings", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); }); it("should verify global settings", () => { @@ -42,13 +43,14 @@ describe("Editor- Global Settings", () => { "have.text", "Maintenance mode" ); + cy.hideTooltip(); cy.get('[data-cy="label-max-canvas-width"]').verifyVisibleElement( "have.text", "Max width of canvas" ); cy.get('[data-cy="label-bg-canvas"]').verifyVisibleElement( "have.text", - "Background color of canvas" + "Canvas background" ); // cy.get('[data-cy="canvas-bg-colour-picker"]').click(); selectColourFromColourPicker( @@ -103,6 +105,6 @@ describe("Editor- Global Settings", () => { .invoke("attr", "class") .should("contains", "disabled-btn"); - cy.wait(2000); + cy.apiDeleteApp(); }); }); diff --git a/cypress-tests/cypress/e2e/editor/inspectorHappypath.cy.js b/cypress-tests/cypress/e2e/editor/inspectorHappypath.cy.js index d639a34d82..c518a1ea40 100644 --- a/cypress-tests/cypress/e2e/editor/inspectorHappypath.cy.js +++ b/cypress-tests/cypress/e2e/editor/inspectorHappypath.cy.js @@ -14,8 +14,9 @@ import { multipageSelector } from "Selectors/multipage"; describe("Editor- Inspector", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); }); it("should verify the values of inspector", () => { @@ -128,7 +129,7 @@ describe("Editor- Inspector", () => { verifyValue("key", "String", `"value"`); cy.get(`[data-cy="inspector-node-key"] > .mx-1`).realHover(); - cy.get(".mx-1 > img").realClick(); + cy.get("[data-cy='copy-icon']").realClick(); cy.realPress("Escape"); cy.window().then((win) => { @@ -153,5 +154,6 @@ describe("Editor- Inspector", () => { cy.get(`[data-cy="inspector-node-button1"] > .mx-1`).realHover(); cy.get('[style="height: 13px; width: 13px;"] > img').click(); cy.notVisible(commonWidgetSelector.draggableWidget("button1")); + cy.apiDeleteApp(); }); }); diff --git a/cypress-tests/cypress/e2e/editor/multipage/multipageHappypath.cy.js b/cypress-tests/cypress/e2e/editor/multipage/multipageHappypath.cy.js index 3142bf4b4a..1e2c3f33a5 100644 --- a/cypress-tests/cypress/e2e/editor/multipage/multipageHappypath.cy.js +++ b/cypress-tests/cypress/e2e/editor/multipage/multipageHappypath.cy.js @@ -40,8 +40,9 @@ import { describe("Multipage", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); }); it("should verify the elements on multipage", () => { @@ -53,8 +54,6 @@ describe("Multipage", () => { data.maximumLength = randomNumber(8, 10); data.customText = randomString(12); - cy.renameApp(data.appName); - cy.get(multipageSelector.sidebarPageButton).click(); cy.get(multipageSelector.pagesLabel).verifyVisibleElement( "have.text", @@ -112,7 +111,8 @@ describe("Multipage", () => { cy.get(multipageSelector.pagesPinIcon).click(); cy.get(multipageSelector.sidebarPageButton).click(); - cy.get(multipageSelector.pagesMenuIcon).click({ force: true }); + cy.hideTooltip(); + cy.get(multipageSelector.pagesMenuIcon).realClick(); cy.get(multipageSelector.pageHeaderSettings).verifyVisibleElement( "have.text", @@ -133,7 +133,7 @@ describe("Multipage", () => { cy.get('[data-cy="pages-name-test_page"]') .verifyVisibleElement("have.text", "test_page") .click(); - cy.get(multipageSelector.pageMenuIcon).click(); + cy.get(multipageSelector.pageMenuIcon).eq(1).click(); cy.wait(500); cy.get(multipageSelector.pageHandleText).verifyVisibleElement( "have.text", @@ -151,11 +151,14 @@ describe("Multipage", () => { .find(multipageSelector.hidePageIcon) .should("be.visible"); - hideOrUnhidePage("home", "unhide"); + hideOrUnhidePage("home", "show"); cy.notVisible(multipageSelector.hidePageIcon); - cy.get(multipageSelector.homePageLabel).click(); - cy.get(multipageSelector.pageMenuIcon).click(); + cy.get(multipageSelector.homePageLabel) + .click() + .parent() + .find(multipageSelector.pageMenuIcon) + .click(); cy.wait(500); cy.get(multipageSelector.deletePageOptionButton).click(); cy.get(".modal-title").verifyVisibleElement( @@ -173,16 +176,20 @@ describe("Multipage", () => { cy.get(multipageSelector.modalCancelButton) .verifyVisibleElement("have.text", "Cancel") .click(); - cy.get('[data-cy="pages-name-test_page"]').should("be.visible"); - - cy.get(multipageSelector.pageMenuIcon).click(); cy.wait(500); + cy.get('[data-cy="pages-name-home"]') + .should("be.visible") + .click() + .parent() + .find(multipageSelector.pageMenuIcon) + .click(); + cy.get(multipageSelector.deletePageOptionButton).click(); cy.get(multipageSelector.modalConfirmButton).click(); cy.notVisible(multipageSelector.homePageLabel); - - cy.get(multipageSelector.pageMenuIcon).click(); cy.wait(500); + cy.get(multipageSelector.pageMenuIcon).click(); + cy.get(multipageSelector.eventHandlerOptionButton).click(); cy.get(multipageSelector.modalTitlePageEvents).verifyVisibleElement( "have.text", @@ -220,7 +227,12 @@ describe("Multipage", () => { clearSearch(); addNewPage("test"); - cy.get(multipageSelector.pageMenuIcon).click(); + cy.get('[data-cy="pages-name-test"]') + .should("be.visible") + .click() + .parent() + .find(multipageSelector.pageMenuIcon) + .click(); cy.wait(500); cy.get(multipageSelector.pageHandleText).click(); cy.get(multipageSelector.modalTitleEditPageHandle).verifyVisibleElement( @@ -264,7 +276,7 @@ describe("Multipage", () => { hideOrUnhidePage("pageOne"); hideOrUnhidePage("pageTwo"); - hideOrUnhidePage("pageOne", "unhide"); + hideOrUnhidePage("pageOne", "show"); addEventHandler("pageThree"); cy.get(multipageSelector.closeModal).click(); setHomePage("pageThree"); diff --git a/cypress-tests/cypress/e2e/editor/queries/runjsHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/queries/runjsHappyPath.cy.js index a7126bd478..22b0a65aa5 100644 --- a/cypress-tests/cypress/e2e/editor/queries/runjsHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/queries/runjsHappyPath.cy.js @@ -59,11 +59,13 @@ import { searchPage, } from "Support/utils/multipage"; import { verifyNodeData, openNode, verifyValue } from "Support/utils/inspector"; +import { deleteDownloadsFolder } from "Support/utils/common"; describe("RunJS", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.viewport(1800, 1800); cy.dragAndDropWidget("Button"); resizeQueryPanel("80"); @@ -84,10 +86,12 @@ describe("RunJS", () => { openNode("runjs1"); verifyValue("data", "Boolean", "true"); verifyValue("rawData", "Boolean", "true"); + cy.apiDeleteApp(); }); it("should verify actions", () => { const data = {}; + deleteDownloadsFolder(); data.customText = randomString(12); selectQueryFromLandingPage("runjs", "JavaScript"); @@ -195,6 +199,11 @@ describe("RunJS", () => { addInputOnQueryField("runjs", "actions.logout()"); query("run"); cy.get('[data-cy="sign-in-header"]').should("be.visible"); + cy.apiLogin(); + cy.openApp( + Cypress.env("appId"), + '[data-cy="draggable-widget-modal1-launch-button"]' + ); }); it("should verify global and page data", () => { @@ -243,6 +252,7 @@ describe("RunJS", () => { query("preview"); verifypreview("raw", `true`); } + addInputOnQueryField("runjs", "return globals.mode"); query("preview"); verifypreview("raw", `{"value":"edit"}`); @@ -250,6 +260,7 @@ describe("RunJS", () => { addInputOnQueryField("runjs", "return constants"); query("preview"); verifypreview("raw", `{}`); + cy.apiDeleteApp(); }); it("should verify action by button", () => { @@ -275,6 +286,7 @@ describe("RunJS", () => { cy.get('[data-cy="query-selection-field"]').should("have.text", "newrunjs"); cy.get(commonWidgetSelector.draggableWidget("button1")).click(); cy.verifyToastMessage(commonSelectors.toastMessage, "alert from runjs"); + cy.apiDeleteApp(); }); it("should verify runjs toggle options", () => { @@ -320,5 +332,6 @@ describe("RunJS", () => { cy.get('[data-cy="modal-confirm-button"]').realClick(); cy.verifyToastMessage(commonSelectors.toastMessage, "Success alert"); cy.verifyToastMessage(commonSelectors.toastMessage, "alert from runjs"); + cy.apiDeleteApp(); }); }); diff --git a/cypress-tests/cypress/e2e/editor/queries/runpyHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/queries/runpyHappyPath.cy.js index 0933c6144e..6f2bef4624 100644 --- a/cypress-tests/cypress/e2e/editor/queries/runpyHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/queries/runpyHappyPath.cy.js @@ -62,8 +62,9 @@ import { verifyNodeData, openNode, verifyValue } from "Support/utils/inspector"; describe("runpy", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.viewport(1800, 1800); cy.dragAndDropWidget("Button"); resizeQueryPanel("80"); @@ -86,6 +87,7 @@ describe("runpy", () => { openNode("runpy1"); verifyValue("data", "Boolean", "true"); verifyValue("rawData", "Boolean", "true"); + cy.apiDeleteApp(); }); it("should verify actions", () => { @@ -212,7 +214,6 @@ actions.unsetPageVariable('pageVar')` cy.wait(200); cy.waitForAutoSave(); query("run"); - waitForQueryAction("run"); cy.get('[data-cy="sign-in-header"]').should("be.visible"); }); @@ -258,6 +259,7 @@ actions.unsetPageVariable('pageVar')` // query("preview"); // verifypreview("raw", `true`); } + addInputOnQueryField("runpy", "tj_globals.mode.value"); query("preview"); verifypreview("raw", `edit`); @@ -265,6 +267,7 @@ actions.unsetPageVariable('pageVar')` query("preview"); waitForQueryAction("preview"); verifypreview("raw", `{}`); + cy.apiDeleteApp(); }); it("should verify action by button", () => { @@ -290,6 +293,7 @@ actions.unsetPageVariable('pageVar')` cy.get('[data-cy="query-selection-field"]').should("have.text", "newrunpy"); cy.get(commonWidgetSelector.draggableWidget("button1")).click(); cy.verifyToastMessage(commonSelectors.toastMessage, "alert from runpy"); + cy.apiDeleteApp(); }); it("should verify runpy toggle options", () => { @@ -339,5 +343,6 @@ actions.unsetPageVariable('pageVar')` "alert from runpy", false ); + cy.apiDeleteApp(); }); }); diff --git a/cypress-tests/cypress/e2e/editor/widget/buttonHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/widget/buttonHappyPath.cy.js index 9713071637..e5318b6dcc 100644 --- a/cypress-tests/cypress/e2e/editor/widget/buttonHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/buttonHappyPath.cy.js @@ -33,8 +33,9 @@ import { describe("Editor- Test Button widget", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.dragAndDropWidget(buttonText.defaultWidgetText, 500, 500); }); @@ -95,9 +96,7 @@ describe("Editor- Test Button widget", () => { ); verifyControlComponentAction(data.widgetName, data.customMessage); - - cy.get(commonSelectors.editorPageLogo).click(); - cy.deleteApp(data.appName); + cy.apiDeleteApp(data.appName); }); it("should verify the styles of the button widget", () => { @@ -224,9 +223,7 @@ describe("Editor- Test Button widget", () => { data.boxShadowColor, 4 ); - - cy.get(commonSelectors.editorPageLogo).click(); - cy.deleteApp(data.appName); + cy.apiDeleteApp(data.appName); }); it("should verify the app preview", () => { @@ -281,7 +278,7 @@ describe("Editor- Test Button widget", () => { commonWidgetText.parameterBorderRadius ) ) - .last() + .first() .clear() .type(buttonText.borderRadiusInput); @@ -340,8 +337,7 @@ describe("Editor- Test Button widget", () => { data.boxShadowParam ); - cy.get(commonSelectors.viewerPageLogo).click(); - cy.deleteApp(data.appName); + cy.apiDeleteApp(data.appName); }); it("Should verify csa", () => { @@ -400,5 +396,6 @@ describe("Editor- Test Button widget", () => { cy.get( commonWidgetSelector.draggableWidget(buttonText.defaultWidgetName) ).should("not.be.visible"); + cy.apiDeleteApp(); }); }); diff --git a/cypress-tests/cypress/e2e/editor/widget/componentsBasicHappypath.cy.js b/cypress-tests/cypress/e2e/editor/widget/componentsBasicHappypath.cy.js index 973255ecf1..768f5567d4 100644 --- a/cypress-tests/cypress/e2e/editor/widget/componentsBasicHappypath.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/componentsBasicHappypath.cy.js @@ -35,18 +35,21 @@ describe("Basic components", () => { const data = {}; beforeEach(() => { data.appName = `${fake.companyName}-${fake.companyName}-App`; - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.modifyCanvasSize(900, 900); - cy.renameApp(data.appName); cy.intercept("GET", "/api/comments/*").as("loadComments"); }); + afterEach(() => { + cy.apiDeleteApp(); + }); it("Should verify Toggle switch", () => { - cy.dragAndDropWidget("Toggle Switch", 50, 50); + cy.dragAndDropWidget("Toggle Switch", 200, 200); verifyComponent("toggleswitch1"); - cy.resizeWidget("toggleswitch1", 650, 400); + cy.resizeWidget("toggleswitch1", 650, 400, false); openEditorSidebar("toggleswitch1"); editAndVerifyWidgetName("toggleswitch2"); @@ -67,21 +70,18 @@ describe("Basic components", () => { cy.go("back"); cy.waitForAppLoad(); deleteComponentAndVerify("toggleswitch2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Checkbox", () => { - cy.dragAndDropWidget("Checkbox", 50, 50); - // cy.resizeWidget("checkbox1", 50, 200); + resizeQueryPanel("0"); + cy.dragAndDropWidget("Checkbox", 200, 200); + // cy.resizeWidget("checkbox1", 50, 200,false); cy.forceClickOnCanvas(); verifyComponent("checkbox1"); - cy.resizeWidget("checkbox1", 650, 400); - openEditorSidebar("checkbox1"); editAndVerifyWidgetName("checkbox2"); + cy.resizeWidget("checkbox2", 650, 400, false); verifyAndModifyParameter(commonWidgetText.parameterLabel, "label"); cy.forceClickOnCanvas(); @@ -96,18 +96,15 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("checkbox2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Radio Button", () => { - cy.dragAndDropWidget("Radio Button", 50, 50); - // cy.resizeWidget("radiobutton1", 100, 200); + cy.dragAndDropWidget("Radio Button", 200, 200); + // cy.resizeWidget("radiobutton1", 100, 200,false); cy.forceClickOnCanvas(); verifyComponent("radiobutton1"); - cy.resizeWidget("radiobutton1", 650, 400); + cy.resizeWidget("radiobutton1", 650, 400, false); openEditorSidebar("radiobutton1"); editAndVerifyWidgetName("radiobutton2"); @@ -125,20 +122,17 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("radiobutton2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Dropdown", () => { - cy.dragAndDropWidget("Dropdown", 50, 50); - // cy.resizeWidget("radiobutton1", 100, 200); + resizeQueryPanel("0"); + cy.dragAndDropWidget("Dropdown", 200, 200); + cy.resizeWidget("dropdown1", 400, 500, false); cy.forceClickOnCanvas(); verifyComponent("dropdown1"); - cy.resizeWidget("dropdown1", 650, 400); - openEditorSidebar("dropdown1"); editAndVerifyWidgetName("dropdown2"); + cy.resizeWidget("dropdown2", 650, 400, false); verifyAndModifyParameter(commonWidgetText.parameterLabel, "label"); cy.forceClickOnCanvas(); @@ -153,22 +147,18 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("dropdown2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); //pending - it.skip("Should verify Rating", () => { + it("Should verify Rating", () => { cy.dragAndDropWidget("Rating", 200, 200); cy.get('[data-cy="draggable-widget-starrating1"]').click({ force: true }); - cy.resizeWidget("starrating1", 200, 500); + cy.resizeWidget("starrating1", 400, 500, false); cy.forceClickOnCanvas(); verifyComponent("starrating1"); - cy.resizeWidget("starrating1", 650, 400); - openEditorSidebar("starrating1"); editAndVerifyWidgetName("starrating2"); + cy.resizeWidget("starrating2", 650, 400, false); verifyAndModifyParameter(commonWidgetText.parameterLabel, "label"); cy.forceClickOnCanvas(); @@ -183,9 +173,6 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("starrating2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Button Group", () => { @@ -193,7 +180,7 @@ describe("Basic components", () => { cy.forceClickOnCanvas(); verifyComponent("buttongroup1"); - cy.resizeWidget("buttongroup1", 650, 400); + cy.resizeWidget("buttongroup1", 650, 400, false); openEditorSidebar("buttongroup1"); editAndVerifyWidgetName("buttongroup2"); @@ -210,18 +197,15 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("buttongroup2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Calendar", () => { - cy.dragAndDropWidget("Calendar", 50, 50); + cy.dragAndDropWidget("Calendar", 200, 200); cy.get('[data-cy="draggable-widget-calendar1"]').click({ force: true }); cy.forceClickOnCanvas(); verifyComponent("calendar1"); - cy.resizeWidget("calendar1", 650, 400); + cy.resizeWidget("calendar1", 650, 400, false); openEditorSidebar("calendar1"); editAndVerifyWidgetName("calendar2"); @@ -232,38 +216,31 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("calendar2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Chart", () => { - cy.dragAndDropWidget("Chart", 50, 50); + cy.dragAndDropWidget("Chart", 200, 200); cy.get('[data-cy="draggable-widget-chart1"]').click({ force: true }); - cy.forceClickOnCanvas(); verifyComponent("chart1"); - cy.resizeWidget("chart1", 650, 400); - openEditorSidebar("chart1"); editAndVerifyWidgetName("chart2", ["Chart data", "Properties"]); + // cy.resizeWidget("chart1", 650, 400, false); verifyAndModifyParameter("Title", "label"); cy.forceClickOnCanvas(); - cy.waitForAutoSave(); + cy.resizeWidget("chart2", 650, 400, false); cy.get('[data-cy="draggable-widget-chart2"]').should( "contain.text", "label" ); + cy.waitForAutoSave(); cy.openInCurrentTab(commonWidgetSelector.previewButton); verifyComponent("chart2"); cy.go("back"); deleteComponentAndVerify("chart2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Circular Progress Bar", () => { @@ -271,7 +248,7 @@ describe("Basic components", () => { cy.forceClickOnCanvas(); verifyComponent("circularprogressbar1"); - cy.resizeWidget("circularprogressbar1", 650, 400); + cy.resizeWidget("circularprogressbar1", 650, 400, false); openEditorSidebar("circularprogressbar1"); editAndVerifyWidgetName("circularprogressbar2"); @@ -284,9 +261,6 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("circularprogressbar2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Code Editor", () => { @@ -295,7 +269,7 @@ describe("Basic components", () => { cy.forceClickOnCanvas(); verifyComponent("codeeditor1"); - cy.resizeWidget("codeeditor1", 650, 400); + cy.resizeWidget("codeeditor1", 650, 400, false); openEditorSidebar("codeeditor1"); editAndVerifyWidgetName("codeeditor2"); @@ -307,9 +281,6 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("codeeditor2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Color Picker", () => { @@ -318,7 +289,7 @@ describe("Basic components", () => { cy.forceClickOnCanvas(); verifyComponent("colorpicker1"); - cy.resizeWidget("colorpicker1", 650, 400); + cy.resizeWidget("colorpicker1", 650, 400, false); openEditorSidebar("colorpicker1"); editAndVerifyWidgetName("colorpicker2"); @@ -331,17 +302,13 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("colorpicker2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); - //needed fix - it.skip("Should verify Custom Component", () => { - cy.dragAndDropWidget("Custom Component", 50, 50); - cy.get('[data-cy="draggable-widget-customcomponent1"]').click({ - force: true, - }); - cy.forceClickOnCanvas(); + it("Should verify Custom Component", () => { + cy.dragAndDropWidget("Custom Component", 200, 200); + // cy.get('[data-cy="draggable-widget-customcomponent1"]').click({ + // force: true, + // }); + // cy.forceClickOnCanvas(); verifyComponent("customcomponent1"); openEditorSidebar("customcomponent1"); @@ -352,39 +319,33 @@ describe("Basic components", () => { { delay: 30 } ); cy.forceClickOnCanvas(); - - cy.get(commonWidgetSelector.draggableWidget(name)).trigger("mouseover"); - cy.get(commonWidgetSelector.widgetConfigHandle(name)) - .click() - .should("have.text", name); - - cy.resizeWidget("customcomponent1", 650, 400); - - openEditorSidebar("customcomponent1"); - cy.forceClickOnCanvas(); cy.waitForAutoSave(); + cy.resizeWidget("customcomponent2", 650, 400, false); + cy.wait(2000); + cy.get( + commonWidgetSelector.draggableWidget("customcomponent2") + ).realHover(); + cy.get(commonWidgetSelector.widgetConfigHandle("customcomponent2")) + .click() + .should("have.text", "customcomponent2"); cy.openInCurrentTab(commonWidgetSelector.previewButton); verifyComponent("customcomponent2", ["Code"]); cy.go("back"); deleteComponentAndVerify("customcomponent2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Container", () => { - cy.dragAndDropWidget("Container", 50, 50); + cy.dragAndDropWidget("Container", 200, 200); cy.forceClickOnCanvas(); verifyComponent("container1"); - cy.resizeWidget("container1", 650, 400); - openEditorSidebar("container1"); editAndVerifyWidgetName("container2", ["Layout"]); cy.forceClickOnCanvas(); + cy.resizeWidget("container2", 650, 400, false); cy.waitForAutoSave(); cy.openInCurrentTab(commonWidgetSelector.previewButton); @@ -392,9 +353,6 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("container2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Date-Range Picker", () => { @@ -403,7 +361,7 @@ describe("Basic components", () => { cy.forceClickOnCanvas(); verifyComponent("daterangepicker1"); - cy.resizeWidget("daterangepicker1", 650, 400); + cy.resizeWidget("daterangepicker1", 650, 400, false); openEditorSidebar("daterangepicker1"); editAndVerifyWidgetName("daterangepicker2"); @@ -416,11 +374,8 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("daterangepicker2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); - //visible issue + // visible issue it.skip("Should verify Divider", () => { verifyComponentWithOutLabel( "Divider", @@ -440,10 +395,10 @@ describe("Basic components", () => { }); it("Should verify Form", () => { - cy.dragAndDropWidget("Form", 50, 50); + cy.dragAndDropWidget("Form", 200, 200); verifyComponent("form1"); - cy.resizeWidget("form1", 650, 400); + cy.resizeWidget("form1", 650, 400, false); openEditorSidebar("form1"); editAndVerifyWidgetName("form2"); @@ -455,16 +410,13 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("form2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify HTML", () => { - cy.dragAndDropWidget("HTML Viewe", 50, 50, "HTML Viewer"); // search logic WIP + cy.dragAndDropWidget("HTML Viewe", 200, 200, "HTML Viewer"); // search logic WIP verifyComponent("html1"); - cy.resizeWidget("html1", 650, 400); + cy.resizeWidget("html1", 650, 400, false); openEditorSidebar("html1"); editAndVerifyWidgetName("html2"); @@ -476,9 +428,6 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("html2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Icon", () => { @@ -489,7 +438,7 @@ describe("Basic components", () => { verifyComponentWithOutLabel("Iframe", "iframe1", "iframe2", data.appName); }); - it.skip("Should verify Kamban", () => { + it.skip("Should verify Kanban", () => { verifyComponentWithOutLabel("Kanban", "kanban1", "kanban2", data.appName); }); @@ -498,7 +447,7 @@ describe("Basic components", () => { }); it("Should verify Map", () => { - cy.dragAndDropWidget("Map", 50, 50); + cy.dragAndDropWidget("Map", 200, 200); cy.get("body").then(($body) => { if ($body.find(".dismissButton").length > 0) { cy.get(".dismissButton").click(); @@ -507,7 +456,7 @@ describe("Basic components", () => { verifyComponent("map1"); - cy.resizeWidget("map1", 650, 400); + cy.resizeWidget("map1", 650, 400, false); openEditorSidebar("map1"); editAndVerifyWidgetName("map2"); @@ -519,9 +468,6 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("map2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Modal", () => { @@ -529,10 +475,10 @@ describe("Basic components", () => { }); it("Should verify PDF", () => { - cy.dragAndDropWidget("PDF", 50, 50); + cy.dragAndDropWidget("PDF", 200, 200); verifyComponent("pdf1"); - cy.resizeWidget("pdf1", 650, 400); + cy.resizeWidget("pdf1", 650, 400, false); openEditorSidebar("pdf1"); editAndVerifyWidgetName("pdf2"); @@ -544,9 +490,6 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("pdf2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Pagination", () => { @@ -567,7 +510,7 @@ describe("Basic components", () => { ); }); - it.skip("Should verify Range Slider", () => { + it("Should verify Range Slider", () => { verifyComponentWithOutLabel( "Range Slider", "rangeslider1", @@ -619,11 +562,11 @@ describe("Basic components", () => { it("Should verify Tabs", () => { cy.viewport(1200, 1300); resizeQueryPanel("0"); - cy.dragAndDropWidget("Tabs", 100, 100); + cy.dragAndDropWidget("Tabs", 200, 200); verifyComponent("tabs1"); deleteComponentAndVerify("image1"); - cy.resizeWidget("tabs1", 650, 400); + cy.resizeWidget("tabs1", 650, 400, false); openEditorSidebar("tabs1"); editAndVerifyWidgetName("tabs2"); @@ -635,9 +578,6 @@ describe("Basic components", () => { cy.go("back"); deleteComponentAndVerify("tabs2"); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(data.appName); }); it("Should verify Tags", () => { diff --git a/cypress-tests/cypress/e2e/editor/widget/csa.cy.js b/cypress-tests/cypress/e2e/editor/widget/csa.cy.js index 70aa7fcaff..2d4c34f2ac 100644 --- a/cypress-tests/cypress/e2e/editor/widget/csa.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/csa.cy.js @@ -16,8 +16,13 @@ import { commonWidgetText } from "Texts/common"; describe("Editor- CSA", () => { const toolJetImage = "cypress/fixtures/Image/tooljet.png"; beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); + }); + + afterEach(() => { + cy.apiDeleteApp(); }); it("Should verify Tabs CSA", () => { @@ -54,7 +59,7 @@ describe("Editor- CSA", () => { selectCSA("form1", "Reset Form"); openEditorSidebar("form1"); - cy.get('[data-cy="button-to-submit-form-fx-button"]').eq(1).click(); + cy.get('[data-cy="button-to-submit-form-fx-button"] > svg').click(); cy.get( '[data-cy="button-to-submit-form-input-field"]' ).clearAndTypeOnCodeMirror(`{{components.button2`); diff --git a/cypress-tests/cypress/e2e/editor/widget/datePickerHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/widget/datePickerHappyPath.cy.js index 32cbd814dc..26960868b8 100644 --- a/cypress-tests/cypress/e2e/editor/widget/datePickerHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/datePickerHappyPath.cy.js @@ -32,11 +32,14 @@ import { describe("Date Picker widget", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.dragAndDropWidget("Date Picker"); }); - + afterEach(() => { + cy.apiDeleteApp(); + }); it("should verify the properties of the date picker widget", () => { const data = {}; data.alertMessage = fake.randomSentence; @@ -231,7 +234,7 @@ describe("Date Picker widget", () => { cy.get( `${commonWidgetSelector.parameterFxButton( datePickerText.labelEnableDateSection - )}:eq(1)` + )}:eq(0)` ).click(); cy.get( commonWidgetSelector.parameterInputField( @@ -245,7 +248,7 @@ describe("Date Picker widget", () => { cy.get( `${commonWidgetSelector.parameterFxButton( datePickerText.labelEnableTimeSection - )}:eq(1)` + )}:eq(0)` ).click(); cy.get( commonWidgetSelector.parameterInputField( @@ -278,7 +281,7 @@ describe("Date Picker widget", () => { commonWidgetText.borderRadiusInput ); - openAccordion(commonWidgetText.accordionGenaral, []); + openAccordion(commonWidgetText.accordionGenaral, [], 1); cy.get( commonWidgetSelector.stylePicker(commonWidgetText.parameterBoxShadow) diff --git a/cypress-tests/cypress/e2e/editor/widget/listViewHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/widget/listViewHappyPath.cy.js index 854998c8ff..725c841bc3 100644 --- a/cypress-tests/cypress/e2e/editor/widget/listViewHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/listViewHappyPath.cy.js @@ -34,13 +34,17 @@ import { describe("List view widget", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.viewport(1200, 1200); cy.dragAndDropWidget("List View", 50, 500); cy.modifyCanvasSize(1200, 700); cy.intercept("PUT", "/api/apps/**").as("apps"); }); + afterEach(() => { + cy.apiDeleteApp(); + }); it("should verify the properties of the list view widget", () => { const data = {}; @@ -224,7 +228,7 @@ describe("List view widget", () => { ).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(); + cy.get("[data-cy='border-radius-fx-button']:eq(0)").click(); verifyAndModifyParameter( commonWidgetText.parameterBorderRadius, commonWidgetText.borderRadiusInput @@ -236,15 +240,15 @@ describe("List view widget", () => { openEditorSidebar(listviewText.defaultWidgetName); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); - openAccordion(commonWidgetText.accordionGenaral, []); + openAccordion(commonWidgetText.accordionGenaral, [], 1); verifyAndModifyToggleFx( commonWidgetText.parameterBoxShadow, - commonWidgetText.boxShadowDefaultValue, + "0px 0px 0px 0px #00000040", false ); - cy.get('[data-cy="border-radius-fx-button"]').click(); + cy.get('[data-cy="border-radius-fx-button"] > svg').click(); cy.get(commonWidgetSelector.boxShadowColorPicker).click(); fillBoxShadowParams( @@ -369,7 +373,7 @@ describe("List view widget", () => { ) ).click(); - cy.get("[data-cy='border-radius-fx-button']:eq(1)").click(); + cy.get("[data-cy='border-radius-fx-button']:eq(0)").click(); verifyAndModifyParameter( commonWidgetText.parameterBorderRadius, commonWidgetText.borderRadiusInput @@ -382,11 +386,11 @@ describe("List view widget", () => { openEditorSidebar(listviewText.defaultWidgetName); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); - openAccordion(commonWidgetText.accordionGenaral, []); + openAccordion(commonWidgetText.accordionGenaral, [], 1); verifyAndModifyToggleFx( commonWidgetText.parameterBoxShadow, - commonWidgetText.boxShadowDefaultValue, + "0px 0px 0px 0px #00000040", false ); diff --git a/cypress-tests/cypress/e2e/editor/widget/modalHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/widget/modalHappyPath.cy.js index 0ae3465b6f..96cf357270 100644 --- a/cypress-tests/cypress/e2e/editor/widget/modalHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/modalHappyPath.cy.js @@ -40,10 +40,14 @@ import { describe("Modal", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.dragAndDropWidget("Modal"); }); + afterEach(() => { + cy.apiDeleteApp(); + }); it("should verify the properties of the modal component", () => { const data = {}; @@ -54,7 +58,6 @@ describe("Modal", () => { data.tooltipText = fake.randomSentence; data.buttonText = fake.companyName; - cy.renameApp(data.appName); launchModal("modal1"); cy.get('[data-cy="modal-title"]').verifyVisibleElement( "have.text", @@ -161,11 +164,8 @@ describe("Modal", () => { cy.get(commonWidgetSelector.widgetDocumentationLink).should( "have.text", - "Modal documentation" + "Read documentation for Modal" ); - - cy.get(commonSelectors.editorPageLogo).click(); - cy.deleteApp(data.appName); }); it("should verify the styles of the modal widget", () => { @@ -176,7 +176,6 @@ describe("Modal", () => { data.boxShadowParam = fake.boxShadowParam; data.backgroundColor = fake.randomRgba; - cy.renameApp(data.appName); launchModal("modal1"); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); @@ -246,9 +245,6 @@ describe("Modal", () => { "have.text", "This title can be changed" ); - - cy.get(commonSelectors.editorPageLogo).click(); - cy.deleteApp(data.appName); }); it("should verify the app preview", () => { @@ -261,19 +257,18 @@ describe("Modal", () => { data.buttonTextColor = fake.randomRgba; data.customTitle = fake.randomSentence; - cy.get(".close-svg > path").click(); + cy.forceClickOnCanvas(); cy.dragAndDropWidget(commonWidgetText.toggleSwitch, 600, 50); - cy.get(".close-svg > path").click(); + cy.forceClickOnCanvas(); cy.dragAndDropWidget(commonWidgetText.toggleSwitch, 600, 100); - cy.get(".close-svg > path").click(); + cy.forceClickOnCanvas(); cy.dragAndDropWidget(commonWidgetText.toggleSwitch, 600, 150); - cy.get(".close-svg > path").click(); + cy.forceClickOnCanvas(); cy.dragAndDropWidget(commonWidgetText.toggleSwitch, 600, 200); - cy.get(".close-svg > path").click(); + cy.forceClickOnCanvas(); cy.dragAndDropWidget(commonWidgetText.toggleSwitch, 600, 250); - cy.get(".close-svg > path").click(); + cy.forceClickOnCanvas(); - cy.renameApp(data.appName); launchModal("modal1"); verifyAndModifyParameter("Title", data.customTitle); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); @@ -329,7 +324,7 @@ describe("Modal", () => { commonWidgetText.parameterDisable, "{{components.toggleswitch2.value" ); - cy.get('[data-cy="sidebar-option-properties"]').click(); + cy.get("#inspector-tab-properties").click(); typeOnFx("Loading State", "{{components.toggleswitch3.value"); cy.get("[data-cy='modal-header']").realClick(); @@ -437,7 +432,7 @@ describe("Modal", () => { "This title can be changed" ); - cy.get(".close-svg > path").click(); + cy.forceClickOnCanvas(); cy.dragAndDropWidget("Button", 500, 300, "Button", "[id*=canvas]:eq(2)"); selectEvent("On click", "Control Component"); selectCSA("modal1", "close"); diff --git a/cypress-tests/cypress/e2e/editor/widget/multiselectHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/widget/multiselectHappyPath.cy.js index f63f23b174..2403ef32b7 100644 --- a/cypress-tests/cypress/e2e/editor/widget/multiselectHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/multiselectHappyPath.cy.js @@ -40,10 +40,14 @@ import { describe("Multiselect widget", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.dragAndDropWidget(multiselectText.multiselect); }); + afterEach(() => { + cy.apiDeleteApp(); + }); it("should verify the properties of the widget", () => { const data = {}; @@ -219,12 +223,14 @@ describe("Multiselect widget", () => { openEditorSidebar(multiselectText.defaultWidgetName); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); - openAccordion(commonWidgetText.accordionGenaral, []); + openAccordion(commonWidgetText.accordionGenaral, [], 1); verifyAndModifyStylePickerFx( commonWidgetText.parameterBoxShadow, commonWidgetText.boxShadowDefaultValue, - commonWidgetText.boxShadowFxValue + commonWidgetText.boxShadowFxValue, + 0, + "0px 0px 0px 0px " ); cy.get( commonWidgetSelector.parameterFxButton( @@ -287,7 +293,7 @@ describe("Multiselect widget", () => { openEditorSidebar(data.widgetName); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); - openAccordion(commonWidgetText.accordionGenaral, []); + openAccordion(commonWidgetText.accordionGenaral, [], 1); cy.get( commonWidgetSelector.stylePicker(commonWidgetText.parameterBoxShadow) diff --git a/cypress-tests/cypress/e2e/editor/widget/numberInputHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/widget/numberInputHappyPath.cy.js index 03d7a9b5e0..2d42455b65 100644 --- a/cypress-tests/cypress/e2e/editor/widget/numberInputHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/numberInputHappyPath.cy.js @@ -23,10 +23,14 @@ import { describe("Number Input", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.dragAndDropWidget("Number Input"); }); + afterEach(() => { + cy.apiDeleteApp(); + }); it("should verify the properties of the number input widget", () => { const data = {}; @@ -37,8 +41,6 @@ describe("Number Input", () => { data.minimumvalue = `${randomNumber(5, 10)}`; data.maximumValue = `${randomNumber(90, 99)}`; - cy.renameApp(data.appName); - openEditorSidebar(numberInputText.defaultWidgetName); editAndVerifyWidgetName(data.widgetName); cy.get( @@ -78,9 +80,10 @@ describe("Number Input", () => { commonWidgetSelector.draggableWidget(data.widgetName), randomNumber(1, 4) ); + cy.forceClickOnCanvas(); cy.get( commonWidgetSelector.draggableWidget(data.widgetName) - ).verifyVisibleElement("have.value", `${data.minimumvalue}.00`); + ).verifyVisibleElement("have.value", `${data.minimumvalue}`); openEditorSidebar(data.widgetName); openAccordion(commonWidgetText.accordionProperties, [ @@ -96,9 +99,10 @@ describe("Number Input", () => { commonWidgetSelector.draggableWidget(data.widgetName), randomNumber(100, 110) ); + cy.forceClickOnCanvas; cy.get( commonWidgetSelector.draggableWidget(data.widgetName) - ).verifyVisibleElement("have.value", `${data.maximumValue}.00`); + ).verifyVisibleElement("have.value", `${data.maximumValue}`); openEditorSidebar(data.widgetName); openAccordion(commonWidgetText.accordionProperties, [ @@ -130,9 +134,6 @@ describe("Number Input", () => { "have.text", numberInputText.numberInputDocumentationLink ); - - cy.get(commonSelectors.editorPageLogo).click(); - cy.deleteApp(data.appName); }); it("should verify the styles of the number input widget", () => { const data = {}; @@ -141,8 +142,6 @@ describe("Number Input", () => { data.boxShadowColor = fake.randomRgba; data.boxShadowParam = fake.boxShadowParam; - cy.renameApp(data.appName); - openEditorSidebar(numberInputText.defaultWidgetName); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); @@ -192,9 +191,6 @@ describe("Number Input", () => { data.boxShadowColor, 3 ); - - cy.get(commonSelectors.editorPageLogo).click(); - cy.deleteApp(data.appName); }); it("should verify the app preview", () => { @@ -208,8 +204,6 @@ describe("Number Input", () => { data.minimumvalue = randomNumber(5, 10); data.maximumValue = randomNumber(90, 99); - cy.renameApp(data.appName); - openEditorSidebar(numberInputText.defaultWidgetName); verifyAndModifyParameter( commonWidgetText.labelDefaultValue, @@ -243,7 +237,7 @@ describe("Number Input", () => { openEditorSidebar(numberInputText.defaultWidgetName); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); - openAccordion(commonWidgetText.accordionGenaral, []); + openAccordion(commonWidgetText.accordionGenaral, [], 1); cy.get(commonWidgetSelector.boxShadowColorPicker).click(); fillBoxShadowParams( @@ -268,16 +262,18 @@ describe("Number Input", () => { commonWidgetSelector.draggableWidget(numberInputText.defaultWidgetName), randomNumber(1, 4) ); + cy.forceClickOnCanvas(); cy.get( commonWidgetSelector.draggableWidget(numberInputText.defaultWidgetName) - ).verifyVisibleElement("have.value", `${data.minimumvalue}.00`); + ).verifyVisibleElement("have.value", `${data.minimumvalue}`); cy.clearAndType( commonWidgetSelector.draggableWidget(numberInputText.defaultWidgetName), randomNumber(100, 110) ); + cy.forceClickOnCanvas(); cy.get( commonWidgetSelector.draggableWidget(numberInputText.defaultWidgetName) - ).verifyVisibleElement("have.value", `${data.maximumValue}.00`); + ).verifyVisibleElement("have.value", `${data.maximumValue}`); cy.get( commonWidgetSelector.draggableWidget(numberInputText.defaultWidgetName) ) @@ -300,8 +296,5 @@ describe("Number Input", () => { data.boxShadowColor, data.boxShadowParam ); - - cy.get(commonSelectors.viewerPageLogo).click(); - cy.deleteApp(data.appName); }); }); diff --git a/cypress-tests/cypress/e2e/editor/widget/passwordInputHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/widget/passwordInputHappyPath.cy.js index ee91136339..c313d2d71e 100644 --- a/cypress-tests/cypress/e2e/editor/widget/passwordInputHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/passwordInputHappyPath.cy.js @@ -25,11 +25,15 @@ import { randomString } from "Support/utils/textInput"; describe("Password Input", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.modifyCanvasSize(1200, 780); cy.dragAndDropWidget("Password Input", 350, 300); }); + afterEach(() => { + cy.apiDeleteApp(); + }); it("should verify the properties of the password input widget", () => { const data = {}; @@ -41,8 +45,6 @@ describe("Password Input", () => { data.maximumLength = randomNumber(8, 10); data.customText = randomString(12); - cy.renameApp(data.appName); - openEditorSidebar(passwordInputText.defaultWidgetName); closeAccordions(["Events", "Validation", "Properties", "Layout"]); editAndVerifyWidgetName(data.widgetName); @@ -169,11 +171,8 @@ describe("Password Input", () => { cy.get(commonWidgetSelector.widgetDocumentationLink).should( "have.text", - "PasswordInput documentation" + "Read documentation for PasswordInput" ); - - cy.get(commonSelectors.editorPageLogo).click(); - cy.deleteApp(data.appName); }); it("should verify the styles of the password input widget", () => { const data = {}; @@ -182,8 +181,6 @@ describe("Password Input", () => { data.boxShadowColor = fake.randomRgba; data.boxShadowParam = fake.boxShadowParam; - cy.renameApp(data.appName); - openEditorSidebar(passwordInputText.defaultWidgetName); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); @@ -233,9 +230,6 @@ describe("Password Input", () => { data.boxShadowColor, 1 ); - - cy.get(commonSelectors.editorPageLogo).click(); - cy.deleteApp(data.appName); }); it("should verify the app preview", () => { @@ -251,8 +245,6 @@ describe("Password Input", () => { data.customText = randomString(12); data.maxLengthText = randomString(data.maximumLength); - cy.renameApp(data.appName); - openEditorSidebar(passwordInputText.defaultWidgetName); verifyAndModifyParameter("Placeholder", data.customText); @@ -304,7 +296,7 @@ describe("Password Input", () => { openEditorSidebar(passwordInputText.defaultWidgetName); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); - openAccordion(commonWidgetText.accordionGenaral, []); + openAccordion(commonWidgetText.accordionGenaral, [], 1); cy.get(commonWidgetSelector.boxShadowColorPicker).click(); fillBoxShadowParams( @@ -327,6 +319,11 @@ describe("Password Input", () => { .should("contain", data.customText); cy.get('[data-cy="real-canvas"]').click("topLeft", { force: true }); + cy.get( + commonWidgetSelector.draggableWidget(passwordInputText.defaultWidgetName) + ) + .type(" ") + .type("{selectAll}{backspace}"); cy.get( commonWidgetSelector.validationFeedbackMessage( passwordInputText.defaultWidgetName @@ -355,6 +352,13 @@ describe("Password Input", () => { data.customText.toUpperCase() ); cy.get('[data-cy="real-canvas"]').click("topLeft", { force: true }); + + // cy.get( + // commonWidgetSelector.draggableWidget(passwordInputText.defaultWidgetName) + // ) + // .type("1") + // .type("{selectAll}{backspace}"); + cy.get( commonWidgetSelector.validationFeedbackMessage( passwordInputText.defaultWidgetName @@ -383,8 +387,5 @@ describe("Password Input", () => { commonWidgetSelector.draggableWidget(passwordInputText.defaultWidgetName), data.tooltipText ); - - cy.get(commonSelectors.viewerPageLogo).click(); - cy.deleteApp(data.appName); }); }); diff --git a/cypress-tests/cypress/e2e/editor/widget/tableRegression.cy.js b/cypress-tests/cypress/e2e/editor/widget/tableRegression.cy.js index e1c7dcdbcf..10dd23461b 100644 --- a/cypress-tests/cypress/e2e/editor/widget/tableRegression.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/tableRegression.cy.js @@ -55,8 +55,9 @@ import { resizeQueryPanel } from "Support/utils/dataSource"; describe("Table", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); deleteDownloadsFolder(); cy.viewport(1400, 2200); cy.modifyCanvasSize(900, 800); @@ -65,6 +66,9 @@ describe("Table", () => { resizeQueryPanel("1"); cy.get(`[data-cy="allow-selection-toggle-button"]`).click({ force: true }); }); + afterEach(() => { + cy.apiDeleteApp(); + }); it("Should verify the table components and labels", () => { cy.get( @@ -85,6 +89,9 @@ describe("Table", () => { "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"); @@ -208,24 +215,13 @@ describe("Table", () => { const data = {}; data.widgetName = fake.widgetName; openEditorSidebar(tableText.defaultWidgetName); - editAndVerifyWidgetName(data.widgetName, [ - "Options", - "Properties", - "Columns", - "Layout", - ]); + editAndVerifyWidgetName(data.widgetName, []); cy.forceClickOnCanvas(); openEditorSidebar(data.widgetName); - openAccordion(commonWidgetText.accordionProperties, [ - "Options", - "Columns", - "Layout", - ]); - verifyAndModifyParameter( - "Table data", + cy.get('[data-cy="table-data-input-field"]').clearAndTypeOnCodeMirror( codeMirrorInputLabel(`[{id:1,name:"Mike",email:"mike@example.com" },{id:2,name:"Nina",email:"nina@example.com" },{id:3,name:"Steph",email:"steph@example.com" },{id:4,name:"Oliver",email:"oliver@example.com" }, - ]`) + ]`) ); // cy.get('[data-cy="inspector-close-icon"]').click(); cy.forceClickOnCanvas(); @@ -238,21 +234,16 @@ describe("Table", () => { ]); //cy.get('[data-cy="inspector-close-icon"]').click(); openEditorSidebar(data.widgetName); - openAccordion("Columns", ["Options", "Properties", "Layout"]); + openAccordion("Columns", []); deleteAndVerifyColumn("email"); openEditorSidebar(data.widgetName); - openAccordion("Action buttons", [ - "Options", - "Properties", - "Columns", - "Layout", - ]); - cy.get('[data-cy="message-no-action-button"]').should( + openAccordion("Action buttons"); + cy.get('[data-cy="no-items-banner-action-button"]').should( "have.text", - "This table doesn't have any action buttons" + "There are no action buttons" ); cy.get('[data-cy="button-add-new-action-button"]') - .should("have.text", "+ Add button") + .should("have.text", "New action button") .click(); cy.get('[data-cy="action-button-button-0"]').verifyVisibleElement( "have.text", @@ -303,12 +294,7 @@ describe("Table", () => { cy.get('[data-cy="leftActions-cell-0"]').eq(0).find("button").click(); cy.verifyToastMessage(commonSelectors.toastMessage, "Hello world!"); openEditorSidebar(data.widgetName); - openAccordion(commonWidgetText.accordionEvents, [ - "Options", - "Properties", - "Columns", - "Layout", - ]); + 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"]>') @@ -320,11 +306,7 @@ describe("Table", () => { cy.get('[data-cy="inspector-close-icon"]').click(); openEditorSidebar(data.widgetName); - openAccordion(commonWidgetText.accordionLayout, [ - "Options", - "Properties", - "Columns", - ]); + openAccordion(commonWidgetText.accordionLayout, []); verifyAndModifyToggleFx( "Show on desktop", @@ -348,28 +330,21 @@ describe("Table", () => { const data = {}; data.widgetName = fake.widgetName; openEditorSidebar(tableText.defaultWidgetName); - editAndVerifyWidgetName(data.widgetName, [ - "Options", - "Properties", - "Columns", - "Layout", - ]); + editAndVerifyWidgetName(data.widgetName, []); //String/default openEditorSidebar(data.widgetName); + cy.wait(500); deleteAndVerifyColumn("id"); deleteAndVerifyColumn("name"); deleteAndVerifyColumn("email"); + 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(); - cy.wait(2000); verifyAndEnterColumnOptionInput("key", "name"); verifyAndEnterColumnOptionInput("Text color", "red"); - verifyAndEnterColumnOptionInput( - "Cell Background Color", - "{backspace}{backspace}{backspace}{backspace}{backspace}{backspace}{backspace}{backspace}{backspace}{backspace}{backspace}{backspace}{backspace}{backspace}yellow" - ); + verifyAndEnterColumnOptionInput("Cell Background Color", "yellow"); cy.get( '[data-cy="input-and-label-cell-background-color"] > .form-label' ).click(); @@ -392,17 +367,22 @@ describe("Table", () => { verifyAndEnterColumnOptionInput("Regex", "AABb"); verifyAndEnterColumnOptionInput("Min length", "4"); verifyAndEnterColumnOptionInput("Max length", "5"); - verifyAndEnterColumnOptionInput("Custom rule", "{backspace}"); + 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"); + 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( @@ -430,7 +410,7 @@ describe("Table", () => { openEditorSidebar(data.widgetName); addAndOpenColumnOption("fake-badge", `badge`); - verifyAndEnterColumnOptionInput("key", ""); + verifyAndEnterColumnOptionInput("key", " "); verifyAndEnterColumnOptionInput("Values", "{{[1,2,3]"); verifyAndEnterColumnOptionInput("Labels", '{{["One","Two","Three"]'); @@ -445,9 +425,9 @@ describe("Table", () => { 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(); @@ -469,12 +449,14 @@ describe("Table", () => { deleteAndVerifyColumn("fake-multiple-badge"); openEditorSidebar(data.widgetName); - verifyAndModifyParameter( - "Table data", + cy.get('[data-cy="table-data-input-field"]').clearAndTypeOnCodeMirror( codeMirrorInputLabel(`[{id:1,name:"Mike",email:"mike@example.com", tags:['One','Two','Three'] },{id:2,name:"Nina",email:"nina@example.com" },{id:3,name:"Steph",email:"steph@example.com", tags:['One','Two','Three'] },{id:4,name:"Oliver",email:"oliver@example.com" }, - ]`) + ]`) ); - closeAccordions(["Options"]); + + // closeAccordions(["Options"]); + cy.get('[data-cy="widget-accordion-data"]').click(); + deleteAndVerifyColumn("tags"); addAndOpenColumnOption("fake-tags", `tags`); verifyAndEnterColumnOptionInput("key", "tags"); @@ -483,14 +465,14 @@ describe("Table", () => { cy.get('[data-cy="make-editable-toggle-button"]').click(); cy.forceClickOnCanvas(); - cy.get(`${tableSelector.column(1)}:eq(0) .badge`) + 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(1)}:eq(0) .badge`) + cy.get(`${tableSelector.column(0)}:eq(0) .badge`) .first() .click({ force: true }) .trigger("mouseover") @@ -524,7 +506,7 @@ describe("Table", () => { openEditorSidebar(data.widgetName); addAndOpenColumnOption("fake-radio", `radio`); - verifyAndEnterColumnOptionInput("key", ""); + verifyAndEnterColumnOptionInput("key", " "); verifyAndEnterColumnOptionInput("Values", "{{[1,2,3]"); verifyAndEnterColumnOptionInput("Labels", '{{["One","Two","Three"]'); @@ -546,17 +528,16 @@ describe("Table", () => { deleteAndVerifyColumn("fake-multiselect"); // openEditorSidebar(data.widgetName); - addAndOpenColumnOption("fake-toggleSwitch", `toggleSwitch`); + 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"); + deleteAndVerifyColumn("fake-toggleswitch"); - //Toggle Switch - // openEditorSidebar(data.widgetName); - addAndOpenColumnOption("fake-datePicker", `datePicker`); + openEditorSidebar(data.widgetName); + addAndOpenColumnOption("fake-datepicker", `datePicker`); verifyAndEnterColumnOptionInput("key", "fakeString"); // verifyAndEnterColumnOptionInput("Date Display format", "fakeString"); @@ -568,15 +549,14 @@ describe("Table", () => { // verifyAndEnterColumnOptionInput("Parse in timezone", "fakeString"); // verifyAndEnterColumnOptionInput("Display in timezone", "fakeString"); - deleteAndVerifyColumn("fake-datePicker"); + deleteAndVerifyColumn("fake-datepicker"); verifyAndModifyToggleFx( tableText.labelDynamicColumn, commonWidgetText.codeMirrorLabelFalse ); cy.get('[data-cy*="-cell-1"]').should("have.class", "has-text"); - verifyAndModifyParameter( - "Column data", + cy.get('[data-cy="column-data-input-field"] ').clearAndTypeOnCodeMirror( codeMirrorInputLabel( `[{name: 'User email', key: 'email'}, {name: 'Full name', key: 'name', isEditable: false}]` ) @@ -588,15 +568,16 @@ describe("Table", () => { cy.get('[data-cy*="-cell-1"]').should("not.have.class", "has-text"); openEditorSidebar(data.widgetName); - verifyAndModifyParameter( - "Column data", + 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(); cy.get('[data-cy*="-cell-1"]') .eq(0) + .find("input") .click() .type(`{selectAll}{backspace}Mike Jon`); cy.forceClickOnCanvas(); @@ -607,8 +588,7 @@ describe("Table", () => { cy.get('[data-cy="table-button-save-changes"]').should("be.visible"); openEditorSidebar(data.widgetName); - verifyAndModifyParameter( - "Column data", + 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}]` ) @@ -666,15 +646,10 @@ describe("Table", () => { cy.get(commonWidgetSelector.buttonCloseEditorSideBar).click(); openEditorSidebar(tableText.defaultWidgetName); - openAccordion("Columns", ["Options", "Properties", "Layout"]); + openAccordion("Columns"); deleteAndVerifyColumn("email"); openEditorSidebar(tableText.defaultWidgetName); - openAccordion("Action buttons", [ - "Options", - "Properties", - "Columns", - "Layout", - ]); + openAccordion("Action buttons"); cy.get('[data-cy="button-add-new-action-button"]').click(); cy.get('[data-cy="rightActions-cell-2"]') @@ -702,7 +677,8 @@ describe("Table", () => { verifyAndModifyToggleFx( commonWidgetText.parameterBoxShadow, commonWidgetText.boxShadowDefaultValue, - false + false, + "0px 0px 0px 0px " ); cy.get(commonWidgetSelector.boxShadowColorPicker).click(); @@ -727,9 +703,7 @@ describe("Table", () => { "have.text", "Table type" ); - cy.get( - '[data-cy="table-type-fx-button"][class*="fx-button unselectable"]' - ).click(); + cy.get('[data-cy="table-type-fx-button"] > svg').click(); cy.get('[data-cy="table-type-input-field"]').clearAndTypeOnCodeMirror( `randomText` ); @@ -743,7 +717,7 @@ describe("Table", () => { ).click(); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); - cy.get('[data-cy="table-type-fx-button"]').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(); @@ -754,25 +728,20 @@ describe("Table", () => { .and("contain", "classic"); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); - selectFromSidebarDropdown( - '[data-cy="dropdown-table-type"]', - "Striped & bordered" - ); + 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 table-bordered "); + .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"][class*="fx-button unselectable"]' - ).click(); + cy.get('[data-cy="cell-size-fx-button"] > svg').click(); cy.get('[data-cy="cell-size-input-field"]').clearAndTypeOnCodeMirror( `randomText` @@ -788,8 +757,8 @@ describe("Table", () => { cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); - cy.get('[data-cy="cell-size-fx-button"]').click(); - selectFromSidebarDropdown('[data-cy="dropdown-cell-size"]', "Spacious"); + 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) @@ -798,7 +767,7 @@ describe("Table", () => { cy.get(tableSelector.column(0)) .eq(0) .invoke("attr", "class") - .and("contain", "spacious"); + .and("contain", "condensed"); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); cy.get('[data-cy="label-text-color"]').verifyVisibleElement( @@ -822,42 +791,37 @@ describe("Table", () => { it("should verify table options", () => { openEditorSidebar(tableText.defaultWidgetName); - closeAccordions(["Action buttons", "Columns", "Properties"]); - verifyAndModifyToggleFx("Client-side pagination", "{{true}}", true); - cy.get('[data-cy="server-side-pagination-toggle-button"]').click(); + 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"); - verifyAndModifyToggleFx("Enable previous page button", "{{true}}", true); - cy.get(tableSelector.paginationButtonToPrevious).should("be.disabled"); - verifyAndModifyToggleFx("Enable next page button", "{{true}}", true); - cy.get(tableSelector.paginationButtonToNext).should("be.disabled"); + 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="server-side-pagination-toggle-button"]').click(); - cy.get('[data-cy="client-side-pagination-toggle-button"]').click(); + // 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 sorting", "{{true}}", true); //inputfield - cy.get('[data-cy="enable-sorting-toggle-button"]').click(); - verifyAndModifyToggleFx("Server-side sort", "{{false}}", true); + 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("Show filter button", "{{true}}", true); + 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); + // cy.get('[data-cy="show-filter-button-toggle-button"]').click(); + // verifyAndModifyToggleFx("Server-side filter", "{{false}}", true); + // verifyAndModifyToggleFx("Show update buttons", "{{true}}", true); cy.get(`[data-cy="allow-selection-toggle-button"]`).click({ force: true }); verifyAndModifyToggleFx("Bulk selection", "{{false}}", true); @@ -867,12 +831,12 @@ describe("Table", () => { verifyAndModifyToggleFx("Hide column selector button", "{{false}}", true); cy.notVisible('[data-cy="select-column-icon"]'); - verifyAndModifyToggleFx("Show search box", "{{true}}", true); + verifyAndModifyToggleFx("Show search", "{{true}}", true); cy.notVisible('[data-cy="search-input-field"]'); - cy.get('[data-cy="show-search-box-toggle-button"]').click(); + // cy.get('[data-cy="show-search-box-toggle-button"]').click(); - verifyAndModifyToggleFx("Server-side search", "", true); + // verifyAndModifyToggleFx("Server-side search", " ", true); verifyAndModifyToggleFx("Loading State", "{{false}}", true); }); @@ -900,7 +864,7 @@ describe("Table", () => { cy.get( commonWidgetSelector.draggableWidget(tableText.defaultWidgetName) ).should("be.visible"); - cy.get(tableSelector.filterButton).click(); + // cy.get(tableSelector.filterButton).click(); addFilter( [{ column: "name", operation: "contains", value: "Sarah" }], true @@ -1009,6 +973,7 @@ describe("Table", () => { }); it("should verify table CSA", () => { + deleteDownloadsFolder(); cy.get('[data-cy="column-id"]').click(); cy.get('[data-cy="make-editable-toggle-button"]').click(); cy.get(`[data-cy="allow-selection-toggle-button"]`).click({ force: true }); @@ -1072,7 +1037,10 @@ describe("Table", () => { 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", "2 of 2"); + 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() @@ -1093,7 +1061,7 @@ describe("Table", () => { cy.get(".tooltip-inner").invoke("hide"); verifyNodeData("components", "Object", "9 entries "); openNode("components"); - verifyNodeData(tableText.defaultWidgetName, "Object", "21 entries "); + verifyNodeData(tableText.defaultWidgetName, "Object", "23 entries "); openNode(tableText.defaultWidgetName); verifyNodeData("newRows", "Array", "0 item "); @@ -1127,10 +1095,10 @@ describe("Table", () => { cy.get(".tooltip-inner").invoke("hide"); verifyNodeData("components", "Object", "1 entry "); openNode("components"); - verifyNodeData(tableText.defaultWidgetName, "Object", "17 entries "); + verifyNodeData(tableText.defaultWidgetName, "Object", "22 entries "); cy.wait(1000); - openNode(tableText.defaultWidgetName); - cy.wait(500); + openNode(tableText.defaultWidgetName, 0, 1); + openNode(tableText.defaultWidgetName, 0, 1); verifyNodeData("newRows", "Array", "1 item "); openNode("newRows"); verifyNodeData("0", "Object", "3 entries "); @@ -1142,7 +1110,7 @@ describe("Table", () => { it("should verify Disable action button", () => { cy.get('[data-cy="button-add-new-action-button"]') - .should("have.text", "+ Add button") + .should("have.text", "New action button") .click(); cy.get('[data-cy="action-button-button-0"]').verifyVisibleElement( @@ -1196,7 +1164,7 @@ describe("Table", () => { cy.get('[data-cy="action-button-button-0"]').click(); cy.get(tableSelector.fxButton(tableText.lableDisableActionButton)) .should("be.visible") - .eq(1) + .eq(0) .click(); cy.get( commonWidgetSelector.parameterInputField( @@ -1237,9 +1205,7 @@ describe("Table", () => { "Column Email" ); openEditorSidebar(tableText.defaultWidgetName); - cy.get(tableSelector.draggableHandleColumn("email")) - .should("be.visible") - .click(); + 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"); @@ -1249,7 +1215,7 @@ describe("Table", () => { .clearAndTypeOnCodeMirror(`{{components.text1.text`); cy.forceClickOnCanvas(); openEditorSidebar(tableText.defaultWidgetName); - cy.get(tableSelector.draggableHandleColumn("Column Email")) + cy.get('[data-cy="pages-name-column email"]') .scrollIntoView() .should("be.visible"); cy.get(tableSelector.columnHeader("column-email")) @@ -1259,30 +1225,30 @@ describe("Table", () => { cy.dragAndDropWidget("Toggle Switch", 800, 300); openEditorSidebar(tableText.defaultWidgetName); - cy.get(tableSelector.draggableHandleColumn("name")) - .should("be.visible") - .click(); - verifyAndModifyToggleFx(tableText.makeEditable, "{{false}}"); + 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(1) + .eq(0) .click(); cy.get(commonWidgetSelector.parameterInputField(tableText.makeEditable)) .click() .clearAndTypeOnCodeMirror(`{{components.toggleswitch1.value`); cy.forceClickOnCanvas(); - cy.get('[data-cy*="-cell-0"]').should("not.have.class", "has-text"); + 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-0"]') + cy.get('[data-cy*="-cell-1"]') .eq(0) .click() - .type(`{selectAll}{backspace}Jack`); - cy.forceClickOnCanvas(); - cy.get('[data-cy*="-cell-0"]').should("have.class", "has-text"); - cy.get('[data-cy*="-cell-0"] [type="text"]') + .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"); }); diff --git a/cypress-tests/cypress/e2e/editor/widget/textHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/widget/textHappyPath.cy.js index 8ee32c3201..7d7ecaf3fa 100644 --- a/cypress-tests/cypress/e2e/editor/widget/textHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/textHappyPath.cy.js @@ -32,11 +32,15 @@ import { describe("Text Input", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.dragAndDropWidget("Text"); }); + afterEach(() => { + cy.apiDeleteApp(); + }); it("should verify CSA", () => { const data = {}; data.customText = randomString(12); diff --git a/cypress-tests/cypress/e2e/editor/widget/textInputHappyPath.cy.js b/cypress-tests/cypress/e2e/editor/widget/textInputHappyPath.cy.js index 1a4f2bfb9d..a246504684 100644 --- a/cypress-tests/cypress/e2e/editor/widget/textInputHappyPath.cy.js +++ b/cypress-tests/cypress/e2e/editor/widget/textInputHappyPath.cy.js @@ -32,9 +32,13 @@ import { describe("Text Input", () => { beforeEach(() => { - cy.appUILogin(); - cy.createApp(); - cy.dragAndDropWidget("Text Input"); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); + cy.dragAndDropWidget("Text Input", 500, 500); + }); + afterEach(() => { + cy.apiDeleteApp(); }); it("should verify the properties of the text input widget", () => { @@ -46,8 +50,6 @@ describe("Text Input", () => { data.maximumLength = randomNumber(8, 10); data.customText = randomString(12); - cy.renameApp(data.appName); - openEditorSidebar(textInputText.defaultWidgetName); closeAccordions(["Validation", "General", "Properties", "Layout"]); editAndVerifyWidgetName(data.widgetName); @@ -191,9 +193,6 @@ describe("Text Input", () => { ); data.customText = fake.firstName; verifyControlComponentAction(data.widgetName, data.customText); - - cy.get(commonSelectors.editorPageLogo).click(); - cy.deleteApp(data.appName); }); it("should verify the styles of the text input widget", () => { const data = {}; @@ -202,8 +201,6 @@ describe("Text Input", () => { data.boxShadowColor = fake.randomRgba; data.boxShadowParam = fake.boxShadowParam; - cy.renameApp(data.appName); - openEditorSidebar(textInputText.defaultWidgetName); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); @@ -254,9 +251,6 @@ describe("Text Input", () => { data.boxShadowColor, 4 ); - - cy.get(commonSelectors.editorPageLogo).click(); - cy.deleteApp(data.appName); }); it("should verify the app preview", () => { @@ -273,8 +267,6 @@ describe("Text Input", () => { data.customText = randomString(12); data.maxLengthText = randomString(data.maximumLength); - cy.renameApp(data.appName); - openEditorSidebar(textInputText.defaultWidgetName); verifyAndModifyParameter( commonWidgetText.labelDefaultValue, @@ -344,10 +336,12 @@ describe("Text Input", () => { .invoke("attr", "placeholder") .should("contain", data.customText); - cy.clearAndType( - commonWidgetSelector.draggableWidget(textInputText.defaultWidgetName), - data.customText - ); + cy.get( + commonWidgetSelector.draggableWidget(textInputText.defaultWidgetName) + ) + .type(`{selectAll}{backspace}{enter}`) + .type(data.customText); + cy.forceClickOnCanvas(); cy.get( commonWidgetSelector.validationFeedbackMessage( textInputText.defaultWidgetName @@ -416,29 +410,29 @@ describe("Text Input", () => { selectCSA("textinput1", "Visibility"); cy.get('[data-cy="real-canvas"]').click("topRight", { force: true }); - cy.dragAndDropWidget("Text input", 500, 50); + cy.dragAndDropWidget("Text input", 50, 50); selectEvent("On change", "Control Component"); selectCSA("textinput1", "Set text", "500"); addSupportCSAData("text", "{{components.textinput2.value"); cy.get('[data-cy="real-canvas"]').click("topRight", { force: true }); - cy.dragAndDropWidget(buttonText.defaultWidgetText, 500, 275); + cy.dragAndDropWidget(buttonText.defaultWidgetText, 50, 200); selectEvent("On click", "Control Component"); selectCSA("textinput1", "Clear", "500"); cy.get('[data-cy="real-canvas"]').click("topRight", { force: true }); - cy.dragAndDropWidget(buttonText.defaultWidgetText, 500, 350); + cy.dragAndDropWidget(buttonText.defaultWidgetText, 50, 400); selectEvent("On click", "Control Component"); selectCSA("textinput1", "Disable", "500"); cy.get('[data-cy="Value-toggle-button"]').click(); cy.get('[data-cy="real-canvas"]').click("topRight", { force: true }); - cy.dragAndDropWidget(buttonText.defaultWidgetText, 500, 425); + cy.dragAndDropWidget(buttonText.defaultWidgetText, 300, 50); selectEvent("On click", "Control Component"); selectCSA("textinput1", "Set blur", "500"); cy.get('[data-cy="real-canvas"]').click("topRight", { force: true }); - cy.dragAndDropWidget(buttonText.defaultWidgetText, 500, 500); + cy.dragAndDropWidget(buttonText.defaultWidgetText, 300, 200); selectEvent("On click", "Control Component"); selectCSA("textinput1", "Set focus"); diff --git a/cypress-tests/cypress/e2e/globalDataSources/globalDataSourcePermissions.cy.js b/cypress-tests/cypress/e2e/globalDataSources/globalDataSourcePermissions.cy.js index 5d6aec5c6b..cee157fc7f 100644 --- a/cypress-tests/cypress/e2e/globalDataSources/globalDataSourcePermissions.cy.js +++ b/cypress-tests/cypress/e2e/globalDataSources/globalDataSourcePermissions.cy.js @@ -6,7 +6,13 @@ import { fillConnectionForm, } from "Support/utils/postgreSql"; import { commonText } from "Texts/common"; -import { closeDSModal, deleteDatasource, addQuery, addQueryN } from "Support/utils/dataSource"; +import { + closeDSModal, + deleteDatasource, + addQuery, + addQueryN, + verifyValueOnInspector, +} from "Support/utils/dataSource"; import { dataSourceSelector } from "Selectors/dataSource"; import { dataSourceText } from "Texts/dataSource"; import { addNewUserMW } from "Support/utils/userPermissions"; @@ -28,16 +34,17 @@ data.appName = `${fake.companyName}-App`; describe("Global Datasource Manager", () => { beforeEach(() => { - cy.appUILogin(); + cy.apiLogin(); cy.viewport(1200, 1300); + cy.visit('/') }); before(() => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.renameApp(data.appName); - cy.dragAndDropWidget("Button", 50, 50); + cy.dragAndDropWidget("Table", 250, 250); cy.get(commonSelectors.editorPageLogo).click(); - cy.reloadAppForTheElement(data.appName); addNewUserMW(data.firstName, data.email); logout(); }); @@ -109,8 +116,11 @@ describe("Global Datasource Manager", () => { .invoke("attr", "placeholder") .should("eq", "Search for Data Sources"); - - selectAndAddDataSource("databases", dataSourceText.postgreSQL, data.dsName1); + selectAndAddDataSource( + "databases", + dataSourceText.postgreSQL, + data.dsName1 + ); cy.clearAndType( dataSourceSelector.dsNameInputField, `cypress-${data.dsName1}-postgresql1` @@ -170,11 +180,10 @@ describe("Global Datasource Manager", () => { deleteDatasource(`cypress-${data.dsName1}-postgresql1`); }); it("Should verify the Datasource connection and query creation using global data source", () => { - selectAndAddDataSource("databases", dataSourceText.postgreSQL, data.dsName1); - - cy.clearAndType( - dataSourceSelector.dsNameInputField, - `cypress-${data.dsName1}-postgresql` + selectAndAddDataSource( + "databases", + dataSourceText.postgreSQL, + data.dsName1 ); cy.intercept("GET", "api/v2/data_sources").as("datasource"); @@ -195,7 +204,7 @@ describe("Global Datasource Manager", () => { navigateToAppEditor(data.appName); pinInspector(); - cy.get(".tooltip-inner").invoke("hide"); + // cy.get(".tooltip-inner").invoke("hide"); addQuery( "table_preview", @@ -205,33 +214,23 @@ describe("Global Datasource Manager", () => { cy.get('[data-cy="list-query-table_preview"]').verifyVisibleElement( "have.text", - 'table_preview ' + "table_preview " ); - cy.get(".tooltip-inner").invoke("hide"); cy.get(dataSourceSelector.queryCreateAndRunButton).click(); - cy.get('[data-cy="inspector-node-queries"]') - .parent() - .within(() => { - cy.get("span").first().scrollIntoView().contains("queries").click(); - }); - cy.get('[data-cy="inspector-node-table_preview"] > .node-key').click(); - cy.get('[data-cy="inspector-node-data"] > .fs-9').verifyVisibleElement( - "have.text", - "7 items " - ); + verifyValueOnInspector("table_preview", "7 items "); cy.get('[data-cy="show-ds-popover-button"]').click(); - cy.get( - ".p-2 > .tj-base-btn" - ) + cy.get(".p-2 > .tj-base-btn") .should("be.visible") - .and("have.text", "+ Add new datasource"); - cy.get( - ".p-2 > .tj-base-btn" - ).click(); + .and("have.text", "+ Add new data source"); + cy.get(".p-2 > .tj-base-btn").click(); - selectAndAddDataSource("databases", dataSourceText.postgreSQL, data.dsName2); + selectAndAddDataSource( + "databases", + dataSourceText.postgreSQL, + data.dsName2 + ); cy.intercept("GET", "api/v2/data_sources").as("datasource"); fillConnectionForm( { @@ -267,7 +266,8 @@ describe("Global Datasource Manager", () => { }); it("Should validate the user's global data source permissions on apps created by admin", () => { logout(); - cy.login(data.email, "password"); + cy.apiLogin(data.email, "password"); + cy.visit('/') cy.get(commonSelectors.globalDataSourceIcon).should("not.exist"); @@ -275,61 +275,37 @@ describe("Global Datasource Manager", () => { cy.get('[data-cy="list-query-table_preview"]').verifyVisibleElement( "have.text", - 'table_preview ' + "table_preview " ); pinInspector(); - cy.get(".tooltip-inner").invoke("hide"); + // cy.get(".tooltip-inner").invoke("hide"); cy.get(dataSourceSelector.queryCreateAndRunButton).click(); - cy.get('[data-cy="inspector-node-queries"]') - .parent() - .within(() => { - cy.get("span").first().scrollIntoView().contains("queries").click(); - }); - cy.get('[data-cy="inspector-node-table_preview"] > .node-key').click(); - cy.get('[data-cy="inspector-node-data"] > .fs-9').verifyVisibleElement( - "have.text", - "7 items " - ); + verifyValueOnInspector("table_preview", "7 items "); - cy.get('[data-cy="show-ds-popover-button"]').click() + cy.get('[data-cy="show-ds-popover-button"]').click(); addQueryN( "student_data", `SELECT * FROM student_data;`, `cypress-${data.dsName2}-postgresql` ); - // addQueryN( - // "student_data", - // `SELECT * FROM student_data;`, - // `cypress-huel-postgresql` - // ); - cy.get('[data-cy="list-query-student_data"]').verifyVisibleElement( "have.text", - 'student_data ' + "student_data " ); - cy.get(".tooltip-inner").invoke("hide"); cy.get(dataSourceSelector.queryCreateAndRunButton).click(); - cy.get('[data-cy="inspector-node-queries"]') - .parent() - .within(() => { - cy.get("span").first().scrollIntoView().contains("queries").dblclick(); - }); - cy.get('[data-cy="inspector-node-student_data"] > .node-key').click(); - cy.get('[data-cy="inspector-node-data"] > .fs-9').verifyVisibleElement( - "have.text", - "8 items " - ); - + verifyValueOnInspector("student_data", "8 items "); }); it("Should verify the query creation and scope changing functionality.", () => { logout(); - cy.login(data.email, "password"); - cy.createApp(); + cy.apiLogin(data.email, "password"); + cy.visit('/') + cy.apiCreateApp(); + cy.openApp(); cy.renameApp(data.appName); - cy.dragAndDropWidget("Button", 50, 50); + cy.dragAndDropWidget("Table", 250, 250); addQuery( "table_preview", @@ -339,22 +315,13 @@ describe("Global Datasource Manager", () => { cy.get('[data-cy="list-query-table_preview"]').verifyVisibleElement( "have.text", - 'table_preview ' + "table_preview " ); pinInspector(); - cy.get(".tooltip-inner").invoke("hide"); + // cy.get(".tooltip-inner").invoke("hide"); cy.get(dataSourceSelector.queryCreateAndRunButton).click(); - cy.get('[data-cy="inspector-node-queries"]') - .parent() - .within(() => { - cy.get("span").first().scrollIntoView().contains("queries").click(); - }); - cy.get('[data-cy="inspector-node-table_preview"] > .node-key').click(); - cy.get('[data-cy="inspector-node-data"] > .fs-9').verifyVisibleElement( - "have.text", - "7 items " - ); + verifyValueOnInspector("table_preview", "7 items "); }); }); diff --git a/cypress-tests/cypress/e2e/regressionSuite/appBuilder/queryPanel/queryEditorRegression.cy.js b/cypress-tests/cypress/e2e/regressionSuite/appBuilder/queryPanel/queryEditorRegression.cy.js new file mode 100644 index 0000000000..d5beb28e02 --- /dev/null +++ b/cypress-tests/cypress/e2e/regressionSuite/appBuilder/queryPanel/queryEditorRegression.cy.js @@ -0,0 +1,16 @@ +describe("Query Editor", () => { + beforeEach(() => { + cy.appUILogin(); + cy.createApp(); + }); + + it("should verify Elements on query editor", () => {}); + + it("should verify Functionality of query editor", () => {}); + + it("should verify imported app's queries", () => {}); + + it("should verify transformation", () => {}); + + it("should verify Event Handler", () => {}); +}); diff --git a/cypress-tests/cypress/e2e/regressionSuite/appBuilder/queryPanel/queryManagerRegression.cy.js b/cypress-tests/cypress/e2e/regressionSuite/appBuilder/queryPanel/queryManagerRegression.cy.js new file mode 100644 index 0000000000..79c89eda10 --- /dev/null +++ b/cypress-tests/cypress/e2e/regressionSuite/appBuilder/queryPanel/queryManagerRegression.cy.js @@ -0,0 +1,16 @@ +describe("Query Manager", () => { + beforeEach(() => { + cy.appUILogin(); + cy.createApp(); + }); + + it("should verify Elements on query Manager", () => {}); + + it("should verify Filter", () => {}); + + it("should verify Sort", () => {}); + + it("should verify Filetr", () => {}); + + it("should verify Curd operation", () => {}); +}); diff --git a/cypress-tests/cypress/e2e/workspace/dashboard.cy.js b/cypress-tests/cypress/e2e/workspace/dashboard.cy.js index 039c90df4d..8ac3e7bae4 100644 --- a/cypress-tests/cypress/e2e/workspace/dashboard.cy.js +++ b/cypress-tests/cypress/e2e/workspace/dashboard.cy.js @@ -167,15 +167,16 @@ describe("dashboard", () => { }); it("Should verify app card elements and app card operations", () => { - cy.appUILogin(); - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.renameApp(data.appName); cy.dragAndDropWidget("Table", 250, 250); + cy.get(commonSelectors.editorPageLogo).click(); cy.wait(500); - cy.reloadAppForTheElement(data.appName); cy.get(commonSelectors.appCard(data.appName)) .parent() .within(() => { diff --git a/cypress-tests/cypress/e2e/workspace/shareApp.cy.js b/cypress-tests/cypress/e2e/workspace/shareApp.cy.js index b8146687e6..ff6c9452ed 100644 --- a/cypress-tests/cypress/e2e/workspace/shareApp.cy.js +++ b/cypress-tests/cypress/e2e/workspace/shareApp.cy.js @@ -18,7 +18,9 @@ describe("App share functionality", () => { }); it("Verify private and public app share funtionality", () => { - cy.createApp(); + cy.apiLogin(); + cy.apiCreateApp(); + cy.openApp(); cy.renameApp(data.appName); cy.dragAndDropWidget("Table", 250, 250); @@ -79,6 +81,7 @@ describe("App share functionality", () => { cy.appUILogin(); navigateToAppEditor(data.appName); + cy.skipEditorPopover() cy.get(commonWidgetSelector.shareAppButton).click(); cy.get(commonWidgetSelector.makePublicAppToggle).uncheck(); cy.get(commonWidgetSelector.modalCloseButton).click(); @@ -114,8 +117,6 @@ describe("App share functionality", () => { cy.appUILogin(); navigateToAppEditor(data.appName); - cy.reloadAppForTheElement("skip"); - cy.wait(4000); cy.skipEditorPopover(); cy.get(commonWidgetSelector.shareAppButton).click(); cy.get(commonWidgetSelector.makePublicAppToggle).check(); diff --git a/cypress-tests/cypress/e2e/workspace/workspaceConstants.cy.js b/cypress-tests/cypress/e2e/workspace/workspaceConstants.cy.js index 0916fc75c8..e5c4f3b26b 100644 --- a/cypress-tests/cypress/e2e/workspace/workspaceConstants.cy.js +++ b/cypress-tests/cypress/e2e/workspace/workspaceConstants.cy.js @@ -33,237 +33,239 @@ describe("Workspace constants", () => { const envVar = Cypress.env("environment"); beforeEach(() => { cy.appUILogin(); - cy.intercept("GET", "/api/apps?page=1&folder=&searchKey=").as("homePage"); + cy.intercept("GET", "/api/library_apps").as("homePage"); }); - it("Verify workspace constants UI and CRUD operations", () => { - cy.get(commonSelectors.workspaceSettingsIcon).click(); - cy.get(commonSelectors.workspaceConstantsOption) - .should(($el) => { - expect($el.contents().first().text().trim()).to.eq( - "Workspace constants" - ); - }) - .click(); + if (envVar === "Community") { + it("Verify workspace constants UI and CRUD operations", () => { + cy.get(commonSelectors.workspaceSettingsIcon).click(); + cy.get(commonSelectors.workspaceConstantsOption) + .should(($el) => { + expect($el.contents().first().text().trim()).to.eq( + "Workspace constants" + ); + }) + .click(); - cy.get(commonSelectors.breadcrumbTitle).should(($el) => { - expect($el.contents().first().text().trim()).to.eq("Workspace settings"); + cy.get(commonSelectors.breadcrumbTitle).should(($el) => { + expect($el.contents().first().text().trim()).to.eq("Workspace settings"); + }); + cy.get(commonSelectors.breadcrumbPageTitle).verifyVisibleElement( + "have.text", + " Workspace constants" + ); + + cy.get( + workspaceConstantsSelectors.workspaceConstantsHelperText + ).verifyVisibleElement( + "have.text", + workspaceConstantsText.workspaceConstantsHelperText + ); + + cy.get(commonSelectors.documentationLink).verifyVisibleElement( + "have.text", + commonText.documentationLink + ); + + cy.get("body").then(($body) => { + if ($body.find(workspaceConstantsSelectors.emptyStateImage).length > 0) { + cy.get(workspaceConstantsSelectors.emptyStateImage).should( + "be.visible" + ); + cy.get( + workspaceConstantsSelectors.emptyStateHeader + ).verifyVisibleElement( + "have.text", + workspaceConstantsText.emptyStateHeader + ); + cy.get(workspaceConstantsSelectors.emptyStateText).verifyVisibleElement( + "have.text", + workspaceConstantsText.emptyStateText + ); + cy.get( + workspaceConstantsSelectors.addNewConstantButton + ).verifyVisibleElement( + "have.text", + workspaceConstantsText.addNewConstantButton + ); + } + }); + cy.get(workspaceConstantsSelectors.addNewConstantButton).click(); + cy.get(workspaceConstantsSelectors.contantFormTitle).verifyVisibleElement( + "have.text", + workspaceConstantsText.addConstatntText + ); + cy.get(commonSelectors.nameLabel).verifyVisibleElement("have.text", "Name"); + cy.get(commonSelectors.nameInputField) + .invoke("attr", "placeholder") + .should("eq", "Enter Constant Name"); + cy.get(commonSelectors.nameInputField).should("be.visible"); + cy.get(commonSelectors.valueLabel).verifyVisibleElement( + "have.text", + "Value" + ); + cy.get(commonSelectors.valueInputField) + .invoke("attr", "placeholder") + .should("eq", "Enter Value"); + cy.get(commonSelectors.valueInputField).should("be.visible"); + cy.get(commonSelectors.cancelButton).verifyVisibleElement( + "have.text", + "Cancel" + ); + cy.get(workspaceConstantsSelectors.addConstantButton).verifyVisibleElement( + "have.text", + "Add constant" + ); + cy.get(workspaceConstantsSelectors.addConstantButton).should("be.disabled"); + + contantsNameValidation(" ", commonText.constantsNameError); + contantsNameValidation("9", commonText.constantsNameError); + contantsNameValidation("%", commonText.constantsNameError); + contantsNameValidation( + "ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`a", + "Maximum length has been reached" + ); + contantsNameValidation( + "ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`afgg", + "Constant name should be between 1 and 32 characters" + ); + + cy.clearAndType(commonSelectors.valueInputField, " "); + cy.get(commonSelectors.valueErrorText).verifyVisibleElement( + "have.text", + commonText.constantsValueError + ); + cy.get(workspaceConstantsSelectors.addConstantButton).should("be.disabled"); + cy.get(commonSelectors.cancelButton).click(); + cy.get(workspaceConstantsSelectors.addNewConstantButton).click(); + + cy.clearAndType(commonSelectors.nameInputField, data.constName); + cy.clearAndType(commonSelectors.valueInputField, data.constName); + cy.get(workspaceConstantsSelectors.addConstantButton).should("be.enabled"); + cy.get(commonSelectors.cancelButton).click(); + cy.get(workspaceConstantsSelectors.constantName(data.constName)).should( + "not.exist" + ); + + cy.get(workspaceConstantsSelectors.addNewConstantButton).click(); + cy.clearAndType(commonSelectors.nameInputField, data.constName); + cy.clearAndType(commonSelectors.valueInputField, data.constName); + cy.get(workspaceConstantsSelectors.addConstantButton).click(); + cy.verifyToastMessage( + commonSelectors.toastMessage, + workspaceConstantsText.constantCreatedToast + ); + + cy.get(workspaceConstantsSelectors.addNewConstantButton).click(); + contantsNameValidation( + data.constName, + "Constant with this name already exists in Production environment" + ); + cy.get(commonSelectors.cancelButton).click(); + + cy.get(workspaceConstantsSelectors.envName).verifyVisibleElement( + "have.text", + "Production" + ); + cy.get( + workspaceConstantsSelectors.addNewConstantButton + ).verifyVisibleElement("have.text", "Create new constant"); + cy.get( + workspaceConstantsSelectors.constantsTableNameHeader + ).verifyVisibleElement("have.text", "Name"); + cy.get( + workspaceConstantsSelectors.constantsTableValueHeader + ).verifyVisibleElement("have.text", "Value"); + cy.get( + workspaceConstantsSelectors.constantName(data.constName) + ).verifyVisibleElement("have.text", data.constName); + cy.get( + workspaceConstantsSelectors.constantValue(data.constName) + ).verifyVisibleElement("have.text", data.constName); + cy.get( + workspaceConstantsSelectors.constEditButton(data.constName) + ).verifyVisibleElement("have.text", "Edit"); + cy.get( + workspaceConstantsSelectors.constDeleteButton(data.constName) + ).verifyVisibleElement("have.text", "Delete"); + cy.get(commonSelectors.pagination).should("be.visible"); + + cy.get(workspaceConstantsSelectors.constEditButton(data.constName)).click(); + + cy.get(workspaceConstantsSelectors.contantFormTitle).verifyVisibleElement( + "have.text", + "Update constant in production " + ); + cy.get(commonSelectors.nameLabel).verifyVisibleElement("have.text", "Name"); + cy.get(commonSelectors.nameInputField).should("have.value", data.constName); + cy.get(commonSelectors.nameInputField) + .should("be.visible") + .and("be.disabled"); + cy.get(commonSelectors.valueLabel).verifyVisibleElement( + "have.text", + "Value" + ); + cy.get(commonSelectors.valueInputField) + .should("be.visible") + .and("have.value", data.constName); + cy.get(commonSelectors.cancelButton).verifyVisibleElement( + "have.text", + "Cancel" + ); + cy.get(workspaceConstantsSelectors.addConstantButton).verifyVisibleElement( + "have.text", + "Update" + ); + cy.get(workspaceConstantsSelectors.addConstantButton).should("be.disabled"); + + cy.clearAndType(commonSelectors.valueInputField, data.newConstvalue); + cy.get(workspaceConstantsSelectors.addConstantButton).should("be.enabled"); + cy.get(commonSelectors.cancelButton).click(); + cy.get( + workspaceConstantsSelectors.constantValue(data.constName) + ).verifyVisibleElement("have.text", data.constName); + + cy.get(workspaceConstantsSelectors.constEditButton(data.constName)).click(); + cy.clearAndType(commonSelectors.valueInputField, data.newConstvalue); + cy.get(workspaceConstantsSelectors.addConstantButton).click(); + cy.verifyToastMessage( + commonSelectors.toastMessage, + "Constant updated successfully" + ); + cy.get( + workspaceConstantsSelectors.constantValue(data.constName) + ).verifyVisibleElement("have.text", data.newConstvalue); + + cy.get( + workspaceConstantsSelectors.constDeleteButton(data.constName) + ).click(); + cy.get(commonSelectors.modalMessage).verifyVisibleElement( + "have.text", + `Are you sure you want to delete ${data.constName} from production?` + ); + cy.get(commonSelectors.cancelButton).verifyVisibleElement( + "have.text", + "Cancel" + ); + cy.get(commonSelectors.yesButton).verifyVisibleElement("have.text", "Yes"); + cy.get(commonSelectors.cancelButton).click(); + cy.get( + workspaceConstantsSelectors.constantValue(data.constName) + ).verifyVisibleElement("have.text", data.newConstvalue); + + cy.get( + workspaceConstantsSelectors.constDeleteButton(data.constName) + ).click(); + cy.get(commonSelectors.yesButton).click(); + cy.get(workspaceConstantsSelectors.constantValue(data.constName)).should( + "not.exist" + ); + + cy.verifyToastMessage( + commonSelectors.toastMessage, + "Constant deleted successfully" + ); }); - cy.get(commonSelectors.breadcrumbPageTitle).verifyVisibleElement( - "have.text", - " Workspace constants" - ); - - cy.get( - workspaceConstantsSelectors.workspaceConstantsHelperText - ).verifyVisibleElement( - "have.text", - workspaceConstantsText.workspaceConstantsHelperText - ); - - cy.get(commonSelectors.documentationLink).verifyVisibleElement( - "have.text", - commonText.documentationLink - ); - - cy.get("body").then(($body) => { - if ($body.find(workspaceConstantsSelectors.emptyStateImage).length > 0) { - cy.get(workspaceConstantsSelectors.emptyStateImage).should( - "be.visible" - ); - cy.get( - workspaceConstantsSelectors.emptyStateHeader - ).verifyVisibleElement( - "have.text", - workspaceConstantsText.emptyStateHeader - ); - cy.get(workspaceConstantsSelectors.emptyStateText).verifyVisibleElement( - "have.text", - workspaceConstantsText.emptyStateText - ); - cy.get( - workspaceConstantsSelectors.addNewConstantButton - ).verifyVisibleElement( - "have.text", - workspaceConstantsText.addNewConstantButton - ); - } - }); - cy.get(workspaceConstantsSelectors.addNewConstantButton).click(); - cy.get(workspaceConstantsSelectors.contantFormTitle).verifyVisibleElement( - "have.text", - workspaceConstantsText.addConstatntText - ); - cy.get(commonSelectors.nameLabel).verifyVisibleElement("have.text", "Name"); - cy.get(commonSelectors.nameInputField) - .invoke("attr", "placeholder") - .should("eq", "Enter Constant Name"); - cy.get(commonSelectors.nameInputField).should("be.visible"); - cy.get(commonSelectors.valueLabel).verifyVisibleElement( - "have.text", - "Value" - ); - cy.get(commonSelectors.valueInputField) - .invoke("attr", "placeholder") - .should("eq", "Enter Value"); - cy.get(commonSelectors.valueInputField).should("be.visible"); - cy.get(commonSelectors.cancelButton).verifyVisibleElement( - "have.text", - "Cancel" - ); - cy.get(workspaceConstantsSelectors.addConstantButton).verifyVisibleElement( - "have.text", - "Add constant" - ); - cy.get(workspaceConstantsSelectors.addConstantButton).should("be.disabled"); - - contantsNameValidation(" ", commonText.constantsNameError); - contantsNameValidation("9", commonText.constantsNameError); - contantsNameValidation("%", commonText.constantsNameError); - contantsNameValidation( - "ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`a", - "Maximum length has been reached" - ); - contantsNameValidation( - "ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`afgg", - "Constant name should be between 1 and 32 characters" - ); - - cy.clearAndType(commonSelectors.valueInputField, " "); - cy.get(commonSelectors.valueErrorText).verifyVisibleElement( - "have.text", - commonText.constantsValueError - ); - cy.get(workspaceConstantsSelectors.addConstantButton).should("be.disabled"); - cy.get(commonSelectors.cancelButton).click(); - cy.get(workspaceConstantsSelectors.addNewConstantButton).click(); - - cy.clearAndType(commonSelectors.nameInputField, data.constName); - cy.clearAndType(commonSelectors.valueInputField, data.constName); - cy.get(workspaceConstantsSelectors.addConstantButton).should("be.enabled"); - cy.get(commonSelectors.cancelButton).click(); - cy.get(workspaceConstantsSelectors.constantName(data.constName)).should( - "not.exist" - ); - - cy.get(workspaceConstantsSelectors.addNewConstantButton).click(); - cy.clearAndType(commonSelectors.nameInputField, data.constName); - cy.clearAndType(commonSelectors.valueInputField, data.constName); - cy.get(workspaceConstantsSelectors.addConstantButton).click(); - cy.verifyToastMessage( - commonSelectors.toastMessage, - workspaceConstantsText.constantCreatedToast - ); - - cy.get(workspaceConstantsSelectors.addNewConstantButton).click(); - contantsNameValidation( - data.constName, - "Constant with this name already exists in Production environment" - ); - cy.get(commonSelectors.cancelButton).click(); - - cy.get(workspaceConstantsSelectors.envName).verifyVisibleElement( - "have.text", - "Production" - ); - cy.get( - workspaceConstantsSelectors.addNewConstantButton - ).verifyVisibleElement("have.text", "Create new constant"); - cy.get( - workspaceConstantsSelectors.constantsTableNameHeader - ).verifyVisibleElement("have.text", "Name"); - cy.get( - workspaceConstantsSelectors.constantsTableValueHeader - ).verifyVisibleElement("have.text", "Value"); - cy.get( - workspaceConstantsSelectors.constantName(data.constName) - ).verifyVisibleElement("have.text", data.constName); - cy.get( - workspaceConstantsSelectors.constantValue(data.constName) - ).verifyVisibleElement("have.text", data.constName); - cy.get( - workspaceConstantsSelectors.constEditButton(data.constName) - ).verifyVisibleElement("have.text", "Edit"); - cy.get( - workspaceConstantsSelectors.constDeleteButton(data.constName) - ).verifyVisibleElement("have.text", "Delete"); - cy.get(commonSelectors.pagination).should("be.visible"); - - cy.get(workspaceConstantsSelectors.constEditButton(data.constName)).click(); - - cy.get(workspaceConstantsSelectors.contantFormTitle).verifyVisibleElement( - "have.text", - "Update constant in production " - ); - cy.get(commonSelectors.nameLabel).verifyVisibleElement("have.text", "Name"); - cy.get(commonSelectors.nameInputField).should("have.value", data.constName); - cy.get(commonSelectors.nameInputField) - .should("be.visible") - .and("be.disabled"); - cy.get(commonSelectors.valueLabel).verifyVisibleElement( - "have.text", - "Value" - ); - cy.get(commonSelectors.valueInputField) - .should("be.visible") - .and("have.value", data.constName); - cy.get(commonSelectors.cancelButton).verifyVisibleElement( - "have.text", - "Cancel" - ); - cy.get(workspaceConstantsSelectors.addConstantButton).verifyVisibleElement( - "have.text", - "Update" - ); - cy.get(workspaceConstantsSelectors.addConstantButton).should("be.disabled"); - - cy.clearAndType(commonSelectors.valueInputField, data.newConstvalue); - cy.get(workspaceConstantsSelectors.addConstantButton).should("be.enabled"); - cy.get(commonSelectors.cancelButton).click(); - cy.get( - workspaceConstantsSelectors.constantValue(data.constName) - ).verifyVisibleElement("have.text", data.constName); - - cy.get(workspaceConstantsSelectors.constEditButton(data.constName)).click(); - cy.clearAndType(commonSelectors.valueInputField, data.newConstvalue); - cy.get(workspaceConstantsSelectors.addConstantButton).click(); - cy.verifyToastMessage( - commonSelectors.toastMessage, - "Constant updated successfully" - ); - cy.get( - workspaceConstantsSelectors.constantValue(data.constName) - ).verifyVisibleElement("have.text", data.newConstvalue); - - cy.get( - workspaceConstantsSelectors.constDeleteButton(data.constName) - ).click(); - cy.get(commonSelectors.modalMessage).verifyVisibleElement( - "have.text", - `Are you sure you want to delete ${data.constName} from production?` - ); - cy.get(commonSelectors.cancelButton).verifyVisibleElement( - "have.text", - "Cancel" - ); - cy.get(commonSelectors.yesButton).verifyVisibleElement("have.text", "Yes"); - cy.get(commonSelectors.cancelButton).click(); - cy.get( - workspaceConstantsSelectors.constantValue(data.constName) - ).verifyVisibleElement("have.text", data.newConstvalue); - - cy.get( - workspaceConstantsSelectors.constDeleteButton(data.constName) - ).click(); - cy.get(commonSelectors.yesButton).click(); - cy.get(workspaceConstantsSelectors.constantValue(data.constName)).should( - "not.exist" - ); - - cy.verifyToastMessage( - commonSelectors.toastMessage, - "Constant deleted successfully" - ); - }); + } it("should verify the constants resolving value on components and query", () => { common.navigateToworkspaceConstants(); @@ -294,6 +296,7 @@ describe("Workspace constants", () => { cy.waitForAutoSave(); common.pinInspector(); + cy.get(".tooltip-inner").invoke("hide"); cy.get(commonWidgetSelector.sidebarinspector).click(); cy.get(commonWidgetSelector.inspectorNodeComponents).click(); cy.get(commonWidgetSelector.nodeComponent(data.constantsName)).click(); @@ -310,31 +313,47 @@ describe("Workspace constants", () => { `[data-cy="inspector-node-${data.constantsName}"] > .mx-2` ).verifyVisibleElement("have.text", `"dJ_8Q~BcaMPd"`); - cy.get('[data-cy="button-release"]').click(); - cy.get('[data-cy="yes-button"]').click(); - cy.verifyToastMessage(commonSelectors.toastMessage, "Version v1 released"); - cy.get(commonWidgetSelector.shareAppButton).click(); - cy.clearAndType(commonWidgetSelector.appNameSlugInput, `${data.slug}`); - cy.get(commonWidgetSelector.modalCloseButton).click(); - cy.forceClickOnCanvas(); - cy.waitForAutoSave(); - cy.openInCurrentTab(commonWidgetSelector.previewButton); - cy.wait(4000); - - cy.get( - commonWidgetSelector.draggableWidget(data.constantsName) - ).verifyVisibleElement("have.text", "dJ_8Q~BcaMPd"); - - cy.get('[data-cy="viewer-page-logo"]').click(); - cy.wait("@homePage"); if (envVar === "Community") { + cy.get('[data-cy="button-release"]').click(); + cy.get('[data-cy="yes-button"]').click(); + cy.verifyToastMessage( + commonSelectors.toastMessage, + "Version v1 released" + ); + + cy.get(commonWidgetSelector.shareAppButton).click(); + cy.clearAndType(commonWidgetSelector.appNameSlugInput, `${data.slug}`); + cy.get(commonWidgetSelector.modalCloseButton).click(); + cy.forceClickOnCanvas(); + cy.waitForAutoSave(); + cy.openInCurrentTab(commonWidgetSelector.previewButton); + cy.wait(4000); + + cy.get( + commonWidgetSelector.draggableWidget(data.constantsName) + ).verifyVisibleElement("have.text", "dJ_8Q~BcaMPd"); + + cy.get('[data-cy="viewer-page-logo"]').click(); + cy.wait("@homePage"); cy.visit(`/applications/${data.slug}`); cy.wait(4000); cy.get( commonWidgetSelector.draggableWidget(data.constantsName) ).verifyVisibleElement("have.text", "dJ_8Q~BcaMPd"); + } else { + cy.forceClickOnCanvas(); + cy.waitForAutoSave(); + cy.openInCurrentTab(commonWidgetSelector.previewButton); + cy.wait(4000); + + cy.get( + commonWidgetSelector.draggableWidget(data.constantsName) + ).verifyVisibleElement("have.text", "dJ_8Q~BcaMPd"); + + cy.get('[data-cy="viewer-page-logo"]').click(); + cy.wait("@homePage"); } }); -}); +}); \ No newline at end of file diff --git a/cypress-tests/cypress/support/commands.js b/cypress-tests/cypress/support/commands.js deleted file mode 100644 index 3fbfb1b09e..0000000000 --- a/cypress-tests/cypress/support/commands.js +++ /dev/null @@ -1,286 +0,0 @@ -import { commonSelectors, commonWidgetSelector } from "Selectors/common"; -import { dashboardSelector } from "Selectors/dashboard"; -import { ssoSelector } from "Selectors/manageSSO"; -import { commonText, createBackspaceText } from "Texts/common"; -import { passwordInputText } from "Texts/passwordInput"; - -Cypress.Commands.add( - "login", - (email = "dev@tooljet.io", password = "password") => { - cy.visit("/"); - cy.clearAndType(commonSelectors.workEmailInputField, email); - cy.clearAndType(commonSelectors.passwordInputField, password); - cy.get(commonSelectors.signInButton).click(); - cy.intercept("GET", "api/library_apps").as("apps"); - cy.wait("@apps"); - cy.wait(4000); - cy.get(commonSelectors.homePageLogo).should("be.visible"); - } -); - -Cypress.Commands.add("clearAndType", (selector, text) => { - cy.get(selector).clear().type(text, { log: false }); -}); - -Cypress.Commands.add("forceClickOnCanvas", () => { - cy.get(commonSelectors.canvas).click("topRight", { force: true }); -}); - -Cypress.Commands.add( - "verifyToastMessage", - (selector, message, closeAction = true) => { - cy.get(selector).as("toast").should("contain.text", message); - if (closeAction) { - cy.get("body").then(($body) => { - if ($body.find(commonSelectors.toastCloseButton).length > 0) { - cy.closeToastMessage(); - cy.wait(200); - } - }); - } - } -); - -Cypress.Commands.add("waitForAutoSave", () => { - cy.wait(200); - cy.get(commonSelectors.autoSave, { timeout: 20000 }).should( - "have.text", - commonText.autoSave, - { timeout: 20000 } - ); -}); - -Cypress.Commands.add("createApp", (appName) => { - const getAppButtonSelector = ($title) => - $title.text().includes(commonText.introductionMessage) - ? commonSelectors.emptyAppCreateButton - : commonSelectors.appCreateButton; - - cy.get("body").then(($title) => { - cy.get(getAppButtonSelector($title)).click(); - }); - cy.waitForAppLoad(); - cy.skipEditorPopover(); -}); - -Cypress.Commands.add( - "dragAndDropWidget", - ( - widgetName, - positionX = 190, - positionY = 80, - widgetName2 = widgetName, - canvas = commonSelectors.canvas - ) => { - const dataTransfer = new DataTransfer(); - - cy.clearAndType(commonSelectors.searchField, widgetName); - cy.get(commonWidgetSelector.widgetBox(widgetName2)).trigger( - "dragstart", - { dataTransfer }, - { force: true } - ); - cy.get(canvas).trigger("drop", positionX, positionY, { - dataTransfer, - force: true, - }); - cy.waitForAutoSave(); - } -); - -Cypress.Commands.add("appUILogin", () => { - cy.visit("/"); - cy.clearAndType(commonSelectors.workEmailInputField, "dev@tooljet.io"); - cy.clearAndType(commonSelectors.passwordInputField, "password"); - cy.get(commonSelectors.signInButton).click(); - cy.intercept("GET", "api/library_apps").as("apps"); - cy.wait("@apps"); - cy.wait(3000); - cy.get(commonSelectors.homePageLogo).should("be.visible"); -}); - -Cypress.Commands.add( - "clearAndTypeOnCodeMirror", - { - prevSubject: "optional", - }, - (subject, value) => { - cy.wrap(subject) - .click() - .find("pre.CodeMirror-line") - .invoke("text") - .then((text) => { - cy.wrap(subject).type(createBackspaceText(text)), - { - delay: 0, - }; - }); - if (!Array.isArray(value)) { - cy.wrap(subject).type(value, { - parseSpecialCharSequences: false, - delay: 0, - }); - } else { - cy.wrap(subject) - .type(value[1], { - parseSpecialCharSequences: false, - delay: 0, - }) - .type(`{home}${value[0]}`, { delay: 0 }); - } - } -); - -Cypress.Commands.add("deleteApp", (appName) => { - cy.intercept("DELETE", "/api/apps/*").as("appDeleted"); - cy.get(commonSelectors.appCard(appName)) - .realHover() - .find(commonSelectors.appCardOptionsButton) - .realHover() - .click(); - cy.get(commonSelectors.deleteAppOption).click(); - cy.get(commonSelectors.buttonSelector(commonText.modalYesButton)).click(); - cy.wait("@appDeleted"); -}); - -Cypress.Commands.add( - "verifyVisibleElement", - { - prevSubject: "element", - }, - (subject, assertion, value, ...arg) => { - return cy - .wrap(subject) - .scrollIntoView() - .should("be.visible") - .and(assertion, value, ...arg); - } -); - -Cypress.Commands.add("openInCurrentTab", (selector) => { - cy.get(selector).invoke("removeAttr", "target").click(); -}); - -Cypress.Commands.add("modifyCanvasSize", (x, y) => { - cy.get("[data-cy='left-sidebar-settings-button']").click(); - cy.clearAndType("[data-cy='maximum-canvas-width-input-field']", x); - cy.forceClickOnCanvas(); - cy.intercept("/api/apps/**").as("app"); - cy.wait("@app"); -}); - -Cypress.Commands.add("renameApp", (appName) => { - cy.get(commonSelectors.appNameInput).type( - `{selectAll}{backspace}${appName}`, - { force: true } - ); - cy.forceClickOnCanvas(); - cy.waitForAutoSave(); -}); - -Cypress.Commands.add( - "clearCodeMirror", - { - prevSubject: "element", - }, - (subject, value) => { - cy.wrap(subject) - .click() - .find("pre.CodeMirror-line") - .invoke("text") - .then((text) => { - cy.wrap(subject).type(createBackspaceText(text)), - { - delay: 0, - }; - }); - } -); - -Cypress.Commands.add("closeToastMessage", () => { - cy.get(`${commonSelectors.toastCloseButton}:eq(0)`).click(); -}); - -Cypress.Commands.add("notVisible", (dataCy) => { - cy.get("body").then(($body) => { - if ($body.find(dataCy).length > 0) { - cy.get(dataCy).should("not.be.visible"); - } - }); - const log = Cypress.log({ - name: "notVisible", - displayName: "Not Visible", - message: dataCy, - }); -}); - -Cypress.Commands.add("resizeWidget", (widgetName, x, y) => { - cy.get(`[data-cy="draggable-widget-${widgetName}"]`).trigger("mouseover", { - force: true, - }); - - cy.get('[class="bottom-right"]').trigger("mousedown", { - which: 1, - force: true, - }); - cy.get(commonSelectors.canvas) - .trigger("mousemove", { - which: 1, - clientX: x, - ClientY: y, - clientX: x, - clientY: y, - pageX: x, - pageY: y, - screenX: x, - screenY: y, - }) - .trigger("mouseup"); - - cy.waitForAutoSave(); -}); - -Cypress.Commands.add("reloadAppForTheElement", (elementText) => { - cy.get("body").then(($title) => { - if (!$title.text().includes(elementText)) { - cy.reload(); - } - }); -}); - -Cypress.Commands.add("skipEditorPopover", () => { - cy.wait(2000); - cy.get("body").then(($el) => { - if ($el.text().includes("Skip", { timeout: 2000 })) { - cy.get(commonSelectors.skipButton).realClick(); - } - }); - const log = Cypress.log({ - name: "Skip Popover", - displayName: "Skip Popover", - message: " Popover skipped", - }); -}); - -Cypress.Commands.add("waitForAppLoad", () => { - const API_ENDPOINT = - Cypress.env("environment") === "Community" - ? "/api/v2/data_sources" - : "/api/app-environments/**"; - - const TIMEOUT = 15000; - - cy.intercept("GET", API_ENDPOINT).as("appDs"); - cy.wait("@appDs", { timeout: TIMEOUT }); -}); - -Cypress.Commands.add("visitTheWorkspace", (workspaceName) => { - cy.task("updateId", { - dbconfig: Cypress.env("app_db"), - sql: `select id from organizations where name='${workspaceName}';`, - }).then((resp) => { - let workspaceId = resp.rows[0].id; - cy.visit(workspaceId); - }); - cy.wait(2000); -}); diff --git a/cypress-tests/cypress/support/e2e.js b/cypress-tests/cypress/support/e2e.js index 1466a8818b..f9b943284c 100644 --- a/cypress-tests/cypress/support/e2e.js +++ b/cypress-tests/cypress/support/e2e.js @@ -14,11 +14,11 @@ // *********************************************************** // Import commands.js using ES2015 syntax: -import './commands' +import "../commands/commands"; +import "../commands/apiCommands"; import "cypress-real-events"; // Alternatively you can use CommonJS syntax: // require('./commands') -Cypress.on('uncaught:exception', (err, runnable) => -{ - return false; -}); \ No newline at end of file +Cypress.on("uncaught:exception", (err, runnable) => { + return false; +}); diff --git a/cypress-tests/cypress/support/utils/basicComponents.js b/cypress-tests/cypress/support/utils/basicComponents.js index a9045b0721..a7bb469fa3 100644 --- a/cypress-tests/cypress/support/utils/basicComponents.js +++ b/cypress-tests/cypress/support/utils/basicComponents.js @@ -30,11 +30,11 @@ export const verifyComponentWithOutLabel = ( appName, properties = [] ) => { - cy.dragAndDropWidget(component, 50, 50); + cy.dragAndDropWidget(component, 200, 200); cy.get(`[data-cy="draggable-widget-${defaultName}"]`).click({ force: true }); verifyComponent(defaultName); - cy.resizeWidget(defaultName, 650, 400); + cy.resizeWidget(defaultName, 650, 400, false); openEditorSidebar(defaultName); editAndVerifyWidgetName(fakeName, properties); @@ -47,7 +47,4 @@ export const verifyComponentWithOutLabel = ( cy.go("back"); deleteComponentAndVerify(fakeName); - cy.get(commonSelectors.editorPageLogo).click(); - - cy.deleteApp(appName); }; diff --git a/cypress-tests/cypress/support/utils/commonWidget.js b/cypress-tests/cypress/support/utils/commonWidget.js index 2ff1feef33..a846fcb32e 100644 --- a/cypress-tests/cypress/support/utils/commonWidget.js +++ b/cypress-tests/cypress/support/utils/commonWidget.js @@ -27,12 +27,14 @@ export const verifyAndModifyParameter = (paramName, value) => { cy.get(commonWidgetSelector.parameterLabel(paramName)) .scrollIntoView() .should("have.text", paramName); - cy.get( - commonWidgetSelector.parameterInputField(paramName) - ).clearAndTypeOnCodeMirror(value); + cy.get(commonWidgetSelector.parameterInputField(paramName)) + .clearAndTypeOnCodeMirror(" ") + .clearAndTypeOnCodeMirror(value); }; export const openEditorSidebar = (widgetName = "") => { + cy.hideTooltip(); + cy.get(`${commonWidgetSelector.draggableWidget(widgetName)}:eq(0)`).trigger( "mouseover" ); @@ -48,14 +50,7 @@ export const verifyAndModifyToggleFx = ( "have.text", paramName ); - cy.get( - commonWidgetSelector.parameterFxButton( - paramName, - "[class*='fx-button unselectable']" - ) - ) - .should("have.text", "Fx") - .click(); + cy.get(commonWidgetSelector.parameterFxButton(paramName, " > svg")).click(); if (defaultValue) cy.get(commonWidgetSelector.parameterInputField(paramName)) .find("pre.CodeMirror-line") @@ -214,7 +209,8 @@ export const verifyAndModifyStylePickerFx = ( paramName, defaultValue, value, - index = 0 + index = 0, + boxShadow = "" ) => { cy.get(commonWidgetSelector.parameterLabel(paramName)).should( "have.text", @@ -228,19 +224,12 @@ export const verifyAndModifyStylePickerFx = ( cy.get(commonWidgetSelector.stylePickerValue(paramName)) .should("be.visible") .verifyVisibleElement("have.text", defaultValue); - cy.get( - commonWidgetSelector.parameterFxButton( - paramName, - "[class*='fx-button unselectable']" - ) - ) - .should("have.text", "Fx") - .click(); + cy.get(commonWidgetSelector.parameterFxButton(paramName, " > svg")).click(); cy.get(commonWidgetSelector.stylePickerFxInput(paramName)).within(() => { cy.get(".CodeMirror-line") .should("be.visible") - .and("have.text", defaultValue); + .and("have.text", `${boxShadow}${defaultValue}`); }); cy.get( @@ -321,11 +310,13 @@ export const verifyStylesGeneralAccordion = ( ) => { openEditorSidebar(widgetName); cy.get(commonWidgetSelector.buttonStylesEditorSideBar).click(); - openAccordion(commonWidgetText.accordionGenaral, []); + // openAccordion(commonWidgetText.accordionGenaral, []); verifyAndModifyStylePickerFx( commonWidgetText.parameterBoxShadow, commonWidgetText.boxShadowDefaultValue, - `${boxShadowParameter[0]}px ${boxShadowParameter[1]}px ${boxShadowParameter[2]}px ${boxShadowParameter[3]}px ${hexColor}` + `${boxShadowParameter[0]}px ${boxShadowParameter[1]}px ${boxShadowParameter[2]}px ${boxShadowParameter[3]}px ${hexColor}`, + 0, + "0px 0px 0px 0px " ); cy.get( commonWidgetSelector.parameterFxButton(commonWidgetText.parameterBoxShadow) diff --git a/cypress-tests/cypress/support/utils/dataSource.js b/cypress-tests/cypress/support/utils/dataSource.js index 36b449ddcb..3cdbc32e49 100644 --- a/cypress-tests/cypress/support/utils/dataSource.js +++ b/cypress-tests/cypress/support/utils/dataSource.js @@ -49,17 +49,15 @@ export const deleteDatasource = (datasourceName) => { cy.get(`[data-cy="${cyParamName(datasourceName)}-button"]`) .parent() .within(() => { - cy.get(`[data-cy="${cyParamName(datasourceName)}-delete-button"]`).invoke( - "click" - ); + cy.get(dataSourceSelector.deleteDSButton(datasourceName)).invoke("click"); }); cy.get('[data-cy="yes-button"]').click(); - cy.verifyToastMessage(commonSelectors.toastMessage, "Data Source Deleted"); - cy.get(commonSelectors.breadcrumbTitle).click(); - cy.get(commonSelectors.breadcrumbPageTitle).verifyVisibleElement( - "have.text", - " Databases" - ); + // cy.verifyToastMessage(commonSelectors.toastMessage, "Data Source Deleted"); + // cy.get(commonSelectors.breadcrumbTitle).click() + // cy.get(commonSelectors.breadcrumbPageTitle).verifyVisibleElement( + // "have.text", + // " Databases" + // ); }; export const closeDSModal = () => { @@ -102,3 +100,23 @@ export const addQueryN = (queryName, query, dbName) => { cy.get(dataSourceSelector.queryInputField).clearAndTypeOnCodeMirror(query); cy.get(dataSourceSelector.queryCreateAndRunButton).click(); }; + +export const verifyValueOnInspector = (queryName, value) => { + cy.get('[data-cy="inspector-node-queries"]') + .parent() + .within(() => { + cy.get("span").first().scrollIntoView().contains("queries").click(); + }); + cy.get("body").then(($body) => { + if ( + $body.find(`[data-cy="inspector-node-${queryName}"] > .node-key`).length > + 0 + ) { + cy.get(`[data-cy="inspector-node-${queryName}"] > .node-key`).click(); + cy.get('[data-cy="inspector-node-data"] > .fs-9').verifyVisibleElement( + "have.text", + value + ); + } + }); +}; \ No newline at end of file diff --git a/cypress-tests/cypress/support/utils/inspector.js b/cypress-tests/cypress/support/utils/inspector.js index e40fe76d25..786c99f850 100644 --- a/cypress-tests/cypress/support/utils/inspector.js +++ b/cypress-tests/cypress/support/utils/inspector.js @@ -13,11 +13,11 @@ export const verifyNodeData = (node, type, children, index = 0) => { .verifyVisibleElement("have.text", type); }; -export const openNode = (node, index = 0) => { +export const openNode = (node, index = 0, time = 1000) => { cy.get(`[data-cy="inspector-node-${node.toLowerCase()}"] > .node-key`) .eq(index) .click(); - cy.wait(1000); + cy.wait(time); }; export const verifyValue = (node, type, children, index = 0) => { diff --git a/cypress-tests/cypress/support/utils/manageUsers.js b/cypress-tests/cypress/support/utils/manageUsers.js index 20050477f3..9c6ece2105 100644 --- a/cypress-tests/cypress/support/utils/manageUsers.js +++ b/cypress-tests/cypress/support/utils/manageUsers.js @@ -134,10 +134,10 @@ export const manageUsersElements = () => { export const inviteUser = (firstName, email) => { fillUserInviteForm(firstName, email); cy.get(usersSelector.buttonInviteUsers).click(); - cy.verifyToastMessage( - commonSelectors.toastMessage, - usersText.userCreatedToast - ); + // cy.verifyToastMessage( + // commonSelectors.toastMessage, + // usersText.userCreatedToast + // ); cy.wait(1000) fetchAndVisitInviteLink(email); }; @@ -318,4 +318,4 @@ export const fetchAndVisitInviteLink = (email) => { }); }); }); -}; +}; \ No newline at end of file diff --git a/cypress-tests/cypress/support/utils/modal.js b/cypress-tests/cypress/support/utils/modal.js index 75df99ccbe..cf1a368d84 100644 --- a/cypress-tests/cypress/support/utils/modal.js +++ b/cypress-tests/cypress/support/utils/modal.js @@ -52,7 +52,7 @@ export const addAndVerifyColor = ( }; export const typeOnFx = (fx, data) => { - cy.get(commonWidgetSelector.parameterFxButton(fx)).eq(1).realClick(); + cy.get(commonWidgetSelector.parameterFxButton(fx)).eq(0).realClick(); cy.get(commonWidgetSelector.parameterInputField(fx)).clearAndTypeOnCodeMirror( data ); diff --git a/cypress-tests/cypress/support/utils/multipage.js b/cypress-tests/cypress/support/utils/multipage.js index 99bd4a3f74..1e62a3b01e 100644 --- a/cypress-tests/cypress/support/utils/multipage.js +++ b/cypress-tests/cypress/support/utils/multipage.js @@ -1,7 +1,7 @@ import { multipageSelector } from "Selectors/multipage"; export const searchPage = (pageName) => { - cy.get('[data-cy="search-page-option-icon"]').click(); + cy.get('[title="Search"]').click(); cy.get('[data-cy="search-input-filed"]').type(pageName); }; @@ -10,11 +10,14 @@ export const clearSearch = () => { }; export const modifyPageHandle = (pageName, handle) => { - cy.get(`[data-cy="pages-name-${pageName.toLowerCase()}"]`).click(); - cy.get(multipageSelector.pageMenuIcon).click(); + cy.get(`[data-cy="pages-name-${pageName.toLowerCase()}"]`) + .click() + .parent() + .find(multipageSelector.pageMenuIcon) + .click(); cy.get(multipageSelector.pageHandleText).click(); cy.get(multipageSelector.pageHandleInputField).clear().type(handle); - cy.get(multipageSelector.pageHandleSaveButton).click() + cy.get(multipageSelector.pageHandleSaveButton).click(); }; export const detetePage = (pageName) => { @@ -26,14 +29,21 @@ export const detetePage = (pageName) => { }; export const hideOrUnhidePage = (pageName, operation = "hide") => { - cy.get(`[data-cy="pages-name-${pageName.toLowerCase()}"]`).click(); - cy.get(multipageSelector.pageMenuIcon).click(); - cy.get(`[data-cy="${operation}-page-option-button"]`).click(); + cy.get(`[data-cy="pages-name-${pageName.toLowerCase()}"]`) + .click() + .parent() + .find(multipageSelector.pageMenuIcon) + .click(); + cy.get(`[data-cy="${operation}-page-on-app-menu-option-button"]`).click(); }; export const setHomePage = (pageName) => { - cy.get(`[data-cy="pages-name-${pageName.toLowerCase()}"]`).trigger('mouseover').click(); - cy.get(multipageSelector.pageMenuIcon).click(); + cy.get(`[data-cy="pages-name-${pageName.toLowerCase()}"]`) + .trigger("mouseover") + .click() + .parent() + .find(multipageSelector.pageMenuIcon) + .click(); cy.get(multipageSelector.markHomePageOptionButton).click(); }; @@ -45,8 +55,11 @@ export const addNewPage = (pageName) => { }; export const addEventHandler = (pageName) => { - cy.get(`[data-cy="pages-name-${pageName.toLowerCase()}"]`).click(); - cy.get(multipageSelector.pageMenuIcon).click(); + cy.get(`[data-cy="pages-name-${pageName.toLowerCase()}"]`) + .click() + .parent() + .find(multipageSelector.pageMenuIcon) + .click(); cy.get(multipageSelector.eventHandlerOptionButton).click(); cy.get(multipageSelector.addEventHandlerLink).click(); cy.get(multipageSelector.eventName).verifyVisibleElement( diff --git a/cypress-tests/cypress/support/utils/postgreSql.js b/cypress-tests/cypress/support/utils/postgreSql.js index dc2ddb4ee6..fc3f257627 100644 --- a/cypress-tests/cypress/support/utils/postgreSql.js +++ b/cypress-tests/cypress/support/utils/postgreSql.js @@ -48,29 +48,34 @@ export const selectAndAddDataSource = ( dataSourceName ) => { cy.get(commonSelectors.globalDataSourceIcon).click(); + cy.wait(1000) cy.get(`[data-cy="${cyParamName(dscategory)}-datasource-button"]`).click(); + cy.wait(500) cy.get(postgreSqlSelector.dataSourceSearchInputField).type(dataSource); - cy.get(`[data-cy="data-source-${String(dataSource).toLowerCase()}"]`) + cy.get(`[data-cy="data-source-${(dataSource).toLowerCase()}"]`) .parent() .within(() => { cy.get( - `[data-cy="data-source-${String( + `[data-cy="data-source-${( dataSource ).toLowerCase()}"]>>>.datasource-card-title` ).realHover("mouse"); - cy.get(`[data-cy="${cyParamName(dataSource)}-add-button"]`).click(); + cy.get( + `[data-cy="${cyParamName(dataSource).toLowerCase()}-add-button"]` + ).click(); }); - cy.get(postgreSqlSelector.buttonSave).should("be.disabled"); + + cy.wait(1000) + cy.get(postgreSqlSelector.buttonSave).should("be.disabled") cy.clearAndType( '[data-cy="data-source-name-input-filed"]', - `cypress-${cyParamName(dataSourceName)}-${cyParamName(dataSource)}` + cyParamName(`cypress-${dataSourceName}-${dataSource}`) ); cy.get(postgreSqlSelector.buttonSave).click(); cy.verifyToastMessage( commonSelectors.toastMessage, postgreSqlText.toastDSAdded ); - cy.get( `[data-cy="cypress-${cyParamName(dataSourceName)}-${cyParamName( dataSource @@ -179,4 +184,4 @@ export const addWidgetsToAddUser = () => { addEventHandlerToRunQuery("add_data_using_widgets"); }; -export const addListviewToVerifyData = () => {}; +export const addListviewToVerifyData = () => { }; \ No newline at end of file diff --git a/cypress-tests/cypress/support/utils/queryPanel/queryEditor.js b/cypress-tests/cypress/support/utils/queryPanel/queryEditor.js new file mode 100644 index 0000000000..908afc6e68 --- /dev/null +++ b/cypress-tests/cypress/support/utils/queryPanel/queryEditor.js @@ -0,0 +1,50 @@ +export const verifyElemtsNoGds = (option) => { + cy.get('[data-cy="label-select-datasource"]').verifyVisibleElement( + "have.text", + "Connect to a datasource" + ); + cy.get('[data-cy="querymanager-description"]').verifyVisibleElement( + "contain.text", + "Select a datasource to start creating a new query. To know more about queries in ToolJet, you can read our" + ); + cy.get('[data-cy="querymanager-doc-link"]').verifyVisibleElement( + "have.text", + "documentation" + ); + + cy.get('[data-cy="landing-page-label-default"]').verifyVisibleElement( + "have.text", + "Default" + ); + cy.get('[data-cy="restapi-add-query-card"]').verifyVisibleElement( + "have.text", + "REST API" + ); + cy.get('[data-cy="runjs-add-query-card"]').verifyVisibleElement( + "have.text", + "JavaScript" + ); + cy.get('[data-cy="runpy-add-query-card"]').verifyVisibleElement( + "have.text", + "Python" + ); + cy.get('[data-cy="tooljetdb-add-query-card"]').verifyVisibleElement( + "have.text", + "ToolJet DB" + ); + + cy.get('[data-cy="label-avilable-ds"]').verifyVisibleElement( + "have.text", + "Available Datasources 0" + ); + cy.get('[data-cy="landing-page-add-new-ds-button"]').verifyVisibleElement( + "have.text", + "Add new" + ); + cy.get('[data-cy="empty-banner-queryManager"]').verifyVisibleElement( + "have.text", + "No global datasources have been added yet. Add new datasources to connect to your app! 🚀" + ); +}; + +export const verifyElemtsWithGds = (option) => {}; diff --git a/cypress-tests/cypress/support/utils/table.js b/cypress-tests/cypress/support/utils/table.js index 048734d5e7..44f55467a3 100644 --- a/cypress-tests/cypress/support/utils/table.js +++ b/cypress-tests/cypress/support/utils/table.js @@ -32,11 +32,12 @@ export const selectDropdownOption = (inputSelector, option) => { multipleBadges: 5, tags: 6, dropdown: 7, - radio: 8, - multiselect: 9, - toggleSwitch: 10, - datePicker: 11, - image: 12, + link: 8, + radio: 9, + multiselect: 10, + toggleSwitch: 11, + datePicker: 12, + image: 13, wrap: 0, scroll: 1, hide: 2, @@ -65,13 +66,13 @@ export const verifyAndEnterColumnOptionInput = (label, value) => { .find("label") .should("have.text", label); cy.get(`[data-cy="input-and-label-${cyParamName(label)}"]`) - .realClick() - .realPress(["Meta", "A"]) - .realType(`{backspace}{backspace}{backspace}{backspace}`) - .realPress(["Meta", "A"]) - .realType( - `{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}{backspace}{rightarrow}${value}` - ); + .find(`[data-cy="-input-field"]`) + // .click({ force: true }) + // .realClick() + // .realPress(["Meta", "A"]) + // .realType(`{backspace}{backspace}{backspace}{backspace}`) + // .realPress(["Meta", "A"]) + .clearAndTypeOnCodeMirror(`${value}`); }; export const addAndOpenColumnOption = (name, type) => { @@ -86,7 +87,13 @@ export const addAndOpenColumnOption = (name, type) => { }; export const deleteAndVerifyColumn = (columnName) => { - cy.get(`[data-cy="button-delete-${columnName}"]`).click(); + cy.get(`[data-cy="pages-name-${columnName}"]`) + .parent() + .realHover() + .click() + .find(".tj-base-btn") + .click(); + cy.get(".list-item-popover-option").click(); cy.notVisible(`[data-cy="column-${columnName}"]`); cy.notVisible(tableSelector.columnHeader(columnName)); }; @@ -128,20 +135,20 @@ export const verifySingleValueOnTable = ( export const verifyAndModifyToggleFx = ( paramName, defaultValue, - toggleModification = true + toggleModification = true, + helper = "" ) => { cy.get(`[data-cy="label-${cyParamName(paramName)}"]`).should( "have.text", paramName ); - cy.get(commonWidgetSelector.parameterFxButton(paramName, ":eq(1)")) + cy.get(commonWidgetSelector.parameterFxButton(paramName, "> svg")) .scrollIntoView() - .should("have.text", "Fx") .click(); if (defaultValue) cy.get(commonWidgetSelector.parameterInputField(paramName)) .find("pre.CodeMirror-line") - .should("have.text", defaultValue); + .should("have.text", `${helper}${defaultValue}`); cy.get(commonWidgetSelector.parameterFxButton(paramName)).click(); if (toggleModification == true) cy.get(commonWidgetSelector.parameterTogglebutton(paramName)).click(); diff --git a/docs/docs/setup/env-vars.md b/docs/docs/setup/env-vars.md index 0299608bff..62e12a702b 100644 --- a/docs/docs/setup/env-vars.md +++ b/docs/docs/setup/env-vars.md @@ -325,4 +325,4 @@ By default, only embedding of public apps is permitted. By setting this variable :::caution The option is only available starting from ToolJet Enterprise Edition `2.8.0` or higher, and `2.10.0` for the Community edition and cloud version. -::: \ No newline at end of file +::: diff --git a/docs/versioned_docs/version-2.8.0/setup/env-vars.md b/docs/versioned_docs/version-2.8.0/setup/env-vars.md index 6400f6f2a5..49e3d5fedd 100644 --- a/docs/versioned_docs/version-2.8.0/setup/env-vars.md +++ b/docs/versioned_docs/version-2.8.0/setup/env-vars.md @@ -325,4 +325,4 @@ By default, only embedding of public apps is permitted. By setting this variable :::caution The option is only available starting from ToolJet Enterprise Edition `2.8.0` or higher, and `2.10.0` for the Community edition and cloud version. -::: \ No newline at end of file +::: diff --git a/docs/versioned_docs/version-2.9.0/actions/generate-file.md b/docs/versioned_docs/version-2.9.0/actions/generate-file.md index 82cab3a578..fc329c7f1e 100644 --- a/docs/versioned_docs/version-2.9.0/actions/generate-file.md +++ b/docs/versioned_docs/version-2.9.0/actions/generate-file.md @@ -49,4 +49,4 @@ To use the `Text` file format, the data field should contain a string. If you want to generate a text file based on an array of objects, you need to stringify the data before providing it. -For example, if you are using the table component to provide the data, you can enter **`{{JSON.stringify(components.table1.currentPageData)}}`** in the Data field. \ No newline at end of file +For example, if you are using the table component to provide the data, you can enter **`{{JSON.stringify(components.table1.currentPageData)}}`** in the Data field. diff --git a/docs/versioned_docs/version-2.9.0/setup/env-vars.md b/docs/versioned_docs/version-2.9.0/setup/env-vars.md index 6400f6f2a5..49e3d5fedd 100644 --- a/docs/versioned_docs/version-2.9.0/setup/env-vars.md +++ b/docs/versioned_docs/version-2.9.0/setup/env-vars.md @@ -325,4 +325,4 @@ By default, only embedding of public apps is permitted. By setting this variable :::caution The option is only available starting from ToolJet Enterprise Edition `2.8.0` or higher, and `2.10.0` for the Community edition and cloud version. -::: \ No newline at end of file +::: diff --git a/docs/versioned_docs/version-2.9.4/actions/generate-file.md b/docs/versioned_docs/version-2.9.4/actions/generate-file.md index 82cab3a578..fc329c7f1e 100644 --- a/docs/versioned_docs/version-2.9.4/actions/generate-file.md +++ b/docs/versioned_docs/version-2.9.4/actions/generate-file.md @@ -49,4 +49,4 @@ To use the `Text` file format, the data field should contain a string. If you want to generate a text file based on an array of objects, you need to stringify the data before providing it. -For example, if you are using the table component to provide the data, you can enter **`{{JSON.stringify(components.table1.currentPageData)}}`** in the Data field. \ No newline at end of file +For example, if you are using the table component to provide the data, you can enter **`{{JSON.stringify(components.table1.currentPageData)}}`** in the Data field. diff --git a/docs/versioned_docs/version-2.9.4/setup/env-vars.md b/docs/versioned_docs/version-2.9.4/setup/env-vars.md index 6400f6f2a5..49e3d5fedd 100644 --- a/docs/versioned_docs/version-2.9.4/setup/env-vars.md +++ b/docs/versioned_docs/version-2.9.4/setup/env-vars.md @@ -325,4 +325,4 @@ By default, only embedding of public apps is permitted. By setting this variable :::caution The option is only available starting from ToolJet Enterprise Edition `2.8.0` or higher, and `2.10.0` for the Community edition and cloud version. -::: \ No newline at end of file +::: diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index cf38665116..1ce034d415 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -59,7 +59,12 @@ module.exports = { 'jest/no-identical-title': 'error', 'jest/prefer-to-have-length': 'warn', 'jest/valid-expect': 'error', - 'import/no-unresolved': ['error', { ignore: ['^@/', 'react-hot-toast', 'react-i18next'] }], + 'import/no-unresolved': [ + 'error', + { + ignore: ['^@/', 'react-hot-toast', 'react-i18next'], + }, + ], 'react/no-unknown-property': 'off', }, settings: { @@ -77,4 +82,5 @@ module.exports = { }, }, ], + extends: ['plugin:storybook/recommended'], }; diff --git a/frontend/.storybook/main.js b/frontend/.storybook/main.js new file mode 100644 index 0000000000..cb029aadbe --- /dev/null +++ b/frontend/.storybook/main.js @@ -0,0 +1,32 @@ +/** @type { import('@storybook/react-webpack5').StorybookConfig } */ +import custom from '../webpack.config' +const path = require('path'); + +const config = { + stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], + addons: [ + "@storybook/addon-links", + "@storybook/addon-essentials", + "@storybook/addon-onboarding", + "@storybook/addon-interactions", + ], + framework: { + name: "@storybook/react-webpack5", + options: {}, + }, + docs: { + autodocs: "tag", + }, + webpackFinal: async (config) => { + return { + ...config, + module: { ...config.module, rules: [...config.module.rules, ...custom.module.rules] }, + resolve : { + alias : { + '@': path.resolve(__dirname, 'src/') + } + } + }; + }, +}; +export default config; diff --git a/frontend/.storybook/preview.js b/frontend/.storybook/preview.js new file mode 100644 index 0000000000..a10ed0da6e --- /dev/null +++ b/frontend/.storybook/preview.js @@ -0,0 +1,18 @@ +/** @type { import('@storybook/react').Preview } */ +// import 'bootstrap/dist/css/bootstrap.min.css'; +import '../src/_styles/theme.scss'; +import './preview.scss' + +const preview = { + parameters: { + actions: { argTypesRegex: "^on[A-Z].*" }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, + }, +}; + +export default preview; diff --git a/frontend/.storybook/preview.scss b/frontend/.storybook/preview.scss new file mode 100644 index 0000000000..0599e02f36 --- /dev/null +++ b/frontend/.storybook/preview.scss @@ -0,0 +1,2 @@ +@import '~bootstrap/scss/bootstrap'; + diff --git a/frontend/.version b/frontend/.version new file mode 100644 index 0000000000..d76bd2ba3e --- /dev/null +++ b/frontend/.version @@ -0,0 +1 @@ +2.17.0 diff --git a/frontend/assets/images/avatar.png b/frontend/assets/images/avatar.png new file mode 100644 index 0000000000..dea3e7aed1 Binary files /dev/null and b/frontend/assets/images/avatar.png differ diff --git a/frontend/assets/images/icons/editor/left-sidebar/comments.svg b/frontend/assets/images/icons/editor/left-sidebar/comments.svg new file mode 100644 index 0000000000..126eb76315 --- /dev/null +++ b/frontend/assets/images/icons/editor/left-sidebar/comments.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/assets/images/icons/editor/left-sidebar/debugger.svg b/frontend/assets/images/icons/editor/left-sidebar/debugger.svg index 29017d7e5e..73b6d15966 100644 --- a/frontend/assets/images/icons/editor/left-sidebar/debugger.svg +++ b/frontend/assets/images/icons/editor/left-sidebar/debugger.svg @@ -1,3 +1,5 @@ - - + + + + diff --git a/frontend/assets/images/icons/editor/left-sidebar/file-accept.svg b/frontend/assets/images/icons/editor/left-sidebar/file-accept.svg new file mode 100644 index 0000000000..2f13eacd3d --- /dev/null +++ b/frontend/assets/images/icons/editor/left-sidebar/file-accept.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/frontend/assets/images/icons/editor/left-sidebar/file-remove.svg b/frontend/assets/images/icons/editor/left-sidebar/file-remove.svg new file mode 100644 index 0000000000..4f9b6babee --- /dev/null +++ b/frontend/assets/images/icons/editor/left-sidebar/file-remove.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/frontend/assets/images/icons/editor/left-sidebar/inspect.svg b/frontend/assets/images/icons/editor/left-sidebar/inspect.svg index dbd16cbc36..b3a1ee96bd 100644 --- a/frontend/assets/images/icons/editor/left-sidebar/inspect.svg +++ b/frontend/assets/images/icons/editor/left-sidebar/inspect.svg @@ -1,4 +1,3 @@ - - - + + diff --git a/frontend/assets/images/icons/editor/left-sidebar/page.svg b/frontend/assets/images/icons/editor/left-sidebar/page.svg index 651c4fa552..de85014037 100644 --- a/frontend/assets/images/icons/editor/left-sidebar/page.svg +++ b/frontend/assets/images/icons/editor/left-sidebar/page.svg @@ -1,3 +1,4 @@ - - + + + diff --git a/frontend/assets/images/icons/editor/left-sidebar/settings.svg b/frontend/assets/images/icons/editor/left-sidebar/settings.svg index d924977414..556b6e8a3f 100644 --- a/frontend/assets/images/icons/editor/left-sidebar/settings.svg +++ b/frontend/assets/images/icons/editor/left-sidebar/settings.svg @@ -1,3 +1,3 @@ - - + + diff --git a/frontend/assets/images/icons/editor/play.svg b/frontend/assets/images/icons/editor/play.svg index a2d3b25e89..4accfa58d5 100644 --- a/frontend/assets/images/icons/editor/play.svg +++ b/frontend/assets/images/icons/editor/play.svg @@ -1,3 +1,3 @@ - + diff --git a/frontend/assets/images/icons/eye1.svg b/frontend/assets/images/icons/eye1.svg new file mode 100644 index 0000000000..e5cce5db80 --- /dev/null +++ b/frontend/assets/images/icons/eye1.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/frontend/assets/images/icons/filedownload.svg b/frontend/assets/images/icons/filedownload.svg new file mode 100644 index 0000000000..65c519d092 --- /dev/null +++ b/frontend/assets/images/icons/filedownload.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/frontend/assets/images/icons/plus.svg b/frontend/assets/images/icons/plus.svg index e3bcafdc9b..05694e4ff2 100644 --- a/frontend/assets/images/icons/plus.svg +++ b/frontend/assets/images/icons/plus.svg @@ -1,5 +1,3 @@ - - - - + + \ No newline at end of file diff --git a/frontend/assets/images/icons/widgets/Group.svg b/frontend/assets/images/icons/widgets/Group.svg deleted file mode 100644 index 2f7bbf1be7..0000000000 --- a/frontend/assets/images/icons/widgets/Group.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/assets/images/icons/widgets/boundedbox.jsx b/frontend/assets/images/icons/widgets/boundedbox.jsx new file mode 100644 index 0000000000..f76b9a40f9 --- /dev/null +++ b/frontend/assets/images/icons/widgets/boundedbox.jsx @@ -0,0 +1,27 @@ +import React from 'react'; + +const BoundedBox = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default BoundedBox; diff --git a/frontend/assets/images/icons/widgets/boundedbox.svg b/frontend/assets/images/icons/widgets/boundedbox.svg deleted file mode 100644 index e689103e73..0000000000 --- a/frontend/assets/images/icons/widgets/boundedbox.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/frontend/assets/images/icons/widgets/button.jsx b/frontend/assets/images/icons/widgets/button.jsx new file mode 100644 index 0000000000..cab3c2eedb --- /dev/null +++ b/frontend/assets/images/icons/widgets/button.jsx @@ -0,0 +1,25 @@ +import React from 'react'; + +const Button = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Button; diff --git a/frontend/assets/images/icons/widgets/button.svg b/frontend/assets/images/icons/widgets/button.svg deleted file mode 100644 index 376928f3d4..0000000000 --- a/frontend/assets/images/icons/widgets/button.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/frontend/assets/images/icons/widgets/buttongroup.jsx b/frontend/assets/images/icons/widgets/buttongroup.jsx new file mode 100644 index 0000000000..c29c05d530 --- /dev/null +++ b/frontend/assets/images/icons/widgets/buttongroup.jsx @@ -0,0 +1,25 @@ +import React from 'react'; + +const ButtonGroup = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default ButtonGroup; diff --git a/frontend/assets/images/icons/widgets/buttongroup.svg b/frontend/assets/images/icons/widgets/buttongroup.svg deleted file mode 100644 index 37ea972271..0000000000 --- a/frontend/assets/images/icons/widgets/buttongroup.svg +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/frontend/assets/images/icons/widgets/calendar.jsx b/frontend/assets/images/icons/widgets/calendar.jsx new file mode 100644 index 0000000000..a728caf1b6 --- /dev/null +++ b/frontend/assets/images/icons/widgets/calendar.jsx @@ -0,0 +1,15 @@ +import React from 'react'; + +const Calendar = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Calendar; diff --git a/frontend/assets/images/icons/widgets/calendar.svg b/frontend/assets/images/icons/widgets/calendar.svg deleted file mode 100644 index 598afe2fd1..0000000000 --- a/frontend/assets/images/icons/widgets/calendar.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/frontend/assets/images/icons/widgets/chart.jsx b/frontend/assets/images/icons/widgets/chart.jsx new file mode 100644 index 0000000000..72582a9084 --- /dev/null +++ b/frontend/assets/images/icons/widgets/chart.jsx @@ -0,0 +1,27 @@ +import React from 'react'; + +const Chart = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Chart; diff --git a/frontend/assets/images/icons/widgets/chart.svg b/frontend/assets/images/icons/widgets/chart.svg deleted file mode 100644 index 7884c642d9..0000000000 --- a/frontend/assets/images/icons/widgets/chart.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/assets/images/icons/widgets/checkbox.jsx b/frontend/assets/images/icons/widgets/checkbox.jsx new file mode 100644 index 0000000000..5f57aaa8e2 --- /dev/null +++ b/frontend/assets/images/icons/widgets/checkbox.jsx @@ -0,0 +1,25 @@ +import React from 'react'; + +const Checkbox = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Checkbox; diff --git a/frontend/assets/images/icons/widgets/checkbox.svg b/frontend/assets/images/icons/widgets/checkbox.svg deleted file mode 100644 index d09e52b14b..0000000000 --- a/frontend/assets/images/icons/widgets/checkbox.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/frontend/assets/images/icons/widgets/circularprogressbar.jsx b/frontend/assets/images/icons/widgets/circularprogressbar.jsx new file mode 100644 index 0000000000..1c71be8992 --- /dev/null +++ b/frontend/assets/images/icons/widgets/circularprogressbar.jsx @@ -0,0 +1,39 @@ +import React from 'react'; + +const Circularprogressbar = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + + + +); + +export default Circularprogressbar; diff --git a/frontend/assets/images/icons/widgets/circularprogressbar.svg b/frontend/assets/images/icons/widgets/circularprogressbar.svg deleted file mode 100644 index 3c61410e4f..0000000000 --- a/frontend/assets/images/icons/widgets/circularprogressbar.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/assets/images/icons/widgets/codeeditor.jsx b/frontend/assets/images/icons/widgets/codeeditor.jsx new file mode 100644 index 0000000000..a749e3d3f0 --- /dev/null +++ b/frontend/assets/images/icons/widgets/codeeditor.jsx @@ -0,0 +1,31 @@ +import React from 'react'; + +const Codeeditor = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + + +); + +export default Codeeditor; diff --git a/frontend/assets/images/icons/widgets/codeeditor.svg b/frontend/assets/images/icons/widgets/codeeditor.svg deleted file mode 100644 index 62c9b6ca8f..0000000000 --- a/frontend/assets/images/icons/widgets/codeeditor.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/frontend/assets/images/icons/widgets/colorpicker.jsx b/frontend/assets/images/icons/widgets/colorpicker.jsx new file mode 100644 index 0000000000..196d9e8f86 --- /dev/null +++ b/frontend/assets/images/icons/widgets/colorpicker.jsx @@ -0,0 +1,25 @@ +import React from 'react'; + +const Colorpicker = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Colorpicker; diff --git a/frontend/assets/images/icons/widgets/colorpicker.svg b/frontend/assets/images/icons/widgets/colorpicker.svg deleted file mode 100644 index ce41ffee8a..0000000000 --- a/frontend/assets/images/icons/widgets/colorpicker.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/frontend/assets/images/icons/widgets/container.jsx b/frontend/assets/images/icons/widgets/container.jsx new file mode 100644 index 0000000000..fbbd7297e3 --- /dev/null +++ b/frontend/assets/images/icons/widgets/container.jsx @@ -0,0 +1,22 @@ +import React from 'react'; + +const Container = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Container; diff --git a/frontend/assets/images/icons/widgets/container.svg b/frontend/assets/images/icons/widgets/container.svg deleted file mode 100644 index 2f6e4287f8..0000000000 --- a/frontend/assets/images/icons/widgets/container.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/frontend/assets/images/icons/widgets/customcomponent.jsx b/frontend/assets/images/icons/widgets/customcomponent.jsx new file mode 100644 index 0000000000..9b6379580e --- /dev/null +++ b/frontend/assets/images/icons/widgets/customcomponent.jsx @@ -0,0 +1,27 @@ +import React from 'react'; + +const Customcomponent = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Customcomponent; diff --git a/frontend/assets/images/icons/widgets/customcomponent.svg b/frontend/assets/images/icons/widgets/customcomponent.svg deleted file mode 100644 index ebf2b793af..0000000000 --- a/frontend/assets/images/icons/widgets/customcomponent.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/frontend/assets/images/icons/widgets/datepicker.jsx b/frontend/assets/images/icons/widgets/datepicker.jsx new file mode 100644 index 0000000000..92b0cc3832 --- /dev/null +++ b/frontend/assets/images/icons/widgets/datepicker.jsx @@ -0,0 +1,29 @@ +import React from 'react'; + +const Datepicker = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + + +); + +export default Datepicker; diff --git a/frontend/assets/images/icons/widgets/datepicker.svg b/frontend/assets/images/icons/widgets/datepicker.svg deleted file mode 100644 index d26fedc569..0000000000 --- a/frontend/assets/images/icons/widgets/datepicker.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/assets/images/icons/widgets/daterangepicker.jsx b/frontend/assets/images/icons/widgets/daterangepicker.jsx new file mode 100644 index 0000000000..01f13545c4 --- /dev/null +++ b/frontend/assets/images/icons/widgets/daterangepicker.jsx @@ -0,0 +1,22 @@ +import React from 'react'; + +const Daterangepicker = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Daterangepicker; diff --git a/frontend/assets/images/icons/widgets/daterangepicker.svg b/frontend/assets/images/icons/widgets/daterangepicker.svg deleted file mode 100644 index 30e89a16eb..0000000000 --- a/frontend/assets/images/icons/widgets/daterangepicker.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/frontend/assets/images/icons/widgets/divider.jsx b/frontend/assets/images/icons/widgets/divider.jsx new file mode 100644 index 0000000000..893bdbc356 --- /dev/null +++ b/frontend/assets/images/icons/widgets/divider.jsx @@ -0,0 +1,22 @@ +import React from 'react'; + +const Divider = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Divider; diff --git a/frontend/assets/images/icons/widgets/divider.svg b/frontend/assets/images/icons/widgets/divider.svg deleted file mode 100644 index a4805d524d..0000000000 --- a/frontend/assets/images/icons/widgets/divider.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/assets/images/icons/widgets/dividerhorizontal.jsx b/frontend/assets/images/icons/widgets/dividerhorizontal.jsx new file mode 100644 index 0000000000..17895914c6 --- /dev/null +++ b/frontend/assets/images/icons/widgets/dividerhorizontal.jsx @@ -0,0 +1,25 @@ +import React from 'react'; + +const DividerHorizondal = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default DividerHorizondal; diff --git a/frontend/assets/images/icons/widgets/downstatistics.svg b/frontend/assets/images/icons/widgets/downstatistics.jsx similarity index 78% rename from frontend/assets/images/icons/widgets/downstatistics.svg rename to frontend/assets/images/icons/widgets/downstatistics.jsx index bf1d06ba0d..48ad5b1917 100644 --- a/frontend/assets/images/icons/widgets/downstatistics.svg +++ b/frontend/assets/images/icons/widgets/downstatistics.jsx @@ -1,3 +1,12 @@ - - - +import React from 'react'; + +const Downstatistics = () => ( + + + +); + +export default Downstatistics; diff --git a/frontend/assets/images/icons/widgets/dropdown.jsx b/frontend/assets/images/icons/widgets/dropdown.jsx new file mode 100644 index 0000000000..c838fa2ca6 --- /dev/null +++ b/frontend/assets/images/icons/widgets/dropdown.jsx @@ -0,0 +1,31 @@ +import React from 'react'; + +const Dropdown = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + + +); + +export default Dropdown; diff --git a/frontend/assets/images/icons/widgets/dropdown.svg b/frontend/assets/images/icons/widgets/dropdown.svg deleted file mode 100644 index 7820e1ad1d..0000000000 --- a/frontend/assets/images/icons/widgets/dropdown.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/assets/images/icons/widgets/filepicker.jsx b/frontend/assets/images/icons/widgets/filepicker.jsx new file mode 100644 index 0000000000..e520df6282 --- /dev/null +++ b/frontend/assets/images/icons/widgets/filepicker.jsx @@ -0,0 +1,29 @@ +import React from 'react'; + +const Filepicker = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + + +); + +export default Filepicker; diff --git a/frontend/assets/images/icons/widgets/filepicker.svg b/frontend/assets/images/icons/widgets/filepicker.svg deleted file mode 100644 index f330e30b99..0000000000 --- a/frontend/assets/images/icons/widgets/filepicker.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/frontend/assets/images/icons/widgets/form.jsx b/frontend/assets/images/icons/widgets/form.jsx new file mode 100644 index 0000000000..357fa54f1a --- /dev/null +++ b/frontend/assets/images/icons/widgets/form.jsx @@ -0,0 +1,25 @@ +import React from 'react'; + +const Form = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Form; diff --git a/frontend/assets/images/icons/widgets/form.svg b/frontend/assets/images/icons/widgets/form.svg deleted file mode 100644 index cfbd6d1054..0000000000 --- a/frontend/assets/images/icons/widgets/form.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/frontend/assets/images/icons/widgets/frame.jsx b/frontend/assets/images/icons/widgets/frame.jsx new file mode 100644 index 0000000000..764d8b77d3 --- /dev/null +++ b/frontend/assets/images/icons/widgets/frame.jsx @@ -0,0 +1,25 @@ +import React from 'react'; + +const Frame = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Frame; diff --git a/frontend/assets/images/icons/widgets/group.jsx b/frontend/assets/images/icons/widgets/group.jsx new file mode 100644 index 0000000000..a942f77afc --- /dev/null +++ b/frontend/assets/images/icons/widgets/group.jsx @@ -0,0 +1,25 @@ +import React from 'react'; + +const Group = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Group; diff --git a/frontend/assets/images/icons/widgets/html.jsx b/frontend/assets/images/icons/widgets/html.jsx new file mode 100644 index 0000000000..75bf3e3c0e --- /dev/null +++ b/frontend/assets/images/icons/widgets/html.jsx @@ -0,0 +1,27 @@ +import React from 'react'; + +const Html = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Html; diff --git a/frontend/assets/images/icons/widgets/html.svg b/frontend/assets/images/icons/widgets/html.svg deleted file mode 100644 index 989d1508d8..0000000000 --- a/frontend/assets/images/icons/widgets/html.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/frontend/assets/images/icons/widgets/icon.jsx b/frontend/assets/images/icons/widgets/icon.jsx new file mode 100644 index 0000000000..7103d829ba --- /dev/null +++ b/frontend/assets/images/icons/widgets/icon.jsx @@ -0,0 +1,27 @@ +import React from 'react'; + +const Icon = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Icon; diff --git a/frontend/assets/images/icons/widgets/icon.svg b/frontend/assets/images/icons/widgets/icon.svg deleted file mode 100644 index e1ff81c375..0000000000 --- a/frontend/assets/images/icons/widgets/icon.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/frontend/assets/images/icons/widgets/iframe.jsx b/frontend/assets/images/icons/widgets/iframe.jsx new file mode 100644 index 0000000000..6ba31a2b3b --- /dev/null +++ b/frontend/assets/images/icons/widgets/iframe.jsx @@ -0,0 +1,22 @@ +import React from 'react'; + +const Iframe = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Iframe; diff --git a/frontend/assets/images/icons/widgets/iframe.svg b/frontend/assets/images/icons/widgets/iframe.svg deleted file mode 100644 index 3d3548c6ea..0000000000 --- a/frontend/assets/images/icons/widgets/iframe.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/frontend/assets/images/icons/widgets/image.jsx b/frontend/assets/images/icons/widgets/image.jsx new file mode 100644 index 0000000000..a571dd11c2 --- /dev/null +++ b/frontend/assets/images/icons/widgets/image.jsx @@ -0,0 +1,23 @@ +import React from 'react'; + +const Image = ({ fill = '#D7DBDF', width = 24, className = '', viewBox = '0 0 49 48' }) => ( + + + + +); + +export default Image; diff --git a/frontend/assets/images/icons/widgets/image.svg b/frontend/assets/images/icons/widgets/image.svg deleted file mode 100644 index f088761cac..0000000000 --- a/frontend/assets/images/icons/widgets/image.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/frontend/assets/images/icons/widgets/index.jsx b/frontend/assets/images/icons/widgets/index.jsx new file mode 100644 index 0000000000..a6d04bf1a6 --- /dev/null +++ b/frontend/assets/images/icons/widgets/index.jsx @@ -0,0 +1,183 @@ +import React from 'react'; +import BoundedBox from './boundedbox.jsx'; +import Button from './button.jsx'; +import ButtonGroup from './buttongroup.jsx'; +import Calendar from './calendar.jsx'; +import Chart from './chart.jsx'; +import Checkbox from './checkbox.jsx'; +import Circularprogressbar from './circularprogressbar.jsx'; +import Codeeditor from './codeeditor.jsx'; +import Colorpicker from './colorpicker.jsx'; +import Container from './container.jsx'; +import Customcomponent from './customcomponent.jsx'; +import Datepicker from './datepicker.jsx'; +import Daterangepicker from './daterangepicker.jsx'; +import Divider from './divider.jsx'; +import DividerHorizondal from './dividerhorizontal.jsx'; +import Downstatistics from './downstatistics.jsx'; +import Dropdown from './dropdown.jsx'; +import Filepicker from './filepicker.jsx'; +import Form from './form.jsx'; +import Frame from './frame.jsx'; +import Group from './group.jsx'; +import Html from './html.jsx'; +import Icon from './icon.jsx'; +import Iframe from './iframe.jsx'; +import Image from './image.jsx'; +import Kanban from './kanban.jsx'; +import Kanbanboard from './kanbanboard.jsx'; +import Link from './link.jsx'; +import Listview from './listview.jsx'; +import Map from './map.jsx'; +import Modal from './modal.jsx'; +import Multiselect from './multiselect.jsx'; +import Numberinput from './numberinput.jsx'; +import Pagination from './pagination.jsx'; +import Passwordinput from './passwordinput.jsx'; +import Pdf from './pdf.jsx'; +import Qrscanner from './qrscanner.jsx'; +import RadioButton from './radio-button.jsx'; +import Rangeslider from './rangeslider.jsx'; +import Rating from './rating.jsx'; +import Spinner from './spinner.jsx'; +import Statistics from './statistics.jsx'; +import Steps from './steps.jsx'; +import Svgimage from './svgimage.jsx'; +import Table from './table.jsx'; +import Tabs from './tabs.jsx'; +import Tags from './tags.jsx'; +import Text from './text.jsx'; +import TextArea from './textarea.jsx'; +import Texteditor from './texteditor.jsx'; +import Textinput from './textinput.jsx'; +import Timeline from './timeline.jsx'; +import Timer from './timer.jsx'; +import Toggleswitch from './toggleswitch.jsx'; +import Treeselect from './treeselect.jsx'; +import Upstatistics from './upstatistics.jsx'; +import Verticaldivider from './verticaldivider.jsx'; + +const WidgetIcon = (props) => { + switch (props.name) { + case 'boundedbox': + return ; + case 'button': + return ; + case 'buttongroup': + return ; + case 'calendar': + return ; + case 'chart': + return ; + case 'checkbox': + return ; + case 'circularprogressbar': + return ; + case 'codeeditor': + return ; + case 'colorpicker': + return ; + case 'container': + return ; + case 'customcomponent': + return ; + case 'datepicker': + return ; + case 'daterangepicker': + return ; + case 'divider': + return ; + case 'divider-horizondal': + return ; + case 'downstatistics': + return ; + case 'dropdown': + return ; + case 'filepicker': + return ; + case 'form': + return
; + case 'frame': + return ; + case 'group': + return ; + case 'html': + return ; + case 'icon': + return ; + case 'iframe': + return ; + case 'image': + return ; + case 'kanban': + return ; + case 'kanbanboard': + return ; + case 'link': + return ; + case 'listview': + return ; + case 'map': + return ; + case 'modal': + return ; + case 'multiselect': + return ; + case 'numberinput': + return ; + case 'pagination': + return ; + case 'passwordinput': + return ; + case 'pdf': + return ; + case 'qrscanner': + return ; + case 'radio-button': + return ; + case 'rangeslider': + return ; + case 'rating': + return ; + case 'richtexteditor': + return ; + case 'spinner': + return ; + case 'starrating': + return ; + case 'statistics': + return ; + case 'steps': + return ; + case 'svgimage': + return ; + case 'table': + return
; + case 'tabs': + return ; + case 'tags': + return ; + case 'text': + return ; + case 'textarea': + return