From 43508325e6cbd2b63389c9cd9f4b40ee6b47727a Mon Sep 17 00:00:00 2001 From: Nikol Georgieva Date: Wed, 4 Jun 2025 18:42:39 +0300 Subject: [PATCH 1/4] add test for roles definition --- .../framework/browser/HtmlElementType.java | 4 +- .../dirigible/tests/framework/ide/IDE.java | 18 +++++-- .../tests/framework/ide/IDEFactory.java | 9 ++-- .../framework/ide/SecurityPerspective.java | 22 +++++++++ .../ide/SecurityPerspectiveFactory.java | 24 ++++++++++ .../tests/framework/ide/Workbench.java | 25 +++++++++- .../ui/tests/CreateRolesDefinitionIT.java | 48 +++++++++++++++++++ 7 files changed, 141 insertions(+), 9 deletions(-) create mode 100644 tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspective.java create mode 100644 tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspectiveFactory.java create mode 100644 tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/HtmlElementType.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/HtmlElementType.java index f141527d928..d34b2653bd2 100644 --- a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/HtmlElementType.java +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/HtmlElementType.java @@ -29,7 +29,9 @@ public enum HtmlElementType { LI("li"), // UL("ul"), // TH("th"), // - TR("tr"); // + TR("tr"), // + PARAGRAPH("p"), // + TD("td"); // private final String type; diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/IDE.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/IDE.java index 8e4c9cb1bd1..2c8170ff9c2 100644 --- a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/IDE.java +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/IDE.java @@ -42,19 +42,22 @@ public class IDE { private final WorkbenchFactory workbenchFactory; private final DatabasePerspectiveFactory databasePerspectiveFactory; private final GitPerspectiveFactory gitPerspectiveFactory; + private final SecurityPerspectiveFactory securityPerspectiveFactory; @Autowired IDE(Browser browser, RestAssuredExecutor restAssuredExecutor, WorkbenchFactory workbenchFactory, - DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory) { + DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory, + SecurityPerspectiveFactory securityPerspectiveFactory) { this(browser, DirigibleTestTenant.createDefaultTenant() .getUsername(), DirigibleTestTenant.createDefaultTenant() .getPassword(), - restAssuredExecutor, workbenchFactory, databasePerspectiveFactory, gitPerspectiveFactory); + restAssuredExecutor, workbenchFactory, databasePerspectiveFactory, gitPerspectiveFactory, securityPerspectiveFactory); } IDE(Browser browser, String username, String password, RestAssuredExecutor restAssuredExecutor, WorkbenchFactory workbenchFactory, - DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory) { + DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory, + SecurityPerspectiveFactory securityPerspectiveFactory) { this.browser = browser; this.restAssuredExecutor = restAssuredExecutor; this.username = username; @@ -62,6 +65,7 @@ public class IDE { this.workbenchFactory = workbenchFactory; this.databasePerspectiveFactory = databasePerspectiveFactory; this.gitPerspectiveFactory = gitPerspectiveFactory; + this.securityPerspectiveFactory = securityPerspectiveFactory; } public Browser getBrowser() { @@ -88,6 +92,14 @@ public void assertStatusBarMessage(String expectedMessage) { browser.assertElementExistsByTypeAndText(HtmlElementType.SPAN, expectedMessage); } + public SecurityPerspective openSecurityPerspective() { + openHomePage(); + + browser.clickOnElementById("perspective-security"); + + return securityPerspectiveFactory.create(browser); + } + public DatabasePerspective openDatabasePerspective() { openHomePage(); diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/IDEFactory.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/IDEFactory.java index 1976f4f9203..e070311bde0 100644 --- a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/IDEFactory.java +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/IDEFactory.java @@ -25,14 +25,17 @@ public class IDEFactory { private final WorkbenchFactory workbenchFactory; private final DatabasePerspectiveFactory databasePerspectiveFactory; private final GitPerspectiveFactory gitPerspectiveFactory; + private final SecurityPerspectiveFactory securityPerspectiveFactory; protected IDEFactory(BrowserFactory browserFactory, RestAssuredExecutor restAssuredExecutor, WorkbenchFactory workbenchFactory, - DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory) { + DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory, + SecurityPerspectiveFactory securityPerspectiveFactory) { this.browserFactory = browserFactory; this.restAssuredExecutor = restAssuredExecutor; this.workbenchFactory = workbenchFactory; this.databasePerspectiveFactory = databasePerspectiveFactory; this.gitPerspectiveFactory = gitPerspectiveFactory; + this.securityPerspectiveFactory = securityPerspectiveFactory; } public IDE create() { @@ -46,11 +49,11 @@ public IDE create(String username, String password) { public IDE create(Browser browser, String username, String password) { return new IDE(browser, username, password, restAssuredExecutor, workbenchFactory, databasePerspectiveFactory, - gitPerspectiveFactory); + gitPerspectiveFactory, securityPerspectiveFactory); } public IDE create(String host, String username, String password) { return new IDE(browserFactory.createByHost(host), username, password, restAssuredExecutor, workbenchFactory, - databasePerspectiveFactory, gitPerspectiveFactory); + databasePerspectiveFactory, gitPerspectiveFactory, securityPerspectiveFactory); } } diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspective.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspective.java new file mode 100644 index 00000000000..6c58ed6dd46 --- /dev/null +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspective.java @@ -0,0 +1,22 @@ +package org.eclipse.dirigible.tests.framework.ide; + +import org.eclipse.dirigible.tests.framework.browser.Browser; +import org.eclipse.dirigible.tests.framework.browser.HtmlElementType; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +@Lazy +@Component +public class SecurityPerspective { + private final Browser browser; + + protected SecurityPerspective(Browser browser) { + this.browser = browser; + } + + public void assertRoleIsPresent(String roleName, String roleDescription) { + browser.clickOnElementWithText(HtmlElementType.SPAN, "Roles"); + browser.assertElementExistsByTypeAndText(HtmlElementType.TD, roleName); + browser.assertElementExistsByTypeAndText(HtmlElementType.TD, roleName); + } +} diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspectiveFactory.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspectiveFactory.java new file mode 100644 index 00000000000..b61d56930fc --- /dev/null +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspectiveFactory.java @@ -0,0 +1,24 @@ +package org.eclipse.dirigible.tests.framework.ide; + +import org.eclipse.dirigible.tests.framework.browser.Browser; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + + +@Lazy +@Component +public class SecurityPerspectiveFactory { + private final Browser browser; + + protected SecurityPerspectiveFactory(Browser browser) { + this.browser = browser; + } + + public SecurityPerspective create() { + return create(browser); + } + + public SecurityPerspective create(Browser browser) { + return new SecurityPerspective(browser); + } +} diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/Workbench.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/Workbench.java index a23f8527a9f..408c1c3c1ad 100644 --- a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/Workbench.java +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/Workbench.java @@ -18,8 +18,9 @@ public class Workbench { public static final String PROJECTS_VIEW_ID = "pvtree"; public static final String PROJECT_NAME_INPUT_ID = "pgfi1"; + public static final String FILE_NAME_INPUT_ID = "fdti1"; private static final String PROJECTS_CONTEXT_MENU_NEW_PROJECT = "New Project"; - private static final String CREATE_PROJECT_BUTTON_TEXT = "Create"; + private static final String CREATE_BUTTON_TEXT = "Create"; private final Browser browser; private final WelcomeViewFactory welcomeViewFactory; @@ -66,7 +67,7 @@ public void createNewProject(String projectName) { browser.enterTextInElementById(PROJECT_NAME_INPUT_ID, projectName); - browser.clickOnElementWithText(HtmlElementType.BUTTON, CREATE_PROJECT_BUTTON_TEXT); + browser.clickOnElementWithText(HtmlElementType.BUTTON, CREATE_BUTTON_TEXT); } public void createFileInProject(String projectName, String newFileType) { @@ -95,4 +96,24 @@ public Terminal openTerminal() { return terminalFactory.create(browser); } + public void createCustomElement(String fileName, String elementType) { + browser.clickOnElementByAttributePatternAndText(HtmlElementType.SPAN, HtmlAttribute.CLASS, "fd-menu__title", elementType); + + browser.enterTextInElementById(FILE_NAME_INPUT_ID, fileName); + browser.clickOnElementWithText(HtmlElementType.BUTTON, CREATE_BUTTON_TEXT); + } + + public void createCustomElementInProject(String projectName, String fileName, String elementType) { + browser.rightClickOnElementContainingText(HtmlElementType.ANCHOR, projectName); + createCustomElement(fileName, elementType); + } + + public void openDialogFromButton(String buttonText) { + browser.clickOnElementByAttributePattern(HtmlElementType.BUTTON, HtmlAttribute.LABEL, buttonText); + } + + public void saveAll() { + browser.clickOnElementByAttributeValue(HtmlElementType.BUTTON, HtmlAttribute.GLYPH, "sap-icon--save"); + } + } diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java new file mode 100644 index 00000000000..2204ba807bc --- /dev/null +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java @@ -0,0 +1,48 @@ +package org.eclipse.dirigible.integration.tests.ui.tests; + +import org.eclipse.dirigible.tests.base.UserInterfaceIntegrationTest; +import org.eclipse.dirigible.tests.framework.ide.SecurityPerspective; +import org.eclipse.dirigible.tests.framework.ide.Workbench; +import org.eclipse.dirigible.tests.framework.browser.HtmlAttribute; +import org.eclipse.dirigible.tests.framework.browser.HtmlElementType; +import org.junit.jupiter.api.Test; + +public class CreateRolesDefinitionIT extends UserInterfaceIntegrationTest { + + private static final String PROJECT_NAME = "CreateRolesDefinitionIT"; + private static final String FILE_NAME = "test1.roles"; + private static final String ROLE_NAME = "test1"; + private static final String ROLE_DESCRIPTION = "Test role"; + + @Test + void test() { + Workbench workbench = ide.openWorkbench(); + workbench.createNewProject(this.getClass() + .getSimpleName()); + + workbench.createCustomElementInProject(PROJECT_NAME, FILE_NAME, "Roles Definitions"); + workbench.openFile(FILE_NAME); + + assertFileTabIsOpen(FILE_NAME); + + workbench.openDialogFromButton("Add"); + + browser.clickOnElementById("reriName"); + browser.type(ROLE_NAME); + + browser.clickOnElementById("reriRoles"); + browser.type(ROLE_DESCRIPTION); + + browser.clickOnElementByAttributePattern(HtmlElementType.BUTTON, HtmlAttribute.LABEL, "Add"); + workbench.saveAll(); + + workbench.publishAll(true); + + SecurityPerspective securityPerspective = ide.openSecurityPerspective(); + securityPerspective.assertRoleIsPresent(ROLE_NAME, ROLE_DESCRIPTION); + } + + private void assertFileTabIsOpen(String fileName) { + browser.assertElementExistByAttributePatternAndText(HtmlElementType.SPAN, HtmlAttribute.CLASS, "fd-icon-tab-bar__tag", fileName); + } +} From dfc85332d6121c6cb929ac22a607ab43bacf8c1c Mon Sep 17 00:00:00 2001 From: Nikol Georgieva Date: Wed, 4 Jun 2025 19:07:38 +0300 Subject: [PATCH 2/4] fix bug in method --- .../dirigible/tests/framework/ide/SecurityPerspective.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspective.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspective.java index 6c58ed6dd46..4ddf6193b47 100644 --- a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspective.java +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/SecurityPerspective.java @@ -17,6 +17,6 @@ protected SecurityPerspective(Browser browser) { public void assertRoleIsPresent(String roleName, String roleDescription) { browser.clickOnElementWithText(HtmlElementType.SPAN, "Roles"); browser.assertElementExistsByTypeAndText(HtmlElementType.TD, roleName); - browser.assertElementExistsByTypeAndText(HtmlElementType.TD, roleName); + browser.assertElementExistsByTypeAndText(HtmlElementType.TD, roleDescription); } } From 47c5c2cf5e19240445bdab8ecd1b8f46fde2103d Mon Sep 17 00:00:00 2001 From: Nikol Georgieva Date: Wed, 4 Jun 2025 21:22:50 +0300 Subject: [PATCH 3/4] change role name --- .../integration/tests/ui/tests/CreateRolesDefinitionIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java index 2204ba807bc..cdc3dee0be0 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java @@ -11,7 +11,7 @@ public class CreateRolesDefinitionIT extends UserInterfaceIntegrationTest { private static final String PROJECT_NAME = "CreateRolesDefinitionIT"; private static final String FILE_NAME = "test1.roles"; - private static final String ROLE_NAME = "test1"; + private static final String ROLE_NAME = "test"; private static final String ROLE_DESCRIPTION = "Test role"; @Test From be45f8068182144c635d5eb22750e3e39d549793 Mon Sep 17 00:00:00 2001 From: Nikol Georgieva Date: Fri, 6 Jun 2025 14:33:01 +0300 Subject: [PATCH 4/4] refactor test --- .../dirigible/tests/framework/ide/Workbench.java | 16 ++++++++++++++++ .../tests/ui/tests/CreateRolesDefinitionIT.java | 7 ++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/Workbench.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/Workbench.java index 408c1c3c1ad..219cf86d9f6 100644 --- a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/Workbench.java +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/Workbench.java @@ -9,10 +9,12 @@ */ package org.eclipse.dirigible.tests.framework.ide; +import org.apache.commons.lang3.SystemUtils; import org.eclipse.dirigible.tests.framework.browser.Browser; import org.eclipse.dirigible.tests.framework.browser.HtmlAttribute; import org.eclipse.dirigible.tests.framework.browser.HtmlElementType; import org.eclipse.dirigible.tests.framework.util.SynchronizationUtil; +import org.openqa.selenium.Keys; public class Workbench { @@ -116,4 +118,18 @@ public void saveAll() { browser.clickOnElementByAttributeValue(HtmlElementType.BUTTON, HtmlAttribute.GLYPH, "sap-icon--save"); } + public void selectAll() { + if (SystemUtils.IS_OS_MAC) + browser.pressMultipleKeys(Keys.COMMAND, "a"); + else + browser.pressMultipleKeys(Keys.CONTROL, "a"); + } + + + public void addContentToField(String fieldId, String fieldContent) { + browser.clickOnElementById(fieldId); + selectAll(); + browser.type(fieldContent); + } + } diff --git a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java index cdc3dee0be0..c324c7a276b 100644 --- a/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateRolesDefinitionIT.java @@ -27,11 +27,8 @@ void test() { workbench.openDialogFromButton("Add"); - browser.clickOnElementById("reriName"); - browser.type(ROLE_NAME); - - browser.clickOnElementById("reriRoles"); - browser.type(ROLE_DESCRIPTION); + workbench.addContentToField("reriName", ROLE_NAME); + workbench.addContentToField("reriRoles", ROLE_DESCRIPTION); browser.clickOnElementByAttributePattern(HtmlElementType.BUTTON, HtmlAttribute.LABEL, "Add"); workbench.saveAll();