## Description - This PR fixes the Ghseet tests failing in CI due to Homepage revamp changes #### Type of change - Script fix (non-breaking change which fixes an issue) ## Testing #### How Has This Been Tested? - [X] Cypress CI runs ## Checklist: #### QA activity: - [X] Added `Test Plan Approved` label after Cypress tests were reviewed <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced the app creation process by ensuring the correct workspace is selected beforehand across various scenarios. - Modified the `specPattern` array in `cypress_ci_hosted.config.ts` to include new paths related to GSheet tests. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
358 lines
12 KiB
TypeScript
358 lines
12 KiB
TypeScript
/// <reference types="Cypress" />
|
|
import { GSHEET_DATA } from "../../fixtures/test-data-gsheet";
|
|
import {
|
|
homePage,
|
|
gsheetHelper,
|
|
dataSources,
|
|
agHelper,
|
|
entityExplorer,
|
|
table,
|
|
assertHelper,
|
|
appSettings,
|
|
} from "../../support/Objects/ObjectsCore";
|
|
|
|
const workspaceName = "gsheet apps";
|
|
const dataSourceName = "gsheet-all";
|
|
let appName = "gsheet-app";
|
|
let spreadSheetName = "test-sheet";
|
|
describe(
|
|
"GSheet-Functional Tests With All Access",
|
|
{ tags: ["@tag.Datasource", "@tag.GSheet"] },
|
|
function () {
|
|
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.SelectWorkspace(workspaceName);
|
|
homePage.CreateAppInWorkspace(workspaceName, appName);
|
|
gsheetHelper.AddNewSpreadsheetQuery(
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
JSON.stringify([GSHEET_DATA[0]]),
|
|
);
|
|
cy.get("@postExecute").then((interception: any) => {
|
|
expect(
|
|
interception.response.body.data.body.properties.title,
|
|
).to.deep.equal(spreadSheetName);
|
|
});
|
|
});
|
|
|
|
it("1. Add and verify fetch details query", () => {
|
|
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. Verify Insert one and Insert many queries", () => {
|
|
// add insert one query and verify
|
|
gsheetHelper.AddInsertOrUpdateQuery(
|
|
"Insert One",
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
JSON.stringify(GSHEET_DATA[1]),
|
|
);
|
|
cy.get("@postExecute").then((interception: any) => {
|
|
expect(interception.response.body.data.body.message).to.deep.equal(
|
|
"Inserted row successfully!",
|
|
);
|
|
});
|
|
|
|
// add insert many query and verify
|
|
gsheetHelper.AddInsertOrUpdateQuery(
|
|
"Insert Many",
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
JSON.stringify(GSHEET_DATA.slice(2, 10)),
|
|
);
|
|
cy.get("@postExecute").then((interception: any) => {
|
|
expect(interception.response.body.data.body.message).to.deep.equal(
|
|
"Inserted rows successfully!",
|
|
);
|
|
});
|
|
});
|
|
|
|
it("3. Verify Update one and Update many queries", () => {
|
|
// add update one query and verify
|
|
gsheetHelper.AddInsertOrUpdateQuery(
|
|
"Update One",
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
JSON.stringify(GSHEET_DATA[1]),
|
|
);
|
|
cy.get("@postExecute").then((interception: any) => {
|
|
expect(interception.response.body.data.body.message).to.deep.equal(
|
|
"Updated sheet successfully!",
|
|
);
|
|
});
|
|
|
|
// add update many query and verify
|
|
gsheetHelper.AddInsertOrUpdateQuery(
|
|
"Update Many",
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
JSON.stringify(GSHEET_DATA.slice(2, 4)),
|
|
);
|
|
cy.get("@postExecute").then((interception: any) => {
|
|
expect(interception.response.body.data.body.message).to.deep.equal(
|
|
"Updated sheet successfully!",
|
|
);
|
|
});
|
|
});
|
|
|
|
it("4. Verify Fetch many query", () => {
|
|
// Add simple Fetch many query and verify
|
|
gsheetHelper.EnterBasicQueryValues(
|
|
"Fetch Many",
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
);
|
|
dataSources.RunQueryNVerifyResponseViews(GSHEET_DATA.length);
|
|
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
|
|
|
|
// Update query to fetch only 1 column and verify
|
|
gsheetHelper.SelectMultiDropDownValue("Columns", "product_name");
|
|
dataSources.RunQuery();
|
|
dataSources.RunQueryNVerifyResponseViews(GSHEET_DATA.length);
|
|
dataSources.AssertQueryTableResponse(0, GSHEET_DATA[0].product_name);
|
|
|
|
//Remove column filter and add Sort By Ascending and verify
|
|
gsheetHelper.SelectMultiDropDownValue("Columns", "product_name"); //unselect the Columns dd value
|
|
agHelper.EnterValue("price", {
|
|
propFieldName: "",
|
|
directInput: false,
|
|
inputFieldName: "Sort By",
|
|
});
|
|
dataSources.RunQueryNVerifyResponseViews(GSHEET_DATA.length);
|
|
dataSources.AssertQueryTableResponse(
|
|
0,
|
|
"5afbaf65680c9f378af5b3a3ae22427e",
|
|
);
|
|
dataSources.AssertQueryTableResponse(
|
|
1,
|
|
"ラーニング カーブ チャギントン インタラクティブ チャッツワース",
|
|
); // Asserting other language
|
|
dataSources.AssertQueryTableResponse(2, "₹, $, €, ¥, £"); // Asserting different symbols
|
|
dataSources.AssertQueryTableResponse(3, "!@#$%^&*"); // Asserting special chars
|
|
|
|
// Sort by descending and verify
|
|
dataSources.ClearSortByOption(); //clearing previous sort option
|
|
dataSources.EnterSortByValues("price", "Descending");
|
|
dataSources.RunQuery();
|
|
dataSources.RunQueryNVerifyResponseViews(GSHEET_DATA.length);
|
|
dataSources.AssertQueryTableResponse(
|
|
1,
|
|
"ホーンビー ゲージ ウェスタン エクスプレス デジタル トレイン セット (eLink および TTS ロコ トレイン セット付き)",
|
|
); // Asserting other language
|
|
dataSources.AssertQueryTableResponse(
|
|
4,
|
|
"Hornby Gauge Western Express Digital Train Set with eLink and TTS Loco Train Set",
|
|
);
|
|
|
|
// Filter by where clause and verify
|
|
agHelper.TypeDynamicInputValueNValidate(
|
|
"price",
|
|
dataSources._nestedWhereClauseKey(0),
|
|
);
|
|
agHelper.TypeDynamicInputValueNValidate(
|
|
"100",
|
|
dataSources._nestedWhereClauseValue(0),
|
|
);
|
|
dataSources.RunQuery();
|
|
dataSources.RunQueryNVerifyResponseViews(8);
|
|
dataSources.AssertQueryTableResponse(
|
|
0,
|
|
"87bbb472ef9d90dcef140a551665c929",
|
|
);
|
|
|
|
// Filter by cell range and verify
|
|
dataSources.ValidateNSelectDropdown(
|
|
"Filter Format",
|
|
"Where Clause",
|
|
"Cell range",
|
|
);
|
|
agHelper.EnterValue("A2:A5", {
|
|
propFieldName: "",
|
|
directInput: false,
|
|
inputFieldName: "Cell range",
|
|
});
|
|
dataSources.RunQuery();
|
|
dataSources.RunQueryNVerifyResponseViews(4);
|
|
dataSources.AssertQueryTableResponse(
|
|
0,
|
|
"eac7efa5dbd3d667f26eb3d3ab504464",
|
|
);
|
|
});
|
|
|
|
it("5. Update a record which is not present and verify the error", () => {
|
|
//preparing data
|
|
let data = GSHEET_DATA[1];
|
|
data.rowIndex = "15";
|
|
|
|
// add update one query and verify
|
|
gsheetHelper.EnterBasicQueryValues(
|
|
"Update One",
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
false,
|
|
);
|
|
agHelper.EnterValue(JSON.stringify(data), {
|
|
propFieldName: "",
|
|
directInput: false,
|
|
inputFieldName: "Update row object",
|
|
});
|
|
dataSources.RunQuery({
|
|
expectedStatus: false,
|
|
});
|
|
cy.get("@postExecute").then((interception: any) => {
|
|
expect(interception.response.body.data.body).to.deep.equal(
|
|
"No data found at this row index.",
|
|
);
|
|
});
|
|
});
|
|
|
|
it("6. Convert field to JS and verify", () => {
|
|
// Switch js on sheet name then run query and verify
|
|
gsheetHelper.EnterBasicQueryValues(
|
|
"Fetch Many",
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
false,
|
|
);
|
|
agHelper.GetNClick(
|
|
dataSources._getJSONswitchLocator("Sheet name"),
|
|
0,
|
|
true,
|
|
);
|
|
dataSources.RunQueryNVerifyResponseViews(10);
|
|
dataSources.AssertQueryTableResponse(
|
|
0,
|
|
"eac7efa5dbd3d667f26eb3d3ab504464",
|
|
);
|
|
|
|
//Enter a wrong sheet name then run query and verify
|
|
agHelper.EnterValue("Sheet 2", {
|
|
propFieldName: "",
|
|
directInput: false,
|
|
inputFieldName: "Sheet name",
|
|
});
|
|
dataSources.RunQuery({
|
|
expectedStatus: false,
|
|
});
|
|
cy.get("@postExecute").then((interception: any) => {
|
|
expect(interception.response.body.data.body).to.deep.equal(
|
|
"Unable to parse range: 'Sheet 2'!1:1",
|
|
);
|
|
});
|
|
|
|
//Covert sheet name field to dropdown then run query and verify
|
|
agHelper.HoverElement(dataSources._getJSONswitchLocator("Sheet name"));
|
|
agHelper.AssertTooltip("Clear the field to toggle back");
|
|
agHelper.EnterValue("", {
|
|
propFieldName: "",
|
|
directInput: false,
|
|
inputFieldName: "Sheet name",
|
|
}); //Clearing the sheet name field
|
|
agHelper.GetNClick(
|
|
dataSources._getJSONswitchLocator("Sheet name"),
|
|
0,
|
|
true,
|
|
); // Converting the field to dropdown
|
|
dataSources.ValidateNSelectDropdown("Sheet name", "", "Sheet1");
|
|
dataSources.RunQueryNVerifyResponseViews(10);
|
|
dataSources.AssertQueryTableResponse(
|
|
0,
|
|
"eac7efa5dbd3d667f26eb3d3ab504464",
|
|
);
|
|
});
|
|
|
|
it("7. Verify Delete query", function () {
|
|
// Delete spreadsheet and app
|
|
gsheetHelper.EnterBasicQueryValues(
|
|
"Delete One",
|
|
dataSourceName,
|
|
spreadSheetName,
|
|
);
|
|
agHelper.EnterValue(GSHEET_DATA[0].rowIndex, {
|
|
propFieldName: "",
|
|
directInput: false,
|
|
inputFieldName: "Row Index",
|
|
});
|
|
dataSources.RunQuery();
|
|
cy.get("@postExecute").then((interception: any) => {
|
|
expect(interception.response.body.data.body.message).to.deep.equal(
|
|
"Deleted row successfully!",
|
|
);
|
|
});
|
|
});
|
|
|
|
it("8. Import an app with all access sheet", function () {
|
|
homePage.NavigateToHome();
|
|
homePage.ImportApp("ImportAppAllAccess.json", workspaceName);
|
|
assertHelper.WaitForNetworkCall("importNewApplication").then(() => {
|
|
agHelper.Sleep();
|
|
//Validate table is not empty!
|
|
table.WaitUntilTableLoad(0, 0, "v2");
|
|
});
|
|
// Assert table data
|
|
table.ReadTableRowColumnData(0, 0, "v2").then((cellData) => {
|
|
expect(cellData).to.eq("eac7efa5dbd3d667f26eb3d3ab504464");
|
|
});
|
|
homePage.NavigateToHome();
|
|
homePage.DeleteApplication("ImportAppAllAccess");
|
|
});
|
|
|
|
it("9. App level import of app with all access gsheet", function () {
|
|
homePage.CreateAppInWorkspace(workspaceName, "AppLevelImport");
|
|
appSettings.OpenAppSettings();
|
|
appSettings.GoToImport();
|
|
agHelper.ClickButton("Import");
|
|
homePage.ImportApp("ImportAppAllAccess.json", "", true);
|
|
cy.wait("@importNewApplication").then(() => {
|
|
agHelper.Sleep();
|
|
agHelper.RefreshPage();
|
|
table.WaitUntilTableLoad(0, 0, "v2");
|
|
});
|
|
// Assert table data
|
|
table.ReadTableRowColumnData(0, 0, "v2").then((cellData) => {
|
|
expect(cellData).to.eq("eac7efa5dbd3d667f26eb3d3ab504464");
|
|
});
|
|
homePage.NavigateToHome();
|
|
homePage.DeleteApplication("AppLevelImport");
|
|
});
|
|
|
|
after("Delete spreadsheet and app", function () {
|
|
// Delete spreadsheet and app
|
|
homePage.EditAppFromAppHover(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);
|
|
});
|
|
},
|
|
);
|