## Description Shows a list of pages to select when creating a query. It will only show when there are multiple pages in an app. If not, clicking the button directly creates the query in the only page. #### PR fixes following issue(s) Fixes #27961 #### Media  #### Type of change - New feature (non-breaking change which adds functionality) ## Testing > #### How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Also list any relevant details for your test configuration. > Delete anything that is not relevant - [x] Manual - [ ] JUnit - [ ] Jest - [x] Cypress > > #### Test Plan > Add Testsmith test cases links that relate to this PR > > #### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) > > > ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [ ] Cypress test cases have been added and approved by SDET/manual QA - [ ] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Refactor** - Streamlined the process for creating queries from the datasource editor across various test suites. - Enhanced the control flow and logic for handling data sources and queries in test scenarios. - **Bug Fixes** - Standardized the method of creating new queries after saving a datasource to improve test reliability. - Removed deprecated code and updated test cases to use the new `CreateQueryForDS` function. - **Tests** - Updated test scripts to reflect changes in datasource interaction and query creation. - Added new assertions and modified existing ones to accommodate the updated test flows. - **Chores** - Cleaned up import statements and removed unused code across multiple test files. - Commented out unused properties and methods to improve code maintainability. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
285 lines
11 KiB
TypeScript
285 lines
11 KiB
TypeScript
/// <reference types="Cypress" />
|
|
import { GSHEET_DATA } from "../../fixtures/test-data-gsheet";
|
|
import {
|
|
agHelper,
|
|
assertHelper,
|
|
dataSources,
|
|
deployMode,
|
|
draggableWidgets,
|
|
gsheetHelper,
|
|
homePage,
|
|
locators,
|
|
table,
|
|
} from "../../support/Objects/ObjectsCore";
|
|
import PageList from "../../support/Pages/PageList";
|
|
import EditorNavigation, {
|
|
EntityType,
|
|
} from "../../support/Pages/EditorNavigation";
|
|
|
|
const workspaceName = "gsheet apps";
|
|
const dataSourceName = "gsheet";
|
|
let appName = "gsheet-app";
|
|
let spreadSheetName = "test-sheet";
|
|
describe("GSheet Miscellaneous Tests", function () {
|
|
const columnHeaders = [
|
|
"uniq_id",
|
|
"japanese_name",
|
|
"currencies",
|
|
"specialChars",
|
|
"product_name",
|
|
"manufacturer",
|
|
"price",
|
|
"rowIndex",
|
|
];
|
|
before("Setup app and spreadsheet", function () {
|
|
//Add a new app and an add new spreadsheet query
|
|
//Setting up the spreadsheet name
|
|
const uuid = Cypress._.random(0, 10000);
|
|
spreadSheetName = spreadSheetName + "_" + uuid;
|
|
appName = appName + "-" + uuid;
|
|
|
|
//Adding query to insert a new spreadsheet
|
|
homePage.NavigateToHome();
|
|
homePage.CreateAppInWorkspace(workspaceName);
|
|
homePage.RenameApplication(appName);
|
|
gsheetHelper.AddNewSpreadsheetQuery(
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
JSON.stringify(GSHEET_DATA),
|
|
);
|
|
cy.get("@postExecute").then((interception: any) => {
|
|
agHelper.Sleep();
|
|
expect(
|
|
interception.response.body.data.body.properties.title,
|
|
).to.deep.equal(spreadSheetName);
|
|
});
|
|
});
|
|
|
|
it("1. Add query from active ds tab and verify", () => {
|
|
dataSources.CreateQueryForDS(dataSourceName);
|
|
// entityExplorer.CreateNewDsQuery(dataSourceName);
|
|
agHelper.RenameWithInPane("Fetch_Details");
|
|
dataSources.ValidateNSelectDropdown(
|
|
"Operation",
|
|
"Fetch Many",
|
|
"Fetch Details",
|
|
);
|
|
dataSources.ValidateNSelectDropdown("Entity", "Spreadsheet");
|
|
agHelper.Sleep(500);
|
|
dataSources.ValidateNSelectDropdown("Spreadsheet", "", spreadSheetName);
|
|
dataSources.RunQuery();
|
|
cy.get("@postExecute").then((interception: any) => {
|
|
expect(interception.response.body.data.body.name).to.deep.equal(
|
|
spreadSheetName,
|
|
);
|
|
});
|
|
});
|
|
|
|
it("2. Add query from edit datasource page and verify", () => {
|
|
dataSources.CreateQueryForDS(dataSourceName, "", "fetch_many", false);
|
|
dataSources.ValidateNSelectDropdown("Operation", "Fetch Many");
|
|
dataSources.ValidateNSelectDropdown("Entity", "Sheet Row(s)");
|
|
agHelper.Sleep(500);
|
|
dataSources.ValidateNSelectDropdown("Spreadsheet", "", spreadSheetName);
|
|
dataSources.ValidateNSelectDropdown("Sheet name", "", "Sheet1");
|
|
dataSources.RunQueryNVerifyResponseViews(GSHEET_DATA.length);
|
|
dataSources.AssertQueryResponseHeaders(columnHeaders);
|
|
dataSources.AssertQueryTableResponse(0, GSHEET_DATA[0].uniq_id);
|
|
dataSources.AssertQueryTableResponse(1, "ホーンビィ 2014 カタログ"); // Asserting other language
|
|
dataSources.AssertQueryTableResponse(2, "₹, $, €, ¥, £"); // Asserting different symbols
|
|
dataSources.AssertQueryTableResponse(3, "!@#$%^&*"); // Asserting special chars
|
|
});
|
|
|
|
it("3. Add query from global search and verify", () => {
|
|
dataSources.AddQueryFromGlobalSearch(dataSourceName);
|
|
dataSources.ValidateNSelectDropdown("Operation", "Fetch Many");
|
|
dataSources.ValidateNSelectDropdown("Entity", "Sheet Row(s)");
|
|
agHelper.Sleep(500);
|
|
dataSources.ValidateNSelectDropdown("Spreadsheet", "", spreadSheetName);
|
|
dataSources.ValidateNSelectDropdown("Sheet name", "", "Sheet1");
|
|
dataSources.RunQueryNVerifyResponseViews(GSHEET_DATA.length);
|
|
dataSources.AssertQueryResponseHeaders(columnHeaders);
|
|
dataSources.AssertQueryTableResponse(0, GSHEET_DATA[0].uniq_id);
|
|
dataSources.AssertQueryTableResponse(1, "ホーンビィ 2014 カタログ"); // Asserting other language
|
|
dataSources.AssertQueryTableResponse(2, "₹, $, €, ¥, £"); // Asserting different symbols
|
|
dataSources.AssertQueryTableResponse(3, "!@#$%^&*"); // Asserting special chars
|
|
});
|
|
|
|
it("4. Generate CRUD page from active datasource page and verify", () => {
|
|
// Navigating to active datasource page
|
|
EditorNavigation.SelectEntityByName(dataSourceName, EntityType.Datasource);
|
|
|
|
// Select the spreadsheet and sheet name
|
|
agHelper.GetNClick(dataSources._selectTableDropdown, 0, true);
|
|
agHelper.GetNClickByContains(dataSources._dropdownOption, spreadSheetName);
|
|
agHelper.Sleep(1000);
|
|
agHelper.GetNClick(dataSources._selectSheetNameDropdown, 0, true);
|
|
agHelper.GetNClickByContains(dataSources._dropdownOption, "Sheet1");
|
|
|
|
// Click on generate page button and verify the page is generated
|
|
agHelper.GetNClick(dataSources._generatePageBtn);
|
|
assertHelper.AssertNetworkStatus("@replaceLayoutWithCRUDPage", 201);
|
|
agHelper.AssertContains("Successfully generated a page");
|
|
assertHelper.AssertNetworkStatus("@getActions", 200);
|
|
assertHelper.AssertNetworkStatus("@postExecute", 200);
|
|
assertHelper.AssertNetworkStatus("@updateLayout", 200);
|
|
agHelper.ClickButton("Got it");
|
|
assertHelper.AssertNetworkStatus("@updateLayout", 200);
|
|
|
|
//deploy the app and verify the table data
|
|
deployMode.DeployApp(locators._widgetInDeployed(draggableWidgets.TABLE_V1));
|
|
const data = GSHEET_DATA.filter((item) => item.rowIndex === "0")[0];
|
|
table.ReadTableRowColumnData(0, 0, "v1").then((cellData) => {
|
|
expect(cellData).to.eq(data.uniq_id);
|
|
});
|
|
table.ReadTableRowColumnData(0, 1, "v1").then((cellData) => {
|
|
expect(cellData).to.eq(data.japanese_name);
|
|
});
|
|
table.ReadTableRowColumnData(0, 2, "v1").then((cellData) => {
|
|
expect(cellData).to.eq(data.currencies);
|
|
});
|
|
table.ReadTableRowColumnData(0, 3, "v1").then((cellData) => {
|
|
expect(cellData).to.eq(data.specialChars);
|
|
});
|
|
table.ReadTableRowColumnData(0, 4, "v1").then((cellData) => {
|
|
expect(cellData).to.eq(data.product_name);
|
|
});
|
|
|
|
//Validating loaded JSON form
|
|
agHelper.GetElement(locators._buttonByText("Update")).then((selector) => {
|
|
cy.wrap(selector)
|
|
.invoke("attr", "class")
|
|
.then((classes) => {
|
|
expect(classes).not.contain("bp3-disabled");
|
|
});
|
|
});
|
|
|
|
dataSources.AssertJSONFormHeader(0, 13, "Id", "0");
|
|
deployMode.NavigateBacktoEditor();
|
|
table.WaitUntilTableLoad();
|
|
});
|
|
|
|
it("5. Generate CRUD page from entity explorer and verify", () => {
|
|
// Adding pafe with data from entity explorer
|
|
PageList.AddNewPage("Generate page with data");
|
|
|
|
// Select the datasource, spreadsheet and sheet name
|
|
agHelper.GetNClick(dataSources._selectDatasourceDropdown);
|
|
agHelper.GetNClickByContains(dataSources._dropdownOption, dataSourceName);
|
|
agHelper.Sleep(1000);
|
|
agHelper.GetNClick(dataSources._selectTableDropdown, 0, true);
|
|
agHelper.GetNClickByContains(dataSources._dropdownOption, spreadSheetName);
|
|
agHelper.Sleep(1000);
|
|
agHelper.GetNClick(dataSources._selectSheetNameDropdown, 0, true);
|
|
agHelper.GetNClickByContains(dataSources._dropdownOption, "Sheet1");
|
|
|
|
// Click on generate page button and verify the page is generated
|
|
agHelper.GetNClick(dataSources._generatePageBtn);
|
|
assertHelper.AssertNetworkStatus("@replaceLayoutWithCRUDPage", 201);
|
|
agHelper.AssertContains("Successfully generated a page");
|
|
assertHelper.AssertNetworkStatus("@getActions", 200);
|
|
assertHelper.AssertNetworkStatus("@postExecute", 200);
|
|
assertHelper.AssertNetworkStatus("@updateLayout", 200);
|
|
agHelper.ClickButton("Got it");
|
|
assertHelper.AssertNetworkStatus("@updateLayout", 200);
|
|
|
|
//deploy the app and verify the table data
|
|
deployMode.DeployApp(locators._widgetInDeployed(draggableWidgets.TABLE_V1));
|
|
const data = GSHEET_DATA.filter((item) => item.rowIndex === "1")[0];
|
|
table.ReadTableRowColumnData(1, 0, "v1").then((cellData) => {
|
|
expect(cellData).to.eq(data.uniq_id);
|
|
});
|
|
table.ReadTableRowColumnData(1, 1, "v1").then((cellData) => {
|
|
expect(cellData).to.eq(data.japanese_name);
|
|
});
|
|
table.ReadTableRowColumnData(1, 2, "v1").then((cellData) => {
|
|
expect(cellData).to.eq(data.currencies);
|
|
});
|
|
table.ReadTableRowColumnData(1, 3, "v1").then((cellData) => {
|
|
expect(cellData).to.eq(data.specialChars);
|
|
});
|
|
table.ReadTableRowColumnData(1, 5, "v1").then((cellData) => {
|
|
expect(cellData).to.eq(data.manufacturer);
|
|
});
|
|
|
|
//Validating loaded JSON form
|
|
agHelper.GetElement(locators._buttonByText("Update")).then((selector) => {
|
|
cy.wrap(selector)
|
|
.invoke("attr", "class")
|
|
.then((classes) => {
|
|
expect(classes).not.contain("bp3-disabled");
|
|
});
|
|
});
|
|
|
|
dataSources.AssertJSONFormHeader(0, 13, "Id", "0");
|
|
deployMode.NavigateBacktoEditor();
|
|
table.WaitUntilTableLoad();
|
|
});
|
|
|
|
it("6. Bug: 16391 - Verify placeholder texts for insert one/many queries", function () {
|
|
// Verify place holder text for Insert one query
|
|
let placeholderText =
|
|
'{\n "name": {{nameInput.text}},\n "dob": {{dobPicker.formattedDate}},\n "gender": {{genderSelect.selectedOptionValue}} \n}';
|
|
gsheetHelper.EnterBasicQueryValues(
|
|
"Insert One",
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
false,
|
|
);
|
|
agHelper.AssertText(
|
|
dataSources._gSheetQueryPlaceholder,
|
|
"text",
|
|
placeholderText,
|
|
);
|
|
|
|
// Verify place holder text for Insert many query
|
|
placeholderText =
|
|
'[{\n "name": {{nameInput.text}},\n "dob": {{dobPicker.formattedDate}},\n "gender": {{genderSelect.selectedOptionValue}} \n}]';
|
|
|
|
gsheetHelper.EnterBasicQueryValues(
|
|
"Insert Many",
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
false,
|
|
);
|
|
agHelper.AssertText(
|
|
dataSources._gSheetQueryPlaceholder,
|
|
"text",
|
|
placeholderText,
|
|
);
|
|
});
|
|
|
|
// This test is commented since we can't use Cypress to go to the Google authorization screen. We will uncomment it whenever we figure out how to do it.
|
|
// it("7. Bug#26024 App level import of gsheet app", function () {
|
|
// homePage.NavigateToHome();
|
|
// homePage.CreateNewWorkspace("AppLevelImport");
|
|
// homePage.CreateAppInWorkspace("AppLevelImport", "AppLevelImportCheck");
|
|
// appSettings.OpenAppSettings();
|
|
// appSettings.GoToImport();
|
|
// agHelper.ClickButton("Import");
|
|
// homePage.ImportApp("ImportAppAllAccess.json", "", true);
|
|
// cy.wait("@importNewApplication").then(() => {
|
|
// agHelper.Sleep();
|
|
// agHelper.ClickButton("Save & Authorize");
|
|
// });
|
|
// cy.url().should("contain", "accounts.google.com");
|
|
// homePage.NavigateToHome();
|
|
// homePage.DeleteApplication("AppLevelImportCheck");
|
|
// homePage.DeleteWorkspace("AppLevelImport");
|
|
// });
|
|
|
|
after("Delete spreadsheet and app", function () {
|
|
// Delete spreadsheet and app
|
|
homePage.NavigateToHome();
|
|
homePage.SearchAndOpenApp(appName);
|
|
gsheetHelper.DeleteSpreadsheetQuery(dataSourceName, spreadSheetName);
|
|
cy.get("@postExecute").then((interception: any) => {
|
|
expect(interception.response.body.data.body.message).to.deep.equal(
|
|
"Deleted spreadsheet successfully!",
|
|
);
|
|
});
|
|
homePage.NavigateToHome();
|
|
homePage.DeleteApplication(appName);
|
|
});
|
|
});
|