Merge pull request #28933 from appsmithorg/release_v1.9.47

chore: Release v1.9.47
This commit is contained in:
Favour Ohanekwu 2023-11-20 10:13:34 +01:00 committed by GitHub
commit 4cfbc94ba8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
755 changed files with 17149 additions and 6793 deletions

2
.github/config.json vendored

File diff suppressed because one or more lines are too long

View File

@ -32,7 +32,10 @@ RUN cd ./utils && npm install --only=prod && npm install --only=prod -g . && cd
&& chmod +x *.sh templates/nginx-app.conf.sh /watchtower-hooks/*.sh \
# Disable setuid/setgid bits for the files inside container.
&& find / \( -path /proc -prune \) -o \( \( -perm -2000 -o -perm -4000 \) -print -exec chmod -s '{}' + \) || true \
&& node prepare-image.mjs
&& node prepare-image.mjs \
&& mkdir -p /.mongodb/mongosh /appsmith-stacks \
&& chmod ugo+w /etc /appsmith-stacks \
&& chmod -R ugo+w /var/lib/nginx /var/log/nginx /var/run /usr/sbin/cron /.mongodb /etc/ssl /usr/local/share
LABEL com.centurylinklabs.watchtower.lifecycle.pre-check=/watchtower-hooks/pre-check.sh
LABEL com.centurylinklabs.watchtower.lifecycle.pre-update=/watchtower-hooks/pre-update.sh

View File

@ -93,40 +93,38 @@ Let's build great software together.
[![ayushpahwa](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8526215?v=4&w=50&h=50&mask=circle)](https://github.com/ayushpahwa)
[![sneha122](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/30018882?v=4&w=50&h=50&mask=circle)](https://github.com/sneha122)
[![ApekshaBhosale](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/7846888?v=4&w=50&h=50&mask=circle)](https://github.com/ApekshaBhosale)
[![yatinappsmith](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/84702014?v=4&w=50&h=50&mask=circle)](https://github.com/yatinappsmith)
[![Parthvi12](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/80334441?v=4&w=50&h=50&mask=circle)](https://github.com/Parthvi12)
[![yatinappsmith](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/84702014?v=4&w=50&h=50&mask=circle)](https://github.com/yatinappsmith)
[![somangshu](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11089579?v=4&w=50&h=50&mask=circle)](https://github.com/somangshu)
[![pratapaprasanna](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/15846947?v=4&w=50&h=50&mask=circle)](https://github.com/pratapaprasanna)
[![pranavkanade](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13262095?v=4&w=50&h=50&mask=circle)](https://github.com/pranavkanade)
[![marks0351](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/35134347?v=4&w=50&h=50&mask=circle)](https://github.com/marks0351)
[![albinAppsmith](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/87797149?v=4&w=50&h=50&mask=circle)](https://github.com/albinAppsmith)
[![marks0351](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/35134347?v=4&w=50&h=50&mask=circle)](https://github.com/marks0351)
[![nsarupr](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20905988?v=4&w=50&h=50&mask=circle)](https://github.com/nsarupr)
[![ashit-rath](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/88306433?v=4&w=50&h=50&mask=circle)](https://github.com/ashit-rath)
[![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)
[![KelvinOm](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11555074?v=4&w=50&h=50&mask=circle)](https://github.com/KelvinOm)
[![dhruvikn](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/22471214?v=4&w=50&h=50&mask=circle)](https://github.com/dhruvikn)
[![rajatagrawal](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1189106?v=4&w=50&h=50&mask=circle)](https://github.com/rajatagrawal)
[![KelvinOm](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/11555074?v=4&w=50&h=50&mask=circle)](https://github.com/KelvinOm)
[![areyabhishek](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/30255708?v=4&w=50&h=50&mask=circle)](https://github.com/areyabhishek)
[![Druthi](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20187542?v=4&w=50&h=50&mask=circle)](https://github.com/Druthi)
[![subrata71](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/3524599?v=4&w=50&h=50&mask=circle)](https://github.com/subrata71)
[![ichik](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/80973?v=4&w=50&h=50&mask=circle)](https://github.com/ichik)
[![dipyamanbiswas07](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/26247571?v=4&w=50&h=50&mask=circle)](https://github.com/dipyamanbiswas07)
[![rahulbarwal](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/6761673?v=4&w=50&h=50&mask=circle)](https://github.com/rahulbarwal)
[![ankitsrivas14](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/67647761?v=4&w=50&h=50&mask=circle)](https://github.com/ankitsrivas14)
[![vsvamsi1](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/121419957?v=4&w=50&h=50&mask=circle)](https://github.com/vsvamsi1)
[![sharanya-appsmith](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/135708039?v=4&w=50&h=50&mask=circle)](https://github.com/sharanya-appsmith)
[![brayn003](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/8724051?v=4&w=50&h=50&mask=circle)](https://github.com/brayn003)
[![shubham7saxena7](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/136057998?v=4&w=50&h=50&mask=circle)](https://github.com/shubham7saxena7)
[![dvj1988](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18716465?v=4&w=50&h=50&mask=circle)](https://github.com/dvj1988)
[![sharanya-appsmith](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/135708039?v=4&w=50&h=50&mask=circle)](https://github.com/sharanya-appsmith)
[![vivonk](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/25587962?v=4&w=50&h=50&mask=circle)](https://github.com/vivonk)
[![dvj1988](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/18716465?v=4&w=50&h=50&mask=circle)](https://github.com/dvj1988)
[![ramsaptami](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/79509062?v=4&w=50&h=50&mask=circle)](https://github.com/ramsaptami)
[![rohan-arthur](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/94514895?v=4&w=50&h=50&mask=circle)](https://github.com/rohan-arthur)
[![jacquesikot](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/40626453?v=4&w=50&h=50&mask=circle)](https://github.com/jacquesikot)
[![danciaclara](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/32227135?v=4&w=50&h=50&mask=circle)](https://github.com/danciaclara)
[![kocharrahul7](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20532920?v=4&w=50&h=50&mask=circle)](https://github.com/kocharrahul7)
[![riteshkew](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20280935?v=4&w=50&h=50&mask=circle)](https://github.com/riteshkew)
[![srix](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/5801636?v=4&w=50&h=50&mask=circle)](https://github.com/srix)
[![jacquesikot](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/40626453?v=4&w=50&h=50&mask=circle)](https://github.com/jacquesikot)
[![laveena-en](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/109572422?v=4&w=50&h=50&mask=circle)](https://github.com/laveena-en)
[![RakshaKShetty](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/45958978?v=4&w=50&h=50&mask=circle)](https://github.com/RakshaKShetty)
[![Rishabhkaul](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1650391?v=4&w=50&h=50&mask=circle)](https://github.com/Rishabhkaul)
@ -169,6 +167,7 @@ Let's build great software together.
[![kavitasmoolya](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/134914630?v=4&w=50&h=50&mask=circle)](https://github.com/kavitasmoolya)
[![NeelPattani1](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/138656126?v=4&w=50&h=50&mask=circle)](https://github.com/NeelPattani1)
[![rashmi-sahoo-git](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/144310336?v=4&w=50&h=50&mask=circle)](https://github.com/rashmi-sahoo-git)
[![michael-peach-appsmith](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/150825080?v=4&w=50&h=50&mask=circle)](https://github.com/michael-peach-appsmith)
[![akash-codemonk](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/67054171?v=4&w=50&h=50&mask=circle)](https://github.com/akash-codemonk)
[![Tooluloope](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/31691737?v=4&w=50&h=50&mask=circle)](https://github.com/Tooluloope)
[![rishabhsaxena](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/1944800?v=4&w=50&h=50&mask=circle)](https://github.com/rishabhsaxena)
@ -194,6 +193,7 @@ Let's build great software together.
[![tanvibhakta](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/13763558?v=4&w=50&h=50&mask=circle)](https://github.com/tanvibhakta)
[![rashmigowda55](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/65769804?v=4&w=50&h=50&mask=circle)](https://github.com/rashmigowda55)
[![ankurrsinghal](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17961105?v=4&w=50&h=50&mask=circle)](https://github.com/ankurrsinghal)
[![Druthi](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/20187542?v=4&w=50&h=50&mask=circle)](https://github.com/Druthi)
[![geekup-legodevops](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/72587752?v=4&w=50&h=50&mask=circle)](https://github.com/geekup-legodevops)
[![megaconfidence](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/17744578?v=4&w=50&h=50&mask=circle)](https://github.com/megaconfidence)
[![vihar](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16307796?v=4&w=50&h=50&mask=circle)](https://github.com/vihar)
@ -216,6 +216,7 @@ Let's build great software together.
[![iamakulov](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/2953267?v=4&w=50&h=50&mask=circle)](https://github.com/iamakulov)
[![iamrkcheers](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16760643?v=4&w=50&h=50&mask=circle)](https://github.com/iamrkcheers)
[![sumanthyedoti](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/30371888?v=4&w=50&h=50&mask=circle)](https://github.com/sumanthyedoti)
[![shubham7saxena7](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/136057998?v=4&w=50&h=50&mask=circle)](https://github.com/shubham7saxena7)
[![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)
[![pc9795](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/14848874?v=4&w=50&h=50&mask=circle)](https://github.com/pc9795)
@ -345,6 +346,7 @@ Let's build great software together.
[![Sufiyan1997](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/22118049?v=4&w=50&h=50&mask=circle)](https://github.com/Sufiyan1997)
[![rayrny](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/48341341?v=4&w=50&h=50&mask=circle)](https://github.com/rayrny)
[![trishitapingolia](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/35962310?v=4&w=50&h=50&mask=circle)](https://github.com/trishitapingolia)
[![trivikr](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/16024985?v=4&w=50&h=50&mask=circle)](https://github.com/trivikr)
[![webdott](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/52088600?v=4&w=50&h=50&mask=circle)](https://github.com/webdott)
[![vasanthkumar18](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/58137524?v=4&w=50&h=50&mask=circle)](https://github.com/vasanthkumar18)
[![VanshajPoonia](https://images.weserv.nl/?url=https://avatars.githubusercontent.com/u/74147463?v=4&w=50&h=50&mask=circle)](https://github.com/VanshajPoonia)

View File

@ -170,6 +170,7 @@ describe("Shopping cart App", function () {
);
agHelper.GetNClick(appPage.addButton, 0, true);
assertHelper.AssertNetworkStatus("@postExecute");
agHelper.Sleep(3000);
// Deleting the book from the cart
agHelper.GetNClick(appPage.deleteButton, 1, false);
assertHelper.AssertNetworkStatus("@postExecute");

View File

@ -5,6 +5,8 @@ import {
propPane,
deployMode,
debuggerHelper,
locators,
draggableWidgets,
} from "../../../../support/Objects/ObjectsCore";
describe("storeValue Action test", () => {
@ -52,6 +54,9 @@ describe("storeValue Action test", () => {
});
deployMode.DeployApp();
agHelper.AssertElementVisibility(
locators._widgetInDeployed(draggableWidgets.BUTTON),
);
agHelper.ClickButton("StoreTest");
agHelper.AssertContains(
JSON.stringify({

View File

@ -1,12 +1,15 @@
import {
agHelper,
locators,
entityExplorer,
propPane,
appSettings,
autoLayout,
draggableWidgets,
entityExplorer,
locators,
propPane,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Validating multiple widgets in auto layout mode with App navigation settings", function () {
it("1. Drag and Drop multiple widgets in auto layout mode", function () {
@ -19,13 +22,13 @@ describe("Validating multiple widgets in auto layout mode with App navigation se
it("2. Change App navigation settings and valdiate the layout settings", () => {
entityExplorer.SelectEntityByName("Page1", "Pages");
agHelper.GetNClick(appSettings.locators._appSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
agHelper.GetNClick(appSettings.locators._navigationSettingsTab);
agHelper.GetNClick(
appSettings.locators._navigationSettings._orientationOptions._side,
);
agHelper.AssertElementExist(appSettings.locators._sideNavbar);
agHelper.GetNClick(locators._canvas);
EditorNavigation.ViaSidebar(SidebarButton.Pages);
agHelper.AssertElementExist(locators._widgetInCanvas("inputwidgetv2"));
agHelper.AssertElementExist(locators._widgetInCanvas("inputwidgetv2"), 1);
agHelper.AssertElementExist(locators._fixedLayout);

View File

@ -1,18 +1,22 @@
import {
agHelper,
locators,
entityExplorer,
propPane,
deployMode,
appSettings,
autoLayout,
deployMode,
draggableWidgets,
entityExplorer,
locators,
propPane,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
let currentUrl: string;
describe("Page orientation and navigation related usecases ", function () {
it("1. Change 'Orientation' to 'Side', sidebar should appear", () => {
agHelper.GetNClick(appSettings.locators._appSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
agHelper.GetNClick(appSettings.locators._navigationSettingsTab);
agHelper.GetNClick(
appSettings.locators._navigationSettings._orientationOptions._side,

View File

@ -5,10 +5,13 @@ import {
deployMode,
appSettings,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Test app's navigation settings", function () {
it("1. Open app settings and navigation tab should be there and when the navigation tab is selected, navigation preview should be visible", () => {
agHelper.GetNClick(appSettings.locators._appSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
agHelper.AssertElementVisibility(
appSettings.locators._navigationSettingsTab,
);
@ -34,7 +37,7 @@ describe("Test app's navigation settings", function () {
//Browser back is used as the Navbar is off and there wont be option to come back to editor
agHelper.BrowserNavigation(-1);
// Wait for the app to load
agHelper.GetNClick(appSettings.locators._appSettings, 0, true);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
agHelper.GetNClick(appSettings.locators._navigationSettingsTab);
// Toggle show navbar back to on
agHelper.GetNClick(
@ -60,7 +63,7 @@ describe("Test app's navigation settings", function () {
it("4. Change 'Orientation' back to 'Top', and 'Nav style' to 'Inline', page navigation items should appear inline", () => {
entityExplorer.AddNewPage();
agHelper.GetNClick(appSettings.locators._appSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
agHelper.GetNClick(appSettings.locators._navigationSettingsTab);
agHelper.GetNClick(
appSettings.locators._navigationSettings._orientationOptions._top,

View File

@ -4,11 +4,14 @@ import {
appSettings,
locators,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Test Sidebar Collapse", function () {
it("1. Sidebar collapse button should be there", () => {
// First make sure that nav orientation is set to side
agHelper.GetNClick(appSettings.locators._appSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
agHelper.GetNClick(appSettings.locators._navigationSettingsTab);
agHelper.GetNClick(
appSettings.locators._navigationSettings._orientationOptions._side,

View File

@ -6,6 +6,9 @@ import {
assertHelper,
locators,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Test Sidebar navigation style", function () {
before(() => {
@ -26,7 +29,7 @@ describe("Test Sidebar navigation style", function () {
});
it("1. Change 'Orientation' to 'Side', sidebar should appear", () => {
agHelper.GetNClick(appSettings.locators._appSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
agHelper.GetNClick(appSettings.locators._navigationSettingsTab);
agHelper.GetNClick(
appSettings.locators._navigationSettings._orientationOptions._side,
@ -60,7 +63,7 @@ describe("Test Sidebar navigation style", function () {
);
// Changing color style to theme should change navigation's background color
deployMode.NavigateBacktoEditor();
agHelper.GetNClick(appSettings.locators._appSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
agHelper.GetNClick(appSettings.locators._navigationSettingsTab);
agHelper.GetNClick(appSettings.locators._colorStyleOptions._theme, 0, true);
deployMode.DeployApp();

View File

@ -6,6 +6,9 @@ import {
appSettings,
locators,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Test Top + Inline navigation style", function () {
before(() => {
@ -27,7 +30,7 @@ describe("Test Top + Inline navigation style", function () {
});
it("1. Change 'Orientation' to 'Top', and 'Nav style' to 'Inline', page navigation items should appear inline", () => {
agHelper.GetNClick(appSettings.locators._appSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
agHelper.GetNClick(appSettings.locators._navigationSettingsTab);
agHelper.GetNClick(
appSettings.locators._navigationSettings._orientationOptions._top,
@ -101,7 +104,7 @@ describe("Test Top + Inline navigation style", function () {
);
// Changing color style to theme should change navigation's background color
deployMode.NavigateBacktoEditor();
agHelper.GetNClick(appSettings.locators._appSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
agHelper.GetNClick(appSettings.locators._navigationSettingsTab);
agHelper.GetNClick(appSettings.locators._colorStyleOptions._theme, 0, true);
deployMode.DeployApp();

View File

@ -6,6 +6,9 @@ import {
appSettings,
locators,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Test Top + Stacked navigation style", function () {
before(() => {
@ -124,7 +127,7 @@ describe("Test Top + Stacked navigation style", function () {
);
// Changing color style to theme should change navigation's background color
deployMode.NavigateBacktoEditor();
agHelper.GetNClick(appSettings.locators._appSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
agHelper.GetNClick(appSettings.locators._navigationSettingsTab);
agHelper.GetNClick(appSettings.locators._colorStyleOptions._theme, 0, true);
deployMode.DeployApp();

View File

@ -80,4 +80,29 @@ describe("Autocomplete tests for setters", () => {
propPane.EnterJSContext("onClick", "{{Input1.set", true, false);
agHelper.GetElementsNAssertTextPresence(locators._hints, "setDisabled");
});
it("3. function arguments hint shows up", () => {
entityExplorer.SelectEntityByName("Button1");
propPane.EnterJSContext("onClick", "{{", true, false);
agHelper.GetNClickByContains(locators._hints, "appsmith", 0, false);
agHelper.AssertElementVisibility(locators._evalValuePopover);
propPane.EnterJSContext("onClick", "{{showAlert", true, false);
agHelper.GetElementsNAssertTextPresence(locators._hints, "showAlert");
agHelper.AssertElementAbsence(locators._evalValuePopover);
agHelper.GetNClickByContains(locators._hints, "showAlert", 0, false);
agHelper.GetNAssertElementText(
locators._argHintFnName,
"showAlert",
"contain.text",
);
agHelper.AssertElementAbsence(locators._evalValuePopover);
});
it("4. function description tooltip shows up", () => {
entityExplorer.DragDropWidgetNVerify(draggableWidgets.BUTTON, 100, 100);
entityExplorer.SelectEntityByName("Button1");
propPane.EnterJSContext("onClick", "{{showAlert", true, false);
agHelper.GetElementsNAssertTextPresence(locators._hints, "showAlert");
agHelper.AssertElementExist(locators._tern_doc);
});
});

View File

@ -8,6 +8,9 @@ import {
installer,
draggableWidgets,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Autocomplete bug fixes", function () {
it("1. Bug #12790 Verifies if selectedRow is in best match", function () {
@ -90,10 +93,11 @@ describe("Autocomplete bug fixes", function () {
"excludeForAirgap",
"7. Installed library should show up in autocomplete",
function () {
entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
installer.OpenInstaller();
installer.InstallLibrary("uuidjs", "UUID");
installer.CloseInstaller();
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.SelectEntityByName("Text1");
propPane.TypeTextIntoField("Text", "{{UUI");
agHelper.GetNAssertElementText(locators._hints, "UUID");
@ -105,7 +109,9 @@ describe("Autocomplete bug fixes", function () {
"8. No autocomplete for Removed libraries",
function () {
entityExplorer.RenameEntityFromExplorer("Text1Copy", "UUIDTEXT");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
installer.uninstallLibrary("uuidjs");
EditorNavigation.ViaSidebar(SidebarButton.Pages);
propPane.TypeTextIntoField("Text", "{{UUID.");
agHelper.AssertElementAbsence(locators._hints);
},

View File

@ -38,28 +38,7 @@ describe("Dynamic input autocomplete", () => {
cy.testJsontext("label", "", {
parseSpecialCharSequences: true,
});
// Tests if "No suggestions" message will pop if you type any garbage
cy.get(dynamicInputLocators.input)
.first()
.click({ force: true })
.type("{uparrow}", { parseSpecialCharSequences: true })
.type("{ctrl}{shift}{downarrow}", { parseSpecialCharSequences: true })
.type("{backspace}", { parseSpecialCharSequences: true })
.then(() => {
cy.get(dynamicInputLocators.input)
.first()
.click({ force: true })
.type("{{garbage", {
parseSpecialCharSequences: true,
});
cy.get(".CodeMirror-Tern-tooltip").should(
"have.text",
"No suggestions",
);
});
});
cy.evaluateErrorMessage("garbage is not defined");
});
it("2. Test if action inside non event field throws error & open current value popup", () => {

View File

@ -32,7 +32,5 @@ describe("Binding the button Widgets and validating NavigateTo Page functionalit
locators._widgetInDeployed(draggableWidgets.BUTTON),
);
cy.url().should("contain", testdata.externalPage);
});
});

View File

@ -17,6 +17,9 @@ import {
ERROR_ACTION_EXECUTE_FAIL,
createMessage,
} from "../../../../support/Objects/CommonErrorMessages";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("API Bugs", function () {
before(() => {
@ -60,6 +63,7 @@ describe("API Bugs", function () {
action: "Delete",
entityType: entityItems.Api,
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("3. Bug 18876 Ensures application does not crash when saving datasource", () => {
@ -71,7 +75,7 @@ describe("API Bugs", function () {
);
apiPage.SelectPaneTab("Authentication");
cy.get(apiPage._saveAsDS).last().click({ force: true });
cy.get(".t--close-editor").click({ force: true });
cy.go("back");
cy.get(dataSources._datasourceModalSave).click();
// ensures app does not crash and datasource is saved.
cy.contains("Edit datasource to access authentication settings").should(

View File

@ -52,6 +52,6 @@ describe("Verify setting tab form controls not to have tooltip and tooltip (unde
action: "Delete",
entityType: entityItems.Query,
});
dataSources.DeleteDatasouceFromActiveTab(datasourceName, 200);
dataSources.DeleteDatasourceFromWithinDS(datasourceName, 200);
});
});

View File

@ -1,4 +1,7 @@
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const dataSources = ObjectsRegistry.DataSources,
agHelper = ObjectsRegistry.AggregateHelper;
@ -10,7 +13,7 @@ describe(
it("1. Create gsheet datasource, click on back button, discard popup should contain save and authorize", function () {
dataSources.NavigateToDSCreateNew();
dataSources.CreatePlugIn("Google Sheets");
agHelper.GoBack();
EditorNavigation.ViaSidebar(SidebarButton.Pages);
agHelper.AssertContains(
"Save & Authorize",
"exist",
@ -22,7 +25,7 @@ describe(
dataSources.CreatePlugIn("PostgreSQL");
// Need to add values since without that, going back won't show any popup
dataSources.FillPostgresDSForm();
agHelper.GoBack();
EditorNavigation.ViaSidebar(SidebarButton.Pages);
agHelper.AssertContains(
"Save",
"exist",

View File

@ -1,4 +1,7 @@
import { ObjectsRegistry } from "../../../../support/Objects/Registry";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const dataSources = ObjectsRegistry.DataSources,
agHelper = ObjectsRegistry.AggregateHelper,
@ -11,14 +14,16 @@ describe("Bug 21734: On exiting from the Datasources page without saving changes
// Have to fill form since modal won't show for empty ds
dataSources.FillMongoDSForm();
ee.AddNewPage();
agHelper.GetNClick(dataSources._addNewDataSource, 0, true);
agHelper.AssertContains(
"Don't save",
"exist",
dataSources._datasourceModalDoNotSave,
);
cy.get(dataSources._datasourceModalDoNotSave).click();
cy.get(dataSources._datasourceModalDoNotSave).click({ force: true });
ee.AddNewPage();
ee.SelectEntityByName("Page1");
agHelper.AssertURL("page1");
@ -32,13 +37,14 @@ describe("Bug 21734: On exiting from the Datasources page without saving changes
// Have to fill form since modal won't show for empty ds
dataSources.FillPostgresDSForm();
ee.SelectEntityByName("Page1");
EditorNavigation.ViaSidebar(SidebarButton.Pages);
agHelper.AssertContains(
"Don't save",
"exist",
dataSources._datasourceModalDoNotSave,
);
cy.get(dataSources._datasourceModalDoNotSave).click();
ee.SelectEntityByName("Page1");
agHelper.AssertURL("page1");
ee.SelectEntityByName("Page2");

View File

@ -1,5 +1,4 @@
import {
agHelper,
dataSources,
entityExplorer,
} from "../../../../support/Objects/ObjectsCore";
@ -23,29 +22,13 @@ describe(
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
// Select Users
entityExplorer.SelectEntityByName(userMock, "Datasources");
agHelper.Sleep(200);
agHelper.AssertClassExists(
dataSources._entityExplorerID(userMock),
"active",
);
dataSources.navigateToDatasource(userMock);
// Switch to Movies
entityExplorer.SelectEntityByName(movieMock, "Datasources");
agHelper.Sleep(200);
agHelper.AssertClassExists(
dataSources._entityExplorerID(movieMock),
"active",
);
dataSources.navigateToDatasource(movieMock);
// Switch to custom DS
entityExplorer.SelectEntityByName(dsName, "Datasources");
entityExplorer.ExpandCollapseEntity(dsName, false);
agHelper.Sleep(200);
agHelper.AssertClassExists(
dataSources._entityExplorerID(dsName),
"active",
);
dataSources.navigateToDatasource(dsName);
// Delete all datasources
entityExplorer.ActionContextMenuByEntityName({
@ -61,9 +44,9 @@ describe(
action: "Delete",
});
dataSources.DeleteDatasouceFromActiveTab(userMock);
dataSources.DeleteDatasouceFromActiveTab(movieMock);
dataSources.DeleteDatasouceFromActiveTab(dsName);
dataSources.DeleteDatasourceFromWithinDS(userMock);
dataSources.DeleteDatasourceFromWithinDS(movieMock);
dataSources.DeleteDatasourceFromWithinDS(dsName);
});
});
});

View File

@ -0,0 +1,41 @@
import OneClickBindingLocator from "../../../../locators/OneClickBindingLocator";
import {
agHelper,
entityExplorer,
apiPage,
dataManager,
draggableWidgets,
propPane,
} from "../../../../support/Objects/ObjectsCore";
describe("transformed one-click binding", function () {
before(() => {
entityExplorer.NavigateToSwitcher("Explorer");
});
it("Transforms API data to match widget exppected type ", function () {
// Create anAPI that mreturns object response
apiPage.CreateAndFillApi(
dataManager.dsValues[dataManager.defaultEnviorment].mockApiObjectUrl,
);
apiPage.RunAPI();
// Table
entityExplorer.DragDropWidgetNVerify(draggableWidgets.TABLE, 300, 300);
agHelper.GetNClick(OneClickBindingLocator.datasourceDropdownSelector);
agHelper.GetNClick(OneClickBindingLocator.datasourceQuerySelector("Api1"));
propPane.ToggleJSMode("Table Data", true);
agHelper.AssertContains("{{Api1.data.users}}");
// Select widget
entityExplorer.DragDropWidgetNVerify(draggableWidgets.SELECT, 100, 100);
agHelper.GetNClick(OneClickBindingLocator.datasourceDropdownSelector);
agHelper.GetNClick(OneClickBindingLocator.datasourceQuerySelector("Api1"));
propPane.ToggleJSMode("Source Data", true);
agHelper.AssertContains(
"{{Api1.data.users.map( (obj) =>{ return {'label': obj.address, 'value': obj.avatar } })}}",
);
});
});

View File

@ -0,0 +1,24 @@
import { agHelper, dataSources } from "../../../../support/Objects/ObjectsCore";
import { featureFlagIntercept } from "../../../../support/Objects/FeatureFlags";
describe("Datasource structure schema preview data", () => {
before(() => {
featureFlagIntercept({ ab_gsheet_schema_enabled: true });
dataSources.CreateMockDB("Users");
});
it(
"excludeForAirgap",
"1. Verify if the schema table accordions is collapsed in case of search",
() => {
agHelper.TypeText(
dataSources._datasourceStructureSearchInput,
"public.us",
);
agHelper.Sleep(1000);
agHelper.AssertElementAbsence(
`${dataSources._dsStructurePreviewMode} ${dataSources._datasourceSchemaColumn}`,
);
},
);
});

View File

@ -0,0 +1,74 @@
import {
agHelper,
locators,
entityExplorer,
jsEditor,
} from "../../../../support/Objects/ObjectsCore";
describe("JS Function Execution", function () {
before(() => {
entityExplorer.NavigateToSwitcher("Explorer");
});
it("Retains lint errors after navigation", function () {
// JS Object 1
jsEditor.CreateJSObject(
`export default {
myVar1: [],
myVar2: {},
myFun1 () {
// write code here
// this.myVar1 = [1,2,3]
},
async myFun2 () {
// use async-await or promises
// Lint Error
fff
}
}`,
{
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
prettify: false,
},
);
// JS Object 2
jsEditor.CreateJSObject(
`export default {
myVar1: [],
myVar2: {},
myFun1 () {
// write code here
// this.myVar1 = [1,2,3]
},
async myFun2 () {
// use async-await or promises
}
}`,
{
paste: true,
completeReplace: true,
toRun: false,
shouldCreateNewJSObj: true,
prettify: false,
},
);
entityExplorer.SelectEntityByName("JSObject1", "Queries/JS");
// Assert lint error
agHelper.AssertElementLength(locators._lintErrorElement, 1);
agHelper.HoverElement(locators._lintErrorElement);
agHelper.AssertContains(`'fff' is not defined`);
entityExplorer.SelectEntityByName("JSObject2", "Queries/JS");
agHelper.AssertElementAbsence(locators._lintErrorElement);
entityExplorer.SelectEntityByName("JSObject1", "Queries/JS");
// Assert lint error
agHelper.AssertElementLength(locators._lintErrorElement, 1);
agHelper.HoverElement(locators._lintErrorElement);
agHelper.AssertContains(`'fff' is not defined`);
});
});

View File

@ -7,6 +7,9 @@ import {
appSettings,
entityExplorer,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
let dsName: any;
@ -17,6 +20,7 @@ describe("Bug 9334: The Select widget value is sent as null when user switches b
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("1. Create dummy pages for navigating", () => {

View File

@ -1,4 +1,7 @@
import * as _ from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
let dsName: any;
@ -18,9 +21,9 @@ describe("datasource unsaved changes popup shows even without changes", function
_.dataSources.SaveDatasource();
_.agHelper.Sleep();
_.dataSources.EditDatasource();
_.agHelper.GoBack();
_.dataSources.cancelDSEditAndAssertModalPopUp(false);
_.agHelper.AssertElementVisibility(_.dataSources._activeDS);
_.dataSources.DeleteDatasouceFromActiveTab(dsName);
_.dataSources.DeleteDatasourceFromWithinDS(dsName);
});
});
@ -42,9 +45,9 @@ describe("datasource unsaved changes popup shows even without changes", function
// Even if headers, and query parameters are being initialized, we shouldnt see the popup
// as those are not initialized by user
_.dataSources.EditDatasource();
_.agHelper.GoBack();
_.dataSources.cancelDSEditAndAssertModalPopUp(false);
_.agHelper.AssertElementVisibility(_.dataSources._activeDS);
_.dataSources.DeleteDatasouceFromActiveTab(dsName);
_.dataSources.DeleteDatasourceFromWithinDS(dsName);
});
});
@ -68,7 +71,7 @@ describe("datasource unsaved changes popup shows even without changes", function
// Assert that popup is visible
_.dataSources.SaveDSFromDialog(false);
_.dataSources.DeleteDatasouceFromActiveTab(dsName);
_.dataSources.DeleteDatasourceFromWithinDS(dsName);
});
});
@ -92,7 +95,7 @@ describe("datasource unsaved changes popup shows even without changes", function
// Assert that popup is visible
_.dataSources.cancelDSEditAndAssertModalPopUp(true, false);
_.dataSources.DeleteDatasouceFromActiveTab(dsName);
_.dataSources.DeleteDatasourceFromWithinDS(dsName);
});
});
@ -115,7 +118,7 @@ describe("datasource unsaved changes popup shows even without changes", function
// Assert that popup is visible
_.dataSources.cancelDSEditAndAssertModalPopUp(false, false);
_.dataSources.DeleteDatasouceFromActiveTab(dsName);
_.dataSources.DeleteDatasourceFromWithinDS(dsName);
});
});
@ -148,8 +151,14 @@ describe("datasource unsaved changes popup shows even without changes", function
_.dataSources._host(),
_.dataManager.dsValues.Staging.mongo_host,
);
_.agHelper.GetNClick(
_.dataSources._cancelEditDatasourceButton,
0,
true,
200,
);
_.dataSources.DeleteDatasouceFromActiveTab(dsName);
_.dataSources.DeleteDatasourceFromWithinDS(dsName);
});
});

View File

@ -5,11 +5,19 @@ import {
entityExplorer,
homePage,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
import { featureFlagIntercept } from "../../../../support/Objects/FeatureFlags";
let guid;
let dataSourceName: string;
describe("Datasource form related tests", function () {
before(() => {
featureFlagIntercept({
ab_gsheet_schema_enabled: true,
ab_mock_mongo_schema_enabled: true,
});
homePage.CreateNewWorkspace("FetchSchemaOnce", true);
homePage.CreateAppInWorkspace("FetchSchemaOnce");
});
@ -19,7 +27,6 @@ describe("Datasource form related tests", function () {
cy.get("@guid").then((uid) => {
guid = uid;
dataSourceName = "Postgres " + guid;
entityExplorer.ExpandCollapseEntity("Datasources");
dataSources.NavigateToDSCreateNew();
dataSources.CreatePlugIn("PostgreSQL");
agHelper.RenameWithInPane(dataSourceName, false);
@ -42,12 +49,11 @@ describe("Datasource form related tests", function () {
it("2. Verify if schema was fetched once #18448", () => {
agHelper.RefreshPage();
entityExplorer.ExpandCollapseEntity("Datasources");
entityExplorer.ExpandCollapseEntity(dataSourceName, false);
entityExplorer.ExpandCollapseEntity("Datasources");
entityExplorer.ExpandCollapseEntity(dataSourceName);
dataSources.navigateToDatasource(dataSourceName);
agHelper.Sleep(1500);
agHelper.VerifyCallCount(`@getDatasourceStructure`, 1);
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.SelectEntityByName("Query1");
agHelper.ActionContextMenuWithInPane({
action: "Delete",
entityType: entityItems.Query,

View File

@ -1,4 +1,7 @@
import * as _ from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
let repoName: any;
let tempBranch: any;
@ -81,12 +84,11 @@ describe("Git Bugs", function () {
_.gitSync.CreateGitBranch(`st`, true);
cy.get("@gitbranchName").then((branchName) => {
statusBranch = branchName;
_.agHelper.GetNClick(_.locators._appEditMenuBtn);
// cy.wait(_.locators._appEditMenu);
_.agHelper.GetNClick(_.locators._appEditMenuSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
_.agHelper.GetNClick(_.locators._appThemeSettings);
_.agHelper.GetNClick(_.locators._appChangeThemeBtn, 0, true);
_.agHelper.GetNClick(_.locators._appThemeCard, 2);
EditorNavigation.ViaSidebar(SidebarButton.Pages);
_.agHelper.GetNClick(_.locators._publishButton);
_.agHelper.WaitUntilEleAppear(_.gitSync._gitStatusChanges);
_.agHelper.AssertContains(
@ -95,11 +97,10 @@ describe("Git Bugs", function () {
_.gitSync._gitStatusChanges,
);
_.agHelper.GetNClick(_.locators._dialogCloseButton);
_.agHelper.GetNClick(_.locators._appEditMenuBtn);
// cy.wait(_.locators._appEditMenu);
_.agHelper.GetNClick(_.locators._appEditMenuSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
_.agHelper.GetNClick(_.locators._appNavigationSettings);
_.agHelper.GetNClick(_.locators._appNavigationSettingsShowTitle);
EditorNavigation.ViaSidebar(SidebarButton.Pages);
_.agHelper.GetNClick(_.locators._publishButton);
_.agHelper.WaitUntilEleAppear(_.gitSync._gitStatusChanges);
_.agHelper.AssertContains(
@ -116,10 +117,10 @@ describe("Git Bugs", function () {
_.gitSync.CreateGitBranch(`b24946`, true);
cy.get("@gitbranchName").then((branchName) => {
statusBranch = branchName;
_.agHelper.GetNClick(_.locators._appEditMenuBtn);
_.agHelper.GetNClick(_.locators._appEditMenuSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
_.agHelper.GetNClick(_.locators._appNavigationSettings);
_.agHelper.GetNClick(_.locators._appNavigationSettingsShowTitle);
EditorNavigation.ViaSidebar(SidebarButton.Pages);
_.agHelper.GetNClick(_.locators._publishButton);
_.agHelper.WaitUntilEleAppear(_.gitSync._gitStatusChanges);
_.agHelper.GetNClick(_.gitSync._discardChanges);
@ -146,7 +147,7 @@ describe("Git Bugs", function () {
it("7. Bug 24920: Not able to discard app settings changes for the first time in git connected app ", function () {
_.gitSync.SwitchGitBranch("master", false, true);
// add navigation settings changes
_.agHelper.GetNClick(_.appSettings.locators._appSettings);
EditorNavigation.ViaSidebar(SidebarButton.Settings);
_.agHelper.GetNClick(_.appSettings.locators._navigationSettingsTab);
_.agHelper.GetNClick(
_.appSettings.locators._navigationSettings._orientationOptions._side,

View File

@ -121,7 +121,6 @@ describe("Bug #14299 - The data from the query does not show up on the widget",
agHelper.WaitUntilAllToastsDisappear();
deployMode.DeployApp(locators._widgetInDeployed("tablewidget"), false);
deployMode.NavigateBacktoEditor();
entityExplorer.ExpandCollapseEntity("Datasources");
dataSources.DeleteDatasourceFromWithinDS(dsName, 200);
},
);

View File

@ -8,6 +8,9 @@ import {
entityItems,
debuggerHelper,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("excludeForAirgap", "Query pane navigation", () => {
let ds1Name: string;
@ -27,6 +30,7 @@ describe("excludeForAirgap", "Query pane navigation", () => {
cy.get("@dsName").then(($dsName) => {
ds2Name = $dsName as unknown as string;
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("1. Switching between S3 query and firestore query from the debugger", () => {
@ -46,6 +50,7 @@ describe("excludeForAirgap", "Query pane navigation", () => {
cy.get("@dsName").then(($dsName) => {
ds2Name = $dsName as unknown as string;
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.CreateNewDsQuery(ds2Name);
agHelper.UpdateCodeInput(
".t--actionConfiguration\\.formData\\.limitDocuments\\.data",
@ -77,7 +82,7 @@ describe("excludeForAirgap", "Query pane navigation", () => {
entityType: entityItems.Query,
});
dataSources.DeleteDSFromEntityExplorer(ds1Name);
dataSources.DeleteDSFromEntityExplorer(ds2Name);
dataSources.DeleteDatasourceFromWithinDS(ds1Name);
dataSources.DeleteDatasourceFromWithinDS(ds2Name);
});
});

View File

@ -24,18 +24,9 @@ describe("Entity explorer API pane related testcases", function () {
locator._visibleTextSpan("No query/JS to display"),
);
agHelper.AssertElementVisibility(locator._visibleTextSpan("New query/JS"));
ee.ExpandCollapseEntity("Datasources");
agHelper.AssertElementVisibility(
locator._visibleTextSpan("No datasource to display"),
);
agHelper.AssertElementVisibility(
locator._visibleTextSpan("New datasource"),
);
});
it("2. Move to page / edit API name /properties validation", function () {
cy.NavigateToAPI_Panel();
cy.CreateAPI("FirstAPI");
cy.enterDatasourceAndPath(testdata.baseUrl, testdata.methods);
cy.SaveAndRunAPI();

View File

@ -28,7 +28,6 @@ describe("Entity explorer tests related to copy query", function () {
cy.get("@saveDatasource").then((httpResponse) => {
datasourceName = httpResponse.response.body.data.name;
cy.CheckAndUnfoldEntityItem("Datasources");
cy.NavigateToActiveDSQueryPane(datasourceName);
});
@ -83,37 +82,4 @@ describe("Entity explorer tests related to copy query", function () {
expect($lis.eq(4)).to.contain("{{Query1.clear()}}");
});
});
it("3. Rename datasource in explorer, Delete query and try to Delete datasource", function () {
entityExplorer.SelectEntityByName("Page1");
cy.generateUUID().then((uid) => {
updatedName = uid;
cy.log("complete uid :" + updatedName);
updatedName = uid.replace(/-/g, "_").slice(1, 15);
cy.log("sliced id :" + updatedName);
entityExplorer.ExpandCollapseEntity("Queries/JS");
entityExplorer.ExpandCollapseEntity("Datasources");
entityExplorer.RenameEntityFromExplorer(datasourceName, updatedName);
//cy.EditEntityNameByDoubleClick(datasourceName, updatedName);
cy.wait(1000);
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: updatedName,
action: "Delete",
toAssertAction: false,
});
cy.wait(1000);
//This is check to make sure if a datasource is active 409
cy.wait("@deleteDatasource").should(
"have.nested.property",
"response.body.responseMeta.status",
409,
);
});
entityExplorer.SelectEntityByName("Query1", "Queries/JS");
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: "Query1",
action: "Delete",
entityType: entityItems.Query,
});
});
});

View File

@ -1,125 +0,0 @@
const explorer = require("../../../../locators/explorerlocators.json");
const queryLocators = require("../../../../locators/QueryEditor.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
import {
entityExplorer,
dataSources,
} from "../../../../support/Objects/ObjectsCore";
describe("Entity explorer datasource structure", function () {
let datasourceName;
beforeEach(() => {
//cy.ClearSearch();
cy.startRoutesForDatasource();
cy.createPostgresDatasource();
cy.get("@saveDatasource").then((httpResponse) => {
datasourceName = httpResponse.response.body.data.name;
});
});
it("1. Entity explorer datasource structure", function () {
cy.NavigateToActiveDSQueryPane(datasourceName);
cy.wait("@createNewApi").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.get(apiwidget.apiTxt)
.clear()
.type("MyQuery", { force: true })
.should("have.value", "MyQuery")
.blur();
cy.WaitAutoSave();
entityExplorer.ExpandCollapseEntity("Datasources");
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: datasourceName,
action: "Refresh",
});
cy.wait(2000); //for the tables to open
cy.wait("@getDatasourceStructure").should(
"have.nested.property",
"response.body.responseMeta.status",
200,
);
// cy.get(explorer.datasourceStructure)
// .first()
// .find(explorer.collapse)
// .click();
// cy.get(explorer.datasourceColumn)
// .first()
// .click();
// cy.get(".bp3-popover-content").should("be.visible");
cy.get(explorer.templateMenuIcon).first().click({ force: true });
// assert suggested tag is present
cy.get(".t--structure-template-menu-popover").last().contains("Suggested");
cy.get(".t--structure-template-menu-popover")
.last()
.contains("Select")
.click({ force: true });
cy.wait("@createNewApi").should(
"have.nested.property",
"response.body.responseMeta.status",
201,
);
cy.deleteQueryUsingContext();
entityExplorer.ExpandCollapseEntity("Queries/JS");
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: "MyQuery",
});
cy.deleteDatasource(datasourceName);
});
it("2. Refresh datasource structure", function () {
cy.NavigateToActiveDSQueryPane(datasourceName);
//cy.GlobalSearchEntity(datasourceName);
// cy.get(`.t--entity.datasource:contains(${datasourceName})`)
// .find(explorer.collapse)
// .as("datasourceEntityCollapse");
// cy.wait("@getDatasourceStructure").should(
// "have.nested.property",
// "response.body.responseMeta.status",
// 200,
// );
//cy.get(commonlocators.entityExplorersearch).clear({ force: true });
const tableName = Math.random()
.toString(36)
.replace(/[^a-z]+/g, "");
dataSources.EnterQuery(`CREATE TABLE public.${tableName} ( ID int );`);
cy.onlyQueryRun();
cy.wait("@postExecute").then(({ response }) => {
expect(response.body.data.request.requestParams.Query.value).to.contain(
tableName,
);
});
//cy.wait(8000)
// cy.GlobalSearchEntity(datasourceName);
// cy.get("@datasourceEntityCollapse")
// .first()
// .click();
// cy.xpath(explorer.datsourceEntityPopover)
// .last()
// .click({ force: true });
dataSources.AssertTableInVirtuosoList(
datasourceName,
`public.${tableName}`,
);
cy.typeValueNValidate(`DROP TABLE public.${tableName}`);
cy.runQuery();
dataSources.AssertTableInVirtuosoList(
datasourceName,
`public.${tableName}`,
false,
);
cy.deleteQueryUsingContext();
cy.deleteDatasource(datasourceName);
});
});

View File

@ -11,8 +11,6 @@ describe("Tab widget test", function () {
it("1. Rename API with table widget name validation test", function () {
cy.log("Login Successful");
cy.NavigateToAPI_Panel();
cy.log("Navigation to API Panel screen successful");
cy.CreateApiAndValidateUniqueEntityName(apiName);
cy.get(apiwidget.apiTxt)
.clear()

View File

@ -9,7 +9,6 @@ const tooltTipQuery = `.rc-tooltip.ads-v2-tooltip:not(.rc-tooltip-hidden) > .rc-
describe("Entity Explorer showing tooltips on long names", function () {
it("1. Expect tooltip on long names only", function () {
// create an API with a short name
cy.NavigateToAPI_Panel();
cy.CreateAPI(shortName);
ee.ExpandCollapseEntity("Queries/JS", true);
// assert that a tooltip does not show up during hover
@ -19,7 +18,6 @@ describe("Entity Explorer showing tooltips on long names", function () {
cy.get("body").realHover({ position: "topLeft" });
// create another API with a long name
cy.NavigateToAPI_Panel();
cy.CreateAPI(longName);
// assert that a tooltip does show up during hover

View File

@ -8,7 +8,6 @@ describe("Pages", function () {
let apiName = "someApi";
it("1. Clone page & check tooltip for long name", function () {
//cy.NavigateToAPI_Panel();
_.apiPage.CreateApi(apiName);
_.entityExplorer.SelectEntityByName("Page1", "Pages");
_.entityExplorer.ClonePage("Page1");

View File

@ -1,147 +0,0 @@
import {
agHelper,
entityExplorer,
locators,
draggableWidgets,
installer,
homePage,
} from "../../../../support/Objects/ObjectsCore";
const ExplorerMenu = {
ADD_PAGE: "ADD_PAGE",
ENTITY: "ENTITY",
ADD_LIBRARY: "ADD_LIBRARY",
ADD_QUERY_JS: "ADD_QUERY_JS",
};
const OpenExplorerMenu = (menu) => {
switch (menu) {
case ExplorerMenu.ADD_PAGE:
agHelper.GetNClick(locators._newPage);
cy.get(locators._canvas).trigger("mousemove", 500, 400, {
force: true,
});
break;
case ExplorerMenu.ENTITY:
cy.xpath(entityExplorer._contextMenu("Page1"))
.last()
.click({ force: true });
cy.get(locators._canvas).trigger("mousemove", 500, 400, {
force: true,
});
break;
case ExplorerMenu.ADD_QUERY_JS:
cy.get(locators._createNew).last().click({ force: true });
cy.get(locators._canvas).trigger("mousemove", 500, 300, {
force: true,
});
break;
case ExplorerMenu.ADD_LIBRARY:
installer.OpenInstaller(true);
cy.get(locators._canvas).trigger("mousemove", 500, 100, {
force: true,
});
break;
default:
}
};
describe("Entity explorer tests related to pinning and unpinning", function () {
before(() => {
agHelper.AddDsl("displayWidgetDsl");
});
it("1. checks entity explorer visibility on unpin", function () {
cy.wait(5000);
cy.get(".t--entity-explorer").should("be.visible");
cy.get(".t--pin-entity-explorer").click();
cy.wait(5000);
cy.get("[data-testid=widgets-editor]").click({ force: true });
cy.wait(3000);
cy.get(".t--entity-explorer").should("not.be.visible");
//checks entity explorer visibility on pin
cy.get(".t--pin-entity-explorer").click();
cy.get(".t--entity-explorer").should("be.visible");
});
it("2. Widgets visibility in widget pane", function () {
entityExplorer.NavigateToSwitcher("Widgets");
agHelper.ScrollTo(locators._widgetPane, "bottom");
agHelper.AssertElementVisibility(
locators._widgetPageIcon(draggableWidgets.VIDEO),
);
entityExplorer.PinUnpinEntityExplorer(true);
agHelper.AssertElementVisibility(
locators._widgetPageIcon(draggableWidgets.VIDEO),
);
entityExplorer.PinUnpinEntityExplorer(false);
entityExplorer.NavigateToSwitcher("Explorer");
});
it(
"excludeForAirgap",
"3. Unpinned explorer is to be open when any context menu is open or when an entity name is being edited",
function () {
agHelper.AssertElementVisibility(entityExplorer._entityExplorer);
entityExplorer.PinUnpinEntityExplorer(true);
const menu = Object.keys(ExplorerMenu);
Cypress._.times(menu.length, (index) => {
OpenExplorerMenu(menu[index]);
agHelper.Sleep();
cy.get("[data-testid=sidebar-active]").should("exist");
});
// when an entity is being edited
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: "Page1",
action: "Edit name",
});
cy.get(locators._canvas).trigger("mousemove", 500, 400);
agHelper.AssertElementVisibility(entityExplorer._entityExplorer);
entityExplorer.PinUnpinEntityExplorer(false);
},
);
it(
"airgap",
"4. Unpinned explorer is to be open when any context menu is open or when an entity name is being edited",
function () {
agHelper.AssertElementVisibility(entityExplorer._entityExplorer);
entityExplorer.PinUnpinEntityExplorer(true);
// We cannot add libraries on airgap
const menu = Object.keys(ExplorerMenu).filter(
(menu) => menu !== ExplorerMenu.ADD_LIBRARY,
);
Cypress._.times(menu.length, (index) => {
OpenExplorerMenu(menu[index]);
agHelper.Sleep();
cy.get("[data-testid=sidebar-active]").should("exist");
});
// when an entity is being edited
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: "Page1",
action: "Edit name",
});
cy.get(locators._canvas).trigger("mousemove", 500, 400);
agHelper.AssertElementVisibility(entityExplorer._entityExplorer);
entityExplorer.PinUnpinEntityExplorer(false);
},
);
it("5. Explorer should be visible by default on a new application", function () {
agHelper.AssertElementVisibility(entityExplorer._entityExplorer);
entityExplorer.PinUnpinEntityExplorer(true);
agHelper.GetElement(locators._canvas).trigger("mousemove", 500, 100, {
force: true,
});
agHelper
.GetElement(entityExplorer._entityExplorer)
.should("not.be.visible");
homePage.NavigateToHome();
homePage.CreateNewApplication();
agHelper.AssertElementVisibility(entityExplorer._entityExplorer);
});
});

View File

@ -1,6 +1,8 @@
/// <reference types="Cypress" />
const datasource = require("../../../../locators/DatasourcesEditor.json");
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const commonlocators = require("../../../../locators/commonlocators.json");
@ -52,26 +54,14 @@ describe("Entity explorer tests related to query and datasource", function () {
cy.testSaveDatasource();
cy.NavigateToActiveDSQueryPane(datasourceName);
/* eslint-disable */
cy.wait(2000);
cy.NavigateToQueryEditor();
cy.CheckAndUnfoldEntityItem("Datasources");
cy.contains(".t--entity-name", datasourceName).click();
cy.get(".t--edit-datasource-name").click();
cy.get(".t--edit-datasource-name input")
.clear()
.type(`${datasourceName}new`, { force: true })
.blur();
cy.contains(commonlocators.entityName, `${datasourceName}new`);
dataSources.navigateToDatasource(datasourceName);
agHelper.RenameWithInPane(`${datasourceName}new`, false);
cy.contains(dataSources._datasourceCard, `${datasourceName}new`);
// reverting the name
cy.get(".t--edit-datasource-name").click();
cy.get(".t--edit-datasource-name input")
.clear()
.type(`${datasourceName}`, { force: true })
.blur();
agHelper.RenameWithInPane(datasourceName, false);
EditorNavigation.ViaSidebar(SidebarButton.Pages);
// going to the query create page
cy.CheckAndUnfoldEntityItem("Queries/JS");
@ -122,6 +112,6 @@ describe("Entity explorer tests related to query and datasource", function () {
action: "Delete",
entityType: entityItems.Query,
});
dataSources.DeleteDatasouceFromActiveTab(datasourceName);
dataSources.DeleteDatasourceFromWithinDS(datasourceName);
});
});

