PromucFlow_constructor/app/client/cypress/e2e/GSheet/AllAccess_Spec.ts
Sagar Khalasi a29f9cadee
chore: Addding dependent tags (#36965)
## Description
It is for increasing test coverage with tags


Fixes #`36929`  

## Automation

/ok-to-test tags="@tag.All"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/11399781852>
> Commit: 9f238070acaf07cb674cb5e1cdd0171e2d671bb3
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=11399781852&attempt=2"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.All`
> Spec:
> <hr>Fri, 18 Oct 2024 09:35:03 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [x] No
2024-10-18 18:19:08 +05:30

360 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.skip(
"GSheet-Functional Tests With All Access",
{
tags: ["@tag.Datasource", "@tag.GSheet", "@tag.Git", "@tag.AccessControl"],
},
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);
});
},
);