From 98c06e28170ad939a563a9af352e3dae2a195c7d Mon Sep 17 00:00:00 2001 From: Aishwarya-U-R <91450662+Aishwarya-U-R@users.noreply.github.com> Date: Mon, 6 Jun 2022 11:29:15 +0530 Subject: [PATCH] Automated tests for improved CRUD with JSONFrom - Mongo Ds (#14191) --- .../CRUD_JSONForm/Mongo_Spec.ts | 775 +++++++++++++++++- .../CRUD_JSONForm/MySQL_Spec.ts | 2 +- .../GenerateCRUD/Mongo_Spec.js | 214 ----- .../cypress/support/Objects/CommonLocators.ts | 1 + .../cypress/support/Pages/AggregateHelper.ts | 45 +- app/client/cypress/support/Pages/ApiPage.ts | 56 +- .../cypress/support/Pages/DataSources.ts | 59 +- .../cypress/support/Pages/EntityExplorer.ts | 16 +- app/client/cypress/support/Pages/JSEditor.ts | 8 +- app/client/cypress/support/Pages/Table.ts | 4 +- 10 files changed, 920 insertions(+), 260 deletions(-) delete mode 100644 app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/GenerateCRUD/Mongo_Spec.js diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/CRUD_JSONForm/Mongo_Spec.ts b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/CRUD_JSONForm/Mongo_Spec.ts index 0f6d646919..625f92b861 100644 --- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/CRUD_JSONForm/Mongo_Spec.ts +++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/CRUD_JSONForm/Mongo_Spec.ts @@ -1,13 +1,27 @@ import { ObjectsRegistry } from "../../../../support/Objects/Registry"; -let guid: any; +let guid: any, dsName: any; + let agHelper = ObjectsRegistry.AggregateHelper, ee = ObjectsRegistry.EntityExplorer, locator = ObjectsRegistry.CommonLocators, homePage = ObjectsRegistry.HomePage, - dataSources = ObjectsRegistry.DataSources; + dataSources = ObjectsRegistry.DataSources, + deployMode = ObjectsRegistry.DeployMode, + table = ObjectsRegistry.Table; describe("Validate Mongo CRUD with JSON Form", () => { + before(() => { + //dataSources.StartDataSourceRoutes(); //already started in index.js beforeeach + }); + + beforeEach(function() { + if (Cypress.env("Mongo") === 0) { + cy.log("Mongo DB is not found. Using intercept"); + dataSources.StartInterceptRoutesForMongo(); + } else cy.log("Mongo DB is found, hence using actual DB"); + }); + it("1. Create DS & then Add new Page and generate CRUD template using created datasource", () => { agHelper.GenerateUUID(); cy.get("@guid").then((uid) => { @@ -25,13 +39,756 @@ describe("Validate Mongo CRUD with JSON Form", () => { dataSources._dropdownOption, "Mongo " + guid, ); - agHelper.ValidateNetworkStatus("@getDatasourceStructure"); //Making sure table dropdown is populated - agHelper.GetNClick(dataSources._selectTableDropdown); - agHelper.GetNClickByContains( - dataSources._dropdownOption, - "pokemon", - ); - agHelper.GetNClick(dataSources._generatePageBtn); + cy.wrap("Mongo " + guid).as("dsName"); + }); + agHelper.ValidateNetworkStatus("@getDatasourceStructure"); //Making sure table dropdown is populated + agHelper.WaitUntilToastDisappear("datasource updated successfully"); + agHelper.GetNClick(dataSources._selectTableDropdown); + agHelper.GetNClickByContains(dataSources._dropdownOption, "pokemon"); + GenerateCRUDNValidateDeployPage( + "http://www.serebii.net/pokemongo/pokemon/150.png", + "150", + `["Bug","Ghost","Dark"]`, + 10, + ); + + agHelper.NavigateBacktoEditor(); + table.WaitUntilTableLoad(); + //Delete the test data + ee.ActionContextMenuByEntityName("Page2", "Delete", "Are you sure?"); + agHelper.ValidateNetworkStatus("@deletePage", 200); + + //Should not be able to delete ds until app is published again + //coz if app is published & shared then deleting ds may cause issue, So! + cy.get("@dsName").then(($dsName) => { + dsName = $dsName; + dataSources.DeleteDatasouceFromActiveTab(dsName as string, 409); + }); + + deployMode.DeployApp(); + agHelper.NavigateBacktoEditor(); + cy.get("@dsName").then(($dsName) => { + dsName = $dsName; + dataSources.DeleteDatasouceFromActiveTab(dsName as string, 200); }); }); + + it("2. Create new app and Generate CRUD page using a new datasource", () => { + homePage.NavigateToHome(); + homePage.CreateNewApplication(); + agHelper.GetNClick(homePage._buildFromDataTableActionCard); + agHelper.GetNClick(dataSources._selectDatasourceDropdown); + agHelper.GetNClickByContains( + dataSources._dropdownOption, + "Connect New Datasource", + ); + + agHelper.GenerateUUID(); + cy.get("@guid").then((uid) => { + dataSources.CreatePlugIn("MongoDB"); + guid = uid; + agHelper.RenameWithInPane("Mongo " + guid, false); + dataSources.FillMongoDSForm(); + dataSources.TestSaveDatasource(); + cy.wrap("Mongo " + guid).as("dsName"); + }); + + agHelper.ValidateNetworkStatus("@getDatasourceStructure"); //Making sure table dropdown is populated + agHelper.WaitUntilToastDisappear("datasource updated successfully"); + agHelper.GetNClick(dataSources._selectTableDropdown); + agHelper.GetNClickByContains(dataSources._dropdownOption, "friends"); + + GenerateCRUDNValidateDeployPage( + "
Monica's old friend Rachel moves in with her after leaving her fiancé.
", + `1994-09-22`, + "http://www.tvmaze.com/episodes/40646/friends-1x01-the-one-where-it-all-began", + 11, + ); + + agHelper.NavigateBacktoEditor(); + cy.get("@dsName").then(($dsName) => { + dsName = $dsName; + }); + }); + + it("3. Generate CRUD page from datasource present in ACTIVE section", function() { + dataSources.NavigateFromActiveDS(dsName, false); + agHelper.ValidateNetworkStatus("@getDatasourceStructure"); + agHelper.GetNClick(dataSources._selectTableDropdown); + agHelper.GetNClickByContains(dataSources._dropdownOption, "coffeeCafe"); + + GenerateCRUDNValidateDeployPage("", "", "Washington, US", 11); + + agHelper.NavigateBacktoEditor(); + table.WaitUntilTableLoad(1, 0); + //Delete the test data + ee.expandCollapseEntity("PAGES"); + ee.ActionContextMenuByEntityName("CoffeeCafe", "Delete", "Are you sure?"); + agHelper.ValidateNetworkStatus("@deletePage", 200); + }); + + it("4. Create new CRUD collection 'AuthorNAwards' & refresh Entity Explorer to find the new collection", () => { + let authorNAwardsArray = `[{ + "_id" : 1, + "name" : { + "first" : "John", + "last" : "Backus" + }, + "birth" : "1924-12-03T05:00:00Z", + "death" : "2007-03-17T04:00:00Z", + "contribs" : [ + "Fortran", + "ALGOL", + "Backus-Naur Form", + "FP" + ], + "awards" : [ + { + "award" : "W.W. McDowell Award", + "year" : 1967, + "by" : "IEEE Computer Society" + }, + { + "award" : "National Medal of Science", + "year" : 1975, + "by" : "National Science Foundation" + }, + { + "award" : "Turing Award", + "year" : 1977, + "by" : "ACM" + }, + { + "award" : "Draper Prize", + "year" : 1993, + "by" : "National Academy of Engineering" + } + ] + }, + { + "_id" : ObjectId("51df07b094c6acd67e492f41"), + "name" : { + "first" : "John", + "last" : "McCarthy" + }, + "birth" : "1927-09-04T04:00:00Z", + "death" : "2011-12-24T05:00:00Z", + "contribs" : [ + "Lisp", + "Artificial Intelligence", + "ALGOL" + ], + "awards" : [ + { + "award" : "Turing Award", + "year" : 1971, + "by" : "ACM" + }, + { + "award" : "Kyoto Prize", + "year" : 1988, + "by" : "Inamori Foundation" + }, + { + "award" : "National Medal of Science", + "year" : 1990, + "by" : "National Science Foundation" + } + ] + }, + { + "_id" : ObjectId("51df07b094c6acd67e492f42"), + "name" : { + "first" : "Grace", + "last" : "Hopper" + }, + "title" : "Rear Admiral", + "birth" : "1906-12-09T05:00:00Z", + "death" : "1992-01-01T05:00:00Z", + "contribs" : [ + "UNIVAC", + "compiler", + "FLOW-MATIC", + "COBOL" + ], + "awards" : [ + { + "award" : "Computer Sciences Man of the Year", + "year" : 1969, + "by" : "Data Processing Management Association" + }, + { + "award" : "Distinguished Fellow", + "year" : 1973, + "by" : " British Computer Society" + }, + { + "award" : "W. W. McDowell Award", + "year" : 1976, + "by" : "IEEE Computer Society" + }, + { + "award" : "National Medal of Technology", + "year" : 1991, + "by" : "United States" + } + ] + }, + { + "_id" : 4, + "name" : { + "first" : "Kristen", + "last" : "Nygaard" + }, + "birth" : "1926-08-27T04:00:00Z", + "death" : "2002-08-10T04:00:00Z", + "contribs" : [ + "OOP", + "Simula" + ], + "awards" : [ + { + "award" : "Rosing Prize", + "year" : 1999, + "by" : "Norwegian Data Association" + }, + { + "award" : "Turing Award", + "year" : 2001, + "by" : "ACM" + }, + { + "award" : "IEEE John von Neumann Medal", + "year" : 2001, + "by" : "IEEE" + } + ] + }, + { + "_id" : 5, + "name" : { + "first" : "Ole-Johan", + "last" : "Dahl" + }, + "birth" : "1931-10-12T04:00:00Z", + "death" : "2002-06-29T04:00:00Z", + "contribs" : [ + "OOP", + "Simula" + ], + "awards" : [ + { + "award" : "Rosing Prize", + "year" : 1999, + "by" : "Norwegian Data Association" + }, + { + "award" : "Turing Award", + "year" : 2001, + "by" : "ACM" + }, + { + "award" : "IEEE John von Neumann Medal", + "year" : 2001, + "by" : "IEEE" + } + ] + }, + { + "_id" : 6, + "name" : { + "first" : "Guido", + "last" : "van Rossum" + }, + "birth" : "1956-01-31T05:00:00Z", + "contribs" : [ + "Python" + ], + "awards" : [ + { + "award" : "Award for the Advancement of Free Software", + "year" : 2001, + "by" : "Free Software Foundation" + }, + { + "award" : "NLUUG Award", + "year" : 2003, + "by" : "NLUUG" + } + ] + }, + { + "_id" : ObjectId("51e062189c6ae665454e301d"), + "name" : { + "first" : "Dennis", + "last" : "Ritchie" + }, + "birth" : "1941-09-09T04:00:00Z", + "death" : "2011-10-12T04:00:00Z", + "contribs" : [ + "UNIX", + "C" + ], + "awards" : [ + { + "award" : "Turing Award", + "year" : 1983, + "by" : "ACM" + }, + { + "award" : "National Medal of Technology", + "year" : 1998, + "by" : "United States" + }, + { + "award" : "Japan Prize", + "year" : 2011, + "by" : "The Japan Prize Foundation" + } + ] + }]`; + + dataSources.NavigateFromActiveDS(dsName, true); + + dataSources.ValidateNSelectDropdown( + "Commands", + "Find Document(s)", + "Insert Document(s)", + ); + + agHelper.EnterValue("AuthorNAwards", { + propFieldName: "", + directInput: false, + inputFieldName: "Collection", + }); + + agHelper.EnterValue(authorNAwardsArray, { + propFieldName: "", + directInput: false, + inputFieldName: "Documents", + }); + + agHelper.AssertAutoSave(); + agHelper.Sleep(2000); //for documents value to settle! + dataSources.RunQuery(); + agHelper.Sleep(4000); //for capturing right response! + cy.get("@postExecute").then((resObj: any) => { + //cy.log("response is " + JSON.stringify(resObj)); + expect(parseInt(JSON.stringify(resObj.response.body.data.body.n))).to.eq( + 7, + ); + }); + agHelper.ActionContextMenuWithInPane("Delete"); + + ee.expandCollapseEntity(dsName); + ee.ActionContextMenuByEntityName(dsName, "Refresh"); + agHelper.AssertElementVisible(ee._entityNameInExplorer("AuthorNAwards")); + }); + + it("5. Validate 'Find' record from new collection & verify query response", () => { + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Find"); + dataSources.ValidateNSelectDropdown("Commands", "Find Document(s)"); + RunQueryNVerify(); + }); + + it("6. Validate 'Find by ID' record from new collection & verify query response", () => { + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Find by ID"); + dataSources.ValidateNSelectDropdown("Commands", "Find Document(s)"); + agHelper.EnterValue(`{"_id": ObjectId("51df07b094c6acd67e492f41")}`, { + propFieldName: "", + directInput: false, + inputFieldName: "Query", + }); + RunQueryNVerify(); + }); + + it("7. Validate 'Insert' record from new collection & verify query response", () => { + let insertauthorNAwards = `[{ + "_id" : 8, + "name" : { + "first" : "Yukihiro", + "aka" : "Matz", + "last" : "Matsumoto" + }, + "birth" : "1965-04-14T04:00:00Z", + "contribs" : [ + "Ruby" + ], + "awards" : [ + { + "award" : "Award for the Advancement of Free Software", + "year" : "2011", + "by" : "Free Software Foundation" + } + ] +}, +{ + "_id" : 9, + "name" : { + "first" : "James", + "last" : "Gosling" + }, + "birth" : "1955-05-19T04:00:00Z", + "contribs" : [ + "Java" + ], + "awards" : [ + { + "award" : "The Economist Innovation Award", + "year" : 2002, + "by" : "The Economist" + }, + { + "award" : "Officer of the Order of Canada", + "year" : 2007, + "by" : "Canada" + } + ] +}, +{ +"_id" : ObjectId("51df07b094c6acd67e492f51"), +"name" : { + "first" : "Martin", + "last" : "Odersky" + }, + "contribs" : [ + "Scala" + ] +}]`; + + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Insert"); + dataSources.ValidateNSelectDropdown("Commands", "Insert Document(s)"); + agHelper.EnterValue(insertauthorNAwards, { + propFieldName: "", + directInput: false, + inputFieldName: "Documents", + }); + dataSources.RunQuery(); + cy.get("@postExecute").then((resObj: any) => { + expect(parseInt(JSON.stringify(resObj.response.body.data.body.n))).to.eq( + 3, + ); + }); + agHelper.AssertElementVisible(dataSources._queryResponse("JSON")); + agHelper.AssertElementVisible(dataSources._queryResponse("RAW")); + agHelper.ActionContextMenuWithInPane("Delete"); + }); + + it("8. Validate 'Update' record from new collection & verify query response - Record not present - All Matching Document", () => { + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Update"); + dataSources.ValidateNSelectDropdown("Commands", "Update Document(s)"); + agHelper.EnterValue(`{"_id": 3}`, { + propFieldName: "", + directInput: false, + inputFieldName: "Query", + }); + + agHelper.EnterValue(`{ "$set": { "birth": "1906-12-09T06:00:00Z" } }`, { + propFieldName: "", + directInput: false, + inputFieldName: "Update", + }); + dataSources.ValidateNSelectDropdown("Limit", "All Matching Documents"); + dataSources.RunQuery(); + cy.get("@postExecute").then((resObj: any) => { + expect( + parseInt(JSON.stringify(resObj.response.body.data.body.nModified)), + ).to.eq(0); + }); + agHelper.AssertElementVisible(dataSources._queryResponse("JSON")); + agHelper.AssertElementVisible(dataSources._queryResponse("RAW")); + agHelper.ActionContextMenuWithInPane("Delete"); + }); + + it("9. Validate 'Update' record from new collection & verify query response - Record present - All Matching Document", () => { + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Update"); + dataSources.ValidateNSelectDropdown("Commands", "Update Document(s)"); + agHelper.EnterValue( + `{ + "name.first": "John", + "awards": { + "$elemMatch": { + "award": "Turing Award" + } + } + }`, + { + propFieldName: "", + directInput: false, + inputFieldName: "Query", + }, + ); + + agHelper.EnterValue(`{ "$set": { "year": "1988" } }`, { + propFieldName: "", + directInput: false, + inputFieldName: "Update", + }); + dataSources.ValidateNSelectDropdown("Limit", "All Matching Documents"); + dataSources.RunQuery(); + cy.get("@postExecute").then((resObj: any) => { + expect( + parseInt(JSON.stringify(resObj.response.body.data.body.nModified)), + ).to.eq(2); + }); + agHelper.AssertElementVisible(dataSources._queryResponse("JSON")); + agHelper.AssertElementVisible(dataSources._queryResponse("RAW")); + agHelper.ActionContextMenuWithInPane("Delete"); + }); + + it("10. Validate 'Update' record from new collection & verify query response - Record present - Single Document", () => { + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Update"); + dataSources.ValidateNSelectDropdown("Commands", "Update Document(s)"); + agHelper.EnterValue(`{"_id": 4}`, { + propFieldName: "", + directInput: false, + inputFieldName: "Query", + }); + + agHelper.EnterValue(`{ "$set": { "birth": "1926-08-27T05:00:00Z" } }`, { + propFieldName: "", + directInput: false, + inputFieldName: "Update", + }); + dataSources.ValidateNSelectDropdown( + "Limit", + "All Matching Documents", + "Single Document", + ); + + dataSources.RunQuery(); + cy.get("@postExecute").then((resObj: any) => { + expect( + parseInt(JSON.stringify(resObj.response.body.data.body.nModified)), + ).to.eq(1); + }); + agHelper.AssertElementVisible(dataSources._queryResponse("JSON")); + agHelper.AssertElementVisible(dataSources._queryResponse("RAW")); + agHelper.ActionContextMenuWithInPane("Delete"); + }); + + it("11. Validate 'Delete' record from new collection & verify query response - Record not present - Single Document", () => { + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Delete"); + dataSources.ValidateNSelectDropdown("Commands", "Delete Document(s)"); + agHelper.EnterValue(`{ "_id": ObjectId("51df07b094c6acd67e492f43") }`, { + propFieldName: "", + directInput: false, + inputFieldName: "Query", + }); + dataSources.ValidateNSelectDropdown("Limit", "Single Document"); + dataSources.RunQuery(); + cy.get("@postExecute").then((resObj: any) => { + expect(parseInt(JSON.stringify(resObj.response.body.data.body.n))).to.eq( + 0, + ); + }); + agHelper.AssertElementVisible(dataSources._queryResponse("JSON")); + agHelper.AssertElementVisible(dataSources._queryResponse("RAW")); + agHelper.ActionContextMenuWithInPane("Delete"); + }); + + it("12. Validate 'Delete' record from new collection & verify query response - Record present - Single Document", () => { + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Delete"); + dataSources.ValidateNSelectDropdown("Commands", "Delete Document(s)"); + agHelper.EnterValue(`{ "_id": ObjectId("51df07b094c6acd67e492f41") }`, { + propFieldName: "", + directInput: false, + inputFieldName: "Query", + }); + + dataSources.ValidateNSelectDropdown("Limit", "Single Document"); + + dataSources.RunQuery(); + cy.get("@postExecute").then((resObj: any) => { + expect(parseInt(JSON.stringify(resObj.response.body.data.body.n))).to.eq( + 1, + ); + }); + agHelper.AssertElementVisible(dataSources._queryResponse("JSON")); + agHelper.AssertElementVisible(dataSources._queryResponse("RAW")); + agHelper.ActionContextMenuWithInPane("Delete"); + }); + + it("13. Validate 'Delete' record from new collection & verify query response - Record present - All Matching Document", () => { + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Delete"); + dataSources.ValidateNSelectDropdown("Commands", "Delete Document(s)"); + agHelper.EnterValue(`{ "awards.award": "Rosing Prize" }`, { + propFieldName: "", + directInput: false, + inputFieldName: "Query", + }); + + dataSources.ValidateNSelectDropdown( + "Limit", + "Single Document", + "All Matching Documents", + ); + + dataSources.RunQuery(); + cy.get("@postExecute").then((resObj: any) => { + expect(Number(JSON.stringify(resObj.response.body.data.body.n))).to.eq(2); + }); + agHelper.AssertElementVisible(dataSources._queryResponse("JSON")); + agHelper.AssertElementVisible(dataSources._queryResponse("RAW")); + agHelper.ActionContextMenuWithInPane("Delete"); + }); + + it("14. Validate 'Count' record from new collection & verify query response", () => { + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Count"); + dataSources.ValidateNSelectDropdown("Commands", "Count"); + dataSources.RunQuery(); + cy.get("@postExecute").then((resObj: any) => { + expect(Number(JSON.stringify(resObj.response.body.data.body.n))).to.eq(7); + }); + agHelper.AssertElementVisible(dataSources._queryResponse("JSON")); + agHelper.AssertElementVisible(dataSources._queryResponse("RAW")); + agHelper.ActionContextMenuWithInPane("Delete"); + }); + + it("15. Validate 'Distinct' record from new collection & verify query response", () => { + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Distinct"); + dataSources.ValidateNSelectDropdown("Commands", "Distinct"); + agHelper.EnterValue(`{ "awards.award": "National Medal of Technology" }`, { + propFieldName: "", + directInput: false, + inputFieldName: "Query", + }); + + dataSources.RunQuery(); + cy.get("@postExecute").then((resObj: any) => { + expect( + JSON.parse(JSON.stringify(resObj.response.body.data.body.values[0])), + ).to.eql("51df07b094c6acd67e492f42"); + expect( + JSON.parse(JSON.stringify(resObj.response.body.data.body.values[1])), + ).to.eql("51e062189c6ae665454e301d"); + }); + agHelper.AssertElementVisible(dataSources._queryResponse("JSON")); + agHelper.AssertElementVisible(dataSources._queryResponse("RAW")); + agHelper.ActionContextMenuWithInPane("Delete"); + }); + + it("16. Validate 'Aggregate' record from new collection & verify query response", () => { + ee.ActionTemplateMenuByEntityName("AuthorNAwards", "Aggregate"); + dataSources.ValidateNSelectDropdown("Commands", "Aggregate"); + RunQueryNVerify(7); + }); + + it("17. Verify Generate CRUD for the new collection & Verify Deploy mode for table - AuthorNAwards", () => { + dataSources.NavigateFromActiveDS(dsName, false); + agHelper.ValidateNetworkStatus("@getDatasourceStructure"); //Making sure table dropdown is populated + agHelper.GetNClick(dataSources._selectTableDropdown); + agHelper.GetNClickByContains(dataSources._dropdownOption, "AuthorNAwards"); + GenerateCRUDNValidateDeployPage( + `[{"award":"Award for the Advancement of Free Software","year":2001,"by":"Free Software Foundation"},{"award":"NLUUG Award","year":2003,"by":"NLUUG"}]`, + "6", + "", + 3, + ); + // agHelper.NavigateBacktoEditor(); + // table.WaitUntilTableLoad(); + }); + + //Update, delete, Add goes here + + it("18. Validate Deletion of the Newly Created Page - AuthorNAwards", () => { + agHelper.NavigateBacktoEditor(); + table.WaitUntilTableLoad(); + //Delete the test data + ee.expandCollapseEntity("PAGES"); + ee.ActionContextMenuByEntityName( + "AuthorNAwards", + "Delete", + "Are you sure?", + ); + agHelper.ValidateNetworkStatus("@deletePage", 200); + }); + + it("19. Validate Drop of the Newly Created - Stores - Table from MySQL datasource", () => { + let dropCollection = `{ "drop": "AuthorNAwards" }`; + dataSources.NavigateFromActiveDS(dsName, true); + + dataSources.ValidateNSelectDropdown("Commands", "Find Document(s)", "Raw"); + agHelper.GetNClick(dataSources._templateMenu); + + agHelper.RenameWithInPane("DropAuthorNAwardsPage"); + agHelper.EnterValue(dropCollection); + cy.get(".CodeMirror textarea").focus(); + //agHelper.VerifyEvaluatedValue(tableCreateQuery); + + dataSources.RunQuery(); + agHelper.ActionContextMenuWithInPane("Delete"); + ee.expandCollapseEntity(dsName); + ee.ActionContextMenuByEntityName(dsName, "Refresh"); + agHelper.AssertElementAbsence(ee._entityNameInExplorer("AuthorNAwards")); + }); + + it("20. Verify application does not break when user runs the query with wrong table name", function() { + let dropCollection = `{ "drop": "AuthorNAwards" }`; + dataSources.NavigateFromActiveDS(dsName, true); + dataSources.ValidateNSelectDropdown("Commands", "Find Document(s)", "Raw"); + agHelper.GetNClick(dataSources._templateMenu); + agHelper.RenameWithInPane("DropStores"); + agHelper.EnterValue(dropCollection); + cy.get(".CodeMirror textarea").focus(); + //agHelper.VerifyEvaluatedValue(tableCreateQuery); + + dataSources.RunQuery(false); + agHelper + .GetText(dataSources._queryError) + .then(($errorText) => + expect($errorText).to.eq("ns not found."), + ); + agHelper.ActionContextMenuWithInPane("Delete"); + }); + + function GenerateCRUDNValidateDeployPage( + col1Text: string, + col2Text: string, + col3Text: string, + idIndex: number, + ) { + agHelper.GetNClick(dataSources._generatePageBtn); + agHelper.ValidateNetworkStatus("@replaceLayoutWithCRUDPage", 201); + agHelper.ValidateToastMessage("Successfully generated a page"); + agHelper.ValidateNetworkStatus("@getActions", 200); + agHelper.ValidateNetworkStatus("@postExecute", 200); + agHelper.ValidateNetworkStatus("@updateLayout", 200); + + agHelper.GetNClick(dataSources._visibleTextSpan("GOT IT")); + deployMode.DeployApp(); + + //Validating loaded table + agHelper.AssertElementExist(dataSources._selectedRow); + table.ReadTableRowColumnData(0, 0, 2000).then(($cellData) => { + expect($cellData).to.eq(col1Text); + }); + table.ReadTableRowColumnData(0, 3, 200).then(($cellData) => { + expect($cellData).to.eq(col2Text); + }); + table.ReadTableRowColumnData(0, 6, 200).then(($cellData) => { + expect($cellData).to.eq(col3Text); + }); + + //Validating loaded JSON form + cy.xpath(locator._spanButton("Update")).then((selector) => { + cy.wrap(selector) + .invoke("attr", "class") + .then((classes) => { + //cy.log("classes are:" + classes); + expect(classes).not.contain("bp3-disabled"); + }); + }); + dataSources.AssertJSONFormHeader(0, idIndex, "Id", "", true); + } + + function RunQueryNVerify(expectdRecordCount = 1) { + dataSources.RunQuery(); + agHelper.AssertElementVisible(dataSources._queryResponse("JSON")); + agHelper.AssertElementVisible(dataSources._queryResponse("RAW")); + agHelper.AssertElementVisible( + dataSources._queryRecordResult(expectdRecordCount), + ); + agHelper.ActionContextMenuWithInPane("Delete"); + } }); diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/CRUD_JSONForm/MySQL_Spec.ts b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/CRUD_JSONForm/MySQL_Spec.ts index 4ffc98ec90..06bc44db1d 100644 --- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/CRUD_JSONForm/MySQL_Spec.ts +++ b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/CRUD_JSONForm/MySQL_Spec.ts @@ -60,7 +60,7 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => { ee.ActionContextMenuByEntityName("Page2", "Delete", "Are you sure?"); agHelper.ValidateNetworkStatus("@deletePage", 200); - //Unable to delete ds until app is published again + //Should not be able to delete ds until app is published again //coz if app is published & shared then deleting ds may cause issue, So! cy.get("@dsName").then(($dsName) => { dsName = $dsName; diff --git a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/GenerateCRUD/Mongo_Spec.js b/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/GenerateCRUD/Mongo_Spec.js deleted file mode 100644 index a25dd4dba4..0000000000 --- a/app/client/cypress/integration/Smoke_TestSuite/ClientSideTests/GenerateCRUD/Mongo_Spec.js +++ /dev/null @@ -1,214 +0,0 @@ -const pages = require("../../../../locators/Pages.json"); -const generatePage = require("../../../../locators/GeneratePage.json"); -import homePage from "../../../../locators/HomePage"; -const datasource = require("../../../../locators/DatasourcesEditor.json"); -const commonlocators = require("../../../../locators/commonlocators.json"); - -describe("Generate New CRUD Page Inside from Mongo as Data Source", function() { - let datasourceName; - - before(() => { - cy.startRoutesForDatasource(); - //cy.startInterceptRoutesForMongo(); //if used in before - 2nd testcase failing with no aliasing found error - }); - - beforeEach(function() { - 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("1. Add new Page and generate CRUD template using existing supported datasource", function() { - cy.NavigateToDatasourceEditor(); - cy.get(datasource.MongoDB).click({ force: true }); - - if (Cypress.env("Mongo") === 0) cy.fillMongoDatasourceFormWithURI(); - else cy.fillMongoDatasourceForm(); - - cy.generateUUID().then((uid) => { - datasourceName = `Mongo MOCKDS ${uid}`; - cy.renameDatasource(datasourceName); - cy.wrap(datasourceName).as("dSName"); - }); - - //TestData source - - cy.get(".t--test-datasource").click({ force: true }); - cy.wait("@testDatasource"); - - //Save source - cy.get(".t--save-datasource").click({ force: true }); - - //Verify page after save clicked - cy.get("@createDatasource").then((httpResponse) => { - datasourceName = httpResponse.response.body.data.name; - }); - - //Create New page - cy.get(pages.AddPage) - .first() - .click(); - cy.wait("@createPage").should( - "have.nested.property", - "response.body.responseMeta.status", - 201, - ); - - //Generate New CRUD in new page - - cy.get("@dSName").then((dbName) => { - cy.get(generatePage.generateCRUDPageActionCard).click(); - cy.get(generatePage.selectDatasourceDropdown).click(); - cy.get(generatePage.datasourceDropdownOption) - .contains(dbName) - .click(); - }); - - cy.wait("@getDatasourceStructure").should( - "have.nested.property", - "response.body.responseMeta.status", - 200, - ); - - cy.get(generatePage.selectTableDropdown).click(); - cy.get(generatePage.dropdownOption) - .first() - .click(); - cy.get(generatePage.generatePageFormSubmitBtn).click(); - - cy.wait("@replaceLayoutWithCRUDPage").should( - "have.nested.property", - "response.body.responseMeta.status", - 201, - ); - cy.wait("@getActions").should( - "have.nested.property", - "response.body.responseMeta.status", - 200, - ); - cy.wait("@postExecute").should( - "have.nested.property", - "response.body.responseMeta.status", - 200, - ); - cy.get(commonlocators.toastAction) - .should("have.length", 1) - .should("have.text", "Successfully generated a page"); - cy.get("span:contains('GOT IT')").click(); - }); - - it("2. Create new app and Generate CRUD page using a new datasource", function() { - cy.NavigateToHome(); - - cy.get(homePage.createNew) - .first() - .click({ force: true }); - - cy.wait("@createNewApplication").should( - "have.nested.property", - "response.body.responseMeta.status", - 201, - ); - - cy.get(generatePage.generateCRUDPageActionCard).click(); - cy.get(generatePage.selectDatasourceDropdown).click(); - - cy.contains("Connect New Datasource").click(); - - cy.get(datasource.MongoDB).click(); - - if (Cypress.env("Mongo") === 0) cy.fillMongoDatasourceFormWithURI(); - else cy.fillMongoDatasourceForm(); - - cy.generateUUID().then((uid) => { - datasourceName = `Mongo MOCKDS ${uid}`; - cy.renameDatasource(datasourceName); - cy.wrap(datasourceName).as("dSName"); - }); - - //TestData source - cy.get(".t--test-datasource").click({ force: true }); - cy.wait("@testDatasource"); - - //Save source - cy.get(".t--save-datasource").click({ force: true }); - - //Generate Stub for tables dropdown values also - cy.wait("@getDatasourceStructure").should( - "have.nested.property", - "response.body.responseMeta.status", - 200, - ); - - cy.get(generatePage.selectTableDropdown).click(); - cy.get(generatePage.dropdownOption) - .first() - .click(); - cy.get(generatePage.generatePageFormSubmitBtn).click(); - - cy.wait("@replaceLayoutWithCRUDPage").should( - "have.nested.property", - "response.body.responseMeta.status", - 201, - ); - cy.wait("@getActions").should( - "have.nested.property", - "response.body.responseMeta.status", - 200, - ); - cy.wait("@postExecute").should( - "have.nested.property", - "response.body.responseMeta.status", - 200, - ); - - cy.get("span:contains('GOT IT')").click(); - }); - - it("3. Generate CRUD page from datasource ACTIVE section", function() { - cy.NavigateToQueryEditor(); - cy.NavigateToActiveTab(); - cy.wait(1000); - - cy.get(datasource.datasourceCard) - .contains(datasourceName) - .scrollIntoView() - .should("be.visible") - .closest(datasource.datasourceCard) - .within(() => { - cy.get(datasource.datasourceCardGeneratePageBtn).click(); - }); - - //Generate Stub for tables dropdown values also - cy.wait("@getDatasourceStructure").should( - "have.nested.property", - "response.body.responseMeta.status", - 200, - ); - - cy.get(generatePage.selectTableDropdown).click(); - cy.get(generatePage.dropdownOption) - .first() - .click(); - cy.get(generatePage.generatePageFormSubmitBtn).click(); - - cy.wait("@replaceLayoutWithCRUDPage").should( - "have.nested.property", - "response.body.responseMeta.status", - 201, - ); - cy.wait("@getActions").should( - "have.nested.property", - "response.body.responseMeta.status", - 200, - ); - cy.wait("@postExecute").should( - "have.nested.property", - "response.body.responseMeta.status", - 200, - ); - - cy.get("span:contains('GOT IT')").click(); - }); -}); diff --git a/app/client/cypress/support/Objects/CommonLocators.ts b/app/client/cypress/support/Objects/CommonLocators.ts index 271c83ec16..0e58cd6d7b 100644 --- a/app/client/cypress/support/Objects/CommonLocators.ts +++ b/app/client/cypress/support/Objects/CommonLocators.ts @@ -60,6 +60,7 @@ export class CommonLocators { _existingFieldTextByName = (fieldName: string) => "//label[text()='" + fieldName + "']/ancestor::div[contains(@class, 't--property-control-" + fieldName.replace(/ +/g, "").toLowerCase() + "')]" _existingFieldValueByName = (fieldName: string) => this._existingFieldTextByName(fieldName) + "//div[contains(@class,'CodeMirror-code')]" _existingActualValueByName = (fieldName: string) => this._existingFieldValueByName(fieldName) + "//span/span" + _codeMirrorValue = "//div[contains(@class,'CodeMirror-code')]//span/span" _evaluatedCurrentValue = "div:last-of-type .t--CodeEditor-evaluatedValue > div:last-of-type pre" _multiSelectOptions = (option: string) => "div[title='" + option + "'] input[type='checkbox']" _divWithClass = (className: string) => "//div[contains(@class, '" + className + "')]" diff --git a/app/client/cypress/support/Pages/AggregateHelper.ts b/app/client/cypress/support/Pages/AggregateHelper.ts index c6ad9e9ab7..1cbf9a9965 100644 --- a/app/client/cypress/support/Pages/AggregateHelper.ts +++ b/app/client/cypress/support/Pages/AggregateHelper.ts @@ -3,6 +3,17 @@ const uuid = require("uuid"); import { ObjectsRegistry } from "../Objects/Registry"; let LOCAL_STORAGE_MEMORY: any = {}; +export interface IEnterValue { + propFieldName: string; + directInput: boolean; + inputFieldName: string; +} + +const DEFAULT_ENTERVALUE_OPTIONS = { + propFieldName: "", + directInput: false, + inputFieldName: "", +}; export class AggregateHelper { private locator = ObjectsRegistry.CommonLocators; @@ -449,7 +460,7 @@ export class AggregateHelper { public RefreshPage() { cy.reload(); - this.Sleep(2000) + this.Sleep(2000); } public ActionContextMenuWithInPane( @@ -471,21 +482,36 @@ export class AggregateHelper { } public TypeValueNValidate(valueToType: string, fieldName = "") { - this.EnterValue(valueToType, fieldName); + this.EnterValue(valueToType, { + propFieldName: fieldName, + directInput: false, + inputFieldName: "", + }); this.VerifyEvaluatedValue(valueToType); } - public EnterValue(valueToEnter: string, fieldName = "", notField = false) { - if (fieldName && !notField) { - cy.xpath(this.locator._existingFieldTextByName(fieldName)).then( + public EnterValue( + valueToEnter: string, + options: IEnterValue = DEFAULT_ENTERVALUE_OPTIONS, + ) { + const { propFieldName, directInput, inputFieldName } = options; + + if (propFieldName && !directInput && !inputFieldName) { + cy.xpath(this.locator._existingFieldTextByName(propFieldName)).then( ($field: any) => { this.UpdateCodeInput($field, valueToEnter); }, ); - } else if (fieldName && notField) { - cy.get(fieldName).then(($field: any) => { + } else if (propFieldName && directInput && !inputFieldName) { + cy.get(propFieldName).then(($field: any) => { this.UpdateCodeInput($field, valueToEnter); }); + } else if (inputFieldName && !propFieldName && !directInput) { + cy.xpath(this.locator._inputFieldByName(inputFieldName)).then( + ($field: any) => { + this.UpdateCodeInput($field, valueToEnter); + }, + ); } else { cy.get(this.locator._codeEditorTarget).then(($field: any) => { this.UpdateCodeInput($field, valueToEnter); @@ -572,10 +598,11 @@ export class AggregateHelper { }); } - public AssertElementAbsence(selector: string){//Should not exists - cannot take indexes + public AssertElementAbsence(selector: string) { + //Should not exists - cannot take indexes let locator = selector.startsWith("//") ? cy.xpath(selector, { timeout: 0 }) - : cy.get(selector, { timeout: 0 }) + : cy.get(selector, { timeout: 0 }); locator.should("not.exist"); } diff --git a/app/client/cypress/support/Pages/ApiPage.ts b/app/client/cypress/support/Pages/ApiPage.ts index 74930663ba..a928b6f145 100644 --- a/app/client/cypress/support/Pages/ApiPage.ts +++ b/app/client/cypress/support/Pages/ApiPage.ts @@ -79,24 +79,44 @@ export class ApiPage { } EnterURL(url: string) { - this.agHelper.EnterValue(url, this._resourceUrl, true); + this.agHelper.EnterValue(url, { + propFieldName: this._resourceUrl, + directInput: true, + inputFieldName: "", + }); this.agHelper.AssertAutoSave(); } EnterHeader(hKey: string, hValue: string) { this.SelectPaneTab("Headers"); - this.agHelper.EnterValue(hKey, this._headerKey(0), true); + this.agHelper.EnterValue(hKey, { + propFieldName: this._headerKey(0), + directInput: true, + inputFieldName: "", + }); cy.get("body").type("{esc}"); - this.agHelper.EnterValue(hValue, this._headerValue(0), true); + this.agHelper.EnterValue(hValue, { + propFieldName: this._headerValue(0), + directInput: true, + inputFieldName: "", + }); cy.get("body").type("{esc}"); this.agHelper.AssertAutoSave(); } EnterParams(pKey: string, pValue: string) { this.SelectPaneTab("Params"); - this.agHelper.EnterValue(pKey, this._paramKey(0), true); + this.agHelper.EnterValue(pKey, { + propFieldName: this._paramKey(0), + directInput: true, + inputFieldName: "", + }); cy.get("body").type("{esc}"); - this.agHelper.EnterValue(pValue, this._paramValue(0), true); + this.agHelper.EnterValue(pValue, { + propFieldName: this._paramValue(0), + directInput: true, + inputFieldName: "", + }); cy.get("body").type("{esc}"); this.agHelper.AssertAutoSave(); } @@ -114,7 +134,11 @@ export class ApiPage { cy.get(this._trashDelete).click(); cy.xpath(this._visibleTextSpan("Add more")).click(); } - this.agHelper.EnterValue(bKey, this._bodyKey(0), true); + this.agHelper.EnterValue(bKey, { + propFieldName: this._bodyKey(0), + directInput: true, + inputFieldName: "", + }); cy.get("body").type("{esc}"); if (type) { @@ -123,7 +147,11 @@ export class ApiPage { .click(); cy.xpath(this._visibleTextDiv(type)).click(); } - this.agHelper.EnterValue(bValue, this._bodyValue(0), true); + this.agHelper.EnterValue(bValue, { + propFieldName: this._bodyValue(0), + directInput: true, + inputFieldName: "", + }); cy.get("body").type("{esc}"); this.agHelper.AssertAutoSave(); } @@ -144,14 +172,14 @@ export class ApiPage { OnPageLoadRun(enable = true || false) { this.SelectPaneTab("Settings"); - if(enable) - cy.get(this._onPageLoad).check({ - force: true, - }); + if (enable) + cy.get(this._onPageLoad).check({ + force: true, + }); else - cy.get(this._onPageLoad).uncheck({ - force: true, - }); + cy.get(this._onPageLoad).uncheck({ + force: true, + }); } ConfirmBeforeRunningApi(enable = true || false) { diff --git a/app/client/cypress/support/Pages/DataSources.ts b/app/client/cypress/support/Pages/DataSources.ts index 5fa65083e0..158afde0a2 100644 --- a/app/client/cypress/support/Pages/DataSources.ts +++ b/app/client/cypress/support/Pages/DataSources.ts @@ -50,7 +50,13 @@ export class DataSources { "//div[@data-guided-tour-id='query-table-response']//div[@class='tbody']//div[@class ='td']"; _refreshIcon = "button .bp3-icon-refresh"; _addIcon = "button .bp3-icon-add"; - _queryError = "span.t--query-error" + _queryError = "span.t--query-error"; + _queryResponse = (responseType: string) => + "li[data-cy='t--tab-" + responseType + "']"; + _queryRecordResult = (recordCount: number) => + "//div/span[text()='Result:']/span[contains(text(),'" + + recordCount + + " Record')]"; public StartDataSourceRoutes() { cy.intercept("PUT", "/api/v1/datasources/*").as("saveDatasource"); @@ -105,10 +111,37 @@ export class DataSources { }).as("replaceLayoutWithCRUDPage"); } + public StartInterceptRoutesForMongo() { + //All stubbing + this.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"); + } + public CreatePlugIn(pluginName: string) { cy.get(this._createNewPlgin(pluginName)) .parent("div") .trigger("click", { force: true }); + this.agHelper.WaitUntilToastDisappear("datasource created"); } public NavigateToDSCreateNew() { @@ -177,6 +210,7 @@ export class DataSources { public TestDatasource(expectedRes = true) { cy.get(this._testDs).click(); this.agHelper.ValidateNetworkDataSuccess("@testDatasource", expectedRes); + this.agHelper.WaitUntilToastDisappear("datasource is valid"); } public SaveDatasource() { @@ -208,7 +242,10 @@ export class DataSources { this.agHelper.ValidateNetworkStatus("@deleteDatasource", expectedRes); } - public DeleteDatasouceFromWinthinDS(datasourceName: string, expectedStatus = 200) { + public DeleteDatasouceFromWinthinDS( + datasourceName: string, + expectedStatus = 200, + ) { this.NavigateToDSCreateNew(); this.agHelper.GetNClick(this._activeTab); cy.get(this._datasourceCard) @@ -280,7 +317,10 @@ export class DataSources { RunQuery(expectedStatus = true) { cy.get(this._runQueryBtn).click({ force: true }); - this.agHelper.ValidateNetworkExecutionSuccess("@postExecute", expectedStatus); + this.agHelper.ValidateNetworkExecutionSuccess( + "@postExecute", + expectedStatus, + ); } public ReadQueryTableResponse(index: number, timeout = 100) { @@ -297,16 +337,19 @@ export class DataSources { colIndex: number, headerString: string, validateCellData: "" | string = "", + isMongo = false, ) { + let jsonHeaderString = ""; this.table.ReadTableRowColumnData(rowindex, colIndex).then(($cellData) => { if (validateCellData) expect($cellData).to.eq(validateCellData); + + jsonHeaderString = + isMongo == true + ? "Update Document " + headerString + ": " + $cellData + : "Update Row " + headerString + ": " + $cellData; this.agHelper .GetText(this.locator._jsonFormHeader) - .then(($header: any) => - expect($header).to.eq( - "Update Row " + headerString + ": " + $cellData, - ), - ); + .then(($header: any) => expect($header).to.eq(jsonHeaderString)); }); } } diff --git a/app/client/cypress/support/Pages/EntityExplorer.ts b/app/client/cypress/support/Pages/EntityExplorer.ts index 7a33940afc..865495b473 100644 --- a/app/client/cypress/support/Pages/EntityExplorer.ts +++ b/app/client/cypress/support/Pages/EntityExplorer.ts @@ -1,5 +1,19 @@ import { ObjectsRegistry } from "../Objects/Registry"; +type templateActions = + | "SELECT" + | "INSERT" + | "UPDATE" + | "DELETE" + | "Find" + | "Find by ID" + | "Insert" + | "Update" + | "Delete" + | "Count" + | "Distinct" + | "Aggregate"; + export class EntityExplorer { public agHelper = ObjectsRegistry.AggregateHelper; public locator = ObjectsRegistry.CommonLocators; @@ -97,7 +111,7 @@ export class EntityExplorer { public ActionTemplateMenuByEntityName( entityNameinLeftSidebar: string, - action: "SELECT" | "INSERT" | "UPDATE" | "DELETE", + action: templateActions, ) { cy.xpath(this._templateMenuTrigger(entityNameinLeftSidebar)) .last() diff --git a/app/client/cypress/support/Pages/JSEditor.ts b/app/client/cypress/support/Pages/JSEditor.ts index 3bb584cd27..a02cb6141d 100644 --- a/app/client/cypress/support/Pages/JSEditor.ts +++ b/app/client/cypress/support/Pages/JSEditor.ts @@ -99,7 +99,7 @@ export class JSEditor { cy.get(this._jsObjTxt).should("not.exist"); //cy.waitUntil(() => cy.get(this.locator._toastMsg).should('not.be.visible')) // fails sometimes - //this.agHelper.WaitUntilEleDisappear(this.locator._toastMsg, 'created successfully') + //this.agHelper.WaitUntilToastDisappear('created successfully') this.agHelper.Sleep(); } @@ -212,7 +212,11 @@ export class JSEditor { // .type("{del}", { force: true }); if (paste) { - this.agHelper.EnterValue(value, endp, notField); + this.agHelper.EnterValue(value, { + propFieldName: endp, + directInput: notField, + inputFieldName: "", + }); } else { cy.get( this.locator._propertyControl + diff --git a/app/client/cypress/support/Pages/Table.ts b/app/client/cypress/support/Pages/Table.ts index d3539dcb17..a7947fff89 100644 --- a/app/client/cypress/support/Pages/Table.ts +++ b/app/client/cypress/support/Pages/Table.ts @@ -44,8 +44,8 @@ export class Table { _showPageItemsCount = "div.show-page-items" _filtersCount = this._filterBtn + " span.action-title" - public WaitUntilTableLoad() { - cy.waitUntil(() => this.ReadTableRowColumnData(0, 0, 2000), + public WaitUntilTableLoad(rowIndex = 0, colIndex = 0) { + cy.waitUntil(() => this.ReadTableRowColumnData(rowIndex, colIndex, 2000), { errorMsg: "Table is not populated", timeout: 10000,