test: Intercept/Real DB for Mongo, MySQL & QueryPane with CRUD flow for Postgres (#9081)

* Intercept/Real DB-Mongo,Postgres-Querypane

* Intercept-Mongo, SQL, Query-Postgres

* Added back welcomePage reference
This commit is contained in:
Aishwarya-U-R 2021-11-18 19:57:51 +05:30 committed by GitHub
parent 6e277d333e
commit c52e1d9072
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 771 additions and 300 deletions

View File

@ -0,0 +1,4 @@
{
"MySQL":1,
"Mongo":1
}

View File

@ -36,12 +36,8 @@ describe("Addwidget from Query and bind with other widgets", function() {
cy.intercept("/api/v1/actions/execute", {
fixture: "addWidgetTable-mock",
});
cy.get(queryEditor.runQuery).click();
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.runQuery();
cy.get(queryEditor.suggestedTableWidget).click();
cy.createJSObject("return Query1.data;");

View File

@ -12,13 +12,18 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
});
beforeEach(function() {
cy.startInterceptRoutesForMongo();
if (Cypress.env("Mongo") == 0) {
cy.log("Mongo DB is not found. Using intercept");
cy.startInterceptRoutesForMongo();
} else cy.log("Mongo DB is found, hence using actual DB");
});
it("Add new Page and generate CRUD template using existing supported datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.MongoDB).click({ force: true });
cy.fillMongoDatasourceFormWithURI();
if (Cypress.env("Mongo") == 0) cy.fillMongoDatasourceFormWithURI();
else cy.fillMongoDatasourceForm();
cy.generateUUID().then((uid) => {
datasourceName = `Mongo MOCKDS ${uid}`;
@ -59,7 +64,7 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
.click();
});
cy.wait("@get_selectTableDropdownStub").should(
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
@ -71,17 +76,17 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
.click();
cy.get(generatePage.generatePageFormSubmitBtn).click();
cy.wait("@put_replaceLayoutCRUDStub").should(
cy.wait("@replaceLayoutWithCRUDPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.wait("@get_ActionsStub").should(
cy.wait("@getActions").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.wait("@post_ExecuteStub").should(
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
@ -109,7 +114,9 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
cy.contains("Connect New Datasource").click();
cy.get(datasource.MongoDB).click();
cy.fillMongoDatasourceFormWithURI();
if (Cypress.env("Mongo") == 0) cy.fillMongoDatasourceFormWithURI();
else cy.fillMongoDatasourceForm();
cy.generateUUID().then((uid) => {
datasourceName = `Mongo MOCKDS ${uid}`;
@ -125,7 +132,7 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
cy.get(".t--save-datasource").click();
//Generate Stud for tables dropdown values also
cy.wait("@get_selectTableDropdownStub").should(
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
@ -137,17 +144,17 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
.click();
cy.get(generatePage.generatePageFormSubmitBtn).click();
cy.wait("@put_replaceLayoutCRUDStub").should(
cy.wait("@replaceLayoutWithCRUDPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.wait("@get_ActionsStub").should(
cy.wait("@getActions").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.wait("@post_ExecuteStub").should(
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
@ -158,9 +165,7 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
it("Generate CRUD page from datasource ACTIVE section", function() {
cy.NavigateToQueryEditor();
cy.get(pages.integrationActiveTab)
.should("be.visible")
.click({ force: true });
cy.NavigateToActiveTab();
cy.wait(1000);
cy.get(datasource.datasourceCard)
@ -173,7 +178,7 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
});
//Generate Stub for tables dropdown values also
cy.wait("@get_selectTableDropdownStub").should(
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
@ -185,17 +190,17 @@ describe("Generate New CRUD Page Inside from Mongo as Data Source", function() {
.click();
cy.get(generatePage.generatePageFormSubmitBtn).click();
cy.wait("@post_replaceLayoutCRUDStub").should(
cy.wait("@replaceLayoutWithCRUDPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.wait("@get_ActionsStub").should(
cy.wait("@getActions").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.wait("@post_ExecuteStub").should(
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,

View File

@ -179,9 +179,8 @@
// it.skip("Generate CRUD page from datasource ACTIVE section", function() {
// cy.NavigateToQueryEditor();
// cy.get(pages.integrationActiveTab)
// .should("be.visible")
// .click({ force: true });
// cy.NavigateToActiveTab();
// cy.wait(1000);
// cy.get(datasource.datasourceCard)

View File

@ -12,12 +12,14 @@ describe("Generate New CRUD Page Inside from My SQL as Data Source", function()
});
beforeEach(function() {
cy.startInterceptRoutesForMySQL();
if (Cypress.env("MySQL") == 0) {
cy.log("MySQL DB is not found. Using intercept");
cy.startInterceptRoutesForMySQL();
} else cy.log("MySQL DB is found, hence using actual DB");
});
it("Add new Page and generate CRUD template using existing supported datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.MySQL).click();
cy.fillMySQLDatasourceForm();
@ -72,7 +74,7 @@ describe("Generate New CRUD Page Inside from My SQL as Data Source", function()
.click();
});
cy.wait("@selectTableDropdownStub").should(
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
@ -84,17 +86,17 @@ describe("Generate New CRUD Page Inside from My SQL as Data Source", function()
.click();
cy.get(generatePage.generatePageFormSubmitBtn).click();
cy.wait("@put_replaceLayoutCRUDStub").should(
cy.wait("@replaceLayoutWithCRUDPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.wait("@getActionsStub").should(
cy.wait("@getActions").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.wait("@postExecuteStub").should(
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
@ -149,8 +151,8 @@ describe("Generate New CRUD Page Inside from My SQL as Data Source", function()
// 200,
// );
//Generate Stud for tables dropdown values also
cy.wait("@selectTableDropdownStub").should(
//Generate Stub for tables dropdown values also
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
@ -162,17 +164,17 @@ describe("Generate New CRUD Page Inside from My SQL as Data Source", function()
.click();
cy.get(generatePage.generatePageFormSubmitBtn).click();
cy.wait("@put_replaceLayoutCRUDStub").should(
cy.wait("@replaceLayoutWithCRUDPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.wait("@getActionsStub").should(
cy.wait("@getActions").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.wait("@postExecuteStub").should(
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
@ -183,9 +185,7 @@ describe("Generate New CRUD Page Inside from My SQL as Data Source", function()
it("Generate CRUD page from datasource ACTIVE section", function() {
cy.NavigateToQueryEditor();
cy.get(pages.integrationActiveTab)
.should("be.visible")
.click({ force: true });
cy.NavigateToActiveTab();
cy.wait(1000);
cy.get(datasource.datasourceCard)
@ -198,7 +198,7 @@ describe("Generate New CRUD Page Inside from My SQL as Data Source", function()
});
//Generate Stub for tables dropdown values also
cy.wait("@selectTableDropdownStub").should(
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
@ -210,17 +210,17 @@ describe("Generate New CRUD Page Inside from My SQL as Data Source", function()
.click();
cy.get(generatePage.generatePageFormSubmitBtn).click();
cy.wait("@post_replaceLayoutCRUDStub").should(
cy.wait("@replaceLayoutWithCRUDPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.wait("@getActionsStub").should(
cy.wait("@getActions").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.wait("@postExecuteStub").should(
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,

View File

@ -20,7 +20,7 @@ describe("Generate New CRUD Page Inside from entity explorer", function() {
cy.fillPostgresDatasourceForm();
cy.generateUUID().then((UUID) => {
datasourceName = `PostgresSQL CRUD Demo ${UUID}`;
datasourceName = `PostgresSQL NewPage ${UUID}`;
cy.renameDatasource(datasourceName);
cy.wrap(datasourceName).as("dSName");
});
@ -94,7 +94,7 @@ describe("Generate New CRUD Page Inside from entity explorer", function() {
cy.fillPostgresDatasourceForm();
cy.generateUUID().then((UUID) => {
datasourceName = `PostgresSQL CRUD Demo ${UUID}`;
datasourceName = `PostgresSQL NewPage ${UUID}`;
cy.renameDatasource(datasourceName);
});
@ -136,9 +136,7 @@ describe("Generate New CRUD Page Inside from entity explorer", function() {
it("Generate CRUD page from datasource ACTIVE section", function() {
cy.NavigateToQueryEditor();
cy.get(pages.integrationActiveTab)
.should("be.visible")
.click({ force: true });
cy.NavigateToActiveTab();
cy.wait(1000);
cy.get(datasource.datasourceCard)
@ -164,7 +162,7 @@ describe("Generate New CRUD Page Inside from entity explorer", function() {
// skip optional search column selection.
cy.get(generatePage.generatePageFormSubmitBtn).click();
cy.wait("@generateCRUDPage").should(
cy.wait("@replaceLayoutWithCRUDPage").should(
"have.nested.property",
"response.body.responseMeta.status",
201,

View File

@ -156,20 +156,22 @@ describe("Generate New CRUD Page Inside from entity explorer", function() {
});
it("Generate CRUD page from datasource ACTIVE section", function() {
cy.NavigateToQueryEditor();
cy.get(pages.integrationActiveTab)
.should("be.visible")
.click({ force: true });
cy.wait(1000);
// cy.NavigateToQueryEditor();
// cy.get(pages.integrationActiveTab)
// .should("be.visible")
// .click({ force: true });
// cy.wait(1000);
cy.get(datasourceEditor.datasourceCard)
.contains(datasourceName)
.scrollIntoView()
.should("be.visible")
.closest(datasourceEditor.datasourceCard)
.within(() => {
cy.get(datasourceEditor.datasourceCardGeneratePageBtn).click();
});
// cy.get(datasourceEditor.datasourceCard)
// .contains(datasourceName)
// .scrollIntoView()
// .should("be.visible")
// .closest(datasourceEditor.datasourceCard)
// .within(() => {
// cy.get(datasourceEditor.datasourceCardGeneratePageBtn).click();
// });
cy.NavigateToDSGeneratePage(datasourceName);
// fetch bucket
cy.wait("@put_datasources").should(

View File

@ -68,12 +68,7 @@ describe("Switch datasource", function() {
.focus()
.type("select * from users limit 10");
cy.get(queryLocators.runQuery).click();
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.runQuery();
cy.get(".t--switch-datasource").click();
cy.contains(".t--datasource-option", mongoDatasourceName).click();
@ -84,12 +79,7 @@ describe("Switch datasource", function() {
editor[0].CodeMirror.setValue('{"find": "planets"}');
});
cy.get(queryLocators.runQuery).click();
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.runQuery();
});
it("Delete the query and datasources", function() {

View File

@ -114,12 +114,7 @@ describe("Entity explorer datasource structure", function() {
.focus()
.type(`CREATE TABLE ${tableName} ( ID int );`);
cy.get(queryEditor.runQuery).click();
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.runQuery();
cy.GlobalSearchEntity(datasourceName);
cy.get("@datasourceEntityCollapse")
@ -146,13 +141,7 @@ describe("Entity explorer datasource structure", function() {
.then((editor) => {
editor[0].CodeMirror.setValue(`DROP TABLE ${tableName}`);
cy.WaitAutoSave();
cy.get(queryEditor.runQuery).click();
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.runQuery();
cy.get(queryEditor.queryMoreAction).click();
cy.get(queryEditor.deleteUsingContext).click();
cy.wait("@deleteAction").should(

View File

@ -40,12 +40,8 @@ describe("Addwidget from Query and bind with other widgets", function() {
cy.intercept("/api/v1/actions/execute", {
fixture: "addWidgetTable-mock",
});
cy.get(queryEditor.runQuery).click();
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.runQuery();
cy.xpath(queryEditor.queryResponse)
.first()
.invoke("text")

View File

@ -25,12 +25,8 @@ describe("Add widget", function() {
.type("select * from configs");
// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.WaitAutoSave();
cy.get(queryEditor.runQuery).click();
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.runQuery();
cy.get(queryEditor.suggestedTableWidget).click();
cy.SearchEntityandOpen("Table1");
cy.isSelectRow(1);

View File

@ -30,7 +30,7 @@ describe("Confirm run action", function() {
.find(".bp3-switch")
.click();
cy.get(queryEditor.runQuery).click();
cy.onlyQueryRun();
cy.get(".bp3-dialog")
.find("button")
.contains("Confirm")

View File

@ -1,6 +1,7 @@
const queryLocators = require("../../../../locators/QueryEditor.json");
const plugins = require("../../../../fixtures/plugins.json");
const generatePage = require("../../../../locators/GeneratePage.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
const queryEditor = require("../../../../locators/QueryEditor.json");
let datasourceName;
@ -9,31 +10,26 @@ describe("Create a query with a mongo datasource, run, save and then delete the
cy.startRoutesForDatasource();
});
it("Create a query with a mongo datasource, run, save and then delete the query", function() {
it("1. Creates a new Mongo datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.MongoDB).click();
cy.getPluginFormsAndCreateDatasource();
cy.fillMongoDatasourceForm();
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.generateUUID().then((uid) => {
datasourceName = `Mongo CRUD ds ${uid}`;
cy.renameDatasource(datasourceName);
});
});
cy.get("@getPluginForm").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
it("2. Validate Raw query command, run, save and then delete the query", function() {
cy.NavigateToActiveDSQueryPane(datasourceName);
// cy.get("@getPluginForm").should(
// "have.nested.property",
// "response.body.responseMeta.status",
// 200,
// );
cy.xpath('//div[contains(text(),"Find Document(s)")]').click({
force: true,
@ -49,11 +45,200 @@ describe("Create a query with a mongo datasource, run, save and then delete the
cy.EvaluateCurrentValue(`{"find": "listingsAndReviews","limit": 10}`);
cy.runAndDeleteQuery();
});
cy.get("@createDatasource").then((httpResponse) => {
datasourceName = httpResponse.response.body.data.name;
it("3. Validate Find documents command & Run and then delete the query", function() {
//datasourceName = 'Mongo CRUD ds 09e54713'
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.deleteDatasource(datasourceName);
//cy.xpath(queryLocators.findDocs).should("exist"); //Verifying update is success or below line
cy.expect(queryLocators.findDocs).to.exist;
cy.xpath(queryLocators.collectionField).type("listingsAndReviews");
cy.EvaluateCurrentValue("listingsAndReviews");
cy.runQuery(); //exeute actions - 200 response is verified in this method
cy.xpath(queryLocators.countText).should("have.text", "10 Records");
cy.xpath(queryLocators.queryField).type(`{{}beds : {{}$lte: 2}}`);
cy.EvaluateCurrentValue("{beds : {$lte: 2}}");
cy.runQuery(); //exeute actions - 200 response is verified in this method
cy.xpath(queryLocators.countText).should("have.text", "10 Records");
cy.xpath(queryLocators.sortField).type("{{}number_of_reviews: -1}"); //sort descending
cy.EvaluateCurrentValue("{number_of_reviews: -1}");
cy.runQuery(); //exeute actions - 200 response is verified in this method
cy.xpath(queryLocators.countText).should("have.text", "10 Records");
cy.xpath(queryLocators.projectionField).type(
"{{}house_rules: 1, description:1}",
); //Projection field
cy.EvaluateCurrentValue("{house_rules: 1, description:1}");
cy.runQuery(); //exeute actions - 200 response is verified in this method
cy.xpath(queryLocators.limitField).type("5"); //Projection field
cy.EvaluateCurrentValue("5");
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",
);
});
cy.xpath(queryLocators.countText).should("have.text", "5 Records");
cy.xpath(queryLocators.skipField).type("2"); //Skip field
cy.EvaluateCurrentValue("2");
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",
);
});
cy.xpath(queryLocators.countText).should("have.text", "5 Records");
cy.deleteQueryUsingContext();
});
it("4. Validate Count command & Run and then delete the query", function() {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.xpath('//div[contains(text(),"Find Document(s)")]').click({
force: true,
});
cy.xpath('//div[contains(text(),"Count")]').click({ force: true });
cy.xpath(queryLocators.collectionField).type("listingsAndReviews");
cy.EvaluateCurrentValue("listingsAndReviews");
cy.runQuery();
cy.xpath(queryLocators.queryField).type(`{{}beds : {{}$lte: 2}}`);
cy.EvaluateCurrentValue("{beds : {$lte: 2}}");
cy.runQuery(); //exeute actions - 200 response is verified in this method
cy.deleteQueryUsingContext();
});
it("5. Validate Distinct command & Run and then delete the query", function() {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.xpath('//div[contains(text(),"Find Document(s)")]').click({
force: true,
});
cy.xpath('//div[contains(text(),"Distinct")]').click({ force: true });
cy.xpath(queryLocators.collectionField).type("listingsAndReviews");
cy.EvaluateCurrentValue("listingsAndReviews");
cy.xpath(queryLocators.queryField).type(`{{}beds : {{}$lte: 2}}`);
cy.EvaluateCurrentValue("{beds : {$lte: 2}}");
cy.xpath(queryLocators.keyField).type(`property_type`);
cy.EvaluateCurrentValue("property_type");
//cy.runQuery(); //exeute actions - 200 response is verified in this method
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ request, response }) => {
expect(response.body.data.body.values[0]).to.eq(
"Aparthotel",
"Response is not as expected for Distint commmand",
);
});
cy.deleteQueryUsingContext();
});
it("6. Validate Aggregate command & Run and then delete the query", function() {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.xpath('//div[contains(text(),"Find Document(s)")]').click({
force: true,
});
cy.xpath('//div[contains(text(),"Aggregate")]').click({ force: true });
cy.xpath(queryLocators.collectionField).type("listingsAndReviews");
cy.EvaluateCurrentValue("listingsAndReviews");
cy.xpath(queryLocators.arrayOfPipelinesField).type(
`[{{} $project: {{} count: {{} $size:"$amenities" }}}]`,
);
cy.EvaluateCurrentValue('[{ $project: { count: { $size:"$amenities" }}}]');
//cy.runQuery(); //exeute actions - 200 response is verified in this method
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ request, response }) => {
// cy.log(request.method + ": is req.method")
//expect(request.method).to.equal('POST')
expect(response.body.data.body[0].count).to.eq(
12,
"Response is not as expected for Aggregate commmand",
);
// it is good practice to add message to the assertion
// expect(req, 'has duration in ms').to.have.property('duration').and.be.a('number')
});
cy.deleteQueryUsingContext();
});
it("7. Verify generation of NewPage from collection [Select]", function() {
//Verifying Select from UI
cy.NavigateToDSGeneratePage(datasourceName);
cy.get(generatePage.selectTableDropdown).click();
cy.get(generatePage.dropdownOption)
.first()
// .contains("listingsAndReviews")
// .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,
); //This verifies the Select on the table, ie page is created fine
cy.ClickGotIt();
});
it("8. Validate Deletion of the Newly Created Page", () => {
cy.NavigateToQueryEditor();
cy.NavigateToActiveTab();
cy.contains(".t--datasource-name", datasourceName).click();
cy.get(".t--delete-datasource").click();
cy.wait("@deleteDatasource").should(
"have.nested.property",
"response.body.responseMeta.status",
409,
);
cy.xpath(generatePage.mongonewPageEntityMenu)
.first()
.click({ force: true });
cy.xpath(generatePage.deleteMenuItem).click();
});
it("9. Delete the datasource after NewPage deletion is success", () => {
cy.NavigateToQueryEditor();
cy.NavigateToActiveTab();
cy.contains(".t--datasource-name", datasourceName).click();
cy.get(".t--delete-datasource").click();
cy.wait("@deleteDatasource").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
});
});

View File

@ -1,72 +0,0 @@
const queryLocators = require("../../../../locators/QueryEditor.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
const pages = require("../../../../locators/Pages.json");
let datasourceName;
describe("Create a query with a postgres datasource, run, save and then delete the query", function() {
beforeEach(() => {
cy.startRoutesForDatasource();
});
it("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, runs and delete a query", () => {
cy.NavigateToQueryEditor();
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
cy.get(queryLocators.templateMenu).click();
cy.get(".CodeMirror textarea")
.first()
.focus()
.type("select * from users limit 10");
cy.EvaluateCurrentValue("select * from users limit 10");
cy.runAndDeleteQuery();
});
it("Create, runs and delete another query", () => {
cy.NavigateToQueryEditor();
cy.get(pages.integrationActiveTab)
.should("be.visible")
.click({ force: true });
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
cy.get(queryLocators.templateMenu).click();
cy.get(".CodeMirror textarea")
.first()
.focus()
.type("select * from configs");
cy.EvaluateCurrentValue("select * from configs");
cy.runAndDeleteQuery();
});
it("Deletes a datasource", () => {
cy.NavigateToQueryEditor();
cy.get(pages.integrationActiveTab)
.should("be.visible")
.click({ force: true });
cy.contains(".t--datasource-name", datasourceName).click();
cy.get(".t--delete-datasource").click();
cy.wait("@deleteDatasource").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
});
});

View File

@ -0,0 +1,262 @@
const queryLocators = require("../../../../locators/QueryEditor.json");
const datasource = require("../../../../locators/DatasourcesEditor.json");
const generatePage = require("../../../../locators/GeneratePage.json");
let datasourceName;
describe("Validate CRUD queries for Postgres along with UI flow verifications", function() {
beforeEach(() => {
cy.startRoutesForDatasource();
});
it("1. Creates a new Postgres datasource", function() {
cy.NavigateToDatasourceEditor();
cy.get(datasource.PostgreSQL).click();
cy.getPluginFormsAndCreateDatasource();
cy.fillPostgresDatasourceForm();
cy.testSaveDatasource();
cy.generateUUID().then((uid) => {
datasourceName = `Postgres CRUD ds ${uid}`;
cy.renameDatasource(datasourceName);
});
// cy.get("@createDatasource").then((httpResponse) => {
// datasourceName = httpResponse.response.body.data.name;
// });
});
it("2. Create & runs existing table data and deletes the query", () => {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.get(queryLocators.templateMenu).click();
cy.get(".CodeMirror textarea")
.first()
.focus()
.type("select * from users limit 10");
cy.EvaluateCurrentValue("select * from users limit 10");
cy.runAndDeleteQuery();
});
it("3. Create new CRUD Table and populate", () => {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.get(queryLocators.templateMenu).click();
let tableCreateQuery = `CREATE TABLE public.users_crud (
id integer NOT NULL,
name character varying,
status character varying,
gender character varying,
email character varying,
address text,
role text);
insert into public.users_crud (id, name, status, gender, email, address, role) values
(1, 'CRUD User1', 'PENDING', 'Male', 'cruduser1@ihg.com', '19624 Scofield Way', 'User'),
(2, 'CRUD User2', 'IN PROGRESS', 'Male','cruduser2@ihg.com', '19624 Scofield Way', 'Editor'),
(3, 'CRUD User3', 'APPROVED', 'Female','cruduser3@ihg.com', '19624 Scofield Way', 'Admin'),
(4, 'CRUD User4', 'PENDING', 'Male', 'cruduser4@ihg.com', '19624 Scofield Way', 'User'),
(5, 'CRUD User5', 'IN PROGRESS', 'Male','cruduser5@ihg.com', '19624 Scofield Way', 'Editor'),
(6, 'CRUD User6', 'APPROVED', 'Female','cruduser6@ihg.com', '19624 Scofield Way', 'Admin'),
(7, 'CRUD User7', 'PENDING', 'Male', 'cruduser7@ihg.com', '19624 Scofield Way', 'User'),
(8, 'CRUD User8', 'IN PROGRESS', 'Male','cruduser8@ihg.com', '19624 Scofield Way', 'Editor'),
(9, 'CRUD User9', 'APPROVED', 'Female','cruduser9@ihg.com', '19624 Scofield Way', 'Admin'),
(10, 'CRUD User10', 'PENDING', 'Male', 'cruduser10@ihg.com', '19624 Scofield Way', 'User'),
(11, 'CRUD User11', 'IN PROGRESS', 'Male','cruduser11@ihg.com', '19624 Scofield Way', 'Editor'),
(12, 'CRUD User12', 'APPROVED', 'Female','cruduser12@ihg.com', '19624 Scofield Way', 'Admin'),
(13, 'CRUD User13', 'PENDING', 'Male', 'cruduser13@ihg.com', '19624 Scofield Way', 'User'),
(14, 'CRUD User14', 'IN PROGRESS', 'Male','cruduser14@ihg.com', '19624 Scofield Way', 'Editor'),
(15, 'CRUD User15', 'APPROVED', 'Female','cruduser15@ihg.com', '19624 Scofield Way', 'Admin'),
(16, 'CRUD User16', 'PENDING', 'Male', 'cruduser16@ihg.com', '19624 Scofield Way', 'User'),
(17, 'CRUD User17', 'IN PROGRESS', 'Male','cruduser17@ihg.com', '19624 Scofield Way', 'Editor'),
(18, 'CRUD User18', 'APPROVED', 'Female','cruduser18@ihg.com', '19624 Scofield Way', 'Admin'),
(19, 'CRUD User19', 'PENDING', 'Male', 'cruduser19@ihg.com', '19624 Scofield Way', 'User'),
(20, 'CRUD User20', 'IN PROGRESS', 'Male','cruduser20@ihg.com', '19624 Scofield Way', 'Editor'),
(21, 'CRUD User21', 'APPROVED', 'Female','cruduser21@ihg.com', '19624 Scofield Way', 'Admin'),
(22, 'CRUD User22', 'PENDING', 'Male', 'cruduser22@ihg.com', '19624 Scofield Way', 'User'),
(23, 'CRUD User23', 'IN PROGRESS', 'Male','cruduser23@ihg.com', '19624 Scofield Way', 'Editor'),
(24, 'CRUD User24', 'APPROVED', 'Female','cruduser24@ihg.com', '19624 Scofield Way', 'Admin'),
(25, 'CRUD User25', 'PENDING', 'Male', 'cruduser25@ihg.com', '19624 Scofield Way', 'User'),
(26, 'CRUD User26', 'IN PROGRESS', 'Male','cruduser26@ihg.com', '19624 Scofield Way', 'Editor'),
(27, 'CRUD User27', 'APPROVED', 'Female','cruduser27@ihg.com', '19624 Scofield Way', 'Admin'),
(28, 'CRUD User28', 'PENDING', 'Male', 'cruduser28@ihg.com', '19624 Scofield Way', 'User'),
(29, 'CRUD User29', 'IN PROGRESS', 'Male','cruduser29@ihg.com', '19624 Scofield Way', 'Editor'),
(30, 'CRUD User30', 'APPROVED', 'Female','cruduser30@ihg.com', '19624 Scofield Way', 'Admin');`;
cy.get(".CodeMirror textarea").paste(tableCreateQuery);
cy.get(".CodeMirror textarea").focus();
cy.EvaluateCurrentValue(tableCreateQuery);
cy.runAndDeleteQuery(); //exeute actions - 200 response is verified in this method
});
it("4. Validate Select record from Postgress datasource", () => {
let selectQuery = "select * from public.users_crud";
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.xpath(queryLocators.querySelect).click();
cy.get(queryLocators.codeTextArea).type("{cmd+a}{del}");
cy.get(queryLocators.codeTextArea).paste(selectQuery);
cy.EvaluateCurrentValue(selectQuery);
cy.runAndDeleteQuery(); //exeute actions - 200 response is verified in this method
});
it("5. Validate Create/Insert record into Postgress datasource", () => {
let insertQuery =
"INSERT INTO public.users_crud (id, name, gender, email) VALUES (31, 'CRUD User11','Male','cruduser31@ihg.com');";
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.xpath(queryLocators.queryCreate).click();
cy.get(queryLocators.codeTextArea).type("{cmd+a}{del}");
//.type("{selectall}{del}");
cy.get(queryLocators.codeTextArea).paste(insertQuery);
cy.EvaluateCurrentValue(insertQuery);
cy.runAndDeleteQuery();
});
it("6. Validate Update record into Postgress datasource", () => {
let updateQuery =
"UPDATE public.users_crud SET status = 'PENDING', role = 'Viewer' WHERE id = 31;";
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.xpath(queryLocators.queryUpdate).click();
cy.get(queryLocators.codeTextArea).type("{cmd+a}{del}");
cy.get(queryLocators.codeTextArea).paste(updateQuery);
cy.EvaluateCurrentValue(updateQuery);
cy.runAndDeleteQuery();
});
it("7. Validate Delete record from Postgress datasource", () => {
let deleteQuery = "DELETE FROM public.users_crud WHERE id = 31;";
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.xpath(queryLocators.queryDelete).click();
cy.get(queryLocators.codeTextArea).type("{cmd+a}{del}");
cy.get(queryLocators.codeTextArea).paste(deleteQuery);
cy.EvaluateCurrentValue(deleteQuery);
cy.runAndDeleteQuery();
});
it("8. Verify generation of NewPage from New table & perform Add/Update/Delete operations", function() {
//Verifying Select from UI
cy.NavigateToDSGeneratePage(datasourceName);
cy.get(generatePage.selectTableDropdown).click();
cy.get(generatePage.dropdownOption)
.contains("public.users_crud")
.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,
); //This verifies the Select on the table, ie page is created fine
cy.ClickGotIt();
//Verifying Update from UI
cy.xpath(generatePage.selectRowinTable).click();
cy.xpath(generatePage.currentStatusField)
.clear()
.click()
.type("APPROVED");
cy.get(generatePage.updateBtn)
.closest("button")
.click()
.wait(2000); //Wait for update call to be success
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
); //This verifies the Update on the table
//.should("have.nested.property", "response.body.data.request.requestParams.Query.value",);
cy.xpath(generatePage.selectRowinTable).click();
cy.xpath(generatePage.currentStatusField).should("have.value", "APPROVED"); //Verifying update is success
//verifying Insert from UI
cy.xpath(generatePage.addRowIcon).click();
cy.xpath(generatePage.idField).type("31");
cy.xpath(generatePage.nameField).type("CRUD User31");
cy.xpath(generatePage.statusField).type("REJECTED");
cy.xpath(generatePage.genderField).type("Male");
cy.xpath(generatePage.emailField)
.type("curduser31@ihg.com")
.wait(1000); //Waiting for Submit button to get enabled
cy.get(generatePage.submitBtn).click();
cy.xpath(generatePage.sortByDropdown).click(); //Sorting by descending to verify newly added record - also sorting is verified
cy.xpath(generatePage.descending).click();
cy.xpath(generatePage.currentNameField).should("have.value", "CRUD User31"); //Verifying Addition is success
//Verifying Delete from UI
cy.xpath(generatePage.deleteofSelectedRow).click();
cy.get(generatePage.confirmBtn)
.click()
.wait(2000); //Wait for update call to be success
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
cy.xpath(generatePage.currentNameField).should("have.value", "CRUD User30"); //Verifying Deletion of id # 31 is success
});
it("9. Validate Deletion of the Newly Created Page", () => {
cy.NavigateToQueryEditor();
cy.NavigateToActiveTab();
cy.contains(".t--datasource-name", datasourceName).click();
cy.get(".t--delete-datasource").click();
cy.wait("@deleteDatasource").should(
"have.nested.property",
"response.body.responseMeta.status",
409,
);
cy.xpath(generatePage.postgressnewPageEntityMenu)
.first()
.click({ force: true });
cy.xpath(generatePage.deleteMenuItem).click();
});
it("10. Validate Drop of the Newly Created Table from Postgress datasource", () => {
let deleteTblQuery = "DROP TABLE public.users_crud;";
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.xpath(queryLocators.queryDelete).click();
cy.get(queryLocators.codeTextArea).type("{cmd+a}{del}");
cy.get(queryLocators.codeTextArea).paste(deleteTblQuery);
cy.EvaluateCurrentValue(deleteTblQuery);
cy.runAndDeleteQuery();
});
it("11. Deletes the datasource", () => {
cy.NavigateToQueryEditor();
cy.NavigateToActiveTab();
cy.contains(".t--datasource-name", datasourceName).click();
cy.get(".t--delete-datasource").click();
cy.wait("@deleteDatasource").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
});
});

View File

@ -2,9 +2,29 @@
"buildFromScratchActionCard": ".t--BuildFromScratch",
"generateCRUDPageActionCard": ".t--GenerateCRUDPage",
"selectDatasourceDropdown": "[data-cy=t--datasource-dropdown]",
"datasourceDropdownOption":"[data-cy=t--datasource-dropdown-option]",
"selectTableDropdown":"[data-cy=t--table-dropdown]",
"datasourceDropdownOption": "[data-cy=t--datasource-dropdown-option]",
"selectTableDropdown": "[data-cy=t--table-dropdown]",
"dropdownOption": ".bp3-popover-content .t--dropdown-option",
"selectSearchColumnDropdown":"[data-cy=t--searchColumn-dropdown]",
"generatePageFormSubmitBtn":"[data-cy=t--generate-page-form-submit]"
"selectSearchColumnDropdown": "[data-cy=t--searchColumn-dropdown]",
"generatePageFormSubmitBtn": "[data-cy=t--generate-page-form-submit]",
"selectRowinTable": "//div[text()='CRUD User2']/ancestor::div[contains(@class,'tr')]",
"currentStatusField": "//div[@type='FORM_WIDGET']//span[text()='status:']//ancestor::div[contains(@class,'t--widget-textwidget')]/preceding-sibling::div[contains(@class, 't--widget-inputwidget')][1]//input",
"updateBtn": "span:contains('Update')",
"addRowIcon": "//span[@icon='add']/parent::button",
"idField": "//input[@placeholder='id']",
"nameField": "//input[@placeholder='name']",
"statusField": "//input[@placeholder='status']",
"genderField": "//input[@placeholder='gender']",
"emailField": "//input[@placeholder='email']",
"submitBtn": "span:contains('Submit')",
"sortByDropdown": "//div[@type='CANVAS_WIDGET']/div[contains(@class, 't--widget-dropdownwidget')][2]",
"ascending": "//div[text()='Ascending']",
"descending": "//div[text()='Descending']",
"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')",
"postgressnewPageEntityMenu": "//div[text()='Public.users_crud']/ancestor::div[contains(@class, 't--entity page')]//span[contains(@class, 'entity-context-menu')]//div",
"deleteMenuItem": "//div[text()='Delete']/parent::a[contains(@class, 'single-select')]",
"mongonewPageEntityMenu": "//div[text()='ListingsAndReviews']/ancestor::div[contains(@class, 't--entity page')]//span[contains(@class, 'entity-context-menu')]//div"
}

View File

@ -2,7 +2,7 @@
"addNewQueryBtn": ".dbqueries .t--entity-add-btn",
"queryEditorIcon": ".t--nav-link-query-editor",
"templateMenu": ".t--template-menu",
"runQuery": ".t--run-query",
"runQuery": "//span[text()='Run']/parent::button",
"saveQuery": ".t--save-query",
"deleteQuery": ".t--delete-query",
"queryMoreAction": ".t--more-action-menu",
@ -16,5 +16,24 @@
"query": "li:contains('Query')",
"switch": ".t--form-control-SWITCH input",
"suggestedTableWidget": ".t--suggested-widget-TABLE_WIDGET",
"queryResponse": "(//div[@class='table']//div[@class='tr'])[3]//div[@class='td']"
}
"queryResponse": "(//div[@class='table']//div[@class='tr'])[3]//div[@class='td']",
"querySelect": "//div[contains(@class, 't--template-menu')]//div[text()='Select']",
"queryCreate": "//div[contains(@class, 't--template-menu')]//div[text()='Create']",
"queryUpdate": "//div[contains(@class, 't--template-menu')]//div[text()='Update']",
"queryDelete": "//div[contains(@class, 't--template-menu')]//div[text()='Delete']",
"codeTextArea": "div.CodeMirror-code",
"findDocs" : "//div[text()='Find Document(s)']",
"collectionField": "//p[text()='Collection']/following-sibling::div//div[@class='CodeMirror-code']",
"queryField": "//p[text()='Query']/following-sibling::div//div[@class='CodeMirror-code']",
"sortField": "//p[text()='Sort']/following-sibling::div//div[@class='CodeMirror-code']",
"projectionField": "//p[text()='Projection']/following-sibling::div//div[@class='CodeMirror-code']",
"limitField": "//p[text()='Limit']/following-sibling::div//div[@class='CodeMirror-code']",
"skipField": "//p[text()='Skip']/following-sibling::div//div[@class='CodeMirror-code']",
"keyField": "//p[text()='Key']/following-sibling::div//div[@class='CodeMirror-code']",
"arrayOfPipelinesField": "//p[text()='Array of Pipelines']/following-sibling::div//div[@class='CodeMirror-code']",
"countText": "//span[contains(@class, 'cs-text')][text()='Result:']/span"
}

View File

@ -22,12 +22,13 @@
"property": ".language-appsmith-binding",
"editNameField": ".editing input",
"editEntityField": ".bp3-editable-text-input",
"entity":".t--entity-name",
"addWidget":".widgets .t--entity-add-btn",
"dropHere":"#canvas-dragging-0",
"closeWidgets":".t--close-widgets-sidebar",
"entity": ".t--entity-name",
"addWidget": ".widgets .t--entity-add-btn",
"dropHere": "#canvas-dragging-0",
"closeWidgets": ".t--close-widgets-sidebar",
"addDBQueryEntity": ".datasources .t--entity-add-btn",
"editEntity": ".t--entity-name input",
"explorerSwitchId": "#switcher--explorer",
"widgetSwitchId": "#switcher--widgets"
"widgetSwitchId": "#switcher--widgets",
"activeTab": "span:contains('Active')"
}

View File

@ -25,6 +25,7 @@ const datasource = require("../locators/DatasourcesEditor.json");
const viewWidgetsPage = require("../locators/ViewWidgets.json");
const generatePage = require("../locators/GeneratePage.json");
const jsEditorLocators = require("../locators/JSEditor.json");
const queryLocators = require("../locators/QueryEditor.json");
const welcomePage = require("../locators/welcomePage.json");
let pageidcopy = " ";
@ -2072,7 +2073,43 @@ Cypress.Commands.add("NavigateToDatasourceEditor", () => {
});
Cypress.Commands.add("NavigateToQueryEditor", () => {
cy.get(explorer.addDBQueryEntity).click({ force: true });
cy.get(explorer.addDBQueryEntity)
.first()
.click({ force: true });
});
Cypress.Commands.add("NavigateToActiveTab", () => {
cy.get(explorer.activeTab).click({ force: true });
// cy.get(pages.integrationActiveTab)
// .should("be.visible")
// .click({ force: true });
});
Cypress.Commands.add("NavigateToActiveDSQueryPane", (datasourceName) => {
cy.NavigateToQueryEditor();
cy.NavigateToActiveTab();
cy.contains(".t--datasource-name", datasourceName)
.find(queryLocators.createQuery)
.click();
});
Cypress.Commands.add("NavigateToDSGeneratePage", (datasourceName) => {
cy.NavigateToQueryEditor();
cy.NavigateToActiveTab();
cy.get(datasource.datasourceCard)
.contains(datasourceName)
.scrollIntoView()
.should("be.visible")
.closest(datasource.datasourceCard)
.within(() => {
cy.get(datasource.datasourceCardGeneratePageBtn).click();
});
});
Cypress.Commands.add("ClickGotIt", () => {
cy.get("span:contains('GOT IT')").click();
});
Cypress.Commands.add("testDatasource", () => {
@ -2325,7 +2362,9 @@ Cypress.Commands.add("deleteDatasource", (datasourceName) => {
});
Cypress.Commands.add("runQuery", () => {
cy.get(queryEditor.runQuery).click({ force: true });
cy.xpath(queryEditor.runQuery)
.last()
.click();
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
@ -2333,6 +2372,12 @@ Cypress.Commands.add("runQuery", () => {
);
});
Cypress.Commands.add("onlyQueryRun", () => {
cy.xpath(queryEditor.runQuery)
.last()
.click();
});
Cypress.Commands.add("hoverAndClick", () => {
cy.xpath(apiwidget.popover)
.last()
@ -2374,14 +2419,7 @@ Cypress.Commands.add("deleteDataSource", () => {
);
});
Cypress.Commands.add("runAndDeleteQuery", () => {
cy.get(queryEditor.runQuery).click();
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
Cypress.Commands.add("deleteQueryUsingContext", () => {
cy.get(queryEditor.queryMoreAction).click();
cy.get(queryEditor.deleteUsingContext).click();
cy.wait("@deleteAction").should(
@ -2391,6 +2429,11 @@ Cypress.Commands.add("runAndDeleteQuery", () => {
);
});
Cypress.Commands.add("runAndDeleteQuery", () => {
cy.runQuery();
cy.deleteQueryUsingContext();
});
Cypress.Commands.add("dragAndDropToCanvas", (widgetType, { x, y }) => {
const selector = `.t--widget-card-draggable-${widgetType}`;
cy.wait(500);
@ -2699,6 +2742,7 @@ Cypress.Commands.add("startRoutesForDatasource", () => {
Cypress.Commands.add("startServerAndRoutes", () => {
//To update route with intercept after working on alias wrt wait and alias
cy.server();
cy.route("POST", "/api/v1/datasources/test").as("testDatasource");
cy.route("GET", "/api/v1/applications/new").as("applications");
cy.route("GET", "/api/v1/users/profile").as("getUser");
cy.route("GET", "/api/v1/plugins").as("getPlugins");
@ -2790,7 +2834,7 @@ Cypress.Commands.add("startServerAndRoutes", () => {
cy.route("POST", "/api/v1/collections/actions").as("createNewJSCollection");
cy.route("DELETE", "/api/v1/collections/actions/*").as("deleteJSCollection");
cy.route("POST", "/api/v1/pages/crud-page").as("replaceLayoutWithCRUDPage");
cy.intercept("POST", "/api/v1/users/super").as("createSuperUser");
});
@ -2963,7 +3007,9 @@ Cypress.Commands.add("skipGenerateCRUDPage", () => {
});
Cypress.Commands.add("fillAmazonS3DatasourceForm", () => {
cy.get(datasourceEditor.projectID).type(Cypress.env("S3_ACCESS_KEY"));
cy.get(datasourceEditor.projectID)
.clear()
.type(Cypress.env("S3_ACCESS_KEY"));
cy.get(datasourceEditor.serviceAccCredential)
.clear()
.type(Cypress.env("S3_SECRET_KEY"));
@ -2972,9 +3018,7 @@ Cypress.Commands.add("fillAmazonS3DatasourceForm", () => {
Cypress.Commands.add("createAmazonS3Datasource", () => {
cy.NavigateToDatasourceEditor();
cy.get(datasourceEditor.AmazonS3).click();
cy.fillAmazonS3DatasourceForm();
cy.testSaveDatasource();
});
@ -2992,84 +3036,6 @@ Cypress.Commands.add("createJSObject", (JSCode) => {
.click();
});
//Generate CRUD page methods:
Cypress.Commands.add("fillMongoDatasourceFormWithURI", () => {
cy.xpath(datasourceEditor["mongoUriDropdown"])
.click()
.wait(500);
cy.xpath(datasourceEditor["mongoUriYes"])
.click()
.wait(500);
cy.xpath(datasourceEditor["mongoUriInput"]).type(
datasourceFormData["mongo-uri"],
);
});
Cypress.Commands.add("startInterceptRoutesForMySQL", () => {
//All stubbing
cy.intercept("POST", "/api/v1/datasources/test", {
fixture: "testAction.json",
}).as("testDatasource");
cy.intercept("GET", "/api/v1/datasources/*/structure?ignoreCache=*", {
fixture: "mySQL_GET_selectTableDropdown.json",
}).as("selectTableDropdownStub");
cy.intercept("PUT", "/api/v1/pages/crud-page/*", {
fixture: "mySQL_PUT_replaceLayoutWithCRUD.json",
}).as("put_replaceLayoutCRUDStub");
cy.intercept("GET", "/api/v1/actions*", {
fixture: "mySQL_GET_Actions.json",
}).as("getActionsStub");
cy.intercept("POST", "/api/v1/actions/execute", {
fixture: "mySQL_POST_Execute.json",
}).as("postExecuteStub");
cy.intercept("POST", "/api/v1/pages/crud-page", {
fixture: "mySQL_PUT_replaceLayoutWithCRUD.json",
}).as("post_replaceLayoutCRUDStub");
});
Cypress.Commands.add("startInterceptRoutesForMongo", () => {
//All stubbing
cy.intercept("POST", "/api/v1/datasources/test", {
fixture: "testAction.json",
}).as("testDatasource");
cy.intercept("GET", "/api/v1/datasources/*/structure?ignoreCache=*", {
fixture: "mongo_GET_selectTableDropdown.json",
}).as("get_selectTableDropdownStub");
cy.intercept("PUT", "/api/v1/pages/crud-page/*", {
fixture: "mongo_PUT_replaceLayoutWithCRUD.json",
}).as("put_replaceLayoutCRUDStub");
cy.intercept("GET", "/api/v1/actions*", {
fixture: "mongo_GET_Actions.json",
}).as("get_ActionsStub");
cy.intercept("POST", "/api/v1/actions/execute", {
fixture: "mongo_POST_Actions.json",
}).as("post_ExecuteStub");
cy.intercept("POST", "/api/v1/pages/crud-page", {
fixture: "mongo_PUT_replaceLayoutWithCRUD.json",
}).as("post_replaceLayoutCRUDStub");
});
Cypress.Commands.add("startInterceptRoutesForS3", () => {
cy.intercept("POST", "/api/v1/datasources/test").as("testDatasource");
cy.intercept("PUT", "/api/v1/datasources/datasource-query/*").as(
"put_datasources",
);
cy.intercept("PUT", "/api/v1/pages/crud-page/*").as("put_replaceLayoutCRUD");
cy.intercept("POST", "/api/v1/pages/crud-page").as("post_replaceLayoutCRUD");
cy.intercept("GET", "/api/v1/actions*").as("get_Actions");
cy.intercept("POST", "/api/v1/actions/execute").as("post_Execute");
});
Cypress.Commands.add("fillAmazonS3DatasourceForm", () => {
cy.get(datasourceEditor.projectID)
.clear()
.type(Cypress.env("S3_ACCESS_KEY"));
cy.get(datasourceEditor.serviceAccCredential)
.clear()
.type(Cypress.env("S3_SECRET_KEY"));
});
Cypress.Commands.add("createSuperUser", () => {
cy.get(welcomePage.getStarted).should("be.visible");
cy.get(welcomePage.getStarted).should("not.be.disabled");
@ -3129,3 +3095,118 @@ Cypress.Commands.add("SignupFromAPI", (uname, pword) => {
cy.log(response.body);
});
});
//Generate CRUD page methods: <Aishwarya>
Cypress.Commands.add("fillMongoDatasourceFormWithURI", () => {
cy.xpath(datasourceEditor["mongoUriDropdown"])
.click()
.wait(500);
cy.xpath(datasourceEditor["mongoUriYes"])
.click()
.wait(500);
cy.xpath(datasourceEditor["mongoUriInput"]).type(
datasourceFormData["mongo-uri"],
);
});
Cypress.Commands.add("startInterceptRoutesForMySQL", () => {
//All stubbing - updating app id to current app id for Delete app by api call to be successfull:
cy.replaceApplicationIdForInterceptPages(
"cypress/fixtures/mySQL_PUT_replaceLayoutWithCRUD.json",
);
cy.intercept("POST", "/api/v1/datasources/test", {
fixture: "testAction.json",
}).as("testDatasource");
cy.intercept("GET", "/api/v1/datasources/*/structure?ignoreCache=*", {
fixture: "mySQL_GET_selectTableDropdown.json",
}).as("getDatasourceStructure");
cy.intercept("PUT", "/api/v1/pages/crud-page/*", {
fixture: "mySQL_PUT_replaceLayoutWithCRUD.json",
}).as("replaceLayoutWithCRUDPage");
cy.intercept("GET", "/api/v1/actions*", {
fixture: "mySQL_GET_Actions.json",
}).as("getActions");
cy.intercept("POST", "/api/v1/actions/execute", {
fixture: "mySQL_POST_Execute.json",
}).as("postExecute");
cy.intercept("POST", "/api/v1/pages/crud-page", {
fixture: "mySQL_PUT_replaceLayoutWithCRUD.json",
}).as("replaceLayoutWithCRUDPage");
});
Cypress.Commands.add("startInterceptRoutesForMongo", () => {
//All stubbing
cy.replaceApplicationIdForInterceptPages(
"cypress/fixtures/mongo_PUT_replaceLayoutWithCRUD.json",
);
cy.intercept("POST", "/api/v1/datasources/test", {
fixture: "testAction.json",
}).as("testDatasource");
cy.intercept("GET", "/api/v1/datasources/*/structure?ignoreCache=*", {
fixture: "mongo_GET_selectTableDropdown.json",
}).as("getDatasourceStructure");
cy.intercept("PUT", "/api/v1/pages/crud-page/*", {
fixture: "mongo_PUT_replaceLayoutWithCRUD.json",
}).as("replaceLayoutWithCRUDPage");
cy.intercept("GET", "/api/v1/actions*", {
fixture: "mongo_GET_Actions.json",
}).as("getActions");
cy.intercept("POST", "/api/v1/actions/execute", {
fixture: "mongo_POST_Actions.json",
}).as("postExecute");
cy.intercept("POST", "/api/v1/pages/crud-page", {
fixture: "mongo_PUT_replaceLayoutWithCRUD.json",
}).as("post_replaceLayoutCRUDStub");
});
Cypress.Commands.add("startInterceptRoutesForS3", () => {
cy.intercept("POST", "/api/v1/datasources/test").as("testDatasource");
cy.intercept("PUT", "/api/v1/datasources/datasource-query/*").as(
"put_datasources",
);
cy.intercept("PUT", "/api/v1/pages/crud-page/*").as("put_replaceLayoutCRUD");
cy.intercept("POST", "/api/v1/pages/crud-page").as("post_replaceLayoutCRUD");
cy.intercept("GET", "/api/v1/actions*").as("get_Actions");
cy.intercept("POST", "/api/v1/actions/execute").as("post_Execute");
});
Cypress.Commands.add("replaceApplicationIdForInterceptPages", (fixtureFile) => {
let currentAppId, currentURL;
cy.readFile(fixtureFile, (err, data) => {
if (err) {
return console.error(err);
}
}).then((data) => {
cy.url().then((url) => {
currentURL = url;
const myRegexp = /applications(.*)/;
const match = myRegexp.exec(currentURL);
cy.log(currentURL + "currentURL from intercept is");
currentAppId = match ? match[1].split("/")[1] : null;
data.data.page.applicationId = currentAppId;
cy.writeFile(fixtureFile, JSON.stringify(data));
});
});
});
Cypress.Commands.add(
"paste",
{ prevSubject: true },
(selector, pastePayload) => {
cy.wrap(selector).then(($destination) => {
const pasteEvent = Object.assign(
new Event("paste", { bubbles: true, cancelable: true }),
{
clipboardData: {
getData: () => pastePayload,
},
},
);
$destination[0].dispatchEvent(pasteEvent);
});
},
);