View File

@ -3,7 +3,6 @@ import {
dataSources,
draggableWidgets,
entityExplorer,
entityItems,
locators,
} from "../../../../support/Objects/ObjectsCore";
let mockDBNameUsers: string, mockDBNameMovies: string;
@ -13,6 +12,12 @@ describe("Entity explorer context menu should hide on scrolling", function () {
"excludeForAirgap",
"1. Bug #15474 - Entity explorer menu must close on scroll",
function () {
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MODAL);
agHelper.GetNClick(locators._closeModal, 0, true, 0);
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MODAL);
agHelper.GetNClick(locators._closeModal, 0, true, 0);
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MODAL);
agHelper.GetNClick(locators._closeModal, 0, true, 0);
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MODAL);
agHelper.GetNClick(locators._closeModal, 0, true, 0);
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MODAL);
@ -22,27 +27,31 @@ describe("Entity explorer context menu should hide on scrolling", function () {
entityExplorer.ExpandCollapseEntity("Modal1");
entityExplorer.ExpandCollapseEntity("Modal2");
entityExplorer.ExpandCollapseEntity("Modal3");
entityExplorer.ExpandCollapseEntity("Modal4");
entityExplorer.ExpandCollapseEntity("Modal5");
entityExplorer.ExpandCollapseEntity("Modal6");
// Setup to make the explorer scrollable
entityExplorer.ExpandCollapseEntity("Queries/JS");
entityExplorer.ExpandCollapseEntity("Datasources");
agHelper.ContainsNClick("Libraries");
dataSources.CreateMockDB("Users").then(($createdMockUsers) => {
cy.log("Users DB created is " + $createdMockUsers);
mockDBNameUsers = $createdMockUsers;
dataSources.CreateQueryAfterDSSaved();
dataSources.AssertTableInVirtuosoList(mockDBNameUsers, "public.users");
entityExplorer.CreateNewDsQuery(mockDBNameUsers);
entityExplorer.CreateNewDsQuery(mockDBNameUsers);
entityExplorer.CreateNewDsQuery(mockDBNameUsers);
dataSources.CreateMockDB("Movies").then(($createdMockMovies) => {
cy.log("Movies DB created is " + $createdMockMovies);
mockDBNameMovies = $createdMockMovies;
dataSources.CreateQueryAfterDSSaved();
dataSources.AssertTableInVirtuosoList(mockDBNameMovies, "movies");
entityExplorer.CreateNewDsQuery(mockDBNameMovies);
entityExplorer.CreateNewDsQuery(mockDBNameMovies);
entityExplorer.CreateNewDsQuery(mockDBNameMovies);
agHelper.GetNClick(locators._createNew);
agHelper.AssertElementVisibility(entityExplorer._adsPopup);
agHelper.ScrollTo(entityExplorer._entityExplorerWrapper, "bottom");
agHelper.ScrollTo(entityExplorer._entityExplorerWrapper, "top");
agHelper.AssertElementAbsence(entityExplorer._adsPopup);
});
});
@ -53,6 +62,12 @@ describe("Entity explorer context menu should hide on scrolling", function () {
"airgap",
"1. Bug #15474 - Entity explorer menu must close on scroll - airgap",
function () {
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MODAL);
agHelper.GetNClick(locators._closeModal, 0, true, 0);
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MODAL);
agHelper.GetNClick(locators._closeModal, 0, true, 0);
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MODAL);
agHelper.GetNClick(locators._closeModal, 0, true, 0);
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MODAL);
agHelper.GetNClick(locators._closeModal, 0, true, 0);
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MODAL);
@ -62,51 +77,34 @@ describe("Entity explorer context menu should hide on scrolling", function () {
entityExplorer.ExpandCollapseEntity("Modal1");
entityExplorer.ExpandCollapseEntity("Modal2");
entityExplorer.ExpandCollapseEntity("Modal3");
entityExplorer.ExpandCollapseEntity("Modal4");
entityExplorer.ExpandCollapseEntity("Modal5");
entityExplorer.ExpandCollapseEntity("Modal6");
// Setup to make the explorer scrollable
entityExplorer.ExpandCollapseEntity("Queries/JS");
entityExplorer.ExpandCollapseEntity("Datasources");
agHelper.ContainsNClick("Libraries");
dataSources.CreateDataSource("Postgres");
cy.get("@dsName").then(($createdMockUsers: any) => {
mockDBNameUsers = $createdMockUsers;
dataSources.CreateQueryAfterDSSaved();
dataSources.AssertTableInVirtuosoList(mockDBNameUsers, "public.users");
entityExplorer.CreateNewDsQuery(mockDBNameUsers);
entityExplorer.CreateNewDsQuery(mockDBNameUsers);
entityExplorer.CreateNewDsQuery(mockDBNameUsers);
dataSources.CreateDataSource("Mongo");
cy.get("@dsName").then(($createdMockMovies: any) => {
mockDBNameMovies = $createdMockMovies;
dataSources.CreateQueryAfterDSSaved();
dataSources.AssertTableInVirtuosoList(
mockDBNameMovies,
"listingAndReviews",
);
entityExplorer.CreateNewDsQuery(mockDBNameMovies);
entityExplorer.CreateNewDsQuery(mockDBNameMovies);
entityExplorer.CreateNewDsQuery(mockDBNameMovies);
agHelper.GetNClick(locators._createNew);
agHelper.AssertElementVisibility(entityExplorer._adsPopup);
agHelper.ScrollTo(entityExplorer._entityExplorerWrapper, "bottom");
agHelper.ScrollTo(entityExplorer._entityExplorerWrapper, "top");
agHelper.AssertElementAbsence(entityExplorer._adsPopup);
});
});
},
);
after(() => {
//clean up
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: "Query1",
action: "Delete",
entityType: entityItems.Query,
});
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: "Query2",
action: "Delete",
entityType: entityItems.Query,
});
dataSources.DeleteDatasouceFromActiveTab(mockDBNameMovies); //Since sometimes after Queries are deleted, ds is no more visible in EE tree
dataSources.DeleteDatasouceFromActiveTab(mockDBNameUsers);
});
});

