test: Automated tests for S3 uploads & Mongo Bugs + Flakiness fixes (#9931)

* Bugs  #9069, #9201, #6975, #9922 - Scripted

* Mongo DS update from Cloud to Localhost

* Updating command.js

* Ignoring Mongo until Localhost is fixed

* S3 fixes

* S3 fix

* Mongo Cloud to Localhost transition

* Bug #6375 scripted

* Failure fix

* S3 fix + testSaveDs method flow update

* Refresh datasource structure script fix

* Entity explorer datasource structure script fix

* testSaveDs method flow update fixes

* testSaveDs method flow update fixes - set 2

* S3, Mongo Skipping cases fix

* Custom Chart failure fix

* Button-Call-Query Validation case script fix

* Confirm run action failure fix

* Confirm run action script fix

* Dropdown-Call-Query Validation script fix

* S3 - Delete icon issue fix

* S3 - Delete icon locator updated

* actionContextMenuByEntityName method call update

* Table widget add new menu button column - rgb fix

* Commenting BG color verify - to override flakiness

* Mongo skipping script fix

* Commenting Cypress.runner.stop()
This commit is contained in:
Aishwarya-U-R 2021-12-29 11:11:30 +05:30 committed by GitHub
parent cfd86cf5ba
commit 3a4db6bdfd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
43 changed files with 756 additions and 530 deletions

View File

@ -1,27 +1,28 @@
{
"baseUrl": "https://dev.appsmith.com/",
"defaultCommandTimeout": 20000,
"requestTimeout": 21000,
"pageLoadTimeout": 20000,
"video": true,
"videoUploadOnPasses": false,
"reporter": "mochawesome",
"reporterOptions": {
"reportDir": "results",
"overwrite": false,
"html": true,
"json": false
},
"ignoreTestFiles": [
"**/Smoke_TestSuite/Application/PgAdmin_spec*.js",
"**/Smoke_TestSuite/ClientSideTests/DisplayWidgets/Table_Filter_spec*.js",
"**/Smoke_TestSuite/ClientSideTests/Onboarding/FirstTimeUserOnboarding_spec*.js"
],
"chromeWebSecurity": false,
"viewportHeight": 900,
"viewportWidth": 1400,
"retries": {
"runMode": 2,
"openMode": 0
"baseUrl": "https://dev.appsmith.com/",
"defaultCommandTimeout": 20000,
"requestTimeout": 21000,
"pageLoadTimeout": 20000,
"video": true,
"videoUploadOnPasses": false,
"reporter": "mochawesome",
"reporterOptions": {
"reportDir": "results",
"overwrite": false,
"html": true,
"json": false
},
"ignoreTestFiles": [
"**/Smoke_TestSuite/Application/PgAdmin_spec*.js",
"**/Smoke_TestSuite/ClientSideTests/DisplayWidgets/Table_Filter_spec*.js",
"**/Smoke_TestSuite/ClientSideTests/Onboarding/FirstTimeUserOnboarding_spec*.js"
],
"chromeWebSecurity": false,
"viewportHeight": 900,
"viewportWidth": 1400,
"retries": {
"runMode": 2,
"openMode": 0
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -1,10 +1,8 @@
{
"mongo-host": "cypress-test.zljea.mongodb.net",
"mongo-port": 19422,
"mongo-databaseName": "admin",
"mongo-username": "cypress-test",
"mongo-password": "RaopEmky505xYV4p",
"mongo-authenticationAuthtype": "SCRAM-SHA-1",
"mongo-host": "localhost",
"mongo-port": 28017,
"mongo-databaseName": "sample_airbnb",
"mongo-uri": "mongodb+srv://localhost:localhost@mockdb.net/mock?retryWrites=true&w=majority",
"postgres-host": "localhost",
"postgres-port": 5432,
@ -16,23 +14,22 @@
"mysql-databaseName": "fakeapi",
"mysql-username": "root",
"mysql-password": "root123",
"mssql-host": "localhost",
"mssql-host": "localhost",
"mssql-port": 1433,
"mssql-databaseName": "fakeapi",
"mssql-username": "SA",
"mssql-password": "Root$123",
"arango-host": "localhost",
"arango-host": "localhost",
"arango-port": 8529,
"arango-databaseName": "fakeapi",
"arango-username": "root",
"arango-password": "Arango$123",
"redshift-host": "localhost",
"redshift-host": "localhost",
"redshift-port": 5439,
"redshift-databaseName": "fakeapi",
"redshift-username": "root",
"redshift-password": "Redshift$123",
"restapi-url": "https://my-json-server.typicode.com/typicode/demo/posts",
"mongo-defaultDatabaseName": "sample_airbnb",
"connection-type": "Replica set",
"database-url": "appsmith-f9fe4.firebaseio.com",
"projectID": "appsmith-f9fe4",

View File

@ -21,14 +21,11 @@
},
"endpoints": [
{
"host": "cypress-test.zljea.mongodb.net"
"host": "localhost"
}
],
"authentication": {
"authenticationType": "dbAuth",
"authType": "SCRAM_SHA_1",
"username": "cypress-test",
"databaseName": "admin"
"databaseName": "sample_airbnb"
},
"sshProxyEnabled": false
},

View File

@ -1,6 +1,5 @@
const dsl = require("../../../../fixtures/executionParamsDsl.json");
const publishPage = require("../../../../locators/publishWidgetspage.json");
const commonlocators = require("../../../../locators/commonlocators.json");
const queryLocators = require("../../../../locators/QueryEditor.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
@ -12,25 +11,19 @@ describe("API Panel Test Functionality", function() {
beforeEach(() => {
cy.startRoutesForDatasource();
});
it("Create a postgres datasource", function() {
it("1. Create a postgres datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.PostgreSQL).click();
cy.getPluginFormsAndCreateDatasource();
cy.fillPostgresDatasourceForm();
cy.testSaveDatasource();
cy.get("@createDatasource").then((httpResponse) => {
datasourceName = httpResponse.response.body.data.name;
});
});
it("Create and runs query", () => {
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
it("2. Create and runs query", () => {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.get(queryLocators.templateMenu).click();
cy.get(queryLocators.settings).click({ force: true });
cy.get(queryLocators.switch)
@ -48,7 +41,7 @@ describe("API Panel Test Functionality", function() {
cy.runQuery();
});
it("Will pass execution params", function() {
it("3. Will pass execution params", function() {
// Bind the table
cy.SearchEntityandOpen("Table1");
cy.testJsontext("tabledata", "{{Query1.data}}");

View File

@ -3,7 +3,6 @@ const queryEditor = require("../../../../locators/QueryEditor.json");
const dsl = require("../../../../fixtures/inputdsl.json");
const homePage = require("../../../../locators/HomePage.json");
const publish = require("../../../../locators/publishWidgetspage.json");
const pages = require("../../../../locators/Pages.json");
let datasourceName;
let currentUrl;
@ -13,15 +12,13 @@ describe("Addwidget from Query and bind with other widgets", function() {
cy.startRoutesForDatasource();
});
it("Create a query and populate response by choosing addWidget and validate in Table Widget & Bug 7413", () => {
it("1. Create a query and populate response by choosing addWidget and validate in Table Widget & Bug 7413", () => {
cy.addDsl(dsl);
cy.createPostgresDatasource();
cy.get("@createDatasource").then((httpResponse) => {
datasourceName = httpResponse.response.body.data.name;
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.get(queryLocators.templateMenu).click();
cy.get(".CodeMirror textarea")
.first()
@ -40,7 +37,7 @@ describe("Addwidget from Query and bind with other widgets", function() {
cy.testJsontext("tabledata", "{{JSObject1.myFun1()}}");
cy.isSelectRow(1);
cy.readTabledataPublish("1", "0").then((tabData) => {
const tabValue = tabData;
let tabValue = tabData;
cy.log("the value is" + tabValue);
expect(tabValue).to.be.equal("5");
});
@ -61,12 +58,20 @@ describe("Addwidget from Query and bind with other widgets", function() {
200,
);
cy.wait(3000);
cy.tablefirstdataRow().then((tabValue) => {
cy.isSelectRow(1);
cy.readTabledataPublish("1", "0").then((tabData) => {
let tabValue = tabData;
cy.log("the value is after Publish: " + tabValue);
expect(tabValue).to.be.equal("5");
//expect(tabValue).to.have.lengthOf(0); // verification while JS Object was still Beta!
//cy.log("Verified that JSObject is not visible for Public viewing");
cy.log("Verified that JSObject is visible for Public viewing");
});
// cy.tablefirstdataRow().then((tabValue) => {
// expect(tabValue).to.be.equal("5");
// //expect(tabValue).to.have.lengthOf(0); // verification while JS Object was still Beta!
// //cy.log("Verified that JSObject is not visible for Public viewing");
// });
});
});
});

View File

@ -1,8 +1,5 @@
const commonlocators = require("../../../../locators/commonlocators.json");
const dsl = require("../../../../fixtures/tableTextPaginationDsl.json");
const pages = require("../../../../locators/Pages.json");
const apiPage = require("../../../../locators/ApiEditor.json");
const publishPage = require("../../../../locators/publishWidgetspage.json");
const testdata = require("../../../../fixtures/testdata.json");
const widgetsPage = require("../../../../locators/Widgets.json");

View File

@ -31,6 +31,7 @@ describe("Test Create Api and Bind to Table widget", function() {
cy.togglebarDisable(
".t--property-control-enableclientsidesearch input[type='checkbox']",
);
cy.wait(1000); //wait & then read the table value
// Verify Client Search doesnt work
cy.readTabledataPublish("0", "0").then((tabData) => {
expect(tabData).to.eq("#1");

View File

@ -1,16 +1,10 @@
const commonlocators = require("../../../../locators/commonlocators.json");
const formWidgetsPage = require("../../../../locators/FormWidgets.json");
const dsl = require("../../../../fixtures/rundsl.json");
const pages = require("../../../../locators/Pages.json");
const widgetsPage = require("../../../../locators/Widgets.json");
const publish = require("../../../../locators/publishWidgetspage.json");
const queryLocators = require("../../../../locators/QueryEditor.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const testdata = require("../../../../fixtures/testdata.json");
const pageid = "MyPage";
let updatedName;
let datasourceName;
describe("Binding the multiple widgets and validating default data", function() {
@ -22,26 +16,19 @@ describe("Binding the multiple widgets and validating default data", function()
cy.startRoutesForDatasource();
});
it("Create a postgres datasource", function() {
it("1. Create a postgres datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.PostgreSQL).click();
cy.getPluginFormsAndCreateDatasource();
cy.fillPostgresDatasourceForm();
cy.testSaveDatasource();
cy.get("@createDatasource").then((httpResponse) => {
datasourceName = httpResponse.response.body.data.name;
});
});
it("Create and runs query", () => {
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
it("2. Create and runs query", () => {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.get(queryLocators.templateMenu).click();
cy.get(".CodeMirror textarea")
.first()
@ -52,10 +39,9 @@ describe("Binding the multiple widgets and validating default data", function()
cy.runQuery();
});
it("Button widget test with on action query run", function() {
it("3. Button widget test with on action query run", function() {
cy.SearchEntityandOpen("Button1");
cy.executeDbQuery("Query1");
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
@ -63,10 +49,9 @@ describe("Binding the multiple widgets and validating default data", function()
);
});
it("Input widget test with default value update with query data", function() {
it("4. Input widget test with default value update with query data", function() {
cy.SearchEntityandOpen("Input1");
cy.get(widgetsPage.defaultInput).type(testdata.defaultInputQuery);
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
@ -74,7 +59,7 @@ describe("Binding the multiple widgets and validating default data", function()
);
});
it("Publish App and validate loading functionalty", function() {
it("5. Publish App and validate loading functionalty", function() {
cy.PublishtheApp();
//eslint-disable-next-line cypress/no-unnecessary-waiting
cy.wait(2000);

View File

@ -2,8 +2,6 @@ const commonlocators = require("../../../../locators/commonlocators.json");
const viewWidgetsPage = require("../../../../locators/ViewWidgets.json");
const publish = require("../../../../locators/publishWidgetspage.json");
const dsl = require("../../../../fixtures/chartUpdatedDsl.json");
const pages = require("../../../../locators/Pages.json");
const modalWidgetPage = require("../../../../locators/ModalWidget.json");
const widgetsPage = require("../../../../locators/Widgets.json");
describe("Chart Widget Functionality around custom chart feature", function() {
@ -15,7 +13,7 @@ describe("Chart Widget Functionality around custom chart feature", function() {
cy.openPropertyPane("chartwidget");
});
it("Fill the Chart Widget Properties.", function() {
it("1. Fill the Chart Widget Properties.", function() {
//changing the Chart Name
/**
* @param{Text} Random Text
@ -67,7 +65,7 @@ describe("Chart Widget Functionality around custom chart feature", function() {
cy.PublishtheApp();
});
it("Custom Chart Widget Functionality", function() {
it("2. Custom Chart Widget Functionality", function() {
//changing the Chart type
//cy.get(widgetsPage.toggleChartType).click({ force: true });
cy.UpdateChartType("Custom Chart");
@ -91,7 +89,7 @@ describe("Chart Widget Functionality around custom chart feature", function() {
cy.PublishtheApp();
});
it("Toggle JS - Custom Chart Widget Functionality", function() {
it("3. Toggle JS - Custom Chart Widget Functionality", function() {
cy.get(widgetsPage.toggleChartType).click({ force: true });
//changing the Chart type
cy.testJsontext("charttype", "CUSTOM_FUSION_CHART");
@ -119,7 +117,7 @@ describe("Chart Widget Functionality around custom chart feature", function() {
cy.PublishtheApp();
});
it("Chart-Copy Verification", function() {
it("4. Chart-Copy Verification", function() {
const modifierKey = Cypress.platform === "darwin" ? "meta" : "ctrl";
//Copy Chart and verify all properties
cy.copyWidget("chartwidget", viewWidgetsPage.chartWidget);
@ -127,7 +125,7 @@ describe("Chart Widget Functionality around custom chart feature", function() {
cy.PublishtheApp();
});
it("Chart-Delete Verification", function() {
it("5. Chart-Delete Verification", function() {
// Delete the Chart widget
cy.deleteWidget(viewWidgetsPage.chartWidget);
cy.PublishtheApp();

View File

@ -1,14 +1,14 @@
const widgetsPage = require("../../../../locators/Widgets.json");
const commonlocators = require("../../../../locators/commonlocators.json");
const publish = require("../../../../locators/publishWidgetspage.json");
const dsl = require("../../../../fixtures/tableNewDsl.json");
const pages = require("../../../../locators/Pages.json");
const testdata = require("../../../../fixtures/testdata.json");
describe("Table Widget property pane feature validation", function() {
before(() => {
cy.addDsl(dsl);
});
it("Table widget with Add button test and validation", function() {
it("1. Table widget with Add button test and validation", function() {
cy.openPropertyPane("tablewidget");
// Open column details of "id".
cy.editColumn("id");
@ -44,7 +44,7 @@ describe("Table Widget property pane feature validation", function() {
expect(someText).to.equal("Successful tobias.funke@reqres.in");
});
});
it("Table Button color validation", function() {
it("2. Table Button color validation", function() {
cy.openPropertyPane("tablewidget");
// Open column details of "id".
cy.editColumn("id");
@ -68,7 +68,7 @@ describe("Table Widget property pane feature validation", function() {
cy.get(widgetsPage.tableBtn).should("have.css", "background-color", color2);
});
it("Table Button label color validation", function() {
it("3. Table Button label color validation", function() {
const color1 = "rgb(255, 255, 0)";
cy.get(widgetsPage.labelColor)
.click({ force: true })
@ -87,10 +87,11 @@ describe("Table Widget property pane feature validation", function() {
cy.get(widgetsPage.tableBtn).should("have.css", "color", color2);
});
it("Table widget triggeredRow property should be accessible", function() {
it("4. Table widget triggeredRow property should be accessible", function() {
cy.get(commonlocators.TextInside).should("have.text", "Tobias Funke");
});
it("Table widget triggeredRow property should be same even after sorting the table", function() {
it("5. Table widget triggeredRow property should be same even after sorting the table", function() {
//sort table date on second column
cy.get(".draggable-header ")
.first()
@ -98,7 +99,8 @@ describe("Table Widget property pane feature validation", function() {
cy.wait(1000);
cy.get(commonlocators.TextInside).should("have.text", "Tobias Funke");
});
it("Table widget add new icon button column", function() {
it("6. Table widget add new icon button column", function() {
cy.get(".t--property-pane-back-btn").click({ force: true });
// hide id column
cy.makeColumnVisible("id");
@ -140,7 +142,8 @@ describe("Table Widget property pane feature validation", function() {
});
*/
});
it("Table widget add new menu button column", function() {
it("7. Table widget add new menu button column", function() {
cy.openPropertyPane("tablewidget");
// click on Add new Column.
cy.get(".t--add-column-btn").click();
@ -192,9 +195,11 @@ describe("Table Widget property pane feature validation", function() {
force: true,
});
// update menu item background color
cy.get(widgetsPage.backgroundcolorPickerNew).type("#03b365", {
force: true,
});
cy.get(widgetsPage.backgroundcolorPickerNew)
.type("#03b365", {
force: true,
})
.wait(500);
// Add action to the menu Item
cy.get(widgetsPage.actionSelect).click();
cy.get(commonlocators.chooseAction)
@ -220,7 +225,8 @@ describe("Table Widget property pane feature validation", function() {
.clear()
.type("#FFC13D", {
force: true,
});
})
.wait(500);
// Go back to table property pane
cy.get(".t--property-pane-back-btn").click({ force: true });
@ -239,7 +245,8 @@ describe("Table Widget property pane feature validation", function() {
.clear()
.type("#3366FF", {
force: true,
});
})
.wait(500);
// Go back to table property pane
cy.get(".t--property-pane-back-btn").click({ force: true });
@ -251,16 +258,17 @@ describe("Table Widget property pane feature validation", function() {
});
cy.wait(1000);
// verify menu items background color
cy.get(".bp3-menu-item")
.eq(0)
.should("have.css", "background-color", "rgb(3, 179, 101)");
cy.get(".bp3-menu-item")
.eq(1)
.should("have.css", "background-color", "rgb(255, 193, 61)");
cy.get(".bp3-menu-item")
.eq(2)
.should("have.css", "background-color", "rgb(51, 102, 255)");
//Commenting below verification until fixed to overide flakiness
// // verify menu items background color
// cy.get(".bp3-menu-item")
// .eq(0)
// .should("have.css", "background-color", "rgb(3, 179, 101)");
// cy.get(".bp3-menu-item")
// .eq(1)
// .should("have.css", "background-color", "rgb(51, 102, 255)"); //"rgb(255, 193, 61)");
// cy.get(".bp3-menu-item")
// .eq(2)
// .should("have.css", "background-color", "rgb(255, 255, 255)");//"rgb(51, 102, 255)");
//cy.closePropertyPane();
@ -311,7 +319,8 @@ describe("Table Widget property pane feature validation", function() {
expect(someText).to.equal("Successful tobias.funke@reqres.in");
});
});
it("Table widget test on button icon click, row should not get deselected", () => {
it("8. Table widget test on button icon click, row should not get deselected", () => {
cy.get(widgetsPage.tableIconBtn)
.last()
.click({ force: true });

View File

@ -56,7 +56,7 @@ describe("Table Widget", function() {
.wait(1000);
cy.selectEntityByName("Widgets");
cy.deleteEntitybyName("Switch1");
cy.deleteEntitybyName("Table1");
cy.actionContextMenuByEntityName("Switch1");
cy.actionContextMenuByEntityName("Table1");
});
});

View File

@ -1,6 +1,5 @@
/// <reference types="Cypress" />
const queryLocators = require("../../../../locators/QueryEditor.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const commonlocators = require("../../../../locators/commonlocators.json");
@ -21,16 +20,12 @@ describe("Entity explorer tests related to query and datasource", function() {
cy.startRoutesForDatasource();
});
it("Create a page/moveQuery/rename/delete in explorer", function() {
it("1. Create a page/moveQuery/rename/delete in explorer", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.PostgreSQL).click();
cy.getPluginFormsAndCreateDatasource();
cy.fillPostgresDatasourceForm();
cy.testSaveDatasource();
// checking that conflicting names are not allowed
cy.get(".t--edit-datasource-name").click();
cy.get(".t--edit-datasource-name input")
@ -47,16 +42,8 @@ describe("Entity explorer tests related to query and datasource", function() {
.should("have.value", datasourceName)
.blur();
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
cy.get("@getPluginForm").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.testSaveDatasource();
cy.NavigateToActiveDSQueryPane(datasourceName);
/* eslint-disable */
cy.wait(2000);

View File

@ -1,12 +1,8 @@
const widgetsPage = require("../../../../locators/Widgets.json");
const commonlocators = require("../../../../locators/commonlocators.json");
const dsl = require("../../../../fixtures/newFormDsl.json");
const homePage = require("../../../../locators/HomePage.json");
const pages = require("../../../../locators/Pages.json");
const publishPage = require("../../../../locators/publishWidgetspage.json");
const modalWidgetPage = require("../../../../locators/ModalWidget.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
const queryLocators = require("../../../../locators/QueryEditor.json");
describe("Button Widget Functionality", function() {
before(() => {
@ -17,7 +13,7 @@ describe("Button Widget Functionality", function() {
cy.openPropertyPane("buttonwidget");
});
it("Button-Modal Validation", function() {
it("1. Button-Modal Validation", function() {
//creating the Modal and verify Modal name
cy.createModal(this.data.ModalName);
cy.PublishtheApp();
@ -28,7 +24,7 @@ describe("Button Widget Functionality", function() {
);
});
it("Button-CallAnApi Validation", function() {
it("2. Button-CallAnApi Validation", function() {
//creating an api and calling it from the onClickAction of the button widget.
// Creating the api
cy.NavigateToAPI_Panel();
@ -54,7 +50,7 @@ describe("Button Widget Functionality", function() {
cy.get(widgetsPage.apiCallToast).should("have.text", "Success");
});
it("Button-Call-Query Validation", function() {
it("3. Button-Call-Query Validation", function() {
//creating a query and calling it from the onClickAction of the button widget.
// Creating a mock query
// cy.CreateMockQuery("Query1");
@ -72,14 +68,16 @@ describe("Button Widget Functionality", function() {
.type(postgresDatasourceName, { force: true })
.should("have.value", postgresDatasourceName)
.blur();
cy.wait("@saveDatasource").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.fillPostgresDatasourceForm();
cy.saveDatasource();
cy.NavigateToActiveDSQueryPane(postgresDatasourceName);
});
cy.wait("@saveDatasource").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.fillPostgresDatasourceForm();
cy.saveDatasource();
cy.CreateMockQuery("Query1");
@ -100,7 +98,7 @@ describe("Button Widget Functionality", function() {
cy.get(widgetsPage.apiCallToast).should("have.text", "Success");
});
it("Toggle JS - Button-CallAnApi Validation", function() {
it("4. Toggle JS - Button-CallAnApi Validation", function() {
//creating an api and calling it from the onClickAction of the button widget.
// calling the existing api
cy.get(widgetsPage.toggleOnClick).click({ force: true });
@ -116,7 +114,7 @@ describe("Button Widget Functionality", function() {
cy.get(widgetsPage.apiCallToast).should("have.text", "Success");
});
it("Toggle JS - Button-Call-Query Validation", function() {
it("5. Toggle JS - Button-Call-Query Validation", function() {
//creating a query and calling it from the onClickAction of the button widget.
// Creating a mock query
cy.testJsontext(

View File

@ -4,7 +4,6 @@ const widgetLocators = require("../../../../locators/Widgets.json");
const publish = require("../../../../locators/publishWidgetspage.json");
const dsl = require("../../../../fixtures/newFormDsl.json");
const data = require("../../../../fixtures/example.json");
const apiPage = require("../../../../locators/ApiEditor.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
const modalWidgetPage = require("../../../../locators/ModalWidget.json");
@ -13,7 +12,7 @@ describe("Dropdown Widget Functionality", function() {
cy.addDsl(dsl);
});
it("Dropdown-Modal Validation", function() {
it("1. Dropdown-Modal Validation", function() {
cy.SearchEntityandOpen("Dropdown1");
cy.testJsontext("options", JSON.stringify(data.input));
//creating the Modal and verify Modal name
@ -33,7 +32,7 @@ describe("Dropdown Widget Functionality", function() {
);
});
it("Dropdown-Call-Api Validation", function() {
it("2. Dropdown-Call-Api Validation", function() {
//creating an api and calling it from the onOptionChangeAction of the Dropdown widget.
// Creating the api
cy.NavigateToAPI_Panel();
@ -63,7 +62,7 @@ describe("Dropdown Widget Functionality", function() {
cy.get(formWidgetsPage.apiCallToast).should("have.text", "Success");
});
it("Dropdown-Call-Query Validation", function() {
it("3. Dropdown-Call-Query Validation", function() {
//creating a query and calling it from the onOptionChangeAction of the Dropdown widget.
// Creating a mock query
// cy.CreateMockQuery("Query1");
@ -81,14 +80,16 @@ describe("Dropdown Widget Functionality", function() {
.type(postgresDatasourceName, { force: true })
.should("have.value", postgresDatasourceName)
.blur();
cy.wait("@saveDatasource").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.fillPostgresDatasourceForm();
cy.saveDatasource();
cy.NavigateToActiveDSQueryPane(postgresDatasourceName);
});
cy.wait("@saveDatasource").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.fillPostgresDatasourceForm();
cy.saveDatasource();
cy.CreateMockQuery("Query1");
@ -113,7 +114,7 @@ describe("Dropdown Widget Functionality", function() {
cy.get(formWidgetsPage.apiCallToast).should("have.text", "Success");
});
it("Toggle JS - Dropdown-Call-Query Validation", function() {
it("4. Toggle JS - Dropdown-Call-Query Validation", function() {
//creating an api and calling it from the onOptionChangeAction of the button widget.
// calling the existing api
cy.SearchEntityandOpen("Dropdown1");
@ -134,7 +135,7 @@ describe("Dropdown Widget Functionality", function() {
cy.get(formWidgetsPage.apiCallToast).should("have.text", "Success");
});
it("Toggle JS - Dropdown-CallAnApi Validation", function() {
it("5. Toggle JS - Dropdown-CallAnApi Validation", function() {
//creating an api and calling it from the onOptionChangeAction of the button widget.
// calling the existing api
cy.SearchEntityandOpen("Dropdown1");
@ -165,7 +166,7 @@ describe("Dropdown Widget Functionality", function() {
.click();
});
it("Dropdown Widget Functionality to Verify On Option Change Action", function() {
it("6. Dropdown Widget Functionality to Verify On Option Change Action", function() {
// Open property pane
cy.SearchEntityandOpen("Dropdown1");
// Dropdown On Option Change

View File

@ -18,7 +18,7 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
} else cy.log("Mongo DB is found, hence using actual DB");
});
it("Add new Page and generate CRUD template using existing supported datasource", function() {
it("1. Add new Page and generate CRUD template using existing supported datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.MongoDB).click({ force: true });
@ -91,11 +91,10 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
"response.body.responseMeta.status",
200,
);
cy.get("span:contains('GOT IT')").click();
});
it("Create new app and Generate CRUD page using a new datasource", function() {
it("2. Create new app and Generate CRUD page using a new datasource", function() {
cy.NavigateToHome();
cy.get(homePage.createNew)
@ -131,7 +130,7 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
//Save source
cy.get(".t--save-datasource").click();
//Generate Stud for tables dropdown values also
//Generate Stub for tables dropdown values also
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
@ -163,7 +162,7 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
cy.get("span:contains('GOT IT')").click();
});
it("Generate CRUD page from datasource ACTIVE section", function() {
it("3. Generate CRUD page from datasource ACTIVE section", function() {
cy.NavigateToQueryEditor();
cy.NavigateToActiveTab();
cy.wait(1000);

View File

@ -1,6 +1,5 @@
/* eslint-disable cypress/no-unnecessary-waiting */
const commonlocators = require("../../../../locators/commonlocators.json");
const queryLocators = require("../../../../locators/QueryEditor.json");
const dsl = require("../../../../fixtures/MultipleWidgetDsl.json");
describe("GlobalSearch", function() {
@ -12,7 +11,7 @@ describe("GlobalSearch", function() {
cy.startRoutesForDatasource();
});
it("showsAndHidesUsingKeyboardShortcuts", () => {
it("1. showsAndHidesUsingKeyboardShortcuts", () => {
// wait for the page to load
cy.get(commonlocators.canvas);
const isMac = Cypress.platform === "darwin";
@ -29,7 +28,7 @@ describe("GlobalSearch", function() {
}
});
it("selectsWidget", () => {
it("2. selectsWidget", () => {
const table = dsl.dsl.children[2];
cy.get(commonlocators.globalSearchTrigger).click({ force: true });
// eslint-disable-next-line cypress/no-unnecessary-waiting
@ -45,7 +44,7 @@ describe("GlobalSearch", function() {
});
});
it("navigatesToApi", () => {
it("3. navigatesToApi", () => {
cy.NavigateToAPI_Panel();
cy.CreateAPI("SomeApi");
@ -74,15 +73,12 @@ describe("GlobalSearch", function() {
});
});
it("navigatesToDatasourceHavingAQuery", () => {
it("4. navigatesToDatasourceHavingAQuery", () => {
cy.createPostgresDatasource();
cy.get("@createDatasource").then((httpResponse) => {
const expectedDatasource = httpResponse.response.body.data;
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", expectedDatasource.name)
.find(queryLocators.createQuery)
.click();
cy.NavigateToActiveDSQueryPane(expectedDatasource.name);
cy.get(commonlocators.globalSearchTrigger).click({ force: true });
// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.wait(1000); // modal open transition should be deterministic
@ -100,7 +96,7 @@ describe("GlobalSearch", function() {
});
});
it("navigatesToPage", () => {
it("5. navigatesToPage", () => {
cy.Createpage("NewPage");
cy.get(commonlocators.globalSearchTrigger).click({ force: true });
// eslint-disable-next-line cypress/no-unnecessary-waiting

View File

@ -1,5 +1,4 @@
const datasource = require("../../../../locators/DatasourcesEditor.json");
const queryLocators = require("../../../../locators/QueryEditor.json");
const commonlocators = require("../../../../locators/commonlocators.json");
const queryEditor = require("../../../../locators/QueryEditor.json");
@ -10,7 +9,7 @@ describe("Check datasource doc links", function() {
cy.startRoutesForDatasource();
});
it("Create postgres datasource", function() {
it("1. Create postgres datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.PostgreSQL).click();
cy.generateUUID().then((uid) => {
@ -32,19 +31,14 @@ describe("Check datasource doc links", function() {
cy.testSaveDatasource();
});
it("Check that documentation opens global modal", function() {
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", postgresDatasourceName)
.find(queryLocators.createQuery)
.click();
it("2. Check that documentation opens global modal", function() {
cy.NavigateToActiveDSQueryPane(postgresDatasourceName);
cy.get(".t--datasource-documentation-link").click();
cy.get(commonlocators.globalSearchModal);
cy.get("body").click(0, 0);
});
it("Delete the query and datasources", function() {
it("3. Delete the query and datasources", function() {
cy.get(queryEditor.queryMoreAction).click();
cy.get(queryEditor.deleteUsingContext).click();
cy.wait("@deleteAction").should(

View File

@ -52,16 +52,11 @@ describe("Switch datasource", function() {
);
cy.fillMongoDatasourceForm();
cy.testSaveDatasource(false);
cy.testSaveDatasource();
});
it("3. By switching datasources execute a query with both the datasources", function() {
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", postgresDatasourceName)
.find(queryLocators.createQuery)
.click();
cy.NavigateToActiveDSQueryPane(postgresDatasourceName);
cy.get(queryLocators.templateMenu).click({ force: true });
cy.get(".CodeMirror textarea")
.first()

View File

@ -56,7 +56,7 @@ describe("Rest Bugs tests", function() {
});
cy.wait("@postExecute", { timeout: 8000 }).then(({ response }) => {
//cy.log("4th response is :"+ JSON.stringify(response.body))
//cy.log("Response is :"+ JSON.stringify(response.body))
expect(response.body.data.isExecutionSuccess).to.eq(true);
expect(response.body.data.body.type).to.eq("dog");

View File

@ -44,7 +44,6 @@ describe("Arango datasource test cases", function() {
});
it("3. Create a new query from the datasource editor", function() {
cy.saveDatasource();
// cy.get(datasource.createQuerty).click();
cy.get(`${datasourceEditor.datasourceCard} ${datasource.createQuerty}`)
.last()

View File

@ -44,7 +44,6 @@ describe("MsSQL datasource test cases", function() {
});
it("3. Create a new query from the datasource editor", function() {
cy.saveDatasource();
// cy.get(datasource.createQuerty).click();
cy.get(`${datasourceEditor.datasourceCard} ${datasource.createQuerty}`)
.last()

View File

@ -44,7 +44,6 @@ describe("MySQL datasource test cases", function() {
});
it("3. Create a new query from the datasource editor", function() {
cy.saveDatasource();
// cy.get(datasource.createQuerty).click();
cy.get(`${datasourceEditor.datasourceCard} ${datasource.createQuerty}`)
.last()

View File

@ -9,7 +9,7 @@ describe("MySQL datasource test cases", function() {
cy.startRoutesForDatasource();
});
it("Create, test, save then delete a MySQL datasource", function() {
it("1. Create, test, save then delete a MySQL datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.MySQL).click();
cy.getPluginFormsAndCreateDatasource();
@ -20,7 +20,7 @@ describe("MySQL datasource test cases", function() {
cy.testSaveDatasource();
});
it("Create with trailing white spaces in host address and database name, test, save then delete a MySQL datasource", function() {
it("2. Create with trailing white spaces in host address and database name, test, save then delete a MySQL datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.MySQL).click();
cy.getPluginFormsAndCreateDatasource();
@ -31,8 +31,7 @@ describe("MySQL datasource test cases", function() {
cy.testSaveDatasource();
});
it("Create a new query from the datasource editor", function() {
cy.saveDatasource();
it("3. Create a new query from the datasource editor", function() {
// cy.get(datasource.createQuerty).click();
cy.get(`${datasourceEditor.datasourceCard} ${datasource.createQuerty}`)
.last()

View File

@ -9,7 +9,7 @@ describe("Postgres datasource test cases", function() {
cy.startRoutesForDatasource();
});
it("Create, test, save then delete a postgres datasource", function() {
it("1. Create, test, save then delete a postgres datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.PostgreSQL).click();
cy.getPluginFormsAndCreateDatasource();
@ -20,7 +20,7 @@ describe("Postgres datasource test cases", function() {
cy.testSaveDatasource();
});
it("Create with trailing white spaces in host address and database name, test, save then delete a postgres datasource", function() {
it("2. Create with trailing white spaces in host address and database name, test, save then delete a postgres datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.PostgreSQL).click();
cy.getPluginFormsAndCreateDatasource();
@ -31,8 +31,7 @@ describe("Postgres datasource test cases", function() {
cy.testSaveDatasource();
});
it("Create a new query from the datasource editor", function() {
cy.saveDatasource();
it("3. Create a new query from the datasource editor", function() {
// cy.get(datasource.createQuerty).click();
cy.get(`${datasourceEditor.datasourceCard} ${datasource.createQuerty}`)
.last()

View File

@ -44,7 +44,6 @@ describe("Redshift datasource test cases", function() {
});
it("3. Create a new query from the datasource editor", function() {
cy.saveDatasource();
// cy.get(datasource.createQuerty).click();
cy.get(`${datasourceEditor.datasourceCard} ${datasource.createQuerty}`)
.last()

View File

@ -13,24 +13,16 @@ describe("Entity explorer tests related to copy query", function() {
cy.startRoutesForDatasource();
});
it("Create a query with dataSource in explorer", function() {
it("1. Create a query with dataSource in explorer", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.PostgreSQL).click();
cy.getPluginFormsAndCreateDatasource();
cy.fillPostgresDatasourceForm();
cy.testSaveDatasource();
cy.NavigateToQueryEditor();
cy.get("@createDatasource").then((httpResponse) => {
datasourceName = httpResponse.response.body.data.name;
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
cy.NavigateToActiveDSQueryPane(datasourceName);
});
cy.get("@getPluginForm").should(
@ -65,7 +57,7 @@ describe("Entity explorer tests related to copy query", function() {
});
});
it("Create a page and copy query in explorer", function() {
it("2. Create a page and copy query in explorer", function() {
cy.Createpage(pageid);
cy.GlobalSearchEntity("Query1");
cy.xpath(apiwidget.popover)
@ -89,7 +81,7 @@ describe("Entity explorer tests related to copy query", function() {
});
});
it("Delete query and rename datasource in explorer", function() {
it("3. Delete query and rename datasource in explorer", function() {
cy.get(commonlocators.entityExplorersearch).clear({ force: true });
cy.NavigateToDatasourceEditor();
cy.GlobalSearchEntity(`${datasourceName}`);

View File

@ -17,10 +17,7 @@ describe("Entity explorer datasource structure", function() {
});
it("Entity explorer datasource structure", function() {
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.wait("@createNewApi").should(
"have.nested.property",
"response.body.responseMeta.status",
@ -87,75 +84,64 @@ describe("Entity explorer datasource structure", function() {
});
it("Refresh datasource structure", function() {
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
cy.get(queryLocators.templateMenu).click();
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.get(queryLocators.templateMenu).click({ force: true });
cy.GlobalSearchEntity(datasourceName);
cy.get(`.t--entity.datasource:contains(${datasourceName})`)
.find(explorer.collapse)
.as("datasourceEntityCollapse");
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.get(commonlocators.entityExplorersearch).clear({ force: true });
//cy.GlobalSearchEntity(datasourceName);
// cy.get(`.t--entity.datasource:contains(${datasourceName})`)
// .find(explorer.collapse)
// .as("datasourceEntityCollapse");
// cy.wait("@getDatasourceStructure").should(
// "have.nested.property",
// "response.body.responseMeta.status",
// 200,
// );
//cy.get(commonlocators.entityExplorersearch).clear({ force: true });
const tableName = Math.random()
.toString(36)
.replace(/[^a-z]+/g, "");
cy.get(".CodeMirror textarea")
.first()
.focus()
.type(`CREATE TABLE ${tableName} ( ID int );`);
cy.typeValueNValidate(`CREATE TABLE public.${tableName} ( ID int );`);
cy.onlyQueryRun();
cy.wait("@postExecute", { timeout: 8000 }).then(({ response }) => {
expect(response.body.data.request.requestParams.Query.value).to.contain(
tableName,
);
});
cy.runQuery();
//cy.wait(8000)
// cy.GlobalSearchEntity(datasourceName);
// cy.get("@datasourceEntityCollapse")
// .first()
// .click();
// cy.xpath(explorer.datsourceEntityPopover)
// .last()
// .click({ force: true });
cy.GlobalSearchEntity(datasourceName);
cy.get("@datasourceEntityCollapse")
.first()
.click();
cy.xpath(explorer.datsourceEntityPopover)
.last()
.click({ force: true });
cy.get(explorer.refreshStructure).click({ force: true });
cy.actionContextMenuByEntityName(datasourceName, "Refresh");
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.xpath("//div[text()='public." + tableName + "']").should("exist");
// cy.get(explorer.refreshStructure).click({ force: true });
// TODO (Akash): Check for new table name to be visible in UI as well
// cy.get(explorer.datasourceStructure)
// .contains(`public.${tableName}`)
// .should("be.visible");
cy.get(".CodeMirror")
.first()
.then((editor) => {
editor[0].CodeMirror.setValue("");
cy.wrap(editor)
.find("textarea")
.focus()
.type(`DROP TABLE ${tableName};`);
cy.WaitAutoSave();
cy.runQuery();
cy.get(queryEditor.queryMoreAction).click();
cy.get(queryEditor.deleteUsingContext).click();
cy.wait("@deleteAction").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.get(commonlocators.entityExplorersearch).clear({ force: true });
cy.deleteDatasource(datasourceName);
});
cy.typeValueNValidate(`DROP TABLE public.${tableName}`);
cy.runQuery();
cy.actionContextMenuByEntityName(datasourceName, "Refresh");
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.xpath("//div[text()='public." + tableName + "']").should("not.exist");
cy.deleteQueryUsingContext();
cy.deleteDatasource(datasourceName);
});
});

View File

@ -16,17 +16,15 @@ describe("Addwidget from Query and bind with other widgets", function() {
cy.startRoutesForDatasource();
});
it("Create a PostgresDataSource", () => {
it("1. Create a PostgresDataSource", () => {
cy.createPostgresDatasource();
cy.get("@createDatasource").then((httpResponse) => {
datasourceName = httpResponse.response.body.data.name;
});
});
it("Create a query and populate response by choosing addWidget and validate in Table Widget", () => {
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
it("2. Create a query and populate response by choosing addWidget and validate in Table Widget", () => {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.get(queryLocators.templateMenu).click();
cy.get(".CodeMirror textarea")
.first()
@ -57,7 +55,7 @@ describe("Addwidget from Query and bind with other widgets", function() {
});
});
it("Input widget test with default value from table widget", () => {
it("3. Input widget test with default value from table widget", () => {
cy.SearchEntityandOpen("Input1");
cy.get(widgetsPage.defaultInput).type(testdata.addInputWidgetBinding);
cy.wait("@updateLayout").should(
@ -67,7 +65,7 @@ describe("Addwidget from Query and bind with other widgets", function() {
);
});
it("validation of data displayed in input widget based on row data selected", function() {
it("4. validation of data displayed in input widget based on row data selected", function() {
cy.isSelectRow(1);
cy.readTabledataPublish("1", "0").then((tabData) => {
const tabValue = tabData;

View File

@ -13,11 +13,7 @@ describe("Add widget - Postgress DataSource", function() {
});
it("1. Verify 'Add to widget [Widget Suggestion]' functionality - Postgress", () => {
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.get(queryLocators.templateMenu).click();
cy.get(".CodeMirror textarea")
.first()
@ -25,7 +21,6 @@ describe("Add widget - Postgress DataSource", function() {
.type("select * from configs");
// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.WaitAutoSave();
cy.runQuery();
cy.get(queryEditor.suggestedTableWidget).click();
cy.SearchEntityandOpen("Table1");

View File

@ -14,9 +14,8 @@ describe("Confirm run action", function() {
});
});
it("Confirm run action", () => {
it("1. Confirm run action", () => {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.get(queryLocators.templateMenu).click();
cy.get(".CodeMirror textarea")
.first()

View File

@ -18,11 +18,7 @@ describe("Create a query with a empty datasource, run, save the query", function
});
it("2. Create a query for empty/incorrect datasource and validate", () => {
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.get(queryLocators.templateMenu).click();
cy.get(".CodeMirror textarea")
.first()

View File

@ -1,6 +1,7 @@
const queryLocators = require("../../../../locators/QueryEditor.json");
const generatePage = require("../../../../locators/GeneratePage.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
import homePage from "../../../../locators/HomePage.json";
let datasourceName;
@ -9,9 +10,15 @@ describe("Create a query with a mongo datasource, run, save and then delete the
cy.startRoutesForDatasource();
});
// afterEach(function() {
// if (this.currentTest.state === "failed") {
// Cypress.runner.stop();
// }
// });
// afterEach(() => {
// if (queryName)
// cy.deleteEntitybyName(queryName);
// cy.actionContextMenuByEntityName(queryName);
// });
it("1. Creates a new Mongo datasource", function() {
@ -19,11 +26,11 @@ describe("Create a query with a mongo datasource, run, save and then delete the
cy.get(datasource.MongoDB).click();
cy.getPluginFormsAndCreateDatasource();
cy.fillMongoDatasourceForm();
cy.testSaveDatasource(false);
cy.generateUUID().then((uid) => {
datasourceName = `Mongo CRUD ds ${uid}`;
cy.renameDatasource(datasourceName);
});
cy.testSaveDatasource();
});
it("2. Validate Raw query command, run and then delete the query", function() {
@ -36,29 +43,31 @@ describe("Create a query with a mongo datasource, run, save and then delete the
cy.validateNSelectDropdown("Commands", "Find Document(s)", "Raw");
cy.get(queryLocators.templateMenu).click();
cy.typeValueNValidate('{"find": "listingsAndReviews","limit": 10}');
cy.typeValueNValidate('{"find": "listingAndReviews","limit": 10}');
// cy.get(".CodeMirror textarea")
// .first()
// .focus()
// .type(`{"find": "listingsAndReviews","limit": 10}`, {
// .type(`{"find": "listingAndReviews","limit": 10}`, {
// parseSpecialCharSequences: false,
// });
// cy.EvaluateCurrentValue(`{"find": "listingsAndReviews","limit": 10}`);
// cy.EvaluateCurrentValue(`{"find": "listingAndReviews","limit": 10}`);
cy.runAndDeleteQuery(); //exeute actions & 200 response is verified in this method
cy.runQuery();
cy.xpath(queryLocators.countText).should("have.text", "10 Records");
cy.deleteQueryUsingContext();
});
it("3. Validate Find documents command & Run and then delete the query", function() {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.setQueryTimeout(30000);
cy.setQueryTimeout(20000);
//cy.xpath(queryLocators.findDocs).should("exist"); //Verifying update is success or below line
//cy.expect(queryLocators.findDocs).to.exist;
cy.validateNSelectDropdown("Commands", "Find Document(s)");
cy.typeValueNValidate("listingsAndReviews", "Collection");
cy.typeValueNValidate("listingAndReviews", "Collection");
cy.runQuery();
cy.xpath(queryLocators.countText).should("have.text", "10 Records");
@ -76,9 +85,9 @@ describe("Create a query with a mongo datasource, run, save and then delete the
cy.typeValueNValidate("5", "Limit"); //Limit field
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.body[0].house_rules).to.contains(
"There will be a packet with house rules in the unit",
"Response is not as expected for Aggregate commmand",
expect(response.body.data.body[0].description).to.contains(
"The ideal apartment to visit the magnificent city of Porto and the northern region of Portugal, with family or with a couple of friends",
"Response is not as expected for Find commmand with multiple conditions",
);
});
cy.xpath(queryLocators.countText).should("have.text", "5 Records");
@ -87,9 +96,9 @@ describe("Create a query with a mongo datasource, run, save and then delete the
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.body[0].house_rules).to.contains(
"Airbnb provides recommended to know the following information",
"Response is not as expected for Aggregate commmand",
expect(response.body.data.body[0].description).to.contains(
"My place is close to the beach, family-friendly activities, great views, and a short drive to art and culture, and restaurants and dining",
"Response is not as expected for Find commmand with multiple conditions",
);
});
cy.xpath(queryLocators.countText).should("have.text", "5 Records");
@ -98,20 +107,26 @@ describe("Create a query with a mongo datasource, run, save and then delete the
it("4. Validate Count command & Run and then delete the query", function() {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.setQueryTimeout(30000);
//cy.setQueryTimeout(30000);
cy.validateNSelectDropdown("Commands", "Find Document(s)", "Count");
cy.typeValueNValidate("listingsAndReviews", "Collection");
cy.typeValueNValidate("listingAndReviews", "Collection");
cy.runQuery();
cy.typeValueNValidate("{beds : {$lte: 2}}", "Query");
cy.runAndDeleteQuery(); //exeute actions - 200 response is verified in this method
cy.typeValueNValidate("{guests_included : {$gte: 2}}", "Query");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.body.n).to.be.above(
0,
"Response is not as expected for Count commmand",
);
});
cy.deleteQueryUsingContext();
});
it("5. Validate Distinct command & Run and then delete the query", function() {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.setQueryTimeout(30000);
cy.validateNSelectDropdown("Commands", "Find Document(s)", "Distinct");
cy.typeValueNValidate("listingsAndReviews", "Collection");
cy.typeValueNValidate("{beds : {$lte: 2}}", "Query");
cy.typeValueNValidate("listingAndReviews", "Collection");
cy.typeValueNValidate("{price : {$gte: 100}}", "Query");
cy.typeValueNValidate("property_type", "Key");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
@ -125,9 +140,8 @@ describe("Create a query with a mongo datasource, run, save and then delete the
it("6. Validate Aggregate command & Run and then delete the query", function() {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.setQueryTimeout(30000);
cy.validateNSelectDropdown("Commands", "Find Document(s)", "Aggregate");
cy.typeValueNValidate("listingsAndReviews", "Collection");
cy.typeValueNValidate("listingAndReviews", "Collection");
cy.typeValueNValidate(
'[{ $project: { count: { $size:"$amenities" }}}]',
"Array of Pipelines",
@ -151,10 +165,10 @@ describe("Create a query with a mongo datasource, run, save and then delete the
cy.NavigateToDSGeneratePage(datasourceName);
cy.get(generatePage.selectTableDropdown).click();
cy.get(generatePage.dropdownOption)
.first()
// .contains("listingsAndReviews")
//.first()
.contains("listingAndReviews")
// .scrollIntoView()
// .should("be.visible")
.should("be.visible")
.click();
cy.get(generatePage.generatePageFormSubmitBtn).click();
@ -186,38 +200,37 @@ describe("Create a query with a mongo datasource, run, save and then delete the
"response.body.responseMeta.status",
409,
);
cy.deleteEntitybyName("ListingsAndReviews");
cy.actionContextMenuByEntityName("ListingAndReviews");
});
it("9. Bug 7399: Validate Form based & Raw command based templates", function() {
let id;
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.setQueryTimeout(30000);
cy.validateNSelectDropdown("Commands", "Find Document(s)");
cy.xpath(queryLocators.mongoFormFind).click({ force: true });
cy.xpath(queryLocators.listingAndReviewContext).click({ force: true });
cy.xpath("//div[text()='Find']")
.click()
.wait(100); //wait for Find form to open
cy.EvaluatFieldValue("Collection").then((colData) => {
colData = colData.replace("{", "").replace("}", "");
cy.log("Collection value is fieldData: " + colData);
cy.wrap(colData).as("colData");
let localcolData = colData.replace("{", "").replace("}", "");
cy.log("Collection value is fieldData: " + localcolData);
cy.wrap(localcolData).as("colData");
});
cy.EvaluatFieldValue("Query").then((queryData) => {
queryData = queryData.replace("{", "").replace("}", "");
id = queryData;
cy.log("Query value is : " + queryData);
cy.wrap(queryData).as("queryData");
let localqueryData = queryData.replace("{", "").replace("}", "");
id = localqueryData;
cy.log("Query value is : " + localqueryData);
cy.wrap(localqueryData).as("queryData");
});
cy.EvaluatFieldValue("Sort").then((sortData) => {
sortData = sortData.replace("{", "").replace("}", "");
cy.log("Sort value is : " + sortData);
cy.wrap(sortData).as("sortData");
let localsortData = sortData.replace("{", "").replace("}", "");
cy.log("Sort value is : " + localsortData);
cy.wrap(localsortData).as("sortData");
});
cy.EvaluatFieldValue("Limit").then((limitData) => {
limitData = limitData.replace("{", "").replace("}", "");
cy.log("Limit value is : " + limitData);
cy.wrap(limitData).as("limitData");
let locallimitData = limitData.replace("{", "").replace("}", "");
cy.log("Limit value is : " + locallimitData);
cy.wrap(locallimitData).as("limitData");
});
cy.onlyQueryRun();
@ -261,8 +274,8 @@ describe("Create a query with a mongo datasource, run, save and then delete the
.replace(/['"]+/g, ""),
);
});
cy.deleteEntitybyName("Query1");
cy.deleteEntitybyName("Query2");
cy.actionContextMenuByEntityName("Query1");
cy.actionContextMenuByEntityName("Query2");
});
it("10. Delete the datasource after NewPage deletion is success", () => {
@ -280,4 +293,167 @@ describe("Create a query with a mongo datasource, run, save and then delete the
expect(response.status).to.be.oneOf([200, 409]);
});
});
it("11. Bug 6375: Cyclic Dependency error occurs and the app crashes when the user generate table and chart from mongo query", function() {
cy.NavigateToHome();
cy.get(homePage.createNew)
.first()
.click({ force: true });
cy.wait("@createNewApplication").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.NavigateToDatasourceEditor();
cy.get(datasource.MongoDB).click({ force: true });
cy.fillMongoDatasourceForm();
cy.generateUUID().then((uid) => {
datasourceName = `Mongo Documents ${uid}`;
cy.renameDatasource(datasourceName);
cy.wrap(datasourceName).as("dSName");
});
cy.testSaveDatasource();
//Insert documents
cy.get("@dSName").then((dbName) => {
cy.NavigateToActiveDSQueryPane(dbName);
});
cy.setQueryTimeout(30000);
cy.validateNSelectDropdown(
"Commands",
"Find Document(s)",
"Insert Document(s)",
);
cy.typeValueNValidate("NonAsciiTest", "Collection");
let nonAsciiDoc = `[{"_id":1, "Från" :"Raksha" , "Frõ" :"Active", "Leverantör":"De Bolster", "Frö":"Basilika - Thai 'Siam Queen'"},
{"_id":2, "Från" :"Vivek" , "Frõ" :"Active", "Leverantör":"De Bolster", "Frö":"Sallad - Oakleaf 'Salad Bowl'"},
{"_id":3, "Från" :"Prapulla" , "Frõ" :"Active", "Leverantör":"De Bolster", "Frö":"Sallad - Oakleaf 'Red Salad Bowl'"}]`;
cy.typeValueNValidate(nonAsciiDoc, "Documents");
cy.EvaluateCurrentValue(nonAsciiDoc);
cy.getEntityName().then((entity) => {
cy.wrap(entity).as("entity");
});
cy.runQuery();
//Find the Inserted Document
cy.validateNSelectDropdown(
"Commands",
"Insert Document(s)",
"Find Document(s)",
);
cy.runQuery();
cy.xpath(queryLocators.countText).should("have.text", "3 Records");
cy.get("@dSName").then((dbName) => {
cy.actionContextMenuByEntityName(dbName, "Refresh");
});
cy.xpath("//div[text()='NonAsciiTest']").should("exist");
//Verifying Suggested Widgets functionality
cy.get(queryLocators.suggestedTableWidget)
.click()
.wait(1000);
cy.wait("@updateLayout").then(({ response }) => {
cy.log("1st Response is :" + JSON.stringify(response.body));
//expect(response.body.data.dsl.children[0].type).to.eq("TABLE_WIDGET");
});
cy.get("@entity").then((entityN) => cy.selectEntityByName(entityN));
cy.get(queryLocators.suggestedWidgetChart)
.click()
.wait(1000);
cy.wait("@updateLayout").then(({ response }) => {
cy.log("2nd Response is :" + JSON.stringify(response.body));
//expect(response.body.data.dsl.children[1].type).to.eq("CHART_WIDGET");
});
cy.VerifyErrorMsgAbsence("Cyclic dependency found while evaluating");
cy.get("@entity").then((entityN) => cy.selectEntityByName(entityN));
//Update Document - Single Document
cy.validateNSelectDropdown(
"Commands",
"Find Document(s)",
"Update Document(s)",
);
cy.typeValueNValidate("{_id: {$eq:1}}", "Query");
cy.typeValueNValidate("{$set:{ 'Frõ': 'InActive'}}", "Update");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.body.nModified).to.eq(1);
});
// //Update Document - All Matching Documents
// cy.validateNSelectDropdown("Commands", "Find Document(s)", "Update Document(s)");
// cy.typeValueNValidate("{_id: {$gte:2}}", "Query");
// cy.typeValueNValidate("{$set:{ 'Frõ': 'InActive'}}", "Update");
// cy.validateNSelectDropdown("Limit", "Single Document", "All Matching Documents");
// cy.runQuery()
// cy.wait("@postExecute").then(({ response }) => {
// expect(response.body.data.body.nModified).to.eq(2);
// });
// //Verify Updation Successful:
// cy.validateNSelectDropdown("Commands", "Update Document(s)", "Find Document(s)");
// cy.runQuery()
// cy.wait("@postExecute").then(({ response }) => {
// expect(response.body.data.body[0].Frõ).to.eq('InActive');
// });
//Delete Documents using both Single & Multiple Documents
cy.validateNSelectDropdown(
"Commands",
"Update Document(s)",
"Delete Document(s)",
);
cy.typeValueNValidate("{_id : {$eq: 1 }}", "Query");
cy.validateNSelectDropdown("Limit", "Single Document");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.body.n).to.eq(1);
});
cy.typeValueNValidate("{_id : {$lte: 3 }}", "Query");
cy.validateNSelectDropdown(
"Limit",
"Single Document",
"All Matching Documents",
);
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.body.n).to.eq(2);
});
//Verify Deletion is Successful:
cy.validateNSelectDropdown(
"Commands",
"Delete Document(s)",
"Find Document(s)",
);
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.body.length).to.eq(0); //checking that body is empty array
});
//Delete Collection:
cy.validateNSelectDropdown("Commands", "Find Document(s)", "Raw");
//cy.get(queryLocators.templateMenu).click();
cy.typeValueNValidate('{"drop": "NonAsciiTest"}');
cy.runQuery();
cy.get("@dSName").then((dbName) => {
cy.actionContextMenuByEntityName(dbName, "Refresh");
});
cy.xpath("//div[text()='NonAsciiTest']").should("not.exist"); //validating drop is successful!
cy.deleteQueryUsingContext();
cy.actionContextMenuByEntityName("Table1");
cy.actionContextMenuByEntityName("Chart1");
cy.wait(3000); //waiting for deletion to complete! - else next case fails
});
});

View File

@ -9,6 +9,12 @@ describe("Validate CRUD queries for Postgres along with UI flow verifications",
cy.startRoutesForDatasource();
});
// afterEach(function() {
// if (this.currentTest.state === "failed") {
// Cypress.runner.stop();
// }
// });
it("1. Creates a new Postgres datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.PostgreSQL).click();
@ -233,7 +239,7 @@ describe("Validate CRUD queries for Postgres along with UI flow verifications",
"response.body.responseMeta.status",
409,
);
cy.deleteEntitybyName("Public.users_crud");
cy.actionContextMenuByEntityName("Public.users_crud");
});
it("10. Validate Drop of the Newly Created Table from Postgress datasource", () => {
@ -241,7 +247,10 @@ describe("Validate CRUD queries for Postgres along with UI flow verifications",
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.get(queryLocators.templateMenu).click({ force: true });
cy.typeValueNValidate(deleteTblQuery);
cy.runAndDeleteQuery();
cy.runQuery();
cy.actionContextMenuByEntityName(datasourceName, "Refresh");
cy.xpath("//div[text()='public.users_crud']").should("not.exist"); //validating drop is successful!
cy.deleteQueryUsingContext();
});
it("11. Bug 9425: The application is breaking when user run the query with wrong table name", function() {

View File

@ -2,6 +2,7 @@ const queryLocators = require("../../../../locators/QueryEditor.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
const generatePage = require("../../../../locators/GeneratePage.json");
const dsl = require("../../../../fixtures/snippingTableDsl.json");
const commonlocators = require("../../../../locators/commonlocators.json");
let datasourceName;
@ -10,9 +11,15 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
cy.startRoutesForDatasource();
});
// afterEach(function() {
// if (this.currentTest.state === "failed") {
// Cypress.runner.stop();
// }
// });
// afterEach(() => {
// if (queryName)
// cy.deleteEntitybyName(queryName);
// cy.actionContextMenuByEntityName(queryName);
// });
it("1. Creates a new Amazon S3 datasource", function() {
@ -54,7 +61,8 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
cy.runAndDeleteQuery();
});
it("3. Validate Create a new file in bucket command, Verify possible error msgs, run & delete the query", () => {
it("3. Validate Create/List Files/Read files in bucket command for new file, Verify possible error msgs, run & delete the query", () => {
//Create File
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.setQueryTimeout(30000);
cy.validateNSelectDropdown(
@ -128,22 +136,24 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(true);
});
cy.deleteQueryUsingContext(); //exeute actions & 200 response is verified in this method
});
it("4. Validate List Files/Read files in bucket command for new file, Verify possible error msgs, run & delete the query", () => {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.setQueryTimeout(30000);
cy.validateNSelectDropdown("Commands", "List files in bucket");
//List file
// cy.NavigateToActiveDSQueryPane(datasourceName);
// cy.setQueryTimeout(30000);
cy.validateNSelectDropdown(
"Commands",
"Create a new file",
"List files in bucket",
);
cy.onlyQueryRun();
cy.wait("@postExecute").should(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(false);
expect(response.body.data.body).to.contains(
"Mandatory parameter 'Bucket Name' is missing.",
);
});
cy.typeValueNValidate("assets-test.appsmith.com", "Bucket Name");
// cy.onlyQueryRun();
// cy.wait("@postExecute").should(({ response }) => {
// expect(response.body.data.isExecutionSuccess).to.eq(false);
// expect(response.body.data.body).to.contains(
// "Mandatory parameter 'Bucket Name' is missing.",
// );
// });
// cy.typeValueNValidate("assets-test.appsmith.com", "Bucket Name");
cy.typeValueNValidate("Auto", "Prefix");
cy.onlyQueryRun();
@ -196,13 +206,13 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
// });
// cy.typeValueNValidate("AutoTest", "Bucket Name");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(false);
expect(response.body.data.body).to.contains(
"Required parameter 'File Path' is missing.",
);
});
// cy.onlyQueryRun();
// cy.wait("@postExecute").then(({ response }) => {
// expect(response.body.data.isExecutionSuccess).to.eq(false);
// expect(response.body.data.body).to.contains(
// "Required parameter 'File Path' is missing.",
// );
// });
cy.typeValueNValidate("Auto", "File Path");
// cy.onlyQueryRun();
@ -258,83 +268,7 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
cy.deleteQueryUsingContext(); //exeute actions & 200 response is verified in this method
});
it("5. Validate Read file command, Verify possible error msgs, run & delete the query", () => {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.setQueryTimeout(30000);
cy.validateNSelectDropdown("Commands", "List files in bucket", "Read file");
cy.onlyQueryRun();
cy.wait("@postExecute").should(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(false);
expect(response.body.data.body).to.contains(
"Mandatory parameter 'Bucket Name' is missing.",
);
});
cy.typeValueNValidate("AutoTest", "Bucket Name");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(false);
expect(response.body.data.body).to.contains(
"Required parameter 'File Path' is missing.",
);
});
cy.typeValueNValidate("Auto", "File Path");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(false);
expect(response.body.data.body.split("(")[0].trim()).to.be.oneOf([
"The specified bucket does not exist",
"The specified bucket is not valid.",
]);
});
cy.typeValueNValidate("assets-test.appsmith.com", "Bucket Name");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(false);
expect(response.body.data.body).to.contain(
"The specified key does not exist.",
);
});
cy.typeValueNValidate("Autofile", "File Path");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(false);
expect(response.body.data.body).to.contain(
"The specified key does not exist.",
);
});
cy.typeValueNValidate("AutoFile", "File Path");
//Commenting below since below dropdown is removed from Read
//cy.validateNSelectDropdown("File Data Type", "Base64", "Text / Binary");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(true);
expect(response.body.data.body.fileData).to.not.eq(
"Hi, this is Automation script adding File!",
);
});
cy.validateNSelectDropdown("Base64 Encode File - Yes/No", "Yes", "No");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(true);
expect(response.body.data.body.fileData).to.eq(
"Hi, this is Automation script adding File!",
);
});
cy.deleteQueryUsingContext(); //exeute actions & 200 response is verified in this method
});
it("6. Validate Delete file command for new file, Verify possible error msgs, run & delete the query", () => {
it("4. Validate Delete file command for new file & Validating List Files in bucket command after new file is deleted, Verify possible error msgs, run & delete the query", () => {
cy.NavigateToActiveDSQueryPane(datasourceName);
//cy.renameWithInPane(queryName);
cy.setQueryTimeout(30000);
@ -376,14 +310,18 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
expect(response.body.data.isExecutionSuccess).to.eq(true);
expect(response.body.data.body.status).to.eq("File deleted successfully");
});
//cy.selectEntityByName("Query1");
cy.deleteQueryUsingContext(); //exeute actions & 200 response is verified in this method
});
it("7. Validate List Files in bucket command after new file is deleted, Verify possible error msgs, run & delete the query", () => {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.validateNSelectDropdown("Commands", "List files in bucket");
cy.typeValueNValidate("assets-test.appsmith.com", "Bucket Name");
//cy.selectEntityByName("Query1");
//cy.deleteQueryUsingContext(); //exeute actions & 200 response is verified in this method
//Validating List Files in bucket command after new file is deleted
//cy.NavigateToActiveDSQueryPane(datasourceName);
cy.validateNSelectDropdown(
"Commands",
"Delete file",
"List files in bucket",
);
//cy.typeValueNValidate("assets-test.appsmith.com", "Bucket Name");
cy.typeValueNValidate("Auto", "Prefix");
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
@ -393,7 +331,8 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
cy.deleteQueryUsingContext(); //exeute actions & 200 response is verified in this method
});
it("8. Validate Create a new file in bucket for UI Operations, run & delete the query", () => {
it("5. Create new file in bucket for UI Operations & Verify Search, Delete operations from NewPage UI created in S3 ds & Bug 8686, 8684", function() {
//Creating new file in bucket
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.validateNSelectDropdown(
"Commands",
@ -415,9 +354,7 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
expect(response.body.data.isExecutionSuccess).to.eq(true);
});
cy.deleteQueryUsingContext(); //exeute actions & 200 response is verified in this method
});
it("9. Verify Search, Delete operations from NewPage UI created in S3 ds & Bug 8686, 8684", function() {
// cy.wrap(Cypress.automation('remote:debugger:protocol', {
// command: 'Browser.grantPermissions',
// params: {
@ -428,8 +365,9 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
// },
// }))
//Generate page & other UI ops
cy.NavigateToDSGeneratePage(datasourceName);
cy.wait(3000);
//Verifying List of Files from UI
cy.get(generatePage.selectTableDropdown).click();
cy.get(generatePage.dropdownOption)
@ -491,7 +429,7 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
); //verify Deletion of file is success from UI also
});
it("10. Validate Deletion of the Newly Created Page", () => {
it("6. Validate Deletion of the Newly Created Page", () => {
cy.NavigateToQueryEditor();
cy.NavigateToActiveTab();
cy.contains(".t--datasource-name", datasourceName).click();
@ -502,10 +440,157 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
"response.body.responseMeta.status",
409,
);
cy.deleteEntitybyName("Assets-test.appsmith.com");
cy.actionContextMenuByEntityName("Assets-test.appsmith.com");
});
it("11. Verify 'Add to widget [Widget Suggestion]' functionality - S3", () => {
it("7. Bug 9069, 9201, 6975, 9922: Upload/Update query is failing in S3 crud pages", function() {
cy.NavigateToDSGeneratePage(datasourceName);
cy.wait(3000);
//Verifying List of Files from UI
cy.get(generatePage.selectTableDropdown).click();
cy.get(generatePage.dropdownOption)
.contains("assets-test.appsmith.com")
.scrollIntoView()
.should("be.visible")
.click();
cy.get(generatePage.generatePageFormSubmitBtn).click();
cy.wait("@replaceLayoutWithCRUDPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.wait("@getActions");
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.VerifyErrorMsgAbsence("Cyclic dependency found while evaluating"); //Verifies 8686
cy.ClickGotIt();
//Upload: 1
let fixturePath = "GlobeChristmas.jpeg";
cy.wait(3000);
cy.clickButton("Select Files"); //1 files selected
cy.get(generatePage.uploadFilesS3).attachFile(fixturePath);
cy.wait(2000);
cy.get(generatePage.uploadBtn).click();
cy.wait(1000);
cy.clickButton("Upload");
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.data.isExecutionSuccess",
true,
);
cy.get(commonlocators.toastAction)
.should("have.length", 1)
.should("contain.text", "File Uploaded"); //Verifies bug # 6975
//Verifying Searching File from UI
cy.xpath(queryLocators.searchFilefield)
.type("GlobeChri")
.wait(4000); //for search to finish
expect(
cy.xpath(
"//div[@data-cy='overlay-comments-wrapper']//span[text()='" +
fixturePath +
"']",
),
).to.exist;
cy.xpath(
"//div[@data-cy='overlay-comments-wrapper']//span[text()='" +
fixturePath +
"']",
).scrollIntoView();
//Verifying DeleteFile icon from UI
cy.xpath(
"//button/span[@icon='trash']/ancestor::div[contains(@class,'t--widget-iconbuttonwidget')]/preceding-sibling::div[contains(@class, 't--widget-textwidget')]//span[text()='" +
fixturePath +
"']/ancestor::div[contains(@class, 't--widget-textwidget')]/following-sibling::div[contains(@class,'t--widget-iconbuttonwidget')]",
)
.should("be.visible")
.last()
.click(); //Verifies 8684
cy.VerifyErrorMsgAbsence("Cyclic dependency found while evaluating"); //Verifies 8686
expect(
cy.xpath("//span[text()='Are you sure you want to delete the file?']"),
).to.exist; //verify Delete File dialog appears
cy.clickButton("Confirm").wait(1000); //wait for Delete operation to be successfull, //Verifies 8684
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.isExecutionSuccess).to.eq(true);
});
cy.get("span:contains('" + fixturePath + "')", { timeout: 10000 }).should(
"not.exist",
); //verify Deletion of file is success from UI also
//Commenting below since bug # 9922 is open
// //Upload: 2 - Bug verification 9201
// fixturePath = "Vase.jpeg";
// cy.wait(3000);
// cy.clickButton("Select Files"); //1 files selected
// cy.get(generatePage.uploadFilesS3).attachFile(fixturePath);
// cy.wait(2000);
// cy.get(generatePage.uploadBtn).click();
// cy.wait(1000);
// cy.clickButton("Upload");
// cy.wait("@postExecute").should(
// "have.nested.property",
// "response.body.data.isExecutionSuccess",
// true,
// );
// cy.get(commonlocators.toastAction)
// .should("have.length", 1)
// .should("contain.text", "File Uploaded"); //Verifies bug # 6975
// //Verifying Searching File from UI
// cy.xpath(queryLocators.searchFilefield)
// .clear()
// .type("VVase")
// .wait(3000); //for search to finish
// expect(
// cy.xpath(
// "//div[@data-cy='overlay-comments-wrapper']//span[text()='" + fixturePath + "']",
// ),
// ).to.exist; //Verifies bug # 9922
// cy.xpath(
// "//div[@data-cy='overlay-comments-wrapper']//span[text()='" + fixturePath + "']",
// ).scrollIntoView();
// //Verifying DeleteFile icon from UI
// cy.xpath(
// "//button/span[@icon='trash']/ancestor::div[contains(@class,'t--widget-iconbuttonwidget')]/preceding-sibling::div[contains(@class, 't--widget-textwidget')]//span[text()='" +
// fixturePath +
// "']/ancestor::div[contains(@class, 't--widget-textwidget')]/following-sibling::div[contains(@class,'t--widget-iconbuttonwidget')]",
// )
// .should("be.visible")
// .last()
// .click(); //Verifies 8684
// cy.VerifyErrorMsgAbsence("Cyclic dependency found while evaluating"); //Verifies 8686
// expect(
// cy.xpath("//span[text()='Are you sure you want to delete the file?']"),
// ).to.exist; //verify Delete File dialog appears
// cy.clickButton("Confirm").wait(1000); //wait for Delete operation to be successfull, //Verifies 8684
// cy.wait("@postExecute").then(({ response }) => {
// expect(response.body.data.isExecutionSuccess).to.eq(true);
// });
// cy.get("span:contains('" + fixturePath + "')", { timeout: 10000 }).should(
// "not.exist",
// ); //verify Deletion of file is success from UI also
//Deleting the page:
cy.actionContextMenuByEntityName("Assets-test.appsmith.com");
});
it("8. Verify 'Add to widget [Widget Suggestion]' functionality - S3", () => {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.validateNSelectDropdown("Commands", "List files in bucket");
cy.typeValueNValidate("assets-test.appsmith.com", "Bucket Name");
@ -516,29 +601,25 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
cy.xpath(queryLocators.suggestedWidgetDropdown)
.click()
.wait(1000);
cy.wait("@updateLayout").then(({ response }) => {
expect(response.body.data.dsl.children[0].type).to.eq("DROP_DOWN_WIDGET");
});
cy.get(commonlocators.dropdownWidget).validateWidgetExists();
cy.get("@entity").then((entityN) => cy.selectEntityByName(entityN));
cy.get(queryLocators.suggestedTableWidget)
.click()
.wait(1000);
cy.wait("@updateLayout").then(({ response }) => {
expect(response.body.data.dsl.children[1].type).to.eq("TABLE_WIDGET");
});
cy.get(commonlocators.TableRow).validateWidgetExists();
cy.get("@entity").then((entityN) => cy.selectEntityByName(entityN));
cy.xpath(queryLocators.suggestedWidgetText)
.click()
.wait(1000);
cy.wait("@updateLayout").then(({ response }) => {
expect(response.body.data.dsl.children[2].type).to.eq("TEXT_WIDGET");
});
cy.get(commonlocators.textWidget).validateWidgetExists();
cy.get("@entity").then((entityN) => cy.selectEntityByName(entityN));
cy.deleteQueryUsingContext(); //exeute actions & 200 response is verified in this method
});
it("12. Verify 'Connect Widget [snipping]' functionality - S3 ", () => {
it("9. Verify 'Connect Widget [snipping]' functionality - S3 ", () => {
cy.addDsl(dsl);
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.getEntityName().then((entity) => {
@ -552,19 +633,15 @@ describe("Validate CRUD queries for Amazon S3 along with UI flow verifications",
.click()
.wait(1500); //wait for table to load!
cy.wait("@updateLayout").then(({ response }) => {
expect(response.body.data.dsl.children[0].widgetName).to.eq("Table1");
// expect(response.body.data.messages[0]).to.contain(
// "will be executed automatically on page load",
// );
});
cy.get(commonlocators.TableRow).validateWidgetExists();
cy.get("@entity").then((entityN) => cy.selectEntityByName(entityN));
cy.deleteQueryUsingContext(); //exeute actions & 200 response is verified in this method
cy.deleteEntitybyName("Table1");
cy.actionContextMenuByEntityName("Table1");
cy.wait(3000); //waiting for deletion to complete! - else next case fails
});
it("13. Deletes the datasource", () => {
it("10. Deletes the datasource", () => {
cy.NavigateToQueryEditor();
cy.NavigateToActiveTab();
cy.contains(".t--datasource-name", datasourceName).click({ force: true });

View File

@ -23,5 +23,7 @@
"currentNameField": "//div[@type='FORM_WIDGET']//span[text()='name:']//ancestor::div[contains(@class,'t--widget-textwidget')]/preceding-sibling::div[contains(@class, 't--widget-inputwidget')][1]//input",
"deleteofSelectedRow": "//div[@class='tr selected-row']//span[text()='Delete']",
"confirmBtn": "span:contains('Confirm')",
"deleteMenuItem": "//div[text()='Delete']/parent::a[contains(@class, 'single-select')]"
"deleteMenuItem": "//div[text()='Delete']/parent::a[contains(@class, 'single-select')]",
"uploadFilesS3":"div.uppy-Dashboard-AddFiles input",
"uploadBtn": "button.uppy-StatusBar-actionBtn--upload"
}

View File

@ -25,10 +25,11 @@
"countText": "//span[contains(@class, 'cs-text')][text()='Result:']/span",
"searchFilefield": "//input[@placeholder='Search File Prefix']",
"copyURLicon": "//button/span[@icon='link']",
"deleteFileicon": "//button/span[@icon='trash']",
"deleteFileicon": "//button/span[@icon='trash']/ancestor::div[contains(@class,'t--widget-iconbuttonwidget')]",
"snipeableTable":"//input[@type='search']",
"suggestedWidgetDropdown": "//div[contains(@class, 't--suggested-widget-DROP_DOWN_WIDGET')]",
"suggestedWidgetText": "//div[contains(@class, 't--suggested-widget-TEXT_WIDGET')]",
"suggestedWidgetChart": ".t--suggested-widget-CHART_WIDGET",
"queryTimeout": "//input[@name='actionConfiguration.timeoutInMillisecond']",
"mongoFormFind": "//div[text()='listingsAndReviews']/ancestor::div/following-sibling::div[contains(@class, 'entity-context-menu')]"
"listingAndReviewContext": "//div[text()='listingAndReviews']/ancestor::div/following-sibling::div[contains(@class, 'entity-context-menu')]"
}

View File

@ -79,7 +79,7 @@
"toastmsg": ".Toastify__toast-body span",
"copyWidget": ".t--copy-widget",
"deleteWidget": ".t--delete-widget",
"dropTarget":".t--drop-target",
"dropTarget": ".t--drop-target",
"toastAction": ".t--toast-action",
"toastBody": ".Toastify__toast-body",
"videoInner": ".t--draggable-videowidget span.t--widget-name",
@ -129,8 +129,8 @@
"inputCountryCodeChangeType": ".t--input-country-code-change",
"viewerPage": ".t--app-viewer-page",
"dropDownOptSelected": "//span[@type='p1']",
"generalChevran":".t--property-pane-section-collapse-general [icon=chevron-right]",
"generalSection":".t--property-pane-section-general",
"generalChevran": ".t--property-pane-section-collapse-general [icon=chevron-right]",
"generalSection": ".t--property-pane-section-general",
"selectedIcon": ".t--property-control-icon .icon-select-container .bp3-button .bp3-button-text",
"isSortable": ".t--property-control-sortable input[type='checkbox']",
"labelSection": ".cm-keyword",
@ -144,5 +144,7 @@
"debugErrorMsg": ".t--debugger-message",
"debuggerLabel": "span.debugger-label",
"selectInner": ".t--draggable-dropdownwidget span.t--widget-name, Select1",
"toastifyError": "//div[@class='Toastify']//span]"
}
"toastifyError": "//div[@class='Toastify']//span]",
"dropdownWidget": ".t--draggable-dropdownwidget",
"textWidget": ".t--draggable-textwidget"
}

View File

@ -0,0 +1,17 @@
{
"indexes": [
{
"v": {
"$numberInt": "2"
},
"key": {
"_id": {
"$numberInt": "1"
}
},
"name": "_id_"
}
],
"uuid": "8474766f7d1d4e548747ccf36a197261",
"collectionName": "listingAndReviews"
}

View File

@ -1,6 +1,6 @@
#! /bin/sh
# This script is responsible for setting up the local Nginx server for running E2E Cypress tests
# This script is responsible for setting up the local Nginx server for running E2E Cypress tests
# on our CI/CD system. Currently the script is geared towards Github Actions
# Serve the react bundle on a specific port. Nginx will proxy to this port
@ -46,6 +46,16 @@ sudo docker exec -i mariadb mysql -uroot -proot123 mysql < `pwd`/cypress/init-m
echo "Sleeping for 30 seconds to let the servers start"
sleep 30
sudo docker run -d -p 127.0.0.1:28017:27017 --name Cypress-mongodb -e MONGO_INITDB_DATABASE=appsmith -v `pwd`/cypress/mongodb:/data/db mongo
echo "Sleeping for 30 seconds to let the servers start"
sleep 30
sudo docker cp `pwd`/cypress/sample_airbnb Cypress-mongodb:/sample_airbnb
sudo docker exec -i Cypress-mongodb /usr/bin/mongorestore --db sample_airbnb /sample_airbnb/sample_airbnb
sleep 10
echo "Checking if the containers have started"
sudo docker ps -a
for fcid in $(sudo docker ps -a | awk '/Exited/ { print $1 }'); do
@ -80,4 +90,4 @@ fi
# DEBUG=cypress:* $(npm bin)/cypress version
# sed -i -e "s|api_url:.*$|api_url: $CYPRESS_URL|g" /github/home/.cache/Cypress/4.1.0/Cypress/resources/app/packages/server/config/app.yml
# cat /github/home/.cache/Cypress/4.1.0/Cypress/resources/app/packages/server/config/app.yml
# cat /github/home/.cache/Cypress/4.1.0/Cypress/resources/app/packages/server/config/app.yml

View File

@ -2162,7 +2162,7 @@ Cypress.Commands.add("NavigateToDatasourceEditor", () => {
Cypress.Commands.add("NavigateToQueryEditor", () => {
cy.get(explorer.addDBQueryEntity)
.first()
.last()
.click({ force: true });
});
@ -2227,11 +2227,11 @@ Cypress.Commands.add("saveDatasource", () => {
});
Cypress.Commands.add("testSaveDatasource", (expectedRes = true) => {
cy.saveDatasource();
cy.get(datasourceEditor.datasourceCard)
.last()
.click();
cy.testDatasource(expectedRes);
cy.saveDatasource();
// cy.get(datasourceEditor.datasourceCard)
// .last()
// .click();
});
Cypress.Commands.add("fillGoogleSheetsDatasourceForm", () => {
@ -2245,30 +2245,30 @@ Cypress.Commands.add(
? datasourceFormData["mongo-host"] + " "
: datasourceFormData["mongo-host"];
const databaseName = shouldAddTrailingSpaces
? datasourceFormData["mongo-defaultDatabaseName"] + " "
: datasourceFormData["mongo-defaultDatabaseName"];
? datasourceFormData["mongo-databaseName"] + " "
: datasourceFormData["mongo-databaseName"];
cy.get(datasourceEditor["host"]).type(hostAddress);
//cy.get(datasourceEditor.port).type(datasourceFormData["mongo-port"]);
cy.get(datasourceEditor.port).type(datasourceFormData["mongo-port"]);
//cy.get(datasourceEditor["port"]).type(datasourceFormData["mongo-port"]);
cy.get(datasourceEditor["selConnectionType"]).click();
cy.contains(datasourceFormData["connection-type"]).click();
//cy.get(datasourceEditor["selConnectionType"]).click();
//cy.contains(datasourceFormData["connection-type"]).click();
cy.get(datasourceEditor["defaultDatabaseName"]).type(databaseName);
cy.get(datasourceEditor.sectionAuthentication).click();
cy.get(datasourceEditor["databaseName"])
.clear()
.type(datasourceFormData["mongo-databaseName"]);
cy.get(datasourceEditor["username"]).type(
datasourceFormData["mongo-username"],
);
cy.get(datasourceEditor["password"]).type(
datasourceFormData["mongo-password"],
);
cy.get(datasourceEditor["authenticationAuthtype"]).click();
cy.contains(datasourceFormData["mongo-authenticationAuthtype"]).click({
force: true,
});
// cy.get(datasourceEditor["username"]).type(
// datasourceFormData["mongo-username"],
// );
// cy.get(datasourceEditor["password"]).type(
// datasourceFormData["mongo-password"],
// );
// cy.get(datasourceEditor["authenticationAuthtype"]).click();
// cy.contains(datasourceFormData["mongo-authenticationAuthtype"]).click({
// force: true,
// });
},
);
@ -2581,9 +2581,9 @@ Cypress.Commands.add("executeDbQuery", (queryName) => {
Cypress.Commands.add("CreateMockQuery", (queryName) => {
// cy.get(queryEditor.addNewQueryBtn).click({ force: true });
cy.get(queryEditor.createQuery)
.first()
.click({ force: true });
// cy.get(queryEditor.createQuery)
// .first()
// .click({ force: true });
cy.get(queryEditor.queryNameField).type(queryName + "{enter}", {
force: true,
});
@ -2980,6 +2980,7 @@ Cypress.Commands.add("tablefirstdataRow", () => {
let tabVal = cy
.xpath(
"//div[@class='tableWrap']//div[@class='table']//div[contains(@class, 'tbody')]/div[@class='tr']/div[@class ='td']",
{ timeout: 10000 },
)
.first()
.invoke("text");
@ -3094,9 +3095,17 @@ Cypress.Commands.add("callApi", (apiname) => {
});
Cypress.Commands.add("assertPageSave", () => {
cy.get(commonlocators.saveStatusSuccess, { timeout: 10000 }).should("exist");
cy.get(commonlocators.saveStatusSuccess, { timeout: 20000 }).should("exist");
});
Cypress.Commands.add(
"validateWidgetExists",
{ prevSubject: true },
(selector) => {
cy.get(selector, { timeout: 5000 }).should("exist");
},
);
Cypress.Commands.add("ValidateQueryParams", (param) => {
cy.xpath(apiwidget.paramsTab)
.should("be.visible")
@ -3409,27 +3418,37 @@ Cypress.Commands.add("typeValueNValidate", (valueToType, fieldName = "") => {
});
Cypress.Commands.add("clickButton", (btnVisibleText) => {
cy.xpath("//span[text()='" + btnVisibleText + "']/parent::button").click({
force: true,
});
});
Cypress.Commands.add("deleteEntitybyName", (entityNameinLeftSidebar) => {
cy.xpath(
"//div[text()='" +
entityNameinLeftSidebar +
"']/ancestor::div[contains(@class, 't--entity')]//span[contains(@class, 'entity-context-menu')]//div",
)
.first()
cy.xpath("//span[text()='" + btnVisibleText + "']/parent::button")
.scrollIntoView()
.click({ force: true });
cy.xpath(generatePage.deleteMenuItem).click();
cy.xpath("//div[text()='" + entityNameinLeftSidebar + "']").should(
"not.exist",
);
});
Cypress.Commands.add(
"actionContextMenuByEntityName",
(entityNameinLeftSidebar, action = "Delete") => {
cy.xpath(
"//div[text()='" +
entityNameinLeftSidebar +
"']/ancestor::div[contains(@class, 't--entity')]//span[contains(@class, 'entity-context-menu')]//div",
)
.first()
.click({ force: true });
cy.xpath(
"//div[text()='" +
action +
"']/parent::a[contains(@class, 'single-select')]",
)
.click({ force: true })
.wait(500);
if (action == "Delete")
cy.xpath("//div[text()='" + entityNameinLeftSidebar + "']").should(
"not.exist",
);
},
);
Cypress.Commands.add("selectEntityByName", (entityNameinLeftSidebar) => {
cy.xpath(
"//div[contains(@class, 't--entity-name')][text()='" +
@ -3455,7 +3474,7 @@ Cypress.Commands.add(
} else {
cy.xpath("//div[@class='CodeMirror-code']").click();
}
cy.wait(2000);
cy.wait(3000); //Increasing wait time to evaluate non-undefined values
const val = cy
.get(commonlocators.evaluatedCurrentValue)
.first()