diff --git a/app/client/cypress/e2e/GSheet/SelectedSheet_Access_Spec.ts b/app/client/cypress/e2e/GSheet/SelectedSheet_Access_Spec.ts
index 791d9a2cb2b2..7850ac1b2e10 100644
--- a/app/client/cypress/e2e/GSheet/SelectedSheet_Access_Spec.ts
+++ b/app/client/cypress/e2e/GSheet/SelectedSheet_Access_Spec.ts
@@ -15,7 +15,7 @@ const workspaceName = "gsheet apps";
const dataSourceName = "gsheet-selected";
let appName = "gsheet-app";
let spreadSheetName = "test-sheet-automation-selected";
-describe(
+describe.skip(
"GSheet-Functional Tests With Selected Access",
{
tags: ["@tag.Datasource", "@tag.GSheet", "@tag.Git", "@tag.AccessControl"],
diff --git a/app/client/cypress/e2e/GSheet/SharedDrive_SelectedSheet_Access_Spec.ts b/app/client/cypress/e2e/GSheet/SharedDrive_SelectedSheet_Access_Spec.ts
new file mode 100644
index 000000000000..e54e5bb4b22f
--- /dev/null
+++ b/app/client/cypress/e2e/GSheet/SharedDrive_SelectedSheet_Access_Spec.ts
@@ -0,0 +1,368 @@
+///
+import { GSHEET_DATA } from "../../fixtures/test-data-gsheet";
+import {
+ homePage,
+ gsheetHelper,
+ dataSources,
+ agHelper,
+ entityExplorer,
+ assertHelper,
+ table,
+ appSettings,
+} from "../../support/Objects/ObjectsCore";
+import BottomTabs from "../../support/Pages/IDE/BottomTabs";
+
+const workspaceName = "gsheet apps";
+const dataSourceName = "gsheet-shared-selected";
+let appName = "gsheet-app";
+let spreadSheetName = "test-sheet-automation-selected";
+describe.skip(
+ "GSheet-Functional Tests With Selected Access",
+ {
+ tags: ["@tag.Datasource", "@tag.GSheet", "@tag.Git", "@tag.AccessControl"],
+ },
+ function () {
+ before("Setup app", function () {
+ //Setting up app name
+ const uuid = Cypress._.random(0, 10000);
+ appName = appName + "-" + uuid;
+
+ //Adding app
+ homePage.NavigateToHome();
+ homePage.SelectWorkspace(workspaceName);
+ homePage.CreateAppInWorkspace(workspaceName, appName);
+ });
+
+ it("1. Add and verify fetch details query", () => {
+ entityExplorer.CreateNewDsQuery(dataSourceName);
+ agHelper.RenameQuery("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[0]),
+ );
+ 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(1, 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.runQueryAndVerifyResponseViews({ count: GSHEET_DATA.length });
+ BottomTabs.response.selectResponseResponseTypeFromMenu("TABLE");
+ 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.runQueryAndVerifyResponseViews({ count: GSHEET_DATA.length });
+ BottomTabs.response.selectResponseResponseTypeFromMenu("TABLE");
+ 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.runQueryAndVerifyResponseViews({ count: GSHEET_DATA.length });
+ BottomTabs.response.selectResponseResponseTypeFromMenu("TABLE");
+ 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.runQueryAndVerifyResponseViews({ count: GSHEET_DATA.length });
+ BottomTabs.response.selectResponseResponseTypeFromMenu("TABLE");
+ 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.runQueryAndVerifyResponseViews({ count: 8 });
+ BottomTabs.response.selectResponseResponseTypeFromMenu("TABLE");
+ 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.runQueryAndVerifyResponseViews({ count: 4 });
+ BottomTabs.response.selectResponseResponseTypeFromMenu("TABLE");
+ dataSources.AssertQueryTableResponse(
+ 0,
+ "eac7efa5dbd3d667f26eb3d3ab504464",
+ );
+ });
+
+ it("5. Update a record which is not present and verify the error", () => {
+ //preparing data
+ const data = GSHEET_DATA[1];
+ data.rowIndex = `${Cypress._.random(100, 1031)}`;
+
+ // 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.",
+ );
+ });
+
+ //reset the row index
+ data.rowIndex = "1";
+ });
+
+ 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.runQueryAndVerifyResponseViews({ count: 10 });
+ BottomTabs.response.selectResponseResponseTypeFromMenu("TABLE");
+ 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.runQueryAndVerifyResponseViews({ count: 10 });
+ BottomTabs.response.selectResponseResponseTypeFromMenu("TABLE");
+ dataSources.AssertQueryTableResponse(
+ 0,
+ "eac7efa5dbd3d667f26eb3d3ab504464",
+ );
+ });
+
+ it("7. Verify Delete query", function () {
+ // Delete data on the basis of row index
+ gsheetHelper.EnterBasicQueryValues(
+ "Delete One",
+ dataSourceName,
+ spreadSheetName,
+ );
+ GSHEET_DATA.reverse().forEach((d) => {
+ agHelper.EnterValue(d.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!",
+ );
+ });
+ agHelper.Sleep(500);
+ });
+ // Fetch many to verify all the data is deleted
+ gsheetHelper.EnterBasicQueryValues(
+ "Fetch Many",
+ dataSourceName,
+ spreadSheetName,
+ false,
+ );
+ dataSources.RunQuery();
+ cy.get("@postExecute").then((interception: any) => {
+ expect(interception.response.body.data.body).to.deep.equal([]);
+ });
+ });
+
+ it("8. Import an app with selected access sheet", function () {
+ homePage.NavigateToHome();
+ homePage.ImportApp("ImportAppSelectedAccess.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("ImportAppSelectedAccess");
+ });
+
+ it("9. App level import of app with Selected sheet access gsheet", function () {
+ homePage.CreateAppInWorkspace(
+ workspaceName,
+ "AppLevelImportSelectedAccess",
+ );
+ appSettings.OpenAppSettings();
+ appSettings.GoToImport();
+ agHelper.ClickButton("Import");
+ homePage.ImportApp("ImportAppSelectedAccess.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("AppLevelImportSelectedAccess");
+ });
+
+ after("Delete app", function () {
+ // Delete app
+ homePage.DeleteApplication(appName);
+ });
+ },
+);
diff --git a/app/client/cypress/e2e/GSheet/WidgetBinding_SelectedAccess_Spec.ts b/app/client/cypress/e2e/GSheet/WidgetBinding_SelectedAccess_Spec.ts
index c9bfcf3afd19..9370d98d28c6 100644
--- a/app/client/cypress/e2e/GSheet/WidgetBinding_SelectedAccess_Spec.ts
+++ b/app/client/cypress/e2e/GSheet/WidgetBinding_SelectedAccess_Spec.ts
@@ -21,7 +21,7 @@ const workspaceName = "gsheet apps";
const dataSourceName = "gsheet-selected";
let appName = "gsheet-app";
let spreadSheetName = "test-sheet-automation-selected";
-describe(
+describe.skip(
"GSheet-widget binding for selected sheet access",
{
tags: ["@tag.Datasource", "@tag.GSheet", "@tag.Git", "@tag.AccessControl"],
diff --git a/app/client/cypress/e2e/GSheet/WidgetBinding_SharedDrive_SelectedSheet_Access_Spec.ts b/app/client/cypress/e2e/GSheet/WidgetBinding_SharedDrive_SelectedSheet_Access_Spec.ts
new file mode 100644
index 000000000000..1aca12dbd627
--- /dev/null
+++ b/app/client/cypress/e2e/GSheet/WidgetBinding_SharedDrive_SelectedSheet_Access_Spec.ts
@@ -0,0 +1,112 @@
+///
+import { GSHEET_DATA } from "../../fixtures/test-data-gsheet";
+import {
+ homePage,
+ gsheetHelper,
+ dataSources,
+ agHelper,
+ entityExplorer,
+ propPane,
+ table,
+ draggableWidgets,
+} from "../../support/Objects/ObjectsCore";
+import { Widgets } from "../../support/Pages/DataSources";
+import oneClickBindingLocator from "../../locators/OneClickBindingLocator";
+import {
+ PageLeftPane,
+ PagePaneSegment,
+} from "../../support/Pages/EditorNavigation";
+
+const workspaceName = "gsheet apps";
+const dataSourceName = "gsheet-shared-selected";
+let appName = "gsheet-app";
+let spreadSheetName = "test-sheet-automation-selected";
+describe.skip(
+ "GSheet-widget binding for selected sheet access",
+ {
+ tags: ["@tag.Datasource", "@tag.GSheet", "@tag.Git", "@tag.AccessControl"],
+ },
+ function () {
+ before("Setup app and spreadsheet", function () {
+ //Setting up the app name
+ const uuid = Cypress._.random(0, 10000);
+ appName = appName + "-" + uuid;
+
+ //Adding app and data to the selected sheet
+ homePage.NavigateToHome();
+ homePage.SelectWorkspace(workspaceName);
+ homePage.CreateAppInWorkspace(workspaceName);
+ homePage.RenameApplication(appName);
+ gsheetHelper.AddInsertOrUpdateQuery(
+ "Insert Many",
+ dataSourceName,
+ spreadSheetName,
+ JSON.stringify(GSHEET_DATA),
+ );
+ cy.get("@postExecute").then((interception: any) => {
+ expect(interception.response.body.data.body.message).to.deep.equal(
+ "Inserted rows successfully!",
+ );
+ });
+ });
+
+ it("1. Verify 'Add to widget [Widget Suggestion]' functionality for selected sheet access - GSheet", () => {
+ //Adding query
+ gsheetHelper.EnterBasicQueryValues(
+ "Fetch Many",
+ dataSourceName,
+ spreadSheetName,
+ );
+ dataSources.runQueryAndVerifyResponseViews({ count: 10 });
+
+ // Adding suggested widgets and verify
+ dataSources.AddSuggestedWidget(Widgets.Table);
+ agHelper.RefreshPage();
+ table.ReadTableRowColumnData(0, 0, "v2").then((cellData) => {
+ expect(cellData).to.eq("eac7efa5dbd3d667f26eb3d3ab504464");
+ });
+ agHelper.GetNClick(propPane._deleteWidget);
+ });
+
+ it("2. One click binding to table widget functionality for selected sheet access - GSheet", () => {
+ //Adding table widget
+ entityExplorer.DragDropWidgetNVerify(draggableWidgets.TABLE, 450, 200);
+ agHelper.GetNClick(oneClickBindingLocator.datasourceDropdownSelector);
+ agHelper.GetNClick(
+ oneClickBindingLocator.datasourceQuerySelector("fetch_many_query"),
+ );
+
+ // Assert table data
+ table.ReadTableRowColumnData(0, 0, "v2").then((cellData) => {
+ expect(cellData).to.eq("eac7efa5dbd3d667f26eb3d3ab504464");
+ });
+ agHelper.GetNClick(propPane._deleteWidget);
+ });
+
+ after("Delete app", function () {
+ // Delete data in spreadsheet and app
+ PageLeftPane.switchSegment(PagePaneSegment.Queries);
+ gsheetHelper.EnterBasicQueryValues(
+ "Delete One",
+ dataSourceName,
+ spreadSheetName,
+ );
+ GSHEET_DATA.reverse().forEach((d) => {
+ agHelper.EnterValue(d.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!",
+ );
+ });
+ agHelper.Sleep(500);
+ });
+ homePage.NavigateToHome();
+ homePage.DeleteApplication(appName);
+ });
+ },
+);