PromucFlow_constructor/app/client/cypress/support/queryCommands.js
Hetu Nandu 5ab58504a8
feat: Create Query asks for Page (#29253)
## 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


![Page](https://github-production-user-asset-6210df.s3.amazonaws.com/20532920/285431639-91758301-7b9e-4ee8-a209-afc563b0d96b.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A/20231204/us-east-1/s3/aws4_request&X-Amz-Date=20231204T093109Z&X-Amz-Expires=300&X-Amz-Signature=bfff9c87288f9ca913c14bc3284e9974ad805130462a375adb271936777eec26&X-Amz-SignedHeaders=host&actor_id=12022471&key_id=0&repo_id=275993885)


#### 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 -->
2023-12-05 11:20:36 +05:30

243 lines
7.3 KiB
JavaScript

/* eslint-disable cypress/no-unnecessary-waiting */
/* eslint-disable cypress/no-assigning-return-values */
import { ObjectsRegistry } from "../support/Objects/Registry";
import EditorNavigation, { EntityType } from "./Pages/EditorNavigation";
require("cy-verify-downloads").addCustomCommand();
require("cypress-file-upload");
const jsEditorLocators = require("../locators/JSEditor.json");
const datasourceEditor = require("../locators/DatasourcesEditor.json");
const datasourceFormData = require("../fixtures/datasources.json");
const queryEditor = require("../locators/QueryEditor.json");
const apiwidget = require("../locators/apiWidgetslocator.json");
const datasource = require("../locators/DatasourcesEditor.json");
const formControls = require("../locators/FormControl.json");
const { AggregateHelper, PropertyPane } = ObjectsRegistry;
export const initLocalstorage = () => {
cy.window().then((window) => {
window.localStorage.setItem("ShowCommentsButtonToolTip", "");
window.localStorage.setItem("updateDismissed", "true");
});
};
Cypress.Commands.add("NavigateToDSGeneratePage", (datasourceName) => {
EditorNavigation.SelectEntityByName(datasourceName, EntityType.Datasource);
cy.get(datasource.datasourceCardGeneratePageBtn).click();
cy.wait(2000); //for the specified page to load
});
Cypress.Commands.add("ClickGotIt", () => {
cy.get("span:contains('Got it')").click();
});
Cypress.Commands.add("fillGoogleSheetsDatasourceForm", () => {
cy.get(datasourceEditor["scope"]).click();
});
Cypress.Commands.add("fillAuthenticatedAPIForm", () => {
const URL = datasourceFormData["authenticatedApiUrl"];
cy.get(datasourceEditor.url).type(URL);
});
Cypress.Commands.add("runQuery", (expectedRes = true) => {
cy.onlyQueryRun();
AggregateHelper.CheckForErrorToast("Failed to initialize pool");
cy.wait(2000); //for postexecute to go thru
cy.wait("@postExecute").should(
"have.nested.property",
"response.body.data.isExecutionSuccess",
expectedRes,
);
// cy.wait("@postExecute").should(
// "have.nested.property",
// "response.body.responseMeta.status",
// 200,
// );
});
Cypress.Commands.add("onlyQueryRun", () => {
cy.xpath(queryEditor.runQuery).last().click({ force: true }).wait(1000);
cy.get(".ads-v2-spinner").should("not.exist");
});
Cypress.Commands.add("RunQueryWithoutWaitingForResolution", () => {
cy.xpath(queryEditor.runQuery).last().click({ force: true });
});
Cypress.Commands.add("hoverAndClick", (entity) => {
cy.xpath(
"//div[text()='" +
entity +
"']/ancestor::div[1]/following-sibling::div//button[contains(@class, 'entity-context-menu')]",
).click({ force: true });
});
Cypress.Commands.add("hoverAndClickParticularIndex", (index) => {
cy.xpath(apiwidget.popover)
.eq(index)
.should("be.hidden")
.invoke("show")
.click({ force: true });
});
Cypress.Commands.add("deleteQuery", () => {
cy.hoverAndClick();
cy.get(apiwidget.delete).click({ force: true });
cy.get(apiwidget.deleteConfirm).click({ force: true });
cy.wait("@deleteAction").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
});
Cypress.Commands.add("deleteQueryUsingContext", () => {
cy.get(queryEditor.queryMoreAction).first().click();
cy.get(queryEditor.deleteUsingContext).click();
cy.get(queryEditor.deleteUsingContext).contains("Are you sure?").click();
cy.wait("@deleteAction").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
});
Cypress.Commands.add("runAndDeleteQuery", () => {
cy.runQuery();
cy.deleteQueryUsingContext();
});
Cypress.Commands.add("executeDbQuery", (queryName, eventName) => {
PropertyPane.SelectPlatformFunction(eventName, "Execute a query");
cy.get(`.single-select:contains(${queryName})`).click({ force: true });
// cy.get(widgetsPage.buttonOnClick)
// .get(commonlocators.dropdownSelectButton)
// .eq(0)
// .click({ force: true })
// .get("ul.bp3-menu")
// .children()
// .contains("Execute a query")
// .click({ force: true })
// .get("ul.bp3-menu")
// .children()
// .contains(queryName)
// .click({ force: true });
});
Cypress.Commands.add("CreateMockQuery", (queryName) => {
// cy.get(queryEditor.addNewQueryBtn).click({ force: true });
// cy.get(queryEditor.createQuery)
// .first()
// .click({ force: true });
cy.get(queryEditor.queryNameField).type(queryName + "{enter}", {
force: true,
});
cy.assertPageSave();
cy.runQuery();
// cy.wait(3000);
// cy.get(queryEditor.runQuery)
// .click({force: true});
});
Cypress.Commands.add("ValidateQueryParams", (param) => {
cy.xpath(apiwidget.paramsTab).should("be.visible").click({ force: true });
cy.validateCodeEditorContent(apiwidget.paramKey, param.key);
cy.validateCodeEditorContent(apiwidget.paramValue, param.value);
});
// from hereeee
// targeting normal dropdowns, we can simply use the label names
Cypress.Commands.add(
"TargetDropdownAndSelectOption",
(dropdownIdentifier, option, isDynamic = false) => {
if (isDynamic) {
cy.wait(5000);
}
cy.get(dropdownIdentifier)
.scrollIntoView()
.should("be.visible")
.click({ multiple: true });
cy.get(formControls.dropdownWrapper)
.should("be.visible")
.contains(option)
.first()
.click({ force: true });
cy.wait(2000);
},
);
// targeting multiselect dropdowns, we target the data-testid value of the options
Cypress.Commands.add(
"TargetMultiSelectDropdownAndSelectOptions",
(dropdownIdentifier, options, isDynamic = false) => {
if (isDynamic) {
cy.wait(5000);
}
cy.get(dropdownIdentifier)
.scrollIntoView()
.should("be.visible")
.click({ multiple: true });
options &&
options.map((option) => {
cy.get(formControls.dropdownWrapper)
.should("be.visible")
.get(option) // we use a get instead of contains.
.first()
.click({ force: true });
});
},
);
Cypress.Commands.add(
"TargetFormControlAndSwitchViewType",
(formControlIdentifier, newViewType) => {
cy.get(formControlIdentifier).scrollIntoView().should("be.visible").click();
if (newViewType === "json") {
cy.get(formControlIdentifier)
.should("be.visible")
.should("have.class", "is-active");
} else if (newViewType === "component") {
cy.get(formControlIdentifier)
.should("be.visible")
.should("not.have.class", "is-active");
}
},
);
Cypress.Commands.add(
"VerifyCurrentDropdownOption",
(dropdownIdentifier, option) => {
cy.get(dropdownIdentifier)
.scrollIntoView()
.should("be.visible")
.contains(option)
.should("be.visible");
},
);
Cypress.Commands.add(
"ValidateAndSelectDropdownOption",
(dropdownIdentifier, currentOption, newOption, isDynamic = false) => {
cy.VerifyCurrentDropdownOption(dropdownIdentifier, currentOption);
if (newOption) {
cy.TargetDropdownAndSelectOption(
dropdownIdentifier,
newOption,
isDynamic,
);
cy.wait(2000);
}
},
);
Cypress.Commands.add("SelecJSFunctionAndRun", (functionName) => {
cy.xpath("//span[@name='expand-more']").first().click();
cy.get(`[data-testid='t--dropdown-option-${functionName}']`).click();
cy.get(jsEditorLocators.runButton).first().click();
});