View File

@ -121,8 +121,6 @@ describe("Git sync apps", function () {
cy.get(`.t--entity-item:contains(${newPage})`).click();
cy.wait(1000);
// create a get api call
cy.NavigateToAPI_Panel();
cy.wait(2000);
cy.CreateAPI("get_data");
// creating get request using echo
cy.get(apiwidget.resourceUrl)

View File

@ -120,12 +120,9 @@ describe("Git sync:", function () {
"ParentPageRenamed",
true,
);
entityExplorer.SelectEntityByName("ParentApi1", "Queries/JS");
entityExplorer.RenameEntityFromExplorer(
"ParentApi1",
"ParentApiRenamed",
true,
);
agHelper.RemoveUIElement("Tooltip", "Add a new query/JS Object");
entityExplorer.ExpandCollapseEntity("Queries/JS");
entityExplorer.RenameEntityFromExplorer("ParentApi1", "ParentApiRenamed");
cy.switchGitBranch(parentBranchKey);

View File

@ -7,6 +7,9 @@ import {
gitSync,
installer,
} from "../../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../../support/Pages/EditorNavigation";
const mainBranch = "master";
const tempBranch = "feat/tempBranch";
@ -28,25 +31,24 @@ describe("excludeForAirgap", "Tests JS Library with Git", () => {
});
it("1. Install JS Library and commit changes, create branch and verify JS library changes are present on new branch ", () => {
entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
installer.OpenInstaller();
installer.InstallLibrary("uuidjs", "UUID");
gitSync.CommitAndPush();
// create new branch
gitSync.CreateGitBranch(tempBranch, true);
// verify js library changes are present
entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
installer.AssertLibraryinExplorer("uuidjs");
});
it("2. Discard custom js library changes, verify changes are discarded also verify it deosnt show uncommitted changes", () => {
entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
installer.uninstallLibrary("uuidjs");
installer.assertUnInstall("uuidjs");
// discard js library uninstallation
gitSync.DiscardChanges();
// verify js library is present
entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
installer.AssertLibraryinExplorer("uuidjs");
// verify no uncommitted changes are there
agHelper.AssertElementExist(gitSync._bottomBarPull);
@ -66,7 +68,7 @@ describe("excludeForAirgap", "Tests JS Library with Git", () => {
it("3. Merge custom js lib changes from child branch to master, verify changes are merged", () => {
cy.switchGitBranch(tempBranch);
agHelper.AssertElementExist(gitSync._bottomBarPull);
entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
installer.OpenInstaller();
installer.InstallLibrary("jspdf", "jspdf");
//cy.commitAndPush();
@ -84,7 +86,7 @@ describe("excludeForAirgap", "Tests JS Library with Git", () => {
// verify custom js library is present in master branch
cy.switchGitBranch(mainBranch);
agHelper.AssertElementExist(gitSync._bottomBarPull);
entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
installer.AssertLibraryinExplorer("jspdf");
});
after(() => {

View File

@ -7,6 +7,9 @@ import {
homePage,
locators,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const queryLocators = require("../../../../locators/QueryEditor.json");
@ -183,16 +186,16 @@ describe("MaintainContext&Focus", function () {
});
it("4. Datasource edit mode has to be maintained", () => {
entityExplorer.SelectEntityByName("Appsmith", "Datasources");
dataSources.navigateToDatasource("Appsmith");
dataSources.EditDatasource();
agHelper.GoBack();
entityExplorer.SelectEntityByName("Github", "Datasources");
dataSources.navigateToDatasource("Github");
dataSources.AssertDSEditViewMode("View");
entityExplorer.SelectEntityByName("Appsmith", "Datasources");
dataSources.navigateToDatasource("Appsmith");
dataSources.AssertDSEditViewMode("Edit");
});
it("5. Maintain focus of form control inputs", () => {
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.SelectEntityByName("SQL_Query");
dataSources.ToggleUsePreparedStatement(false);
entityExplorer.SelectEntityByName("S3_Query");

View File

@ -1,9 +1,12 @@
import HomePage from "../../../../locators/HomePage";
import * as _ from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("excludeForAirgap", "Tests JS Libraries", () => {
it("1. Validates Library install/uninstall", () => {
_.entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
_.installer.OpenInstaller();
_.installer.InstallLibrary("uuidjs", "UUID");
_.installer.uninstallLibrary("uuidjs");
@ -11,16 +14,17 @@ describe("excludeForAirgap", "Tests JS Libraries", () => {
});
it("2. Installs the library against a unique namespace when there is a collision with the existing entity", () => {
EditorNavigation.ViaSidebar(SidebarButton.Pages);
_.entityExplorer.DragDropWidgetNVerify(_.draggableWidgets.TABLE, 200, 200);
_.entityExplorer.NavigateToSwitcher("Explorer");
_.entityExplorer.RenameEntityFromExplorer("Table1", "jsonwebtoken");
_.entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
_.installer.OpenInstaller();
_.installer.InstallLibrary("jsonwebtoken", "jsonwebtoken_1", true);
});
it("3. Checks jspdf library", () => {
_.entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
_.installer.OpenInstaller();
_.installer.InstallLibrary("jspdf", "jspdf");
_.jsEditor.CreateJSObject(
@ -46,7 +50,7 @@ describe("excludeForAirgap", "Tests JS Libraries", () => {
});
it("4. ESM build should pass installation, uninstallation and reinstallation", () => {
_.entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
_.installer.OpenInstaller();
_.installer.InstallLibraryViaURL(
"https://cdn.jsdelivr.net/npm/fast-xml-parser@4.2.7/+esm",
@ -67,7 +71,7 @@ describe("excludeForAirgap", "Tests JS Libraries", () => {
it("5. Shows list of recommended libraries", () => {
const recommendedLibraryNames = ["jsonwebtoken", "jspdf", "bcryptjs"];
_.entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
_.installer.OpenInstaller();
for (const recommendedLib of recommendedLibraryNames) {
cy.contains(recommendedLib);

View File

@ -11,6 +11,9 @@ import {
entityItems,
dataManager,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const successMessage = "Successful Trigger";
const errorMessage = "Unsuccessful Trigger";
@ -60,6 +63,7 @@ describe("Linting", () => {
cy.get("@dsName").then(($dsName) => {
dsName = $dsName as unknown as string;
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("1. TC 1927 - Shows correct lint error when Api is deleted or created", () => {
@ -342,22 +346,22 @@ describe("Linting", () => {
});
agHelper.AssertElementExist(locators._lintErrorElement);
entityExplorer.ExpandCollapseEntity("Libraries");
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
// install the library
installer.OpenInstaller();
installer.InstallLibrary("uuidjs", "UUID");
installer.CloseInstaller();
entityExplorer.SelectEntityByName("JSObject3");
agHelper.AssertElementAbsence(locators._lintErrorElement);
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
installer.uninstallLibrary("uuidjs");
entityExplorer.SelectEntityByName("JSObject3");
agHelper.AssertElementExist(locators._lintErrorElement);
agHelper.Sleep(2000);
EditorNavigation.ViaSidebar(SidebarButton.Libraries);
installer.OpenInstaller();
installer.InstallLibrary("uuidjs", "UUID");
installer.CloseInstaller();
homePage.NavigateToHome();
homePage.CreateNewApplication();

View File

@ -25,7 +25,7 @@ describe("Validating Mobile Views for Auto Fill Widgets", function () {
cy.dragAndDropToCanvas("codescannerwidget", { x: 100, y: 200 });
cy.dragAndDropToCanvas("listwidgetv2", { x: 620, y: 820 });
cy.dragAndDropToCanvas("tablewidgetv2", { x: 620, y: 820 });
cy.dragAndDropToCanvas("tabswidget", { x: 770, y: 770 });
cy.dragAndDropToCanvas("tabswidget", { x: 670, y: 770 });
cy.wait(2000);
_.deployMode.DeployApp();
cy.wait(2000);

View File

@ -42,9 +42,9 @@ describe("Validating Mobile Views for Auto Fill Widgets", function () {
cy.dragAndDropToCanvas("currencyinputwidget", { x: 110, y: 210 });
cy.dragAndDropToCanvas("audiowidget", { x: 250, y: 300 });
cy.dragAndDropToCanvas("selectwidget", { x: 560, y: 560 });
cy.dragAndDropToCanvas("checkboxwidget", { x: 770, y: 770 });
cy.dragAndDropToCanvas("radiogroupwidget", { x: 770, y: 770 });
cy.dragAndDropToCanvas("datepickerwidget2", { x: 770, y: 970 });
cy.dragAndDropToCanvas("checkboxwidget", { x: 670, y: 770 });
cy.dragAndDropToCanvas("radiogroupwidget", { x: 670, y: 770 });
cy.dragAndDropToCanvas("datepickerwidget2", { x: 670, y: 970 });
cy.dragAndDropToCanvas("phoneinputwidget", { x: 660, y: 810 });
cy.dragAndDropToCanvas("categorysliderwidget", { x: 620, y: 810 });
cy.wait(5000);

View File

@ -1,5 +1,8 @@
import * as _ from "../../../../support/Objects/ObjectsCore";
import { Widgets } from "../../../../support/Pages/DataSources";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
let datasourceName;
@ -9,12 +12,10 @@ describe("Add widget - Postgress DataSource", function () {
cy.get("@dsName").then(($dsName) => {
datasourceName = $dsName;
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("1. Validate Snipping with query and table widget on canvas", () => {
cy.get(".t--close-editor span:contains('Back')").click({ force: true });
cy.get(".t--back-button span:contains('Back')").click({ force: true });
_.autoLayout.ConvertToAutoLayoutAndVerify(false);
cy.NavigateToActiveDSQueryPane(datasourceName);
_.dataSources.EnterQuery("select * from public.configs");

View File

@ -1,3 +1,7 @@
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const OnboardingLocator = require("../../../../locators/FirstTimeUserOnboarding.json");
import {
agHelper,
@ -23,6 +27,7 @@ describe("FirstTimeUserOnboarding", function () {
cy.get(OnboardingLocator.introModal).should("be.visible");
cy.get(OnboardingLocator.checklistDatasourceBtn).click();
cy.get(OnboardingLocator.introModal).should("not.exist");
EditorNavigation.ViaSidebar(SidebarButton.Pages);
cy.get(".t--entity-name:contains(Page1)")
.trigger("mouseover")
.click({ force: true });
@ -36,7 +41,7 @@ describe("FirstTimeUserOnboarding", function () {
agHelper.GetNAssertContains(OnboardingLocator.checklistStatus, "0 of 5");
agHelper.AssertElementExist(OnboardingLocator.checklistDatasourceBtn);
agHelper.GetNClick(OnboardingLocator.checklistDatasourceBtn);
agHelper.AssertElementVisibility(OnboardingLocator.datasourcePage);
agHelper.AssertElementVisibility(dataSources._newDatasourceContainer);
agHelper.GetNClick(OnboardingLocator.datasourceMock);
@ -48,6 +53,7 @@ describe("FirstTimeUserOnboarding", function () {
.realHover()
.should("have.css", "cursor", "auto");
agHelper.GetNClick(OnboardingLocator.checklistActionBtn);
dataSources.navigateToDatasource("Movies");
agHelper.GetNClick(OnboardingLocator.createQuery);
agHelper.Sleep();
@ -117,7 +123,7 @@ describe("FirstTimeUserOnboarding", function () {
.should("have.css", "cursor", "pointer");
cy.get(OnboardingLocator.checklistDatasourceBtn).click();
cy.get(OnboardingLocator.datasourcePage).should("be.visible");
cy.get(dataSources._newDatasourceContainer).should("be.visible");
cy.get(datasource.MongoDB).click();
dataSources.FillMongoDSForm();
cy.generateUUID().then((uid) => {

View File

@ -39,7 +39,7 @@ describe("excludeForAirgap", "Guided Tour", function () {
dataSources.RunQuery();
cy.get(guidedTourLocators.successButton).click();
// Step 2: Select table widget
entityExplorer.SelectEntityByName("CustomersTable");
cy.get(".t--entity-name").contains("CustomersTable").click({ force: true });
// Step 3: Add binding to the tableData property
propPane.UpdatePropertyFieldValue(
@ -106,7 +106,7 @@ describe("excludeForAirgap", "Guided Tour", function () {
cy.get(guidedTourLocators.successButton).click();
// Step 6: Drag and drop a widget
cy.dragAndDropToCanvas("buttonwidget", {
x: 800,
x: 845,
y: 750,
});
cy.get(guidedTourLocators.successButton).click();

View File

@ -9,6 +9,9 @@ import {
import { expandLoadMoreOptions, OneClickBinding } from "./spec_utility";
import oneClickBindingLocator from "../../../../locators/OneClickBindingLocator";
import onboardingLocator from "../../../../locators/FirstTimeUserOnboarding.json";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const oneClickBinding = new OneClickBinding();
@ -67,9 +70,9 @@ describe("excludeForAirgap", "One click binding control", () => {
oneClickBindingLocator.otherActionSelector("Connect new datasource"),
);
agHelper.AssertElementExist(onboardingLocator.datasourcePage);
agHelper.AssertElementExist(dataSources._newDatasourceContainer);
agHelper.GetNClick(onboardingLocator.datasourceBackBtn);
EditorNavigation.ViaSidebar(SidebarButton.Pages);
agHelper.GetNClick(oneClickBindingLocator.datasourceDropdownSelector);
@ -121,7 +124,7 @@ describe("excludeForAirgap", "One click binding control", () => {
dataSources.SaveDatasource();
entityExplorer.NavigateToSwitcher("Widgets");
EditorNavigation.ViaSidebar(SidebarButton.Pages);
agHelper.GetNClick(oneClickBindingLocator.datasourceDropdownSelector);
@ -149,15 +152,13 @@ describe("excludeForAirgap", "One click binding control", () => {
dataSources.SaveDatasource();
entityExplorer.NavigateToSwitcher("Widgets");
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
propPane.MoveToTab("Style");
propPane.MoveToTab("Content");
entityExplorer.NavigateToSwitcher("Explorer");
[1, 2, 3, 4, 5].forEach(() => {
apiPage.CreateAndFillApi("http://www.example.com");
});

View File

@ -11,6 +11,9 @@ import {
import formWidgetsPage from "../../../../../locators/FormWidgets.json";
import widgetsPage from "../../../../../locators/Widgets.json";
import commonlocators from "../../../../../locators/commonlocators.json";
import EditorNavigation, {
SidebarButton,
} from "../../../../../support/Pages/EditorNavigation";
const oneClickBinding = new OneClickBinding();
@ -23,6 +26,7 @@ describe("Table widget one click binding feature", () => {
dataSources.CreateDataSource("Mongo");
cy.get("@dsName").then((dsName) => {
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.NavigateToSwitcher("Widgets");
entityExplorer.SelectEntityByName("Select1", "Widgets");

View File

@ -8,6 +8,9 @@ import {
assertHelper,
} from "../../../../../support/Objects/ObjectsCore";
import { OneClickBinding } from "../spec_utility";
import EditorNavigation, {
SidebarButton,
} from "../../../../../support/Pages/EditorNavigation";
const oneClickBinding = new OneClickBinding();
@ -23,6 +26,7 @@ describe("one click binding mongodb datasource", function () {
dataSources.CreateDataSource("Mongo");
cy.get("@dsName").then((dsName) => {
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.SelectEntityByName("Table1", "Widgets");
oneClickBinding.ChooseAndAssertForm(`${dsName}`, dsName, "netflix", {

View File

@ -66,15 +66,7 @@ describe("Entity bottom bar", () => {
_.debuggerHelper.AssertClosed();
//Verify if bottom bar opens on clicking debugger icon in datasource page.
_.debuggerHelper.ClickDebuggerIcon();
_.debuggerHelper.AssertOpen(PageType.DataSources);
//Verify if selected tab is errors in tab title.
_.debuggerHelper.AssertSelectedTab("Errors");
//Verify if bottom bar is closed on clicking close icon in datasource page.
_.debuggerHelper.CloseBottomBar();
_.debuggerHelper.AssertClosed();
//Verify if bottom bar opens on clicking debugger icon in datasource page.
_.debuggerHelper.ClickDebuggerIcon();
_.debuggerHelper.AssertOpen(PageType.DataSources);
});
it("excludeForAirgap", "5. Query bottom bar should be collapsable", () => {
@ -107,7 +99,7 @@ describe("Entity bottom bar", () => {
_.debuggerHelper.AssertSelectedTab("Response");
// clean up
_.dataSources.DeleteQuery("Query1");
_.dataSources.DeleteDatasouceFromActiveTab(dbName);
_.dataSources.DeleteDatasourceFromWithinDS(dbName);
});
});
@ -138,7 +130,7 @@ describe("Entity bottom bar", () => {
// clean up
_.dataSources.DeleteQuery("Query1");
cy.get("@dsName").then(($dsName) => {
_.dataSources.DeleteDatasouceFromActiveTab($dsName as any);
_.dataSources.DeleteDatasourceFromWithinDS($dsName as any);
});
});
});

View File

@ -1,4 +1,8 @@
/* eslint-disable cypress/no-unnecessary-waiting */
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const commonlocators = require("../../../../locators/commonlocators.json");
const dsl = require("../../../../fixtures/MultipleWidgetDsl.json");
const globalSearchLocators = require("../../../../locators/GlobalSearch.json");
@ -49,7 +53,6 @@ describe("GlobalSearch", function () {
});
it("3. navigatesToApi", () => {
cy.NavigateToAPI_Panel();
cy.CreateAPI("SomeApi");
cy.get(commonlocators.globalSearchTrigger).click({ force: true });
@ -136,6 +139,7 @@ describe("GlobalSearch", function () {
});
it("7. Api actions should have API as prefix", () => {
EditorNavigation.ViaSidebar(SidebarButton.Pages);
cy.get(globalSearchLocators.createNew).click({ force: true });
cy.get(globalSearchLocators.blankDatasource).first().click({ force: true });
cy.get(datasourceHomeLocators.createAuthApiDatasource).click();
@ -148,6 +152,7 @@ describe("GlobalSearch", function () {
cy.fillAuthenticatedAPIForm();
cy.saveDatasource();
EditorNavigation.ViaSidebar(SidebarButton.Pages);
cy.get(globalSearchLocators.createNew).click({ force: true });
cy.get(".ads-v2-menu__menu-item span:contains('omnibarApiDatasource')")
.first()

View File

@ -49,8 +49,6 @@ describe("Undo/Redo functionality", function () {
});
it("2. Checks undo/redo for Api pane", function () {
cy.NavigateToAPI_Panel();
cy.log("Navigation to API Panel screen successful");
cy.CreateAPI("FirstAPI");
cy.get(`${apiwidget.resourceUrl} .CodeMirror-placeholder`).should(
"have.text",

View File

@ -9,6 +9,9 @@ import {
propPane,
dataManager,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Validate JS Object Refactoring does not affect the comments & variables", () => {
let dsName: any;
@ -41,6 +44,7 @@ describe("Validate JS Object Refactoring does not affect the comments & variable
dataSources.CreateDataSource("MySql", true, false);
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
EditorNavigation.ViaSidebar(SidebarButton.Pages);
//Selecting paintings table from MySQL DS
//Initialize new JSObject with custom code

View File

@ -96,6 +96,7 @@ describe("Widget Property Setters - Part II - Tc #2409", () => {
expect(val).be.empty;
});
agHelper.ClickButton("Submit");
agHelper.Sleep(3000); //for the Api to run & new value to be set, for CI runs
agHelper
.GetText(
locators._widgetInDeployed(draggableWidgets.INPUT_V2) +

View File

@ -12,7 +12,11 @@ describe("General Settings", () => {
it("1. App name change updates URL", () => {
_.appSettings.OpenAppSettings();
_.appSettings.GoToGeneralSettings();
_.generalSettings.UpdateAppNameAndVerifyUrl(true, guid);
_.generalSettings.UpdateAppNameAndVerifyUrl({
reset: true,
newAppName: guid,
restOfUrl: "/settings",
});
_.homePage.GetAppName().then((appName) => {
_.deployMode.DeployApp();
_.appSettings.CheckUrl(appName as string, "Page1", undefined, false);
@ -28,7 +32,12 @@ describe("General Settings", () => {
//App name allows special and accented character
_.appSettings.OpenAppSettings();
_.appSettings.GoToGeneralSettings();
_.generalSettings.UpdateAppNameAndVerifyUrl(true, guid + "!@#œ™¡", guid);
_.generalSettings.UpdateAppNameAndVerifyUrl({
reset: true,
newAppName: guid + "!@#œ™¡",
verifyAppNameAs: guid,
restOfUrl: "/settings",
});
_.appSettings.ClosePane();
//Veirfy App name doesn't allow empty

View File

@ -4,7 +4,12 @@ describe("Page Settings", () => {
it("1. Page name change updates URL", () => {
_.appSettings.OpenAppSettings();
_.appSettings.GoToPageSettings("Page1");
_.pageSettings.UpdatePageNameAndVerifyUrl("Page2", undefined, false);
_.pageSettings.UpdatePageNameAndVerifyUrl({
newPageName: "Page2",
verifyPageNameAs: undefined,
reset: false,
restOfUrl: "/settings",
});
_.homePage.GetAppName().then((appName) => {
_.deployMode.DeployApp();
_.appSettings.CheckUrl(appName as string, "Page2", undefined, false);
@ -16,7 +21,7 @@ describe("Page Settings", () => {
it("2. Custom slug change updates URL", () => {
_.appSettings.OpenAppSettings();
_.appSettings.GoToPageSettings("Page2");
_.pageSettings.UpdateCustomSlugAndVerifyUrl("custom");
_.pageSettings.UpdateCustomSlugAndVerifyUrl("custom", "/settings");
_.homePage.GetAppName().then((appName) => {
_.deployMode.DeployApp();
_.appSettings.CheckUrl(appName as string, "Page2", "custom", false);
@ -46,7 +51,11 @@ describe("Page Settings", () => {
// Page name allows accented character
_.appSettings.OpenAppSettings();
_.appSettings.GoToPageSettings("Page3");
_.pageSettings.UpdatePageNameAndVerifyUrl("Page3œßð", "Page3");
_.pageSettings.UpdatePageNameAndVerifyUrl({
newPageName: "Page3œßð",
verifyPageNameAs: "Page3",
restOfUrl: "/settings",
});
_.appSettings.ClosePane();
//Page name doesn't allow special character

View File

@ -79,7 +79,7 @@ describe("excludeForAirgap", "Fork a template to an workspace", () => {
.find(reconnectDatasourceLocators.ListItemIcon)
.should("be.visible");
cy.get(reconnectDatasourceLocators.DatasourceList)
.find(reconnectDatasourceLocators.ListItemIcon, {
.find(reconnectDatasourceLocators.DatasourceTitle, {
withinSubject: null,
})
.first()

View File

@ -1,4 +1,7 @@
import * as _ from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Visual tests for datasources", () => {
// for any changes in UI, update the screenshot in snapshot folder, to do so:
@ -13,10 +16,8 @@ describe("Visual tests for datasources", () => {
const newWorkspaceName = interception.response.body.data.name;
cy.CreateAppForWorkspace(newWorkspaceName, newWorkspaceName);
});
_.dataSources.NavigateToActiveTab();
cy.get(".t--integrationsHomePage").matchImageSnapshot(
"emptydatasourcepage",
);
EditorNavigation.ViaSidebar(SidebarButton.Data);
cy.get(".t--data-blank-state").matchImageSnapshot("emptydatasourcepage");
});
/* cy.NavigateToDatasourceEditor();
cy.wait(2000);

View File

@ -38,7 +38,6 @@ describe("Button Widget Functionality", function () {
//creating an api and calling it from the onClickAction of the button widget.
// Creating the api
propPane.ClearActionField("onClick");
cy.NavigateToAPI_Panel();
cy.CreateAPI("buttonApi");
cy.log("Creation of buttonApi Action successful");
cy.enterDatasourceAndPath(

View File

@ -9,12 +9,81 @@ describe("3D Custom EChart feature", function () {
});
_.agHelper.RefreshPage();
_.entityExplorer.DragDropWidgetNVerify(_.draggableWidgets.CHART);
_.propPane.SelectPropertiesDropDown("Chart type", "Custom EChart");
cy.wait(1000);
cy.get(publicWidgetsPage.chartWidget).matchImageSnapshot("2DCustomECharts");
_.propPane.UpdatePropertyFieldValue(
"Custom ECharts Configuration",
`{{${JSON.stringify(this.dataSet.Custom3DEChartConfig)}}}`,
);
_.deployMode.DeployApp();
cy.wait(1000);
cy.get(publicWidgetsPage.chartWidget).matchImageSnapshot("3DCustomECharts");
_.entityExplorer.SelectEntityByName("Chart1", "Widgets");
_.propPane.UpdatePropertyFieldValue(
"Custom ECharts Configuration",
`{{${JSON.stringify(this.dataSet.InvalidCustom3DEChartConfig)}}}`,
);
_.agHelper.AssertContains(
"Error in Chart Data/Configuration",
"exist",
_.locators._widgetInDeployed(_.draggableWidgets.CHART),
);
_.propPane.UpdatePropertyFieldValue(
"Custom ECharts Configuration",
`{{${JSON.stringify(this.dataSet.Custom3DEChartConfig)}}}`,
);
_.agHelper.AssertContains(
"Error in Chart Data/Configuration",
"not.exist",
_.locators._widgetInDeployed(_.draggableWidgets.CHART),
);
_.propPane.UpdatePropertyFieldValue(
"Custom ECharts Configuration",
`{{${JSON.stringify(this.dataSet.InvalidCustom3DEChartConfig)}}}`,
);
_.agHelper.AssertContains(
"Error in Chart Data/Configuration",
"exist",
_.locators._widgetInDeployed(_.draggableWidgets.CHART),
);
_.propPane.SelectPropertiesDropDown("Chart type", "Custom Fusion Charts");
cy.wait(1000);
cy.get(publicWidgetsPage.chartWidget).matchImageSnapshot("FusionCharts");
_.propPane.SelectPropertiesDropDown("Chart type", "Custom EChart");
_.agHelper.AssertContains(
"Error in Chart Data/Configuration",
"exist",
_.locators._widgetInDeployed(_.draggableWidgets.CHART),
);
_.propPane.UpdatePropertyFieldValue(
"Custom ECharts Configuration",
`{{${JSON.stringify(this.dataSet.Custom3DEChartConfig)}}}`,
);
_.agHelper.AssertContains(
"Error in Chart Data/Configuration",
"not.exist",
_.locators._widgetInDeployed(_.draggableWidgets.CHART),
);
cy.wait(1000);
cy.get(publicWidgetsPage.chartWidget).matchImageSnapshot(
"3DCustomECharts-2",
);
});
});

View File

@ -1,3 +1,7 @@
import EditorNavigation, {
SidebarButton,
} from "../../../../../support/Pages/EditorNavigation";
const publish = require("../../../../../locators/publishWidgetspage.json");
const explorer = require("../../../../../locators/explorerlocators.json");
import * as _ from "../../../../../support/Objects/ObjectsCore";
@ -9,6 +13,7 @@ describe("Checkbox Group Widget Functionality", function () {
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("1. Check checkbox group with dynamic query", function () {

View File

@ -1,3 +1,7 @@
import EditorNavigation, {
SidebarButton,
} from "../../../../../support/Pages/EditorNavigation";
const commonlocators = require("../../../../../locators/commonlocators.json");
import * as _ from "../../../../../support/Objects/ObjectsCore";
@ -15,7 +19,8 @@ describe("Dropdown Widget Check value does not reset on navigation", function ()
cy.wait(200);
//Navigate
cy.NavigateToAPI_Panel();
EditorNavigation.ViaSidebar(SidebarButton.Data);
EditorNavigation.ViaSidebar(SidebarButton.Pages);
//Again navigate back to the widget
_.entityExplorer.SelectEntityByName("Select3");

View File

@ -42,7 +42,6 @@ describe("Dropdown Widget", function () {
it("2. Dropdown-Call-Api Validation", function () {
//creating an api and calling it from the onOptionChangeAction of the Dropdown widget.
// Creating the api
cy.NavigateToAPI_Panel();
cy.CreateAPI("dropdownApi");
cy.log("Creation of buttonApi Action successful");
cy.enterDatasourceAndPath(

View File

@ -1,10 +1,7 @@
const commonlocators = require("../../../../../locators/commonlocators.json");
const dslWithoutSchema = require("../../../../../fixtures/jsonFormDslWithoutSchema.json");
const fieldPrefix = ".t--jsonformfield";
import { ObjectsRegistry } from "../../../../../support/Objects/Registry";
let agHelper = ObjectsRegistry.AggregateHelper;
let locators = ObjectsRegistry.CommonLocators;
let propPane = ObjectsRegistry.PropertyPane;
import { agHelper, propPane } from "../../../../../support/Objects/ObjectsCore";
function selectAndValidateOption(selector, option, expectedFormData) {
// Select option Zero
@ -50,7 +47,7 @@ describe("JSONForm RadioGroup Field", () => {
cy.closePropertyPane();
});
it("accepts numeric options value", () => {
it("1. accepts numeric options value", () => {
cy.openPropertyPane("jsonformwidget");
const schema = {
binary: 1,
@ -76,7 +73,7 @@ describe("JSONForm RadioGroup Field", () => {
cy.selectDropdownValue(commonlocators.jsonFormFieldType, /^Radio Group$/);
clearOptionsProperty();
cy.testJsontext("options", JSON.stringify(options));
propPane.UpdatePropertyFieldValue("Options", JSON.stringify(options));
cy.wait(2000);
@ -99,7 +96,7 @@ describe("JSONForm RadioGroup Field", () => {
});
});
it("accepts string options value", () => {
it("2. accepts string options value", () => {
cy.openPropertyPane("jsonformwidget");
const schema = {
accept: "N",
@ -126,8 +123,7 @@ describe("JSONForm RadioGroup Field", () => {
cy.selectDropdownValue(commonlocators.jsonFormFieldType, /^Radio Group$/);
clearOptionsProperty();
cy.testJsontext("options", JSON.stringify(options));
propPane.UpdatePropertyFieldValue("Options", JSON.stringify(options));
cy.wait(2000);
// Validate initial form data

View File

@ -1,3 +1,7 @@
import EditorNavigation, {
SidebarButton,
} from "../../../../../support/Pages/EditorNavigation";
const publishLocators = require("../../../../../locators/publishWidgetspage.json");
const datasource = require("../../../../../locators/DatasourcesEditor.json");
const queryLocators = require("../../../../../locators/QueryEditor.json");
@ -328,17 +332,10 @@ describe("List widget v2 - Basic server side data tests", () => {
// Click on sample(mock) user database.
cy.get(datasource.mockUserDatabase).click();
_.dataSources.NavigateToActiveTab();
EditorNavigation.ViaSidebar(SidebarButton.Data);
// Choose the first data source which consists of users keyword & Click on the "New query +"" button
cy.get(`${datasource.datasourceCard}`)
.filter(":contains('Users')")
.first()
.within(() => {
cy.get(`${datasource.createQuery}`).click({
force: true,
});
});
_.dataSources.CreateQueryFromActiveTab("Users");
// Click the editing field
cy.get(".t--action-name-edit-field").click({
@ -379,7 +376,7 @@ describe("List widget v2 - Basic server side data tests", () => {
);
it(
"airgap",
"6. no of items rendered should be equal to page size - airgap",
"7. no of items rendered should be equal to page size - airgap",
() => {
_.dataSources.CreateDataSource("Postgres");
cy.wait(1000);

View File

@ -82,7 +82,7 @@ describe("List widget v2 onItemClick", () => {
entityExplorer.DragDropWidgetNVerify(
draggableWidgets.INPUT_V2,
250,
150,
50,
draggableWidgets.CONTAINER,
);
@ -94,7 +94,7 @@ describe("List widget v2 onItemClick", () => {
entityExplorer.DragDropWidgetNVerify(
draggableWidgets.SELECT,
250,
150,
50,
draggableWidgets.CONTAINER,
);
@ -107,7 +107,7 @@ describe("List widget v2 onItemClick", () => {
entityExplorer.DragDropWidgetNVerify(
draggableWidgets.BUTTON,
250,
150,
50,
draggableWidgets.CONTAINER,
);

View File

@ -27,7 +27,8 @@ describe("Modal Widget test cases", function () {
//Verify that the Modal widget opens correctly when configured on a button click.
agHelper.ClickButton("Submit");
agHelper.AssertElementVisibility(locators._modal);
agHelper.WaitUntilEleAppear(locators._modal);
agHelper.AssertElementExist(locators._modal);
//Verify that the Modal widget is closed and no longer visible on the screen on clicking the "X" button.
agHelper.AssertElementVisibility(
@ -38,7 +39,8 @@ describe("Modal Widget test cases", function () {
//Verify that clicking outside the Modal widget closes it as expected when Quick dismiss is enabled
agHelper.ClickButton("Submit");
agHelper.AssertElementVisibility(locators._modal);
agHelper.WaitUntilEleAppear(locators._modal);
agHelper.AssertElementExist(locators._modal);
agHelper.ClickOutside(350, 150, false);
agHelper.Sleep();
agHelper.AssertElementAbsence(locators._modal);

View File

@ -29,7 +29,7 @@ describe("Dropdown Widget Functionality", function () {
.find(widgetLocators.menuButton)
.then(($menuButton) => {
const outerWidth = Cypress.$($menuButton).outerWidth();
expect(parseInt(outerWidth)).to.equal(147);
expect(parseInt(outerWidth)).to.equal(137);
});
cy.get(formWidgetsPage.menuButtonWidget)
.find(widgetLocators.menuButton)
@ -41,7 +41,7 @@ describe("Dropdown Widget Functionality", function () {
cy.get(".menu-button-popover")
.invoke("outerWidth")
.then((width) => {
expect(parseInt(width)).to.equal(147);
expect(parseInt(width)).to.equal(137);
});
// MultiSelect

View File

@ -30,7 +30,7 @@ describe("Statbox Widget", function () {
entityExplorer.SelectEntityByName("IconButton1", "Statbox1");
cy.get(".t--property-pane-section-general").then(() => {
// changing the icon to arrow-up
cy.get(".bp3-button-text").first().click();
cy.get(".bp3-button-text").first().click().wait(500);
cy.get(".bp3-icon-arrow-up").click().wait(500);
// opening modal from onClick action of icon button
cy.createModal("Modal", "onClick");

View File

@ -252,7 +252,7 @@ describe("Radio Widget test cases", function () {
agHelper.AssertCSS(
widgetLocators.radioWidgetLabelContainer,
"width",
"59.765625px",
"55.859375px",
);
agHelper.GetNClick(widgetLocators.selectWidgetWidthPlusBtn);
agHelper.GetNClick(widgetLocators.selectWidgetWidthPlusBtn);

View File

@ -44,7 +44,7 @@ describe("Select widget tests", function () {
agHelper.AssertCSS(
widgetLocators.selectWidgetLabelContainer,
"width",
"59.765625px",
"55.859375px",
);
agHelper.GetNClick(widgetLocators.selectWidgetWidthPlusBtn);
agHelper.GetNClick(widgetLocators.selectWidgetWidthPlusBtn);

View File

@ -59,7 +59,7 @@ describe("Select widget tests", function () {
deployMode.DeployApp(locators._widgetInDeployed(draggableWidgets.SELECT));
//Validate filtered data
agHelper.Sleep(3000); //Wait for widget to settle
agHelper.Sleep(6000); //Wait for widget to settle for CI failure
agHelper.GetNClick(locators._widgetInDeployed(draggableWidgets.SELECT));
agHelper.TypeText(widgetLocators.selectWidgetFilter, "Ulf");
agHelper.Sleep(3000); //Wait for widget filter to settle for CI runs

View File

@ -160,10 +160,6 @@ describe("Tree Select widget Tests", function () {
// Execute the query
let postgresDatasourceName: any;
dataSources.StartDataSourceRoutes();
agHelper
.GetElement(locators._newDataSourceBtn)
.last()
.click({ force: true });
dataSources.NavigateToDSCreateNew();
dataSources.CreatePlugIn("PostgreSQL");
agHelper.GenerateUUID();
@ -300,7 +296,7 @@ describe("Tree Select widget Tests", function () {
propPane.UpdatePropertyFieldValue(
"srcDoc",
`<div id="target"></div>
<script>
window.addEventListener('message', (event) => {
const tgt = document.querySelector("#target")

View File

@ -1,3 +1,7 @@
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const dsl = require("../../../../fixtures/widgetSelection.json");
import * as _ from "../../../../support/Objects/ObjectsCore";
@ -52,10 +56,11 @@ describe("Widget Selection", function () {
// Switch to the Explorer Pane
_.entityExplorer.NavigateToSwitcher("Explorer");
// Click to create a New Data Source
cy.get(".t--entity-add-btn").eq(3).click();
_.dataSources.NavigateToDSCreateNew();
// Hit CTRL +A
cy.get("body").type("{ctrl}{a}");
// Switch to the Canvas
EditorNavigation.ViaSidebar(SidebarButton.Pages);
_.entityExplorer.NavigateToSwitcher("Widgets");
// Widgets should not be selected
cy.get(".t--multi-selection-box").should("not.exist");

View File

@ -1,3 +1,7 @@
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const testdata = require("../../../../fixtures/testdata.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
@ -14,6 +18,7 @@ describe("API Panel Test Functionality", function () {
action: "Delete",
entityType: entityItems.Api,
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("1. PUT Action test API feature", function () {

View File

@ -9,7 +9,6 @@ import {
describe("API Panel Test Functionality ", function () {
it("1. Test API copy/Move/delete feature", function () {
cy.Createpage("SecondPage");
cy.NavigateToAPI_Panel();
cy.CreateAPI("FirstAPI");
cy.enterDatasourceAndPath(testdata.baseUrl, "{{ '/random' }}");
cy.assertPageSave();

View File

@ -1,3 +1,7 @@
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const testdata = require("../../../../fixtures/testdata.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
import appPage from "../../../../locators/CMSApplocators";
@ -5,7 +9,6 @@ import apiEditor from "../../../../locators/ApiEditor";
describe("API Panel request body", function () {
it("1. Check whether the default content-type changes on changing method types and remains unchanged on switching to GET", function () {
cy.NavigateToAPI_Panel();
cy.CreateAPI("FirstAPI");
// Checking for default Body type to be NONE
@ -51,7 +54,7 @@ describe("API Panel request body", function () {
});
it("2. Bug 14624 - Verifying the content-type none is not added", function () {
cy.NavigateToAPI_Panel();
EditorNavigation.ViaSidebar(SidebarButton.Pages);
cy.CreateAPI("FirstAPI");
// Checking for default Body type to be NONE

View File

@ -1,3 +1,7 @@
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const testdata = require("../../../../fixtures/testdata.json");
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
@ -14,8 +18,6 @@ describe("API Panel Test Functionality", function () {
it("1. Test Search API fetaure", function () {
cy.log("Login Successful");
cy.NavigateToAPI_Panel();
cy.log("Navigation to API Panel screen successful");
cy.CreateAPI("FirstAPI");
cy.get(".CodeMirror-placeholder")
.first()
@ -36,12 +38,11 @@ describe("API Panel Test Functionality", function () {
action: "Delete",
entityType: entityItems.Api,
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.AssertEntityAbsenceInExplorer("SecondAPI");
});
it("2. Should update loading state after cancellation of confirmation for run query", function () {
cy.NavigateToAPI_Panel();
cy.log("Navigation to API Panel screen successful");
cy.CreateAPI("FirstAPI");
cy.get(".CodeMirror-placeholder")
.first()
@ -56,7 +57,6 @@ describe("API Panel Test Functionality", function () {
});
it("3. Should not crash on key delete", function () {
cy.NavigateToAPI_Panel();
cy.CreateAPI("CrashTestAPI");
cy.SelectAction(testdata.postAction);
cy.get(apiwidget.headerKey)
@ -71,7 +71,6 @@ describe("API Panel Test Functionality", function () {
});
it("4. Should correctly parse query params", function () {
cy.NavigateToAPI_Panel();
cy.CreateAPI("APIWithQueryParams");
cy.enterDatasourceAndPath(testdata.baseUrl, testdata.methodWithQueryParam);
cy.ValidateQueryParams({
@ -81,7 +80,6 @@ describe("API Panel Test Functionality", function () {
});
it("5. Shows evaluated value pane when url field is focused", function () {
cy.NavigateToAPI_Panel();
cy.CreateAPI("TestAPI");
cy.get(".CodeMirror textarea")
.first()

View File

@ -1,14 +1,17 @@
import {
agHelper,
jsEditor,
propPane,
deployMode,
apiPage,
entityItems,
entityExplorer,
locators,
assertHelper,
deployMode,
entityExplorer,
entityItems,
jsEditor,
locators,
propPane,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Validate API request body panel", () => {
beforeEach(() => {
@ -33,6 +36,7 @@ describe("Validate API request body panel", () => {
action: "Delete",
entityType: entityItems.Api,
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("2. Checks whether No body error message is shown when None API body content type is selected", function () {
@ -44,6 +48,7 @@ describe("Validate API request body panel", () => {
action: "Delete",
entityType: entityItems.Api,
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("3. Checks whether header content type is being changed when FORM_URLENCODED API body content type is selected", function () {
@ -64,6 +69,7 @@ describe("Validate API request body panel", () => {
action: "Delete",
entityType: entityItems.Api,
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("4. Checks whether header content type is being changed when MULTIPART_FORM_DATA API body content type is selected", function () {
@ -84,6 +90,7 @@ describe("Validate API request body panel", () => {
action: "Delete",
entityType: entityItems.Api,
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("5. Checks whether content type 'FORM_URLENCODED' is preserved when user selects None API body content type", function () {
@ -96,6 +103,7 @@ describe("Validate API request body panel", () => {
action: "Delete",
entityType: entityItems.Api,
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("6. Checks whether content type 'MULTIPART_FORM_DATA' is preserved when user selects None API body content type", function () {
@ -108,6 +116,7 @@ describe("Validate API request body panel", () => {
action: "Delete",
entityType: entityItems.Api,
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("7. Checks MultiPart form data for a File Type upload + Bug 12476", () => {

View File

@ -14,8 +14,6 @@ describe("Moustache test Functionality", function () {
entityExplorer.SelectEntityByName("TestTextBox", "Aditya");
cy.widgetText("Api", widgetsPage.textWidget, widgetsPage.textInputval);
cy.testCodeMirror(testdata.methods);
cy.NavigateToAPI_Panel();
cy.log("Navigation to API Panel screen successful");
cy.CreateAPI("TestAPINew");
cy.log("Creation of API Action successful");
cy.enterDatasourceAndPath(testdata.baseUrl, testdata.moustacheMethod);

View File

@ -1,3 +1,7 @@
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const testdata = require("../../../../fixtures/testdata.json");
import { agHelper, apiPage } from "../../../../support/Objects/ObjectsCore";
import apiEditor from "../../../../locators/ApiEditor";
@ -7,8 +11,6 @@ const testUrl1 =
describe("Bug 14666: Api Response Test Functionality ", function () {
it("1. Test table loading when data is in array format", function () {
cy.log("Login Successful");
cy.NavigateToAPI_Panel();
cy.log("Navigation to API Panel screen successful");
apiPage.CreateAndFillApi(testUrl1, "TableTestAPI");
agHelper.AssertAutoSave();
apiPage.RunAPI();
@ -17,9 +19,7 @@ describe("Bug 14666: Api Response Test Functionality ", function () {
});
it("2. Test table loading when data is not in array format", function () {
cy.log("Login Successful");
cy.NavigateToAPI_Panel();
cy.log("Navigation to API Panel screen successful");
EditorNavigation.ViaSidebar(SidebarButton.Pages);
apiPage.CreateAndFillApi(
testdata.baseUrl + testdata.echoMethod,
"TableTestAPI",

View File

@ -4,6 +4,9 @@ import {
apiPage,
entityItems,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
let APIName;
const testUrl1 =
@ -16,12 +19,11 @@ const testUrl3 =
describe("API Panel Test Functionality ", function () {
it("1. Test Search API fetaure", function () {
cy.log("Login Successful");
cy.NavigateToAPI_Panel();
cy.log("Navigation to API Panel screen successful");
cy.generateUUID().then((uid) => {
EditorNavigation.ViaSidebar(SidebarButton.Pages);
cy.CreateAPI(`FirstAPI_${uid}`);
cy.log("Creation of FirstAPI Action successful");
cy.NavigateToAPI_Panel();
EditorNavigation.ViaSidebar(SidebarButton.Pages);
cy.CreateAPI(`SecondAPI_${uid}`);
cy.CheckAndUnfoldEntityItem("Queries/JS");
cy.log("Creation of SecondAPI Action successful");
@ -54,7 +56,6 @@ describe("API Panel Test Functionality ", function () {
cy.checkIfApiPaneIsVisible();
});
it("3. Bug 14242: Appsmith crash when create an API pointing to Github hosted json", function () {
cy.NavigateToAPI_Panel();
cy.generateUUID().then((uid) => {
APIName = uid;
cy.CreateAPI(APIName);

View File

@ -8,6 +8,9 @@ import {
entityExplorer,
apiPage,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Validate API Panel CSS Styles", function () {
const backgroundColorGray200 = "rgb(227, 232, 239)";
@ -63,6 +66,7 @@ describe("Validate API Panel CSS Styles", function () {
//Create two datasource for testing binding prompt background-color
cy.createNewAuthApiDatasource(appName1);
cy.createNewAuthApiDatasource(appName2);
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.ExpandCollapseEntity("Queries/JS");
cy.get(commonLocators.entityName).contains("test_styles").click();
//Click on API search editor
@ -80,12 +84,12 @@ describe("Validate API Panel CSS Styles", function () {
.should("have.css", "background-color", hover);
//Delete created test API
cy.DeleteAPI();
EditorNavigation.ViaSidebar(SidebarButton.Pages);
cy.wait(2000);
cy.get(commonLocators.entityName)
.contains("test_styles")
.should("not.exist");
//Delete two datasources
entityExplorer.ExpandCollapseEntity("Datasources");
cy.deleteDatasource(appName1);
cy.deleteDatasource(appName2);
});

View File

@ -1,3 +1,7 @@
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
const apiwidget = require("../../../../locators/apiWidgetslocator.json");
const globalSearchLocators = require("../../../../locators/GlobalSearch.json");
import ApiEditor from "../../../../locators/ApiEditor";
@ -13,7 +17,6 @@ import {
describe("Test curl import flow", function () {
it("1. Test curl import flow Run and Delete", function () {
localStorage.setItem("ApiPaneV2", "ApiPaneV2");
cy.NavigateToApiEditor();
dataSources.NavigateToDSCreateNew();
cy.get(ApiEditor.curlImage).click({ force: true });
cy.get("textarea").type(

View File

@ -208,12 +208,7 @@ describe("Validate Elasticsearch DS", () => {
action: "Delete",
entityType: entityItems.Query,
});
entityExplorer.SelectEntityByName(dsName, "Datasources");
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: dsName,
action: "Delete",
entityType: entityItems.Datasource,
});
dataSources.DeleteDatasourceFromWithinDS(dsName);
//dataSources.StopNDeleteContainer(containerName);
});
});

View File

@ -353,7 +353,7 @@ describe("Validate Firestore DS", () => {
action: "Delete",
entityType: entityItems.Query,
});
dataSources.DeleteDatasouceFromActiveTab(dsName, 409);
dataSources.DeleteDatasourceFromWithinDS(dsName, 409);
//commenting below since after query delete, we run into risk of not seeing the datasource in EntityExplorer
// entityExplorer.SelectEntityByName(dsName, "Datasources");
// entityExplorer.ActionContextMenuByEntityName({

View File

@ -13,6 +13,10 @@ import {
jsEditor,
} from "../../../../support/Objects/ObjectsCore";
import { Widgets } from "../../../../support/Pages/DataSources";
import datasource from "../../../../locators/DatasourcesEditor.json";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Validate Oracle DS", () => {
let dataSourceName: string, guid: any, query: string, selectQuery: string;
@ -108,7 +112,8 @@ describe("Validate Oracle DS", () => {
dataSources.AssertDataSourceInfo(["Host address", "Port", "Service Name"]);
agHelper.ClickButton("Edit"); //Navigate to Edit page & check if DS edit is opened
dataSources.ValidateNSelectDropdown("SSL mode", "Disable");
agHelper.GoBack(); //Do not edit anythin, go back to active ds list, ensure no modal is opened
EditorNavigation.ViaSidebar(SidebarButton.Pages);
EditorNavigation.ViaSidebar(SidebarButton.Data);
dataSources.AssertDSInActiveList(dataSourceName);
});
@ -172,8 +177,6 @@ describe("Validate Oracle DS", () => {
dataSources.EnterQuery(query);
dataSources.RunQuery();
dataSources.AssertTableInVirtuosoList(dataSourceName, guid.toUpperCase());
query = `INSERT INTO ${guid} (
aircraft_id,
aircraft_type,
@ -195,7 +198,11 @@ describe("Validate Oracle DS", () => {
TO_DATE('2020-01-15', 'YYYY-MM-DD'),
TO_DATE('{{DatePicker1.formattedDate}}', 'YYYY-MM-DD'),
'This aircraft is used for domestic flights.')`;
entityExplorer.ActionTemplateMenuByEntityName(guid.toUpperCase(), "Select");
dataSources.createQueryWithDatasourceSchemaTemplate(
dataSourceName,
guid.toUpperCase(),
"Select",
);
dataSources.RunQuery();
agHelper
.GetText(dataSources._noRecordFound)

View File

@ -97,7 +97,7 @@ describe("Validate Redis DS", () => {
action: "Delete",
entityType: entityItems.Query,
});
dataSources.DeleteDatasouceFromActiveTab(dsName);
dataSources.DeleteDatasourceFromWithinDS(dsName);
//commenting below since after query delete, we run into risk of not seeing the datasource in EntityExplorer
// entityExplorer.SelectEntityByName(dsName, "Datasources");
// entityExplorer.ActionContextMenuByEntityName({

View File

@ -10,6 +10,9 @@ import {
draggableWidgets,
} from "../../../../support/Objects/ObjectsCore";
import { Widgets } from "../../../../support/Pages/DataSources";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
describe("Validate Mongo URI CRUD with JSON Form", () => {
let dsName: any;
@ -23,6 +26,7 @@ describe("Validate Mongo URI CRUD with JSON Form", () => {
agHelper.RenameWithInPane(dsName, false);
dataSources.FillMongoDatasourceFormWithURI();
dataSources.TestSaveDatasource();
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.AddNewPage("Generate page with data");
agHelper.GetNClick(dataSources._selectDatasourceDropdown);
agHelper.GetNClickByContains(dataSources._dropdownOption, dsName);
@ -41,7 +45,7 @@ describe("Validate Mongo URI CRUD with JSON Form", () => {
table.WaitUntilTableLoad();
//Should not be able to delete ds until app is published again
//coz if app is published & shared then deleting ds may cause issue, So!
dataSources.DeleteDatasouceFromActiveTab(dsName as string, 409);
dataSources.DeleteDatasourceFromWithinDS(dsName as string, 409);
});
});

View File

@ -25,7 +25,7 @@ describe("Validate Mongo CRUD with JSON Form", () => {
it("1. Create DS & then Add new Page and generate CRUD template using created datasource", () => {
appSettings.OpenPaneAndChangeTheme("Water Lily");
dataSources.CreateDataSource("Mongo");
dataSources.CreateDataSource("Mongo", true, false);
cy.get("@dsName").then(($dsName: any) => {
dsName = $dsName;
entityExplorer.AddNewPage();
@ -57,7 +57,7 @@ describe("Validate Mongo CRUD with JSON Form", () => {
//coz if app is published & shared then deleting ds may cause issue, So!
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
dataSources.DeleteDatasouceFromActiveTab(dsName as string, 409);
dataSources.DeleteDatasourceFromWithinDS(dsName as string, 409);
});
// deployMode.DeployApp();
@ -80,7 +80,7 @@ describe("Validate Mongo CRUD with JSON Form", () => {
});
deployMode.DeployApp();
deployMode.NavigateBacktoEditor();
dataSources.DeleteDatasouceFromActiveTab(dsName as string, 200);
dataSources.DeleteDatasourceFromWithinDS(dsName as string, 200);
});
//Update, delete, Add goes here

View File

@ -10,10 +10,19 @@ import {
table,
assertHelper,
} from "../../../../support/Objects/ObjectsCore";
// import { INTERCEPT } from "../../../../fixtures/variables";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
import { featureFlagIntercept } from "../../../../support/Objects/FeatureFlags";
let dsName: any;
describe("Validate MySQL Generate CRUD with JSON Form", () => {
before(() => {
featureFlagIntercept({
ab_gsheet_schema_enabled: true,
ab_mock_mongo_schema_enabled: true,
});
});
// beforeEach(function() {
// if (INTERCEPT.MYSQL) {
// cy.log("MySQL DB is not found. Using intercept");
@ -25,6 +34,7 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
dataSources.CreateDataSource("MySql");
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.AddNewPage();
entityExplorer.AddNewPage("Generate page with data");
agHelper.GetNClick(dataSources._selectDatasourceDropdown);
@ -54,7 +64,7 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
//coz if app is published & shared then deleting ds may cause issue, So!
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
dataSources.DeleteDatasouceFromActiveTab(dsName as string, 409);
dataSources.DeleteDatasourceFromWithinDS(dsName as string, 409);
agHelper.WaitUntilAllToastsDisappear();
});
deployMode.DeployApp(locators._emptyPageTxt);
@ -62,7 +72,7 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
deployMode.NavigateBacktoEditor();
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
dataSources.DeleteDatasouceFromActiveTab(dsName as string, 200);
dataSources.DeleteDatasourceFromWithinDS(dsName as string, 200);
});
agHelper.WaitUntilAllToastsDisappear();
});
@ -153,12 +163,12 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
//agHelper.VerifyEvaluatedValue(tableCreateQuery); //failing sometimes!
dataSources.RunQueryNVerifyResponseViews();
dataSources.AssertTableInVirtuosoList(dsName, "productlines");
agHelper.ActionContextMenuWithInPane({
action: "Delete",
entityType: entityItems.Query,
});
dataSources.AssertTableInVirtuosoList(dsName, "productlines");
});
it("5. Verify Generate CRUD for the new table & Verify Deploy mode for table - Productlines", () => {
@ -272,18 +282,11 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
//agHelper.VerifyEvaluatedValue(tableCreateQuery);
dataSources.RunQueryNVerifyResponseViews();
entityExplorer.ExpandCollapseEntity("Datasources");
entityExplorer.ExpandCollapseEntity(dsName);
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: dsName,
action: "Refresh",
});
agHelper.AssertElementAbsence(
entityExplorer._entityNameInExplorer("Stores"),
);
dataSources.AssertTableInVirtuosoList(dsName, "Stores", false);
});
it("10. Verify application does not break when user runs the query with wrong table name", function () {
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.SelectEntityByName("DropProductlines", "Queries/JS");
dataSources.RunQuery({ toValidateResponse: false });
cy.wait("@postExecute").then(({ response }) => {

View File

@ -1,4 +1,6 @@
// import { INTERCEPT } from "../../../../fixtures/variables";
import { featureFlagIntercept } from "../../../../support/Objects/FeatureFlags";
let dsName: any, newStoreSecret: any;
import {
@ -64,12 +66,12 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
//agHelper.VerifyEvaluatedValue(tableCreateQuery);
dataSources.RunQueryNVerifyResponseViews();
dataSources.AssertTableInVirtuosoList(dsName, "Stores");
agHelper.ActionContextMenuWithInPane({
action: "Delete",
entityType: entityItems.Query,
});
dataSources.AssertTableInVirtuosoList(dsName, "Stores");
});
it("2. Validate Select record from Postgress datasource & verify query response", () => {
@ -359,19 +361,12 @@ describe("Validate MySQL Generate CRUD with JSON Form", () => {
//agHelper.VerifyEvaluatedValue(tableCreateQuery);
dataSources.RunQueryNVerifyResponseViews();
dataSources.AssertTableInVirtuosoList(dsName, "Stores", false);
agHelper.ActionContextMenuWithInPane({
action: "Delete",
entityType: entityItems.Query,
});
entityExplorer.ExpandCollapseEntity("Datasources");
entityExplorer.ExpandCollapseEntity(dsName);
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: dsName,
action: "Refresh",
});
agHelper.AssertElementAbsence(
entityExplorer._entityNameInExplorer("Stores"),
);
});
after(

View File

@ -10,6 +10,9 @@ import {
entityItems,
assertHelper,
} from "../../../../support/Objects/ObjectsCore";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
let dsName: any;
@ -18,6 +21,7 @@ describe("Postgres Generate CRUD with JSON Form", () => {
dataSources.CreateDataSource("Postgres");
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
EditorNavigation.ViaSidebar(SidebarButton.Pages);
entityExplorer.AddNewPage();
entityExplorer.AddNewPage("Generate page with data");
agHelper.GetNClick(dataSources._selectDatasourceDropdown);
@ -49,7 +53,7 @@ describe("Postgres Generate CRUD with JSON Form", () => {
//coz if app is published & shared then deleting ds may cause issue, So!
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
dataSources.DeleteDatasouceFromActiveTab(dsName as string, 409);
dataSources.DeleteDatasourceFromWithinDS(dsName as string, 409);
agHelper.WaitUntilAllToastsDisappear();
});
deployMode.DeployApp(locators._emptyPageTxt);
@ -57,7 +61,7 @@ describe("Postgres Generate CRUD with JSON Form", () => {
deployMode.NavigateBacktoEditor();
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
dataSources.DeleteDatasouceFromActiveTab(dsName as string, 200);
dataSources.DeleteDatasourceFromWithinDS(dsName as string, 200);
});
});

View File

@ -57,11 +57,14 @@ describe("Validate Postgres Generate CRUD with JSON Form", () => {
//agHelper.VerifyEvaluatedValue(tableCreateQuery); //failing sometimes!
dataSources.RunQueryNVerifyResponseViews();
dataSources.AssertTableInVirtuosoList(dsName, "public.vessels");
});
it("2. Validate Select record from Postgress datasource & verify query response", () => {
entityExplorer.ActionTemplateMenuByEntityName("public.vessels", "Select");
dataSources.createQueryWithDatasourceSchemaTemplate(
dsName,
"public.vessels",
"Select",
);
dataSources.RunQueryNVerifyResponseViews(10);
dataSources.AssertQueryTableResponse(0, "371681");
dataSources.AssertQueryTableResponse(6, "Passenger");

View File

@ -73,21 +73,6 @@ describe("Generate New CRUD Page Inside from entity explorer", function () {
});
it("2. Generate CRUD page from datasource ACTIVE section", function () {
// cy.NavigateToQueryEditor();
// cy.get(pages.integrationActiveTab)
// .should("be.visible")
// .click({ force: true });
// cy.wait(1000);
// cy.get(datasourceEditor.datasourceCard)
// .contains(datasourceName)
// .scrollIntoView()
// .should("be.visible")
// .closest(datasourceEditor.datasourceCard)
// .within(() => {
// cy.get(datasourceEditor.datasourceCardGeneratePageBtn).click();
// });
cy.NavigateToDSGeneratePage(datasourceName);
// fetch bucket

View File

@ -9,11 +9,22 @@ import {
entityItems,
} from "../../../../support/Objects/ObjectsCore";
import inputData from "../../../../support/Objects/mySqlData";
import EditorNavigation, {
SidebarButton,
} from "../../../../support/Pages/EditorNavigation";
import { featureFlagIntercept } from "../../../../support/Objects/FeatureFlags";
let dsName: any, query: string;
describe("MySQL Datatype tests", function () {
before("Load dsl, Change theme, Create Mysql DS", () => {
featureFlagIntercept(
{
ab_gsheet_schema_enabled: true,
ab_mock_mongo_schema_enabled: true,
},
false,
);
agHelper.AddDsl("Datatypes/mySQLdsl");
appSettings.OpenPaneAndChangeTheme("Moon");
@ -21,6 +32,7 @@ describe("MySQL Datatype tests", function () {
cy.get("@dsName").then(($dsName) => {
dsName = $dsName;
});
EditorNavigation.ViaSidebar(SidebarButton.Pages);
});
it("1. Creating mysqlDTs table & queries", () => {
@ -31,10 +43,9 @@ describe("MySQL Datatype tests", function () {
dataSources.CreateQueryFromOverlay(dsName, query, "createTable"); //Creating query from EE overlay
dataSources.RunQuery();
dataSources.AssertTableInVirtuosoList(dsName, inputData.tableName);
//Creating SELECT query
entityExplorer.ActionTemplateMenuByEntityName(
dataSources.createQueryWithDatasourceSchemaTemplate(
dsName,
inputData.tableName,
"Select",
);
@ -46,7 +57,8 @@ describe("MySQL Datatype tests", function () {
//Other queries
query = inputData.query.insertRecord;
entityExplorer.ActionTemplateMenuByEntityName(
dataSources.createQueryWithDatasourceSchemaTemplate(
dsName,
inputData.tableName,
"Insert",
);
@ -54,7 +66,8 @@ describe("MySQL Datatype tests", function () {
dataSources.EnterQuery(query);
query = inputData.query.dropTable;
entityExplorer.ActionTemplateMenuByEntityName(
dataSources.createQueryWithDatasourceSchemaTemplate(
dsName,
inputData.tableName,
"Delete",
);
@ -127,17 +140,7 @@ describe("MySQL Datatype tests", function () {
dataSources.RunQuery();
dataSources.AssertQueryTableResponse(0, "0"); //Success response for dropped table!
entityExplorer.ExpandCollapseEntity("Queries/JS", false);
entityExplorer.ExpandCollapseEntity("Datasources");
entityExplorer.ExpandCollapseEntity(dsName);
entityExplorer.ActionContextMenuByEntityName({
entityNameinLeftSidebar: dsName,
action: "Refresh",
});
agHelper.AssertElementAbsence(
entityExplorer._entityNameInExplorer(inputData.tableName),
);
entityExplorer.ExpandCollapseEntity(dsName, false);
entityExplorer.ExpandCollapseEntity("Datasources", false);
dataSources.AssertTableInVirtuosoList(dsName, inputData.tableName, false);
//DS deletion
dataSources.DeleteDatasourceFromWithinDS(dsName, 409); //Since all queries exists

Some files were not shown because too many files have changed in this diff Show More