test: Cypress | Flaky Fixes (#25217)

## Description
- This PR fixes below specs:
- /ListV2/Listv2_dataIdentifierProperty_spec.js
- Improves validations in /Autocomplete/JS_AC2_spec.ts
- Moving all mockApi call to TEDTestConfigs
- Datasources/Airtable_Basic_Spec.ts
- ListV2/Listv2_onItemClick_spec.js
- FirstTimeUserOnboarding_spec.js - 5th - flaky fix
- /Binding/Widgets_Default_data_validation_spec.js
- AssertDocumentReady() improved - added timeout to check page load
- TableV2/TableV2_Widget_Add_button_spec.js
- Binding/ButtonWidgets_NavigateTo_validation_spec.js
- UpdatePropertyFieldValue() improved - added intercept validation

#### 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 changes were reviewed
This commit is contained in:
Aishwarya-U-R 2023-07-11 10:44:13 +05:30 committed by GitHub
parent 71240f254e
commit a8eef88e6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
53 changed files with 684 additions and 696 deletions

View File

@ -208,8 +208,8 @@ Lets build great software together.
[![dhruvikn](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/22471214?v=4&w=50&h=50&mask=circle)](https://github.com/dhruvikn)
[![megaconfidence](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17744578?v=4&w=50&h=50&mask=circle)](https://github.com/megaconfidence)
[![tanvibhakta](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13763558?v=4&w=50&h=50&mask=circle)](https://github.com/tanvibhakta)
[![sondermanish](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/107841575?v=4&w=50&h=50&mask=circle)](https://github.com/sondermanish)
[![NilanshBansal](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25542733?v=4&w=50&h=50&mask=circle)](https://github.com/NilanshBansal)
[![sondermanish](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/107841575?v=4&w=50&h=50&mask=circle)](https://github.com/sondermanish)
[![rajatagrawal](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1189106?v=4&w=50&h=50&mask=circle)](https://github.com/rajatagrawal)
[![subrata71](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3524599?v=4&w=50&h=50&mask=circle)](https://github.com/subrata71)
[![Druthi](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20187542?v=4&w=50&h=50&mask=circle)](https://github.com/Druthi)
@ -315,19 +315,19 @@ Lets build great software together.
[![akshayrangasaid](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/76783810?v=4&w=50&h=50&mask=circle)](https://github.com/akshayrangasaid)
[![mojtab23](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5852362?v=4&w=50&h=50&mask=circle)](https://github.com/mojtab23)
[![iamrkcheers](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16760643?v=4&w=50&h=50&mask=circle)](https://github.com/iamrkcheers)
[![iamakulov](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2953267?v=4&w=50&h=50&mask=circle)](https://github.com/iamakulov)
[![sumanthyedoti](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/30371888?v=4&w=50&h=50&mask=circle)](https://github.com/sumanthyedoti)
[![vaibh1297](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/40293928?v=4&w=50&h=50&mask=circle)](https://github.com/vaibh1297)
[![vnodecg](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4994565?v=4&w=50&h=50&mask=circle)](https://github.com/vnodecg)
[![iamakulov](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2953267?v=4&w=50&h=50&mask=circle)](https://github.com/iamakulov)
[![pc9795](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/14848874?v=4&w=50&h=50&mask=circle)](https://github.com/pc9795)
[![Rhitottam](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/4265002?v=4&w=50&h=50&mask=circle)](https://github.com/Rhitottam)
[![iSatVeerSingh](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/85070570?v=4&w=50&h=50&mask=circle)](https://github.com/iSatVeerSingh)
[![akshay11298](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26507126?v=4&w=50&h=50&mask=circle)](https://github.com/akshay11298)
[![daniel-shuy](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17351764?v=4&w=50&h=50&mask=circle)](https://github.com/daniel-shuy)
[![daniloff200](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13692220?v=4&w=50&h=50&mask=circle)](https://github.com/daniloff200)
[![osis](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/347097?v=4&w=50&h=50&mask=circle)](https://github.com/osis)
[![harshitpandey0426](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/54776298?v=4&w=50&h=50&mask=circle)](https://github.com/harshitpandey0426)
[![ganganimaulik](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/10296400?v=4&w=50&h=50&mask=circle)](https://github.com/ganganimaulik)
[![iSatVeerSingh](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/85070570?v=4&w=50&h=50&mask=circle)](https://github.com/iSatVeerSingh)
[![jyash97](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/22376783?v=4&w=50&h=50&mask=circle)](https://github.com/jyash97)
[![ram-primathon](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/59244208?v=4&w=50&h=50&mask=circle)](https://github.com/ram-primathon)
[![sub1983](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17119174?v=4&w=50&h=50&mask=circle)](https://github.com/sub1983)
@ -398,7 +398,6 @@ Lets build great software together.
[![felixsuarez0727](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25110207?v=4&w=50&h=50&mask=circle)](https://github.com/felixsuarez0727)
[![gitstart](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1501599?v=4&w=50&h=50&mask=circle)](https://github.com/gitstart)
[![harshmange44](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/47944044?v=4&w=50&h=50&mask=circle)](https://github.com/harshmange44)
[![indrajitbnikam](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/24988127?v=4&w=50&h=50&mask=circle)](https://github.com/indrajitbnikam)
[![ishaanmehta4](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/61118240?v=4&w=50&h=50&mask=circle)](https://github.com/ishaanmehta4)
[![jaikanthjay46](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/31009437?v=4&w=50&h=50&mask=circle)](https://github.com/jaikanthjay46)
[![jarimayenburg](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11874892?v=4&w=50&h=50&mask=circle)](https://github.com/jarimayenburg)

View File

@ -27,8 +27,8 @@ export default defineConfig({
e2e: {
baseUrl: "https://dev.appsmith.com/",
env: {
USERNAME: "XXXX",
PASSWORD: "XXXX",
USERNAME: "xxxx",
PASSWORD: "xxx",
},
setupNodeEvents(on, config) {
return require("./cypress/plugins/index.js")(on, config);

View File

@ -3,6 +3,7 @@ import {
entityExplorer,
jsEditor,
apiPage,
tedTestConfig,
} from "../../../support/Objects/ObjectsCore";
const commonlocators = require("../../../locators/commonlocators.json");
@ -12,11 +13,10 @@ describe("JSEditor tests", function () {
});
it("1. Testing promises with resetWidget, storeValue action and API call", () => {
cy.fixture("datasources").then((datasourceFormData) => {
apiPage.CreateAndFillApi(datasourceFormData["mockApiUrl"], "TC1api");
apiPage.RunAPI();
jsEditor.CreateJSObject(
`export default {
apiPage.CreateAndFillApi(tedTestConfig.mockApiUrl, "TC1api");
apiPage.RunAPI();
jsEditor.CreateJSObject(
`export default {
myFun1: async () => { //comment
await this.clearStore() //clear store value before running the case
return resetWidget('Switch1')
@ -43,51 +43,51 @@ describe("JSEditor tests", function () {
})
}
}`,
{
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
},
);
entityExplorer.SelectEntityByName("Page1", "Pages");
cy.wait(2000);
// verify text in the text widget
cy.get(".t--draggable-textwidget span")
.eq(5)
.invoke("text")
.then((text) => {
expect(text).to.equal(
"Step 4: Value is Green and will default to undefined",
);
});
// toggle off the switch
cy.get(".t--switch-widget-active .bp3-control-indicator").click({
force: true,
{
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
},
);
entityExplorer.SelectEntityByName("Page1", "Pages");
cy.wait(2000);
// verify text in the text widget
cy.get(".t--draggable-textwidget span")
.eq(5)
.invoke("text")
.then((text) => {
expect(text).to.equal(
"Step 4: Value is Green and will default to undefined",
);
});
agHelper.AssertContains("Switch widget has changed");
// toggle off the switch
cy.get(".t--switch-widget-active .bp3-control-indicator").click({
force: true,
});
agHelper.AssertContains("Switch widget has changed");
// select an option from select widget
cy.get(".bp3-button.select-button").click({ force: true });
cy.get(".menu-item-text").eq(2).click({ force: true });
cy.wait(2000);
// verify text in the text widget
cy.get(".t--draggable-textwidget span")
.eq(5)
.invoke("text")
.then((text) => {
expect(text).to.equal(
"Step 4: Value is Red and will default to undefined",
);
});
// move to page 2 on table widget
cy.get(commonlocators.tableNextPage).click();
cy.get(".t--table-widget-page-input").within(() => {
cy.get("input.bp3-input").should("have.value", "2");
// select an option from select widget
cy.get(".bp3-button.select-button").click({ force: true });
cy.get(".menu-item-text").eq(2).click({ force: true });
cy.wait(2000);
// verify text in the text widget
cy.get(".t--draggable-textwidget span")
.eq(5)
.invoke("text")
.then((text) => {
expect(text).to.equal(
"Step 4: Value is Red and will default to undefined",
);
});
cy.wait(3000);
// hit audio play button and trigger actions
/* cy.openPropertyPane("audiowidget");
// move to page 2 on table widget
cy.get(commonlocators.tableNextPage).click();
cy.get(".t--table-widget-page-input").within(() => {
cy.get("input.bp3-input").should("have.value", "2");
});
cy.wait(3000);
// hit audio play button and trigger actions
/* cy.openPropertyPane("audiowidget");
cy.get(widgetsPage.autoPlay).click({ force: true });
cy.wait("@postExecute").should(
"have.nested.property",
@ -111,7 +111,6 @@ describe("JSEditor tests", function () {
"Success running API query",
"GREEN",
); */
});
});
//Skipping reason? to add

View File

@ -24,7 +24,6 @@ describe("Navigate To feature", () => {
}
}}`,
);
agHelper.AssertAutoSave();
agHelper.PopupClose("onClick");
agHelper.ClickButton("Submit");
cy.url().should("include", "a=b").and("include", "test=123");

View File

@ -5,6 +5,7 @@ import {
draggableWidgets,
entityExplorer,
entityItems,
tedTestConfig,
jsEditor,
locators,
} from "../../../../support/Objects/ObjectsCore";
@ -172,28 +173,26 @@ describe("Autocomplete tests", () => {
});
it("5. Api data with array of object autocompletion test", () => {
cy.fixture("datasources").then((datasourceFormData: any) => {
apiPage.CreateAndFillApi(datasourceFormData["mockApiUrl"]);
agHelper.Sleep(2000);
apiPage.RunAPI();
// Using same js object
entityExplorer.SelectEntityByName("JSObject1", "Queries/JS");
agHelper.GetNClick(jsEditor._lineinJsEditor(5), 0, true);
agHelper.SelectNRemoveLineText(locators._codeMirrorTextArea);
//agHelper.GetNClick(jsEditor._lineinJsEditor(5));
agHelper.TypeText(locators._codeMirrorTextArea, "Api1.d");
agHelper.GetNAssertElementText(locators._hints, "data");
agHelper.Sleep();
agHelper.TypeText(locators._codeMirrorTextArea, "ata[0].e");
agHelper.GetNAssertElementText(locators._hints, "email");
agHelper.Sleep();
agHelper.TypeText(locators._codeMirrorTextArea, "mail");
entityExplorer.SelectEntityByName(jsName as string, "Queries/JS");
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: "JSObject1",
action: "Delete",
entityType: entityItems.JSObject,
});
apiPage.CreateAndFillApi(tedTestConfig.mockApiUrl);
agHelper.Sleep(2000);
apiPage.RunAPI();
// Using same js object
entityExplorer.SelectEntityByName("JSObject1", "Queries/JS");
agHelper.GetNClick(jsEditor._lineinJsEditor(5), 0, true);
agHelper.SelectNRemoveLineText(locators._codeMirrorTextArea);
//agHelper.GetNClick(jsEditor._lineinJsEditor(5));
agHelper.TypeText(locators._codeMirrorTextArea, "Api1.d");
agHelper.GetNAssertElementText(locators._hints, "data");
agHelper.Sleep();
agHelper.TypeText(locators._codeMirrorTextArea, "ata[0].e");
agHelper.GetNAssertElementText(locators._hints, "email");
agHelper.Sleep();
agHelper.TypeText(locators._codeMirrorTextArea, "mail");
entityExplorer.SelectEntityByName(jsName as string, "Queries/JS");
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: "JSObject1",
action: "Delete",
entityType: entityItems.JSObject,
});
});

View File

@ -146,20 +146,28 @@ describe("Autocomplete tests", () => {
agHelper.GetElement(jsEditor._lineinJsEditor(4)).click();
agHelper.WaitUntilAllToastsDisappear();
//Assert that hints are not present inside the string
agHelper.TypeText(locators._codeMirrorTextArea, `const x = "`);
agHelper.AssertElementAbsence(locators._hints);
agHelper.SelectNRemoveLineText(jsEditor._lineinJsEditor(4));
//Assert that hints are not present when line is cleared with backspace
agHelper.AssertElementAbsence(locators._hints);
//Assert that hints are not present when token is a comment
//Assert that hints are not present when comment line added into already existing code
agHelper.SelectNRemoveLineText(jsEditor._lineinJsEditor(4)); //remove only ""
agHelper.AssertElementAbsence(locators._hints); //Assert that hints are not present when line is cleared with backspace
agHelper.TypeText(locators._codeMirrorTextArea, "// showA'");
agHelper.AssertElementAbsence(locators._hints);
//Check for no showAlert() hint
agHelper.GetNClick(jsEditor._lineinJsEditor(4), 0, true);
agHelper.SelectNRemoveLineText(locators._codeMirrorTextArea);
agHelper.AssertElementAbsence(locators._hints); //Assert that hints are not present when line is removed
agHelper.TypeText(locators._codeMirrorTextArea, "// showA");
agHelper.AssertElementAbsence(locators._hints); //Assert that hints are not present when token is a comment
//Check for no hint with any A in it
agHelper.GetNClick(jsEditor._lineinJsEditor(4), 0, true);
agHelper.SelectNRemoveLineText(locators._codeMirrorTextArea);
agHelper.AssertElementAbsence(locators._hints);
agHelper.TypeText(locators._codeMirrorTextArea, "// showA'");
agHelper.AssertElementAbsence(locators._hints);
cy.get("@jsObjName").then((jsObjName) => {

View File

@ -1,19 +1,19 @@
const publish = require("../../../../locators/publishWidgetspage.json");
const testdata = require("../../../../fixtures/testdata.json");
import {
entityExplorer,
propPane,
agHelper,
deployMode,
locators,
draggableWidgets,
} from "../../../../support/Objects/ObjectsCore";
const testdata = require("../../../../fixtures/testdata.json");
describe("Binding the button Widgets and validating NavigateTo Page functionality", function () {
before(() => {
agHelper.AddDsl("buttondsl");
entityExplorer.DragDropWidgetNVerify(draggableWidgets.BUTTON);
});
it("1. Button widget with action navigate to page", function () {
entityExplorer.SelectEntityByName("Button1");
propPane.SelectPlatformFunction("onClick", "Navigate to");
agHelper.GetNClick(propPane._navigateToType("URL"));
cy.get("label")
@ -22,22 +22,15 @@ describe("Binding the button Widgets and validating NavigateTo Page functionalit
.within(() => {
cy.get(".t--code-editor-wrapper").type(testdata.externalPage);
});
// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.wait(300);
});
it("2. Button click should take the control to page link validation", function () {
deployMode.DeployApp();
//. Button click should take the control to page link validation", function () {
deployMode.DeployApp(locators._widgetInDeployed(draggableWidgets.BUTTON));
cy.wait(2000);
cy.get(publish.buttonWidget).click();
// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.wait(500);
cy.get(publish.buttonWidget).should("not.exist");
cy.go("back");
deployMode.NavigateBacktoEditor();
cy.wait("@getPage")
.its("response.body.responseMeta.status")
.should("eq", 200);
agHelper.ClickButton("Submit");
cy.wait(2000); //for page to load
agHelper.AssertElementAbsence(
locators._widgetInDeployed(draggableWidgets.BUTTON),
);
agHelper.AssertElementVisible(locators._visibleTextSpan("Build the tools"));
});
});

View File

@ -7,9 +7,7 @@ describe("Validate JSObj binding to Table widget", () => {
});
it("1. Add users api and bind to JSObject", () => {
cy.fixture("datasources").then((datasourceFormData: any) => {
_.apiPage.CreateAndFillApi(datasourceFormData["mockApiUrl"]);
});
_.apiPage.CreateAndFillApi(_.tedTestConfig.mockApiUrl);
_.apiPage.RunAPI();
_.agHelper.GetNClick(_.dataSources._queryResponse("JSON"));
_.apiPage.ReadApiResponsebyKey("name");

View File

@ -4,6 +4,7 @@ const testdata = require("../../../../fixtures/testdata.json");
import {
entityExplorer,
agHelper,
propPane,
} from "../../../../support/Objects/ObjectsCore";
describe("Binding the multiple widgets and validating default data", function () {
@ -13,21 +14,15 @@ describe("Binding the multiple widgets and validating default data", function ()
it("1. Input widget test with default value from table widget", function () {
entityExplorer.SelectEntityByName("Input1");
cy.testJsontext("defaultvalue", testdata.defaultInputWidget + "}}");
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
propPane.UpdatePropertyFieldValue(
"Default value",
testdata.defaultInputWidget + "}}",
);
//Dropdown widget test with default value from table widget
entityExplorer.SelectEntityByName("Dropdown1");
cy.testJsontext("options", JSON.stringify(testdata.deafultDropDownWidget));
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
propPane.UpdatePropertyFieldValue(
"Options",
JSON.stringify(testdata.deafultDropDownWidget),
);
});

View File

@ -5,9 +5,9 @@ import {
apiPage,
dataSources,
debuggerHelper,
tedTestConfig,
} from "../../../../support/Objects/ObjectsCore";
import { Widgets } from "../../../../support/Pages/DataSources";
import datasourceFormData from "../../../../fixtures/datasources.json";
import {
ERROR_ACTION_EXECUTE_FAIL,
@ -16,7 +16,7 @@ import {
describe("API Bugs", function () {
it("1. Bug 14037: User gets an error even when table widget is added from the API page successfully", function () {
apiPage.CreateAndFillApi(datasourceFormData.mockApiUrl, "Api1");
apiPage.CreateAndFillApi(tedTestConfig.mockApiUrl, "Api1");
apiPage.RunAPI();
dataSources.AddSuggesstedWidget(Widgets.Table);
@ -44,7 +44,7 @@ describe("API Bugs", function () {
it("3. Bug 18876 Ensures application does not crash when saving datasource", () => {
apiPage.CreateAndFillApi(
datasourceFormData.mockApiUrl,
tedTestConfig.mockApiUrl,
"FirstAPI",
10000,
"POST",

View File

@ -1,10 +1,10 @@
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
import datasourceFormData from "../../../../fixtures/datasources.json";
const agHelper = ObjectsRegistry.AggregateHelper;
const jsEditor = ObjectsRegistry.JSEditor;
const apiPage = ObjectsRegistry.ApiPage;
const ee = ObjectsRegistry.EntityExplorer;
import {
tedTestConfig,
agHelper,
jsEditor,
apiPage,
entityExplorer,
} from "../../../../support/Objects/ObjectsCore";
describe("JS data update on button click", function () {
before(() => {
@ -12,7 +12,7 @@ describe("JS data update on button click", function () {
});
it("1. Populates js function data when triggered via button click", function () {
apiPage.CreateAndFillApi(datasourceFormData.mockApiUrl, "Api1");
apiPage.CreateAndFillApi(tedTestConfig.mockApiUrl, "Api1");
const jsObjectString = `export default {
myVar1: [],
@ -35,7 +35,7 @@ describe("JS data update on button click", function () {
toRun: false,
shouldCreateNewJSObj: true,
});
ee.SelectEntityByName("Button2", "Widgets");
entityExplorer.SelectEntityByName("Button2", "Widgets");
agHelper.ClickButton("Submit");
agHelper.AssertContains("myFun1 Data", "exist");
agHelper.AssertContains("myFun2 Data", "exist");

View File

@ -30,7 +30,7 @@ describe("Binding Expressions should not be truncated in Url and path extraction
shouldCreateNewJSObj: true,
});
_.apiPage.CreateAndFillGraphqlApi(_.hostPort.GraphqlApiUrl_TED);
_.apiPage.CreateAndFillGraphqlApi(_.tedTestConfig.GraphqlApiUrl_TED);
_.dataSources.UpdateGraphqlQueryAndVariable({
query: GRAPHQL_LIMIT_QUERY,
});

View File

@ -4,12 +4,12 @@ import {
apiPage,
entityExplorer,
entityItems,
hostPort,
tedTestConfig,
} from "../../../../support/Objects/ObjectsCore";
describe("Bug #15372 Catch block was not triggering in Safari/firefox", () => {
it("1. Triggers the catch block when the API hits a 404", () => {
apiPage.CreateAndFillApi(hostPort.mockHttpCodeUrl + "404");
apiPage.CreateAndFillApi(tedTestConfig.mockHttpCodeUrl + "404");
jsEditor.CreateJSObject(
`export default {
fun: async () => {

View File

@ -1,5 +1,4 @@
import * as _ from "../../../../support/Objects/ObjectsCore";
import datasourceFormData from "../../../../fixtures/datasources.json";
let repoName: any;
let tempBranch: any;
@ -16,9 +15,8 @@ describe("Git Bugs", function () {
});
it("1. Bug 16248, When GitSync modal is open, block shortcut action execution", function () {
const largeResponseApiUrl = datasourceFormData.mockApiUrl;
const modifierKey = Cypress.platform === "darwin" ? "meta" : "ctrl";
_.apiPage.CreateAndFillApi(largeResponseApiUrl, "GitSyncTest");
_.apiPage.CreateAndFillApi(_.tedTestConfig.mockApiUrl, "GitSyncTest");
_.gitSync.OpenGitSyncModal();
cy.get("body").type(`{${modifierKey}}{enter}`);
cy.get("@postExecute").should("not.exist");

View File

@ -10,6 +10,7 @@ import {
apiPage,
draggableWidgets,
fakerHelper,
tedTestConfig,
} from "../../../../support/Objects/ObjectsCore";
const widgetsToTest = {
@ -79,9 +80,7 @@ const widgetsToTest = {
};
function configureApi() {
cy.fixture("datasources").then((datasourceFormData) => {
apiPage.CreateAndFillApi(datasourceFormData["mockApiUrl"], "FirstAPI");
});
apiPage.CreateAndFillApi(tedTestConfig.mockApiUrl, "FirstAPI");
apiPage.EnterHeader("value", "{{this.params.value}}");
}

View File

@ -48,7 +48,7 @@ describe("Git sync modal: connect tab", function () {
cy.get(gitSyncLocators.generateDeployKeyBtn).should("not.exist");
cy.get(gitSyncLocators.gitRepoInput).type(
`{selectAll}${_.hostPort.GITEA_API_URL_TED}/${repoName}.git`,
`{selectAll}${_.tedTestConfig.GITEA_API_URL_TED}/${repoName}.git`,
);
cy.contains(Cypress.env("MESSAGES").PASTE_SSH_URL_INFO()).should(
"not.exist",
@ -104,7 +104,7 @@ describe("Git sync modal: connect tab", function () {
cy.get(gitSyncLocators.connectSubmitBtn).should("be.disabled");
cy.get(gitSyncLocators.gitRepoInput).type(
`{selectAll}${_.hostPort.GITEA_API_URL_TED}/${repoName}.git`,
`{selectAll}${_.tedTestConfig.GITEA_API_URL_TED}/${repoName}.git`,
);
cy.contains(Cypress.env("MESSAGES").PASTE_SSH_URL_INFO()).should(
"not.exist",
@ -200,7 +200,7 @@ describe("Git sync modal: connect tab", function () {
cy.get(gitSyncLocators.gitRepoInput)
.scrollIntoView()
.type(`{selectAll}${_.hostPort.GITEA_API_URL_TED}/${repoName}.git`, {
.type(`{selectAll}${_.tedTestConfig.GITEA_API_URL_TED}/${repoName}.git`, {
force: true,
});
cy.get(gitSyncLocators.connectSubmitBtn).scrollIntoView().click();
@ -213,7 +213,7 @@ describe("Git sync modal: connect tab", function () {
cy.get(gitSyncLocators.gitRepoInput)
.scrollIntoView()
.type(`{selectAll}${_.hostPort.GITEA_API_URL_TED}/${repoName}.git`, {
.type(`{selectAll}${_.tedTestConfig.GITEA_API_URL_TED}/${repoName}.git`, {
force: true,
});
@ -234,7 +234,7 @@ describe("Git sync modal: connect tab", function () {
cy.request({
method: "POST",
url: `${_.hostPort.GITEA_API_BASE_TED}:${_.hostPort.GITEA_API_PORT_TED}/api/v1/repos/Cypress/${repoName}/keys`,
url: `${_.tedTestConfig.GITEA_API_BASE_TED}:${_.tedTestConfig.GITEA_API_PORT_TED}/api/v1/repos/Cypress/${repoName}/keys`,
headers: {
Authorization: `token ${Cypress.env("GITEA_TOKEN")}`,
},

View File

@ -4,7 +4,7 @@ import homePageLocators from "../../../../../locators/HomePage";
import {
agHelper,
entityExplorer,
hostPort,
tedTestConfig,
gitSync,
homePage,
jsEditor,
@ -286,7 +286,7 @@ describe("Git sync Bug #10773", function () {
`generateKey-${repoName}`,
);
cy.get(gitSyncLocators.gitRepoInput).type(
`{selectAll}${hostPort.GITEA_API_URL_TED}/${repoName}.git`,
`{selectAll}${tedTestConfig.GITEA_API_URL_TED}/${repoName}.git`,
);
// abort git flow after generating key
cy.get(gitSyncLocators.closeGitSyncModal).click();

View File

@ -9,8 +9,8 @@ import {
locators,
propPane,
entityItems,
tedTestConfig,
} from "../../../../support/Objects/ObjectsCore";
import datasourceFormData from "../../../../fixtures/datasources.json";
const successMessage = "Successful Trigger";
const errorMessage = "Unsuccessful Trigger";
@ -80,7 +80,7 @@ describe("Linting", () => {
clickButtonAndAssertLintError(true);
// create Api1
apiPage.CreateAndFillApi(datasourceFormData.mockApiUrl);
apiPage.CreateAndFillApi(tedTestConfig.mockApiUrl);
clickButtonAndAssertLintError(false);
@ -94,7 +94,7 @@ describe("Linting", () => {
clickButtonAndAssertLintError(true);
// Re-create Api1
apiPage.CreateAndFillApi(datasourceFormData.mockApiUrl);
apiPage.CreateAndFillApi(tedTestConfig.mockApiUrl);
clickButtonAndAssertLintError(false);
});
@ -295,7 +295,7 @@ describe("Linting", () => {
shouldCreateNewJSObj: true,
},
);
apiPage.CreateAndFillApi(datasourceFormData.mockApiUrl);
apiPage.CreateAndFillApi(tedTestConfig.mockApiUrl);
createMySQLDatasourceQuery();
agHelper.RefreshPage(); //Since this seems failing a bit
@ -404,11 +404,11 @@ describe("Linting", () => {
myFun1 () {
// write code here
// this.myVar1 = [1,2,3]
},
async myFun1 () {
// use async-await or promises
// await storeValue('varName', 'hello world')
// await storeValue('varName', 'hello world')
}
}`;

View File

@ -7,8 +7,8 @@ import {
apiPage,
draggableWidgets,
locators,
tedTestConfig,
} from "../../../../support/Objects/ObjectsCore";
import datasourceFormData from "../../../../fixtures/datasources.json";
describe("Linting of entity properties", () => {
before(() => {
@ -19,7 +19,7 @@ describe("Linting of entity properties", () => {
it("1. Shows correct lint error when wrong Api property is binded", () => {
const invalidProperty = "unknownProperty";
// create Api1
apiPage.CreateAndFillApi(datasourceFormData.mockApiUrl);
apiPage.CreateAndFillApi(tedTestConfig.mockApiUrl);
// Edit Button onclick property
entityExplorer.SelectEntityByName("Button1", "Widgets");
propPane.EnterJSContext(

View File

@ -42,7 +42,12 @@ describe("excludeForAirgap", "Guided Tour", function () {
entityExplorer.SelectEntityByName("CustomersTable");
// Step 3: Add binding to the tableData property
propPane.UpdatePropertyFieldValue("Table data", "{{getCustomers.data}}");
propPane.UpdatePropertyFieldValue(
"Table data",
"{{getCustomers.data}}",
true,
false,
);
cy.get(guidedTourLocators.successButton).click();
cy.get(guidedTourLocators.infoButton).click();
// Renaming widgets // Commending below wait due to flakiness

View File

@ -1,6 +1,7 @@
import homePageLocators from "../../../../locators/HomePage";
const explorer = require("../../../../locators/explorerlocators.json");
import {
assertHelper,
entityExplorer,
homePage,
} from "../../../../support/Objects/ObjectsCore";
@ -30,13 +31,8 @@ describe("Slug URLs", () => {
it("2. Checks if application slug updates on the URL when application name changes", () => {
cy.generateUUID().then((appName) => {
applicationName = appName;
cy.AppSetupForRename();
cy.get(homePageLocators.applicationName).type(`${appName}` + "{enter}");
cy.wait("@updateApplication").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
homePage.RenameApplication(applicationName);
assertHelper.AssertNetworkStatus("updateApplication");
cy.location("pathname").then((pathname) => {
const pageId = pathname.split("/")[3]?.split("-").pop();
expect(pathname).to.be.equal(`/app/${appName}/page1-${pageId}/edit`);

View File

@ -37,27 +37,25 @@ describe("Entity bottom bar", () => {
});
it("3. Api bottom pane should be collapsable", () => {
cy.fixture("datasources").then((datasourceFormData: any) => {
_.entityExplorer.NavigateToSwitcher("Explorer");
_.apiPage.CreateAndFillApi(datasourceFormData["mockApiUrl"]);
//Verify if bottom bar opens on clicking debugger icon in api page.
_.debuggerHelper.ClickDebuggerIcon();
_.debuggerHelper.AssertOpen(PageType.API);
//Verify if selected tab is errors in tab title.
_.debuggerHelper.AssertSelectedTab("Errors");
//Verify if bottom bar is closed on clicking close icon in API page.
_.debuggerHelper.CloseBottomBar();
_.debuggerHelper.AssertClosed();
//Verify if bottom bar opens on clicking debugger icon in api page.
_.debuggerHelper.ClickDebuggerIcon();
_.debuggerHelper.AssertOpen(PageType.API);
//Verify if bottom bar is open on executing api.
_.apiPage.RunAPI();
_.agHelper.Sleep(1000);
_.debuggerHelper.AssertOpen(PageType.API);
//verify if response tab is selected on execution api.
_.debuggerHelper.AssertSelectedTab("Response");
});
_.entityExplorer.NavigateToSwitcher("Explorer");
_.apiPage.CreateAndFillApi(_.tedTestConfig.mockApiUrl);
//Verify if bottom bar opens on clicking debugger icon in api page.
_.debuggerHelper.ClickDebuggerIcon();
_.debuggerHelper.AssertOpen(PageType.API);
//Verify if selected tab is errors in tab title.
_.debuggerHelper.AssertSelectedTab("Errors");
//Verify if bottom bar is closed on clicking close icon in API page.
_.debuggerHelper.CloseBottomBar();
_.debuggerHelper.AssertClosed();
//Verify if bottom bar opens on clicking debugger icon in api page.
_.debuggerHelper.ClickDebuggerIcon();
_.debuggerHelper.AssertOpen(PageType.API);
//Verify if bottom bar is open on executing api.
_.apiPage.RunAPI();
_.agHelper.Sleep(1000);
_.debuggerHelper.AssertOpen(PageType.API);
//verify if response tab is selected on execution api.
_.debuggerHelper.AssertSelectedTab("Response");
});
it("4. Bottom bar in Datasource", () => {

View File

@ -2,133 +2,131 @@ import * as _ from "../../../../support/Objects/ObjectsCore";
describe("Peek overlay", () => {
it("1. Main test", () => {
cy.fixture("datasources").then((datasourceFormData: any) => {
_.entityExplorer.DragDropWidgetNVerify("tablewidgetv2", 500, 100);
_.entityExplorer.NavigateToSwitcher("Explorer");
_.table.AddSampleTableData();
_.apiPage.CreateAndFillApi(datasourceFormData["mockApiUrl"]);
_.apiPage.RunAPI();
_.apiPage.CreateAndFillApi(datasourceFormData["mockApiUrl"]);
_.jsEditor.CreateJSObject(JsObjectContent, {
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
lineNumber: 0,
prettify: true,
});
_.jsEditor.SelectFunctionDropdown("myFun2");
_.jsEditor.RunJSObj();
_.agHelper.Sleep();
_.debuggerHelper.CloseBottomBar();
// check number array
_.peekOverlay.HoverCode(8, 3, "numArray");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("array");
_.peekOverlay.CheckPrimitveArrayInOverlay([1, 2, 3]);
_.peekOverlay.ResetHover();
// check basic object
_.peekOverlay.HoverCode(9, 3, "objectData");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("object");
_.peekOverlay.CheckBasicObjectInOverlay({ x: 123, y: "123" });
_.peekOverlay.ResetHover();
// check null - with this keyword
_.peekOverlay.HoverCode(10, 3, "nullData");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("null");
_.peekOverlay.CheckPrimitiveValue("null");
_.peekOverlay.ResetHover();
// check number
_.peekOverlay.HoverCode(11, 3, "numberData");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("number");
_.peekOverlay.CheckPrimitiveValue("1");
_.peekOverlay.ResetHover();
// check boolean
_.peekOverlay.HoverCode(12, 3, "isLoading");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("boolean");
_.peekOverlay.CheckPrimitiveValue("false");
_.peekOverlay.ResetHover();
// TODO: handle this function failure on CI tests -> "function(){}"
// check function
// _.peekOverlay.HoverCode(13, 3, "run");
// _.peekOverlay.IsOverlayOpen();
// _.peekOverlay.VerifyDataType("function");
// _.peekOverlay.CheckPrimitiveValue("function () {}");
// _.peekOverlay.ResetHover();
// check undefined
_.peekOverlay.HoverCode(14, 3, "data");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("undefined");
_.peekOverlay.CheckPrimitiveValue("undefined");
_.peekOverlay.ResetHover();
// check string
_.peekOverlay.HoverCode(15, 3, "mode");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("string");
_.peekOverlay.CheckPrimitiveValue("EDIT");
_.peekOverlay.ResetHover();
// check if overlay closes
_.peekOverlay.HoverCode(16, 3, "store");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.ResetHover();
_.peekOverlay.IsOverlayOpen(false);
// widget object
_.peekOverlay.HoverCode(17, 1, "Table1");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("object");
_.peekOverlay.ResetHover();
// widget property
_.peekOverlay.HoverCode(18, 3, "pageNo");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("number");
_.peekOverlay.CheckPrimitiveValue("1");
_.peekOverlay.ResetHover();
// widget property
_.peekOverlay.HoverCode(19, 3, "tableData");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("array");
_.peekOverlay.CheckObjectArrayInOverlay([{}, {}, {}]);
_.peekOverlay.ResetHover();
// basic nested property
_.peekOverlay.HoverCode(20, 7, "id");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("number");
_.peekOverlay.CheckPrimitiveValue("1");
_.peekOverlay.ResetHover();
// undefined object
_.peekOverlay.HoverCode(21, 1, "aljshdlja");
_.peekOverlay.IsOverlayOpen(false);
_.peekOverlay.ResetHover();
// this keyword
_.peekOverlay.HoverCode(22, 3, "numArray");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("array");
_.peekOverlay.CheckPrimitveArrayInOverlay([1, 2, 3]);
_.peekOverlay.ResetHover();
// pageList is an internal property - peek overlay shouldn't work
_.peekOverlay.HoverCode(23, 1, "pageList");
_.peekOverlay.IsOverlayOpen(false);
_.peekOverlay.ResetHover();
_.entityExplorer.DragDropWidgetNVerify("tablewidgetv2", 500, 100);
_.entityExplorer.NavigateToSwitcher("Explorer");
_.table.AddSampleTableData();
_.apiPage.CreateAndFillApi(_.tedTestConfig.mockApiUrl);
_.apiPage.RunAPI();
_.apiPage.CreateAndFillApi(_.tedTestConfig.mockApiUrl);
_.jsEditor.CreateJSObject(JsObjectContent, {
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
lineNumber: 0,
prettify: true,
});
_.jsEditor.SelectFunctionDropdown("myFun2");
_.jsEditor.RunJSObj();
_.agHelper.Sleep();
_.debuggerHelper.CloseBottomBar();
// check number array
_.peekOverlay.HoverCode(8, 3, "numArray");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("array");
_.peekOverlay.CheckPrimitveArrayInOverlay([1, 2, 3]);
_.peekOverlay.ResetHover();
// check basic object
_.peekOverlay.HoverCode(9, 3, "objectData");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("object");
_.peekOverlay.CheckBasicObjectInOverlay({ x: 123, y: "123" });
_.peekOverlay.ResetHover();
// check null - with this keyword
_.peekOverlay.HoverCode(10, 3, "nullData");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("null");
_.peekOverlay.CheckPrimitiveValue("null");
_.peekOverlay.ResetHover();
// check number
_.peekOverlay.HoverCode(11, 3, "numberData");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("number");
_.peekOverlay.CheckPrimitiveValue("1");
_.peekOverlay.ResetHover();
// check boolean
_.peekOverlay.HoverCode(12, 3, "isLoading");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("boolean");
_.peekOverlay.CheckPrimitiveValue("false");
_.peekOverlay.ResetHover();
// TODO: handle this function failure on CI tests -> "function(){}"
// check function
// _.peekOverlay.HoverCode(13, 3, "run");
// _.peekOverlay.IsOverlayOpen();
// _.peekOverlay.VerifyDataType("function");
// _.peekOverlay.CheckPrimitiveValue("function () {}");
// _.peekOverlay.ResetHover();
// check undefined
_.peekOverlay.HoverCode(14, 3, "data");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("undefined");
_.peekOverlay.CheckPrimitiveValue("undefined");
_.peekOverlay.ResetHover();
// check string
_.peekOverlay.HoverCode(15, 3, "mode");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("string");
_.peekOverlay.CheckPrimitiveValue("EDIT");
_.peekOverlay.ResetHover();
// check if overlay closes
_.peekOverlay.HoverCode(16, 3, "store");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.ResetHover();
_.peekOverlay.IsOverlayOpen(false);
// widget object
_.peekOverlay.HoverCode(17, 1, "Table1");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("object");
_.peekOverlay.ResetHover();
// widget property
_.peekOverlay.HoverCode(18, 3, "pageNo");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("number");
_.peekOverlay.CheckPrimitiveValue("1");
_.peekOverlay.ResetHover();
// widget property
_.peekOverlay.HoverCode(19, 3, "tableData");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("array");
_.peekOverlay.CheckObjectArrayInOverlay([{}, {}, {}]);
_.peekOverlay.ResetHover();
// basic nested property
_.peekOverlay.HoverCode(20, 7, "id");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("number");
_.peekOverlay.CheckPrimitiveValue("1");
_.peekOverlay.ResetHover();
// undefined object
_.peekOverlay.HoverCode(21, 1, "aljshdlja");
_.peekOverlay.IsOverlayOpen(false);
_.peekOverlay.ResetHover();
// this keyword
_.peekOverlay.HoverCode(22, 3, "numArray");
_.peekOverlay.IsOverlayOpen();
_.peekOverlay.VerifyDataType("array");
_.peekOverlay.CheckPrimitveArrayInOverlay([1, 2, 3]);
_.peekOverlay.ResetHover();
// pageList is an internal property - peek overlay shouldn't work
_.peekOverlay.HoverCode(23, 1, "pageList");
_.peekOverlay.IsOverlayOpen(false);
_.peekOverlay.ResetHover();
});
});
@ -141,16 +139,16 @@ const JsObjectContent = `export default {
myFun1: () => {
// TODO: handle this keyword failure on CI tests
JSObject1.numArray;
JSObject1.objectData;
JSObject1.nullData;
JSObject1.objectData;
JSObject1.nullData;
JSObject1.numberData;
Api1.isLoading;
Api1.run();
Api1.isLoading;
Api1.run();
Api2.data;
appsmith.mode;
appsmith.mode;
appsmith.store.abc;
Table1;
Table1.pageNo;
Table1.pageNo;
Table1.tableData;
Api1.data[0].id;
aljshdlja;

View File

@ -15,19 +15,15 @@ describe("Published mode toggle toast with debug flag in the url", function () {
});
it("1. Should not show any application related toasts", function () {
cy.fixture("datasources").then((datasourceFormData) => {
_.apiPage.CreateAndFillApi(
datasourceFormData["mockApiUrl"],
"Correct_users",
);
_.apiPage.ToggleOnPageLoadRun(true);
_.apiPage.CreateAndFillApi(
datasourceFormData["mockApiUrl"].replace("mock-api", "mock-api2err"),
"Incorrect_users",
);
_.apiPage.ToggleOnPageLoadRun(true);
_.jsEditor.CreateJSObject(
`export default {
_.apiPage.CreateAndFillApi(_.tedTestConfig.mockApiUrl, "Correct_users");
_.apiPage.ToggleOnPageLoadRun(true);
_.apiPage.CreateAndFillApi(
_.tedTestConfig.mockApiUrl.replace("mock-api", "mock-api2err"),
"Incorrect_users",
);
_.apiPage.ToggleOnPageLoadRun(true);
_.jsEditor.CreateJSObject(
`export default {
async myFun1 () {
const res = await Correct_users.run();
showAlert("Hello info", "info");
@ -38,35 +34,34 @@ describe("Published mode toggle toast with debug flag in the url", function () {
return res;
}
}`,
{
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
},
);
_.deployMode.DeployApp(undefined, true, true, false);
{
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
},
);
_.deployMode.DeployApp(undefined, true, true, false);
_.agHelper.AssertElementAbsence(_.locators._toastMsg);
_.agHelper.AssertElementAbsence(_.locators._toastMsg);
_.agHelper.ClickButton(SHOW_ALERT_WORKING_BUTTON);
_.agHelper.AssertContains(SHOW_ALERT_MSG, "exist", _.locators._toastMsg);
_.agHelper.ClickButton(SHOW_ALERT_WORKING_BUTTON);
_.agHelper.AssertContains(SHOW_ALERT_MSG, "exist", _.locators._toastMsg);
_.agHelper.ClickButton(SHOW_ALERT_NOT_WORKING_BUTTON);
_.agHelper.AssertContains(
SHOW_ALERT_NOT_WORKING_MSG,
"not.exist",
_.locators._toastMsg,
);
_.agHelper.ClickButton(SHOW_ALERT_NOT_WORKING_BUTTON);
_.agHelper.AssertContains(
SHOW_ALERT_NOT_WORKING_MSG,
"not.exist",
_.locators._toastMsg,
);
_.agHelper.ClickButton(RUN_JS_OBJECT_BUTTON);
_.agHelper.AssertContains("Hello success", "exist", _.locators._toastMsg);
_.agHelper.AssertContains(
RUN_JS_OBJECT_MSG,
"not.exist",
_.locators._toastMsg,
);
});
_.agHelper.ClickButton(RUN_JS_OBJECT_BUTTON);
_.agHelper.AssertContains("Hello success", "exist", _.locators._toastMsg);
_.agHelper.AssertContains(
RUN_JS_OBJECT_MSG,
"not.exist",
_.locators._toastMsg,
);
});
it("2. Should show all application related toasts with debug flag true in url", function () {

View File

@ -7,6 +7,7 @@ import {
jsEditor,
locators,
propPane,
tedTestConfig,
} from "../../../../support/Objects/ObjectsCore";
describe("Validate JS Object Refactoring does not affect the comments & variables", () => {
@ -40,10 +41,8 @@ describe("Validate JS Object Refactoring does not affect the comments & variable
dataSources.CreateDataSource("MySql", true, false);
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
});
//Selecting paintings table from MySQL DS
cy.fixture("datasources").then((datasourceFormData: any) => {
//Selecting paintings table from MySQL DS
//Initialize new JSObject with custom code
jsEditor.CreateJSObject(jsCode);
//Initialize new Query entity with custom query
@ -54,7 +53,7 @@ describe("Validate JS Object Refactoring does not affect the comments & variable
); //Creating query from EE overlay
//Initialize new API entity with custom header
apiPage.CreateAndFillApi(
datasourceFormData["mockApiUrl"],
tedTestConfig.mockApiUrl,
refactorInput.api.oldName,
);
apiPage.EnterHeader("key1", `{{\tJSObject1.myVar1}}`);

View File

@ -129,14 +129,12 @@ describe("DatePicker Widget Property pane tests with js bindings", function () {
.type("04/05/2021 06:25")
.wait(2000);
cy.selectDateFormat("LLL");
cy.wait("@updateLayout");
cy.get(".t--draggable-textwidget .bp3-ui-text")
.first()
.should("contain.text", "May 4, 2021 6:25 AM");
_.propPane.EnterJSContext("Default Date", "2020-02-01");
_.propPane.EnterJSContext("Min Date", "2020-01-01");
_.propPane.EnterJSContext("Max Date", "2020-02-10");
_.propPane.UpdatePropertyFieldValue("Default Date", "2020-02-01");
_.propPane.UpdatePropertyFieldValue("Max Date", "2020-02-10");
_.agHelper.AssertErrorTooltip("Date out of range");
});

View File

@ -34,32 +34,30 @@ describe("File picker widget v2", () => {
});
it("3. Check if the uploaded data does not reset when back from query page", () => {
cy.fixture("datasources").then((datasourceFormData) => {
cy.openPropertyPane("textwidget");
cy.updateCodeInput(
".t--property-control-text",
`{{FilePicker1.files[0].name}}`,
);
cy.createAndFillApi(datasourceFormData["mockApiUrl"], "");
cy.updateCodeInput(
"[class*='t--actionConfiguration']",
"{{FilePicker1.files}}",
);
cy.wait(1000);
cy.validateEvaluatedValue("testFile.mov");
cy.openPropertyPane("textwidget");
cy.updateCodeInput(
".t--property-control-text",
`{{FilePicker1.files[0].name}}`,
);
cy.createAndFillApi(_.tedTestConfig.mockApiUrl, "");
cy.updateCodeInput(
"[class*='t--actionConfiguration']",
"{{FilePicker1.files}}",
);
cy.wait(1000);
cy.validateEvaluatedValue("testFile.mov");
cy.get("[data-testid='more-action-trigger']")
.first()
.click({ force: true });
cy.get("[data-testid='more-action-trigger']")
.first()
.click({ force: true });
// Go back to widgets page
_.entityExplorer.NavigateToSwitcher("Widgets", 0, true);
cy.get(widgetsPage.filepickerwidgetv2).should(
"contain",
"1 files selected",
);
cy.get(".t--widget-textwidget").should("contain", "testFile.mov");
});
// Go back to widgets page
_.entityExplorer.NavigateToSwitcher("Widgets", 0, true);
cy.get(widgetsPage.filepickerwidgetv2).should(
"contain",
"1 files selected",
);
cy.get(".t--widget-textwidget").should("contain", "testFile.mov");
});
it("4. Check if the uploaded file is removed on click of cancel button", () => {

View File

@ -36,11 +36,6 @@ describe("Binding the list widget with text widget", function () {
"Items",
'[[{ "name": "pawan"}, { "name": "Vivek" }], [{ "name": "Ashok"}, {"name": "rahul"}]]',
);
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
_.entityExplorer.ExpandCollapseEntity("List1");
_.entityExplorer.ExpandCollapseEntity("Container1");
_.entityExplorer.SelectEntityByName("Text3");
@ -50,11 +45,6 @@ describe("Binding the list widget with text widget", function () {
"Text",
'{{currentItem.map(item => item.name).join(", ")}}',
);
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
_.deployMode.DeployApp();
cy.wait(2000);
cy.get(".t--widget-textwidget span:contains('pawan, Vivek')").should(
@ -76,23 +66,12 @@ describe("Binding the list widget with text widget", function () {
"Items",
'[{ "name": "pawan"}, { "name": "Vivek" }]',
);
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
_.entityExplorer.ExpandCollapseEntity("List1");
_.entityExplorer.ExpandCollapseEntity("Container1");
_.entityExplorer.SelectEntityByName("Text3");
cy.wait(1000);
_.propPane.UpdatePropertyFieldValue("Text", "{{currentItem.name}}");
cy.wait("@updateLayout").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
_.deployMode.DeployApp();
cy.wait(2000);
cy.get(".t--widget-textwidget span:contains('Vivek')").should(

View File

@ -1,24 +1,17 @@
const simpleListDSL = require("../../../../../fixtures/Listv2/simpleList.json");
const simpleListWithLargeDataDSL = require("../../../../../fixtures/Listv2/simpleListWithLargeData.json");
const ListV2WithNullPrimaryKeyDSL = require("../../../../../fixtures/Listv2/ListV2WithNullPrimaryKey.json");
const widgetsPage = require("../../../../../locators/Widgets.json");
const commonlocators = require("../../../../../locators/commonlocators.json");
import * as _ from "../../../../../support/Objects/ObjectsCore";
const propertyControl = ".t--property-control";
const widgetSelector = (name) => `[data-widgetname-cy="${name}"]`;
function testJsontextClear(endp) {
const modifierKey = Cypress.platform === "darwin" ? "meta" : "ctrl";
cy.get(".t--property-control-" + endp + " .CodeMirror textarea")
.first()
.focus({ force: true })
.type(`{${modifierKey}}{a}`, { force: true })
.type(`{${modifierKey}}{del}`, { force: true });
}
const data = [
{
id: "001",
@ -50,7 +43,7 @@ describe("List v2 - Data Identifier property", () => {
});
it("1. is present in the property pane", () => {
cy.addDsl(simpleListDSL);
_.agHelper.AddDsl("Listv2/simpleList");
cy.openPropertyPane("listwidgetv2");
@ -132,7 +125,7 @@ describe("List v2 - Data Identifier property", () => {
});
it("6. with large data set and data identifier set, the rows should render", () => {
cy.addDsl(simpleListWithLargeDataDSL);
_.agHelper.AddDsl("Listv2/simpleListWithLargeData");
cy.openPropertyPane("listwidgetv2");
@ -180,7 +173,8 @@ describe("List v2 - Data Identifier property", () => {
});
it("9. Widgets get displayed when PrimaryKey doesn't exist - SSP", () => {
cy.addDsl(ListV2WithNullPrimaryKeyDSL);
_.agHelper.AddDsl("Listv2/ListV2WithNullPrimaryKey");
_.agHelper.AddDsl("Listv2/ListV2WithNullPrimaryKey");
cy.createAndFillApi(
"https://api.punkapi.com/v2/beers?page={{List1.pageNo}}&per_page={{List1.pageSize}}",
"",

View File

@ -3,11 +3,8 @@ const commonlocators = require("../../../../../locators/commonlocators.json");
import * as _ from "../../../../../support/Objects/ObjectsCore";
const widgetSelector = (name) => `[data-widgetname-cy="${name}"]`;
const items = dsl.dsl.children[4]?.listData;
const containerWidgetSelector = `[type="CONTAINER_WIDGET"]`;
function testJsontextClear(endp) {
const modifierKey = Cypress.platform === "darwin" ? "meta" : "ctrl";
@ -47,9 +44,7 @@ const verifyDefaultItem = () => {
};
function setUpDataSource() {
cy.fixture("datasources").then((datasourceFormData) => {
_.apiPage.CreateAndFillApi(datasourceFormData["mockApiUrl"] + "0");
});
_.apiPage.CreateAndFillApi(_.tedTestConfig.mockApiUrl + "0");
cy.RunAPI();
_.entityExplorer.SelectEntityByName("List1");
cy.wait(200);

View File

@ -1,6 +1,7 @@
const commonlocators = require("../../../../../locators/commonlocators.json");
const widgetsPage = require("../../../../../locators/Widgets.json");
import {
agHelper,
draggableWidgets,
entityExplorer,
} from "../../../../../support/Objects/ObjectsCore";
@ -28,11 +29,6 @@ function deleteAllWidgetsInContainer() {
cy.wait(1000);
}
function validateToastExist() {
cy.validateToastMessage("ListWidget_Blue_0");
cy.wait(1000);
}
function validateToastDoestExist() {
cy.wait(500);
cy.get(commonlocators.toastmsg, { timeout: 100 }).should("not.exist");
@ -57,35 +53,27 @@ describe("List widget v2 onItemClick", () => {
.first()
.click({ force: true });
cy.validateToastMessage("ListWidget_Blue_0");
cy.waitUntil(() =>
cy.get(commonlocators.toastmsg).should("not.be.visible"),
);
agHelper.WaitUntilToastDisappear("ListWidget_Blue_0");
cy.get(`${widgetSelector("List1")} ${containerWidgetSelector}`)
.eq(1)
.click({ force: true });
cy.validateToastMessage("ListWidget_Green_1");
cy.waitUntil(() =>
cy.get(commonlocators.toastmsg).should("not.be.visible"),
);
agHelper.WaitUntilToastDisappear("ListWidget_Green_1");
cy.get(`${widgetSelector("List1")} ${containerWidgetSelector}`)
.eq(2)
.click({ force: true });
cy.validateToastMessage("ListWidget_Red_2");
cy.waitUntil(() =>
cy.get(commonlocators.toastmsg).should("not.be.visible"),
);
agHelper.WaitUntilToastDisappear("ListWidget_Red_2");
});
it("2. List widget V2 with onItemClick should be triggered when child widget without event is clicked", () => {
cy.get(widgetSelector("Image1")).first().click({ force: true });
validateToastExist();
agHelper.WaitUntilToastDisappear("ListWidget_Blue_0");
cy.get(widgetSelector("Text1")).first().click({ force: true });
validateToastExist();
agHelper.WaitUntilToastDisappear("ListWidget_Blue_0");
deleteAllWidgetsInContainer();
@ -127,8 +115,7 @@ describe("List widget v2 onItemClick", () => {
cy.get(`${widgetSelector("Button1")} button`)
.first()
.click({ force: true });
validateToastExist();
cy.get(commonlocators.toastBody).first().click();
agHelper.WaitUntilToastDisappear("ListWidget_Blue_0");
cy.get(widgetsPage.toggleOnClick).click({ force: true });
cy.get(".t--property-control-onclick").then(($el) => {

View File

@ -231,7 +231,7 @@ describe("MultiSelect Widget Functionality", function () {
},
];
it("8. Verify MultiSelect resets to default value", function () {
it("6. Verify MultiSelect resets to default value", function () {
resetTestCases.forEach((testCase) => {
const { defaultValue, options, optionsToDeselect, optionsToSelect } =
testCase;
@ -244,6 +244,8 @@ describe("MultiSelect Widget Functionality", function () {
_.propPane.UpdatePropertyFieldValue(
"Default selected values",
JSON.stringify(defaultValue, null, 2),
true,
false,
);
// select other options
_.agHelper.SelectFromMultiSelect(optionsToSelect);
@ -264,7 +266,7 @@ describe("MultiSelect Widget Functionality", function () {
});
});
it("9. Verify MultiSelect deselection behavior", function () {
it("7. Verify MultiSelect deselection behavior", function () {
cy.openPropertyPane("multiselectwidgetv2");
// set options
_.propPane.UpdatePropertyFieldValue(
@ -278,16 +280,14 @@ describe("MultiSelect Widget Functionality", function () {
cy.get(getWidgetSelector("textwidget")).eq(1).should("have.text", "");
});
it("10. Dropdown Functionality To Unchecked Visible Widget", function () {
it("8. Dropdown Functionality To Unchecked Visible Widget", function () {
cy.togglebarDisable(commonlocators.visibleCheckbox);
_.deployMode.DeployApp();
cy.get(publish.multiselectwidgetv2 + " " + ".rc-select-selector").should(
"not.exist",
);
_.deployMode.NavigateBacktoEditor();
});
it("11. Dropdown Functionality To Check Visible Widget", function () {
// Dropdown Functionality To Check Visible Widget", function () {
cy.openPropertyPane("multiselectwidgetv2");
cy.togglebar(commonlocators.visibleCheckbox);
_.deployMode.DeployApp();

View File

@ -107,7 +107,7 @@ describe("Number Slider spec", () => {
_.entityExplorer.SelectEntityByName("NumberSlider1", "Widgets");
// Change the Step size to 10
_.propPane.UpdatePropertyFieldValue("Step size", "10");
_.propPane.UpdatePropertyFieldValue("Step size", "10", true, false);
// Change the slider value
_.agHelper

View File

@ -145,8 +145,8 @@ describe("Range Slider spec", () => {
});
// Change the Step size to 10
_.propPane.UpdatePropertyFieldValue("Min. range", "10");
_.propPane.UpdatePropertyFieldValue("Step size", "10");
_.propPane.UpdatePropertyFieldValue("Min. range", "10", true, false);
_.propPane.UpdatePropertyFieldValue("Step size", "10", true, false);
_.agHelper
.GetElement(_.locators._sliderThumb)

View File

@ -62,6 +62,8 @@ describe("Table V2 sort & filter using display text functionality", () => {
propPane.UpdatePropertyFieldValue(
"Display text",
"{{['X','Y','Z'][currentIndex]}}",
true,
false,
);
agHelper.RemoveEvaluatedPopUp();
table.OpenNFilterTable("name", "contains", "Y");
@ -87,6 +89,8 @@ describe("Table V2 sort & filter using display text functionality", () => {
propPane.UpdatePropertyFieldValue(
"Display text",
"{{['X','Y','Z'][currentIndex]}}",
true,
false,
);
table.SortColumn("name", "ascending");
table.ReadTableRowColumnData(0, 0, "v2").then((data) => {

View File

@ -32,8 +32,6 @@ describe("Table Widget V2 property pane feature validation", function () {
agHelper.AssertAutoSave();
// Validating the button action by clicking
cy.get(widgetsPage.tableV2Btn).last().click({ force: true });
// eslint-disable-next-line cypress/no-unnecessary-waiting
cy.wait(3000);
// Validating the toast message
agHelper.WaitUntilToastDisappear("Successful tobias.funke@reqres.in");

View File

@ -1,4 +1,7 @@
import { apiPage, hostPort } from "../../../../support/Objects/ObjectsCore";
import {
apiPage,
tedTestConfig,
} from "../../../../support/Objects/ObjectsCore";
describe("Validate API URL Evaluated value", () => {
it("1. Check if url object does not crash App", () => {
@ -10,8 +13,8 @@ describe("Validate API URL Evaluated value", () => {
it("2. Check if path field strings have not been JSON.stringified - #24696", () => {
apiPage.CreateApi("SecondAPI");
apiPage.EnterURL(
hostPort.mockApiUrl + `/{{SecondAPI.isLoading}}`,
hostPort.mockApiUrl + `/false`,
tedTestConfig.mockApiUrl + `/{{SecondAPI.isLoading}}`,
tedTestConfig.mockApiUrl + `/false`,
);
});
});

View File

@ -1,10 +1,9 @@
import datasourceFormData from "../../../../fixtures/datasources.json";
import {
apiPage,
agHelper,
jsEditor,
entityItems,
tedTestConfig,
} from "../../../../support/Objects/ObjectsCore";
describe("Test API execution with dynamic binding in URL - Bug #24218", () => {
@ -15,7 +14,7 @@ describe("Test API execution with dynamic binding in URL - Bug #24218", () => {
myVar1: [],
myVar2: {},
myFun1 () {
storeValue("api_url", "${datasourceFormData["mockApiUrl"]}");
storeValue("api_url", "${tedTestConfig.mockApiUrl}");
},
myFun2: async function() {
}

View File

@ -7,34 +7,31 @@ import {
apiPage,
dataSources,
entityItems,
tedTestConfig,
} from "../../../../support/Objects/ObjectsCore";
describe("Test curl import flow", function () {
it("1. Test curl import flow Run and Delete", function () {
cy.fixture("datasources").then((datasourceFormData) => {
localStorage.setItem("ApiPaneV2", "ApiPaneV2");
cy.NavigateToApiEditor();
dataSources.NavigateToDSCreateNew();
cy.get(ApiEditor.curlImage).click({ force: true });
cy.get("textarea").type(
"curl -X GET " + datasourceFormData["mockApiUrl"],
);
cy.importCurl();
cy.get("@curlImport").then((response) => {
expect(response.response.body.responseMeta.success).to.eq(true);
cy.get(apiwidget.ApiName)
.invoke("text")
.then((text) => {
const someText = text;
expect(someText).to.equal(response.response.body.data.name);
});
});
cy.RunAPI();
cy.ResponseStatusCheck("200 OK");
agHelper.ActionContextMenuWithInPane({
action: "Delete",
entityType: entityItems.Api,
});
localStorage.setItem("ApiPaneV2", "ApiPaneV2");
cy.NavigateToApiEditor();
dataSources.NavigateToDSCreateNew();
cy.get(ApiEditor.curlImage).click({ force: true });
cy.get("textarea").type("curl -X GET " + tedTestConfig.mockApiUrl);
cy.importCurl();
cy.get("@curlImport").then((response) => {
expect(response.response.body.responseMeta.success).to.eq(true);
cy.get(apiwidget.ApiName)
.invoke("text")
.then((text) => {
const someText = text;
expect(someText).to.equal(response.response.body.data.name);
});
});
cy.RunAPI();
cy.ResponseStatusCheck("200 OK");
agHelper.ActionContextMenuWithInPane({
action: "Delete",
entityType: entityItems.Api,
});
});

View File

@ -1,16 +1,17 @@
import { data } from "cypress/types/jquery";
import {
agHelper,
apiPage,
jsEditor,
debuggerHelper,
tedTestConfig,
} from "../../../../support/Objects/ObjectsCore";
describe("Tests functionality of platform function", () => {
it("1. Tests access to outer variable", () => {
cy.fixture("datasources").then((datasourceFormData: any) => {
apiPage.CreateAndFillApi(datasourceFormData["mockApiUrl"], "getAllUsers");
jsEditor.CreateJSObject(
`export default {
apiPage.CreateAndFillApi(tedTestConfig.mockApiUrl, "getAllUsers");
jsEditor.CreateJSObject(
`export default {
myFun1: () => {
},
@ -67,83 +68,80 @@ describe("Tests functionality of platform function", () => {
showAlert("Hello").then(() => getAllUsers.run(() => showAlert("World")));
}
}`,
{
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
prettify: false,
},
);
agHelper.Sleep(4000);
cy.url().then((url) => {
cy.visit(url, {
onBeforeLoad: (win) => {
const latitude = 48.71597183246423;
const longitude = 21.255670821215418;
cy.stub(
win.navigator.geolocation,
"getCurrentPosition",
).callsArgWith(0, {
{
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
prettify: false,
},
);
agHelper.Sleep(4000);
cy.url().then((url) => {
cy.visit(url, {
onBeforeLoad: (win) => {
const latitude = 48.71597183246423;
const longitude = 21.255670821215418;
cy.stub(win.navigator.geolocation, "getCurrentPosition").callsArgWith(
0,
{
coords: { latitude, longitude },
});
},
});
jsEditor.SelectFunctionDropdown("accessOuterVariableInsideGeoCb");
jsEditor.RunJSObj();
agHelper.AssertContains("Hello World from current position", "exist");
jsEditor.SelectFunctionDropdown("accessOuterVariableInsideSuccessCb");
jsEditor.RunJSObj();
agHelper.AssertContains("Hello World from success callback", "exist");
jsEditor.SelectFunctionDropdown(
"accessOuterVariableInsideSetIntervalCb",
);
jsEditor.RunJSObj();
agHelper.AssertContains("Hello World from setInterval", "exist");
jsEditor.SelectFunctionDropdown("accessSetIntervalFromSetTimeout");
jsEditor.RunJSObj();
agHelper.AssertContains(
"Hello World from setInterval inside setTimeout",
"exist",
);
jsEditor.SelectFunctionDropdown("executeTriggersOutsideReqResCycle");
jsEditor.RunJSObj();
agHelper.AssertContains("Hello", "exist");
agHelper.AssertContains("World", "exist");
// Test for meta data
jsEditor.SelectFunctionDropdown("metaDataForSetTimeout");
jsEditor.RunJSObj();
agHelper.GetNClick(jsEditor._logsTab);
jsEditor.SelectFunctionDropdown("switchMetaData");
jsEditor.RunJSObj();
agHelper.Sleep(4000);
agHelper.GetNClick(jsEditor._logsTab);
debuggerHelper.DebuggerLogsFilter("JSObject1.metaDataForSetTimeout");
debuggerHelper.DoesConsoleLogExist("Hello from setTimeout");
jsEditor.SelectFunctionDropdown("metaDataForSetInterval");
jsEditor.RunJSObj();
agHelper.GetNClick(jsEditor._logsTab);
jsEditor.SelectFunctionDropdown("switchMetaData");
jsEditor.RunJSObj();
agHelper.Sleep(3000);
agHelper.GetNClick(jsEditor._logsTab);
debuggerHelper.DebuggerLogsFilter("JSObject1.metaDataForSetInterval");
debuggerHelper.DoesConsoleLogExist("Hello from setInterval");
jsEditor.SelectFunctionDropdown("metaDataApiTest");
jsEditor.RunJSObj();
agHelper.GetNClick(jsEditor._logsTab);
jsEditor.SelectFunctionDropdown("switchMetaData");
jsEditor.RunJSObj();
agHelper.Sleep(2000);
agHelper.GetNClick(jsEditor._logsTab);
debuggerHelper.DebuggerLogsFilter("JSObject1.metaDataApiTest");
debuggerHelper.DoesConsoleLogExist("Hello from setTimeout inside API");
},
);
},
});
jsEditor.SelectFunctionDropdown("accessOuterVariableInsideGeoCb");
jsEditor.RunJSObj();
agHelper.AssertContains("Hello World from current position", "exist");
jsEditor.SelectFunctionDropdown("accessOuterVariableInsideSuccessCb");
jsEditor.RunJSObj();
agHelper.AssertContains("Hello World from success callback", "exist");
jsEditor.SelectFunctionDropdown("accessOuterVariableInsideSetIntervalCb");
jsEditor.RunJSObj();
agHelper.AssertContains("Hello World from setInterval", "exist");
jsEditor.SelectFunctionDropdown("accessSetIntervalFromSetTimeout");
jsEditor.RunJSObj();
agHelper.AssertContains(
"Hello World from setInterval inside setTimeout",
"exist",
);
jsEditor.SelectFunctionDropdown("executeTriggersOutsideReqResCycle");
jsEditor.RunJSObj();
agHelper.AssertContains("Hello", "exist");
agHelper.AssertContains("World", "exist");
// Test for meta data
jsEditor.SelectFunctionDropdown("metaDataForSetTimeout");
jsEditor.RunJSObj();
agHelper.GetNClick(jsEditor._logsTab);
jsEditor.SelectFunctionDropdown("switchMetaData");
jsEditor.RunJSObj();
agHelper.Sleep(4000);
agHelper.GetNClick(jsEditor._logsTab);
debuggerHelper.DebuggerLogsFilter("JSObject1.metaDataForSetTimeout");
debuggerHelper.DoesConsoleLogExist("Hello from setTimeout");
jsEditor.SelectFunctionDropdown("metaDataForSetInterval");
jsEditor.RunJSObj();
agHelper.GetNClick(jsEditor._logsTab);
jsEditor.SelectFunctionDropdown("switchMetaData");
jsEditor.RunJSObj();
agHelper.Sleep(3000);
agHelper.GetNClick(jsEditor._logsTab);
debuggerHelper.DebuggerLogsFilter("JSObject1.metaDataForSetInterval");
debuggerHelper.DoesConsoleLogExist("Hello from setInterval");
jsEditor.SelectFunctionDropdown("metaDataApiTest");
jsEditor.RunJSObj();
agHelper.GetNClick(jsEditor._logsTab);
jsEditor.SelectFunctionDropdown("switchMetaData");
jsEditor.RunJSObj();
agHelper.Sleep(2000);
agHelper.GetNClick(jsEditor._logsTab);
debuggerHelper.DebuggerLogsFilter("JSObject1.metaDataApiTest");
debuggerHelper.DoesConsoleLogExist("Hello from setTimeout inside API");
});
});
});

View File

@ -1,9 +1,11 @@
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
const jsEditor = ObjectsRegistry.JSEditor;
const agHelper = ObjectsRegistry.AggregateHelper;
const apiPage = ObjectsRegistry.ApiPage;
const deployMode = ObjectsRegistry.DeployMode;
const debuggerHelper = ObjectsRegistry.DebuggerHelper;
import {
tedTestConfig,
jsEditor,
agHelper,
apiPage,
deployMode,
debuggerHelper,
} from "../../../../support/Objects/ObjectsCore";
let userName: string;
@ -145,10 +147,9 @@ describe("Tests setTimeout API", function () {
});
it("6. Access to args passed into success/error callback functions in API.run when using setTimeout", () => {
cy.fixture("datasources").then((datasourceFormData: any) => {
apiPage.CreateAndFillApi(datasourceFormData["mockApiUrl"]);
jsEditor.CreateJSObject(
`export default {
apiPage.CreateAndFillApi(tedTestConfig.mockApiUrl);
jsEditor.CreateJSObject(
`export default {
myVar1: [],
myVar2: {},
myFun1: (x) => {
@ -168,42 +169,40 @@ describe("Tests setTimeout API", function () {
});
}
}`,
{
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
prettify: true,
},
);
jsEditor.RenameJSObjFromPane("Timeouts");
agHelper.Sleep(2000);
jsEditor.RunJSObj();
agHelper.Sleep(3000);
{
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
prettify: true,
},
);
jsEditor.RenameJSObjFromPane("Timeouts");
agHelper.Sleep(2000);
jsEditor.RunJSObj();
agHelper.Sleep(3000);
cy.wait("@postExecute").then((interception: any) => {
//Js function to match any name returned from API
userName = JSON.stringify(
interception.response.body.data.body[0].name,
).replace(/['"]+/g, ""); //removing double quotes
agHelper.AssertContains(userName);
});
cy.wait("@postExecute").then((interception: any) => {
//Js function to match any name returned from API
userName = JSON.stringify(
interception.response.body.data.body[0].name,
).replace(/['"]+/g, ""); //removing double quotes
agHelper.AssertContains(userName);
});
agHelper.Sleep(2000);
jsEditor.SelectFunctionDropdown("myFun2");
jsEditor.RunJSObj();
agHelper.Sleep(3000);
cy.wait("@postExecute").then((interception: any) => {
userName = JSON.stringify(
interception.response.body.data.body[0].name,
).replace(/['"]+/g, "");
agHelper.AssertContains(userName);
});
agHelper.Sleep(2000);
jsEditor.SelectFunctionDropdown("myFun2");
jsEditor.RunJSObj();
agHelper.Sleep(3000);
cy.wait("@postExecute").then((interception: any) => {
userName = JSON.stringify(
interception.response.body.data.body[0].name,
).replace(/['"]+/g, "");
agHelper.AssertContains(userName);
});
});
it("7. Verifies whether setTimeout executes on page load", () => {
//apiPage.CreateAndFillApi(agHelper.mockApiUrl);
jsEditor.CreateJSObject(
`export default {
myVar1: [],

View File

@ -3,12 +3,12 @@ import {
entityExplorer,
entityItems,
dataSources,
hostPort,
tedTestConfig,
assertHelper,
} from "../../../support/Objects/ObjectsCore";
let dsName: any, jsonSpecies: any, offset: any, insertedRecordId: any;
describe("excludeForAirgap", "Validate Airtable Ds", () => {
describe.skip("excludeForAirgap", "Validate Airtable Ds", () => {
before("Create a new Airtable DS", () => {
dataSources.CreateDataSource("Airtable", true, false);
cy.get("@dsName").then(($dsName) => {
@ -27,12 +27,12 @@ describe("excludeForAirgap", "Validate Airtable Ds", () => {
"List records",
);
agHelper.EnterValue(hostPort.AirtableBase, {
agHelper.EnterValue(tedTestConfig.AirtableBase, {
propFieldName: "",
directInput: false,
inputFieldName: "Base ID ",
});
agHelper.EnterValue(hostPort.AirtableTable, {
agHelper.EnterValue(tedTestConfig.AirtableTable, {
propFieldName: "",
directInput: false,
inputFieldName: "Table name",
@ -236,7 +236,7 @@ describe("excludeForAirgap", "Validate Airtable Ds", () => {
});
dataSources.RunQuery({ toValidateResponse: false }); //For CI failure!
agHelper.Sleep();
agHelper.Sleep(3000);
dataSources.RunQuery();
cy.get("@postExecute").then((resObj: any) => {

View File

@ -64,7 +64,6 @@
"AirtableBase": "appubHrVbovcudwN6",
"AirtableTable": "tblsFCQSskVFf7xNd",
"mockApiUrl": "http://host.docker.internal:5001/v1/mock-api?records=10",
"echoApiUrl": "http://host.docker.internal:5001/v1/mock-api/echo",
"randomCatfactUrl": "http://host.docker.internal:5001/v1/catfact/random",
"multipartAPI": "http://host.docker.internal:5001/v1/mock-api/echo-multipart",

View File

@ -29,6 +29,6 @@ export const onboarding = ObjectsRegistry.Onboarding;
export const autoLayout = ObjectsRegistry.AutoLayout;
export const draggableWidgets = WIDGET;
export const fakerHelper = ObjectsRegistry.FakerHelper;
export const hostPort = ObjectsRegistry.DefaultHostPort;
export const tedTestConfig = ObjectsRegistry.TEDTestConfigs;
export const entityItems = EntityItems;
export const tabs = ObjectsRegistry.Tabs;

View File

@ -23,7 +23,7 @@ import { EmbedSettings } from "../Pages/AppSettings/EmbedSettings";
import { Templates } from "../Pages/Templates";
import { Onboarding } from "../Pages/Onboarding";
import { AutoLayout } from "../Pages/AutoLayout";
import { DefaultHostPort } from "./Hostport";
import { TEDTestConfigs } from "./TestConfigs";
import { AssertHelper } from "../Pages/AssertHelper";
import { ReusableHelper } from "./ReusableHelper";
import { Tabs } from "../Pages/Tabs";
@ -253,12 +253,12 @@ export class ObjectsRegistry {
return ObjectsRegistry.autoLayout__;
}
private static defaultHostPort__: DefaultHostPort;
static get DefaultHostPort(): DefaultHostPort {
if (ObjectsRegistry.defaultHostPort__ === undefined) {
ObjectsRegistry.defaultHostPort__ = new DefaultHostPort();
private static tedTestConfigs__: TEDTestConfigs;
static get TEDTestConfigs(): TEDTestConfigs {
if (ObjectsRegistry.tedTestConfigs__ === undefined) {
ObjectsRegistry.tedTestConfigs__ = new TEDTestConfigs();
}
return ObjectsRegistry.defaultHostPort__;
return ObjectsRegistry.tedTestConfigs__;
}
}

View File

@ -1,4 +1,4 @@
export class DefaultHostPort {
export class TEDTestConfigs {
mongo_authenticationAuthtype = "SCRAM-SHA-1";
mongo_host = "host.docker.internal";
mongo_port = 28017;

View File

@ -30,7 +30,7 @@ export class AssertHelper extends ReusableHelper {
expect(doc.readyState).to.equal("complete");
}),
);
cy.window().should("have.property", "onload");
cy.window({ timeout: 60000 }).should("have.property", "onload");
}
public AssertDelete(entityType: EntityItemsType) {
@ -74,8 +74,8 @@ export class AssertHelper extends ReusableHelper {
// "response.body.responseMeta.status",
// expectedStatus,
// );
this.Sleep(); //Wait a bit for call to finish!
return cy.wait(this.GetAliasName(aliasName));
this.Sleep(2000); //Wait a bit for call to finish!
return cy.wait(this.GetAliasName(aliasName), { responseTimeout: 60000 });
}
public AssertNetworkStatus(aliasName: string, expectedStatus = 200) {

View File

@ -35,14 +35,14 @@ export class DataSources {
private ee = ObjectsRegistry.EntityExplorer;
private locator = ObjectsRegistry.CommonLocators;
private apiPage = ObjectsRegistry.ApiPage;
private hp = ObjectsRegistry.DefaultHostPort;
private tedTestConfig = ObjectsRegistry.TEDTestConfigs;
private assertHelper = ObjectsRegistry.AssertHelper;
public ContainerKVP = (containerName: string) => {
return {
MsSql: this.hp.mssql_docker(containerName),
Arango: this.hp.arango_docker(containerName),
Elasticsearch: this.hp.elastic_docker(containerName),
MsSql: this.tedTestConfig.mssql_docker(containerName),
Arango: this.tedTestConfig.arango_docker(containerName),
Elasticsearch: this.tedTestConfig.elastic_docker(containerName),
};
}; //Container KeyValuePair
@ -402,22 +402,22 @@ export class DataSources {
password = "",
) {
const hostAddress = shouldAddTrailingSpaces
? this.hp.postgres_host + " "
: this.hp.postgres_host;
? this.tedTestConfig.postgres_host + " "
: this.tedTestConfig.postgres_host;
const databaseName = shouldAddTrailingSpaces
? this.hp.postgres_databaseName + " "
: this.hp.postgres_databaseName;
? this.tedTestConfig.postgres_databaseName + " "
: this.tedTestConfig.postgres_databaseName;
this.agHelper.UpdateInputValue(
this._port,
this.hp.postgres_port.toString(),
this.tedTestConfig.postgres_port.toString(),
);
this.agHelper.UpdateInputValue(this._host, hostAddress);
cy.get(this._databaseName).clear().type(databaseName);
cy.get(this._username).type(
username == "" ? this.hp.postgres_username : username,
username == "" ? this.tedTestConfig.postgres_username : username,
);
cy.get(this._password).type(
password == "" ? this.hp.postgres_username : password,
password == "" ? this.tedTestConfig.postgres_username : password,
);
this.ValidateNSelectDropdown("SSL mode", "Default");
}
@ -428,56 +428,79 @@ export class DataSources {
password = "",
) {
const hostAddress = shouldAddTrailingSpaces
? this.hp.oracle_host + " "
: this.hp.oracle_host;
? this.tedTestConfig.oracle_host + " "
: this.tedTestConfig.oracle_host;
const databaseName = shouldAddTrailingSpaces
? this.hp.oracle_name + " "
: this.hp.oracle_name;
? this.tedTestConfig.oracle_name + " "
: this.tedTestConfig.oracle_name;
this.agHelper.UpdateInputValue(this._host, hostAddress);
this.agHelper.UpdateInputValue(this._port, this.hp.oracle_port.toString());
this.agHelper.UpdateInputValue(
this._port,
this.tedTestConfig.oracle_port.toString(),
);
cy.get(this._databaseName).clear().type(databaseName);
cy.get(this._username).type(
username == "" ? this.hp.oracle_username : username,
username == "" ? this.tedTestConfig.oracle_username : username,
);
cy.get(this._password).type(
password == "" ? this.hp.oracle_password : password,
password == "" ? this.tedTestConfig.oracle_password : password,
);
}
public FillMongoDSForm(shouldAddTrailingSpaces = false) {
const hostAddress = shouldAddTrailingSpaces
? this.hp.mongo_host + " "
: this.hp.mongo_host;
? this.tedTestConfig.mongo_host + " "
: this.tedTestConfig.mongo_host;
this.agHelper.UpdateInputValue(this._host, hostAddress);
this.agHelper.UpdateInputValue(this._port, this.hp.mongo_port.toString());
cy.get(this._databaseName).clear().type(this.hp.mongo_databaseName);
this.agHelper.UpdateInputValue(
this._port,
this.tedTestConfig.mongo_port.toString(),
);
cy.get(this._databaseName)
.clear()
.type(this.tedTestConfig.mongo_databaseName);
}
public FillMySqlDSForm(shouldAddTrailingSpaces = false) {
const hostAddress = shouldAddTrailingSpaces
? this.hp.mysql_host + " "
: this.hp.mysql_host;
? this.tedTestConfig.mysql_host + " "
: this.tedTestConfig.mysql_host;
const databaseName = shouldAddTrailingSpaces
? this.hp.mysql_databaseName + " "
: this.hp.mysql_databaseName;
? this.tedTestConfig.mysql_databaseName + " "
: this.tedTestConfig.mysql_databaseName;
this.agHelper.UpdateInputValue(this._host, hostAddress);
this.agHelper.UpdateInputValue(this._port, this.hp.mysql_port.toString());
this.agHelper.UpdateInputValue(
this._port,
this.tedTestConfig.mysql_port.toString(),
);
cy.get(this._databaseName).clear().type(databaseName);
this.agHelper.UpdateInputValue(this._username, this.hp.mysql_username);
cy.get(this._password).type(this.hp.mysql_password);
this.agHelper.UpdateInputValue(
this._username,
this.tedTestConfig.mysql_username,
);
cy.get(this._password).type(this.tedTestConfig.mysql_password);
}
public FillMsSqlDSForm() {
this.agHelper.UpdateInputValue(this._host, this.hp.mssql_host);
this.agHelper.UpdateInputValue(this._port, this.hp.mssql_port.toString());
this.agHelper.UpdateInputValue(this._host, this.tedTestConfig.mssql_host);
this.agHelper.UpdateInputValue(
this._port,
this.tedTestConfig.mssql_port.toString(),
);
this.agHelper.ClearTextField(this._databaseName);
// this.agHelper.UpdateInputValue(
// this._databaseName,
// datasourceFormData["mssql-databaseName"],
// ); //Commenting until MsSQL is init loaded into container
this.agHelper.UpdateInputValue(this._username, this.hp.mssql_username);
this.agHelper.UpdateInputValue(this._password, this.hp.mssql_password);
this.agHelper.UpdateInputValue(
this._username,
this.tedTestConfig.mssql_username,
);
this.agHelper.UpdateInputValue(
this._password,
this.tedTestConfig.mssql_password,
);
}
public FillAirtableDSForm() {
@ -494,14 +517,23 @@ export class DataSources {
}
public FillArangoDSForm() {
this.agHelper.UpdateInputValue(this._host, this.hp.arango_host);
this.agHelper.UpdateInputValue(this._port, this.hp.arango_port.toString());
this.agHelper.UpdateInputValue(this._host, this.tedTestConfig.arango_host);
this.agHelper.UpdateInputValue(
this._port,
this.tedTestConfig.arango_port.toString(),
);
//Validating db name is _system, currently unable to create DB via curl in Arango
this.agHelper
.GetText(this._databaseName, "val")
.then(($dbName) => expect($dbName).to.eq("_system"));
this.agHelper.UpdateInputValue(this._username, this.hp.arango_username);
this.agHelper.UpdateInputValue(this._password, this.hp.arango_password);
this.agHelper.UpdateInputValue(
this._username,
this.tedTestConfig.arango_username,
);
this.agHelper.UpdateInputValue(
this._password,
this.tedTestConfig.arango_password,
);
}
public FillCurlNImport(value: string) {
@ -520,11 +552,11 @@ export class DataSources {
public FillFirestoreDSForm() {
this.agHelper.UpdateInput(
this.locator._inputFieldByName("Database URL"),
this.hp.firestore_database_url,
this.tedTestConfig.firestore_database_url,
);
this.agHelper.UpdateInput(
this.locator._inputFieldByName("Project Id"),
this.hp.firestore_projectID,
this.tedTestConfig.firestore_projectID,
);
// cy.fixture("firestore-ServiceAccCreds").then((json: any) => {
// let ServiceAccCreds = JSON.parse(
@ -544,15 +576,24 @@ export class DataSources {
}
public FillElasticSearchDSForm() {
this.agHelper.UpdateInputValue(this._host, this.hp.elastic_host);
this.agHelper.UpdateInputValue(this._port, this.hp.elastic_port.toString());
this.agHelper.UpdateInputValue(this._username, this.hp.elastic_username);
this.agHelper.UpdateInputValue(this._password, this.hp.elastic_password);
this.agHelper.UpdateInputValue(this._host, this.tedTestConfig.elastic_host);
this.agHelper.UpdateInputValue(
this._port,
this.tedTestConfig.elastic_port.toString(),
);
this.agHelper.UpdateInputValue(
this._username,
this.tedTestConfig.elastic_username,
);
this.agHelper.UpdateInputValue(
this._password,
this.tedTestConfig.elastic_password,
);
}
public FillUnAuthenticatedGraphQLDSForm() {
this.agHelper.GetNClick(this._createBlankGraphQL);
this.apiPage.EnterURL(this.hp.GraphqlApiUrl_TED);
this.apiPage.EnterURL(this.tedTestConfig.GraphqlApiUrl_TED);
this.assertHelper.AssertNetworkStatus("@createNewApi", 201);
}
@ -565,7 +606,7 @@ export class DataSources {
this.CreatePlugIn("Authenticated GraphQL API");
this.agHelper.UpdateInput(
this.locator._inputFieldByName("URL"),
this.hp.GraphqlApiUrl_TED,
this.tedTestConfig.GraphqlApiUrl_TED,
);
this.agHelper.UpdateInputValue(this._graphQLHeaderKey, hKey);
@ -579,8 +620,11 @@ export class DataSources {
}
public FillRedisDSForm() {
this.agHelper.UpdateInputValue(this._host, this.hp.redis_host);
this.agHelper.UpdateInputValue(this._port, this.hp.redis_port.toString());
this.agHelper.UpdateInputValue(this._host, this.tedTestConfig.redis_host);
this.agHelper.UpdateInputValue(
this._port,
this.tedTestConfig.redis_port.toString(),
);
}
public FillS3DSForm() {
@ -1177,7 +1221,7 @@ export class DataSources {
public FillAuthAPIUrl() {
this.agHelper.UpdateInput(
this.locator._inputFieldByName("URL"),
this.hp.authenticatedApiUrl,
this.tedTestConfig.authenticatedApiUrl,
);
}
@ -1215,7 +1259,7 @@ export class DataSources {
}
public FillMongoDatasourceFormWithURI() {
const uri = this.hp.mongo_uri;
const uri = this.tedTestConfig.mongo_uri;
this.ValidateNSelectDropdown(
"Use mongo connection string URI",
"No",
@ -1232,28 +1276,32 @@ export class DataSources {
// Login to TED OAuth
let formData = new FormData();
formData.append("username", this.hp.OAuth_Username);
cy.request("POST", this.hp.OAuth_Host, formData).then((response) => {
expect(response.status).to.equal(200);
});
formData.append("username", this.tedTestConfig.OAuth_Username);
cy.request("POST", this.tedTestConfig.OAuth_Host, formData).then(
(response) => {
expect(response.status).to.equal(200);
},
);
// Create client
let clientData = new FormData();
clientData.append("client_name", "appsmith_cs_post");
clientData.append("client_uri", "http://localhost/");
clientData.append("scope", "profile");
clientData.append("redirect_uri", this.hp.OAuth_RedirectUrl);
clientData.append("redirect_uri", this.tedTestConfig.OAuth_RedirectUrl);
clientData.append("grant_type", grantType);
clientData.append("response_type", "code");
clientData.append("token_endpoint_auth_method", "client_secret_post");
cy.request("POST", this.hp.OAuth_Host + "/create_client", clientData).then(
(response) => {
expect(response.status).to.equal(200);
},
);
cy.request(
"POST",
this.tedTestConfig.OAuth_Host + "/create_client",
clientData,
).then((response) => {
expect(response.status).to.equal(200);
});
// Get Client Credentials
cy.request("GET", this.hp.OAuth_Host).then((response) => {
cy.request("GET", this.tedTestConfig.OAuth_Host).then((response) => {
clientId = response.body.split("client_id: </strong>");
clientId = clientId[1].split("<strong>client_secret: </strong>");
clientSecret = clientId[1].split("<strong>");
@ -1297,7 +1345,7 @@ export class DataSources {
// Fill Auth Form
this.agHelper.UpdateInput(
this.locator._inputFieldByName("URL"),
this.hp.OAuth_ApiUrl,
this.tedTestConfig.OAuth_ApiUrl,
);
this.agHelper.GetNClick(this._authType);
this.agHelper.GetNClick(this._oauth2);
@ -1309,7 +1357,7 @@ export class DataSources {
this.agHelper.UpdateInput(
this.locator._inputFieldByName("Access token URL"),
this.hp.OAUth_AccessTokenUrl,
this.tedTestConfig.OAUth_AccessTokenUrl,
);
this.agHelper.UpdateInput(
@ -1326,7 +1374,7 @@ export class DataSources {
);
this.agHelper.UpdateInput(
this.locator._inputFieldByName("Authorization URL"),
this.hp.OAuth_AuthUrl,
this.tedTestConfig.OAuth_AuthUrl,
);
}

View File

@ -302,7 +302,7 @@ export class EntityExplorer {
this.agHelper.Sleep(500);
}
public DragDropWidgetNVerify(
private DragNDropWidget(
widgetType: string,
x = 300,
y = 100,
@ -342,6 +342,16 @@ export class EntityExplorer {
)
.first()
.trigger("mouseup", x, y, { eventConstructor: "MouseEvent" });
}
public DragDropWidgetNVerify(
widgetType: string,
x = 300,
y = 100,
parentWidgetType = "",
dropTargetId = "",
) {
this.DragNDropWidget(widgetType, x, y, parentWidgetType, dropTargetId);
this.agHelper.AssertAutoSave(); //settling time for widget on canvas!
if (widgetType === "modalwidget") {
cy.get(".t--modal-widget").should("exist");

View File

@ -5,7 +5,7 @@ const GITHUB_API_BASE = "https://api.github.com";
export class GitSync {
public agHelper = ObjectsRegistry.AggregateHelper;
public locator = ObjectsRegistry.CommonLocators;
private hostPort = ObjectsRegistry.DefaultHostPort;
private tedTestConfig = ObjectsRegistry.TEDTestConfigs;
private assertHelper = ObjectsRegistry.AssertHelper;
private _connectGitBottomBar = ".t--connect-git-bottom-bar";
@ -72,7 +72,7 @@ export class GitSync {
public CreateTestGiteaRepo(repo: string, privateFlag = false) {
cy.request({
method: "POST",
url: `${this.hostPort.GITEA_API_BASE_TED}:${this.hostPort.GITEA_API_PORT_TED}/api/v1/org/Cypress/repos`,
url: `${this.tedTestConfig.GITEA_API_BASE_TED}:${this.tedTestConfig.GITEA_API_PORT_TED}/api/v1/org/Cypress/repos`,
headers: {
Authorization: `token ${Cypress.env("GITEA_TOKEN")}`,
},
@ -97,7 +97,7 @@ export class GitSync {
);
this.agHelper.TypeText(
this._gitRepoInput,
`${this.hostPort.GITEA_API_URL_TED}/${repo}.git`,
`${this.tedTestConfig.GITEA_API_URL_TED}/${repo}.git`,
//`git@github.com:${owner}/${repo}.git`,
);
@ -109,7 +109,7 @@ export class GitSync {
// fetch the generated key and post to the github repo
cy.request({
method: "POST",
url: `${this.hostPort.GITEA_API_BASE_TED}:${this.hostPort.GITEA_API_PORT_TED}/api/v1/repos/Cypress/${repo}/keys`,
url: `${this.tedTestConfig.GITEA_API_BASE_TED}:${this.tedTestConfig.GITEA_API_PORT_TED}/api/v1/repos/Cypress/${repo}/keys`,
headers: {
Authorization: `token ${Cypress.env("GITEA_TOKEN")}`,
},
@ -139,7 +139,7 @@ export class GitSync {
DeleteTestGithubRepo(repo: any) {
cy.request({
method: "DELETE",
url: `${this.hostPort.GITEA_API_BASE_TED}:${this.hostPort.GITEA_API_PORT_TED}/api/v1/repos/Cypress/${repo}`,
url: `${this.tedTestConfig.GITEA_API_BASE_TED}:${this.tedTestConfig.GITEA_API_PORT_TED}/api/v1/repos/Cypress/${repo}`,
headers: {
Authorization: `token ${Cypress.env("GITEA_TOKEN")}`,
},
@ -269,7 +269,7 @@ export class GitSync {
// fetch the generated key and post to the github repo
cy.request({
method: "POST",
url: `http://${this.hostPort.GITEA_API_BASE_TED}:${this.hostPort.GITEA_API_PORT_TED}/v1/gitserver/addgitssh`,
url: `http://${this.tedTestConfig.GITEA_API_BASE_TED}:${this.tedTestConfig.GITEA_API_PORT_TED}/v1/gitserver/addgitssh`,
//body: formdata,
body: {
sshkey: generatedKey,
@ -330,7 +330,7 @@ export class GitSync {
cy.request({
method: "GET",
url:
`http://${this.hostPort.GITEA_API_BASE_TED}:${this.hostPort.GITEA_API_PORT_TED}/v1/gitserver/addrepo?reponame=` +
`http://${this.tedTestConfig.GITEA_API_BASE_TED}:${this.tedTestConfig.GITEA_API_PORT_TED}/v1/gitserver/addrepo?reponame=` +
repo,
}).then((response) => {
remoteUrl = JSON.stringify(response.body).replace(/['"]+/g, "");

View File

@ -24,6 +24,7 @@ export class Onboarding {
this._aggregateHelper.AssertElementVisible(
OnboardingLocator.datasourcePage,
);
this.closeIntroModal();
this._aggregateHelper.AssertElementAbsence(
OnboardingLocator.introModal,
10000,

View File

@ -291,12 +291,15 @@ export class PropertyPane {
propFieldName: string,
valueToEnter: string,
toVerifySave = true,
toValidateNetworkCall = true,
) {
this.agHelper.UpdateCodeInput(
this.locator._existingFieldTextByName(propFieldName),
valueToEnter,
);
toVerifySave && this.agHelper.AssertAutoSave(); //Allowing time for saving entered value
toValidateNetworkCall &&
this.assertHelper.AssertNetworkStatus("@updateLayout");
}
public ValidatePropertyFieldValue(

View File

@ -9,7 +9,7 @@ import { ObjectsRegistry } from "../support/Objects/Registry";
let gitSync = ObjectsRegistry.GitSync,
agHelper = ObjectsRegistry.AggregateHelper,
hostPort = ObjectsRegistry.DefaultHostPort;
tedTestConfig = ObjectsRegistry.TEDTestConfigs;
const commonLocators = require("../locators/commonlocators.json");
const GITHUB_API_BASE = "https://api.github.com";
@ -342,7 +342,7 @@ Cypress.Commands.add(
);
cy.get(gitSyncLocators.gitRepoInput).type(
//`git@github.com:${owner}/${repo}.git`,
`${hostPort.GITEA_API_URL_TED}/${repo}.git`,
`${tedTestConfig.GITEA_API_URL_TED}/${repo}.git`,
);
cy.get(gitSyncLocators.generateDeployKeyBtn).click();
cy.wait(`@generateKey-${repo}`).then((result) => {
@ -365,7 +365,7 @@ Cypress.Commands.add(
cy.request({
method: "POST",
url: `${hostPort.GITEA_API_BASE_TED}:${hostPort.GITEA_API_PORT_TED}/api/v1/repos/Cypress/${repo}/keys`,
url: `${tedTestConfig.GITEA_API_BASE_TED}:${tedTestConfig.GITEA_API_PORT_TED}/api/v1/repos/Cypress/${repo}/keys`,
headers: {
Authorization: `token ${Cypress.env("GITEA_TOKEN")}`,
},
@ -475,7 +475,7 @@ Cypress.Commands.add(
cy.request({
method: "POST",
url: `${hostPort.GITEA_API_BASE_TED}:${hostPort.GITEA_API_PORT_TED}/api/v1/repos/Cypress/${repo}/keys`,
url: `${tedTestConfig.GITEA_API_BASE_TED}:${tedTestConfig.GITEA_API_PORT_TED}/api/v1/repos/Cypress/${repo}/keys`,
headers: {
Authorization: `token ${Cypress.env("GITEA_TOKEN")}`,
},