diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/Browser.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/Browser.java index 67fbe8920b..6ebe6b42a0 100644 --- a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/Browser.java +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/Browser.java @@ -80,6 +80,8 @@ public interface Browser { void doubleClickOnElementContainingText(String htmlElementType, String text); + void doubleClickOnElementById(String id); + void rightClickOnElementById(String id); void rightClickOnElementContainingText(HtmlElementType htmlElementType, String text); diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/impl/BrowserImpl.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/impl/BrowserImpl.java index bb73ccd726..119d62d5f1 100644 --- a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/impl/BrowserImpl.java +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/browser/impl/BrowserImpl.java @@ -279,6 +279,12 @@ public By constructCssSelectorByTypeAndAttribute(String elementType, String attr return Selectors.byCssSelector(cssSelector); } + @Override + public void doubleClickOnElementById(String id) { + By by = Selectors.byId(id); + handleElementInAllFrames(by, this::doubleClickElement, Condition.visible, Condition.enabled); + } + @Override public void close() { Selenide.closeWebDriver(); @@ -480,6 +486,11 @@ private void clickElement(SelenideElement element) { .click(); } + private void doubleClickElement(SelenideElement element) { + element.scrollIntoView(true) + .doubleClick(); + } + @Override public void assertElementExistByAttributePatternAndText(HtmlElementType elementType, HtmlAttribute attribute, String pattern, String text) { 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 8e4c9cb1bd..61e24a08b3 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 OperationsPerspectiveFactory operationsPerspectiveFactory; @Autowired IDE(Browser browser, RestAssuredExecutor restAssuredExecutor, WorkbenchFactory workbenchFactory, - DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory) { + DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory, + OperationsPerspectiveFactory operationsPerspectiveFactory) { this(browser, DirigibleTestTenant.createDefaultTenant() .getUsername(), DirigibleTestTenant.createDefaultTenant() .getPassword(), - restAssuredExecutor, workbenchFactory, databasePerspectiveFactory, gitPerspectiveFactory); + restAssuredExecutor, workbenchFactory, databasePerspectiveFactory, gitPerspectiveFactory, operationsPerspectiveFactory); } IDE(Browser browser, String username, String password, RestAssuredExecutor restAssuredExecutor, WorkbenchFactory workbenchFactory, - DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory) { + DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory, + OperationsPerspectiveFactory operationsPerspectiveFactory) { 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.operationsPerspectiveFactory = operationsPerspectiveFactory; } public Browser getBrowser() { @@ -96,6 +100,14 @@ public DatabasePerspective openDatabasePerspective() { return databasePerspectiveFactory.create(browser); } + public OperationsPerspective openOperationsPerspective() { + openHomePage(); + + browser.clickOnElementById("perspective-operations"); + + return operationsPerspectiveFactory.create(browser); + } + public void openHomePage() { browser.openPath(ROOT_PATH); login(false); 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 1976f4f920..1bd6ea4a59 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 OperationsPerspectiveFactory operationsPerspectiveFactory; protected IDEFactory(BrowserFactory browserFactory, RestAssuredExecutor restAssuredExecutor, WorkbenchFactory workbenchFactory, - DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory) { + DatabasePerspectiveFactory databasePerspectiveFactory, GitPerspectiveFactory gitPerspectiveFactory, + OperationsPerspectiveFactory operationsPerspectiveFactory) { this.browserFactory = browserFactory; this.restAssuredExecutor = restAssuredExecutor; this.workbenchFactory = workbenchFactory; this.databasePerspectiveFactory = databasePerspectiveFactory; this.gitPerspectiveFactory = gitPerspectiveFactory; + this.operationsPerspectiveFactory = operationsPerspectiveFactory; } 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, operationsPerspectiveFactory); } public IDE create(String host, String username, String password) { return new IDE(browserFactory.createByHost(host), username, password, restAssuredExecutor, workbenchFactory, - databasePerspectiveFactory, gitPerspectiveFactory); + databasePerspectiveFactory, gitPerspectiveFactory, operationsPerspectiveFactory); } } diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/OperationsPerspective.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/OperationsPerspective.java new file mode 100644 index 0000000000..59c2fd9077 --- /dev/null +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/OperationsPerspective.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 OperationsPerspective { + private final Browser browser; + + protected OperationsPerspective(Browser browser) { + this.browser = browser; + } + + public void assertExtensionPointIsPresent(String extensionPointFileName, String extensionFileName) { + browser.doubleClickOnElementContainingText(HtmlElementType.ANCHOR, "CreateExtensionPointIT"); + browser.assertElementExistsByTypeAndText(HtmlElementType.ANCHOR, extensionPointFileName); + browser.assertElementExistsByTypeAndText(HtmlElementType.ANCHOR, extensionFileName); + } +} diff --git a/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/OperationsPerspectiveFactory.java b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/OperationsPerspectiveFactory.java new file mode 100644 index 0000000000..994a7064ee --- /dev/null +++ b/tests/tests-framework/src/main/java/org/eclipse/dirigible/tests/framework/ide/OperationsPerspectiveFactory.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 OperationsPerspectiveFactory { + private final Browser browser; + + protected OperationsPerspectiveFactory(Browser browser) { + this.browser = browser; + } + + public OperationsPerspective create() { + return create(browser); + } + + public OperationsPerspective create(Browser browser) { + return new OperationsPerspective(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 a23f8527a9..3d8b37d29c 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,17 +9,20 @@ */ 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 { public static final String PROJECTS_VIEW_ID = "pvtree"; public static final String PROJECT_NAME_INPUT_ID = "pgfi1"; + private 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 +69,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 +98,31 @@ 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 selectAll() { + if (SystemUtils.IS_OS_MAC) + browser.pressMultipleKeys(Keys.COMMAND, "a"); + else + browser.pressMultipleKeys(Keys.CONTROL, "a"); + } + + public void saveAll() { + browser.clickOnElementByAttributeValue(HtmlElementType.BUTTON, HtmlAttribute.GLYPH, "sap-icon--save"); + } + + 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/CreateExtensionPointIT.java b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateExtensionPointIT.java new file mode 100644 index 0000000000..d0d3777fa0 --- /dev/null +++ b/tests/tests-integrations/src/main/java/org/eclipse/dirigible/integration/tests/ui/tests/CreateExtensionPointIT.java @@ -0,0 +1,68 @@ +package org.eclipse.dirigible.integration.tests.ui.tests; + +import org.eclipse.dirigible.tests.base.UserInterfaceIntegrationTest; +import org.eclipse.dirigible.tests.framework.browser.HtmlAttribute; +import org.eclipse.dirigible.tests.framework.browser.HtmlElementType; +import org.eclipse.dirigible.tests.framework.ide.OperationsPerspective; +import org.eclipse.dirigible.tests.framework.ide.Workbench; +import org.junit.jupiter.api.Test; + +public class CreateExtensionPointIT extends UserInterfaceIntegrationTest { + + private static final String PROJECT_NAME = "CreateExtensionPointIT"; + private static final String EXTENSION_POINT_FILE_NAME = "test1.extensionpoint"; + private static final String JS_FILE_NAME = "test1.mjs"; + private static final String EXTENSION_FILE_NAME = "test1.extension"; + private static final String EXTENSION_POINT_NAME = "test1"; + + @Test + void test() { + Workbench workbench = ide.openWorkbench(); + workbench.createNewProject(this.getClass() + .getSimpleName()); + + workbench.createCustomElementInProject(PROJECT_NAME, EXTENSION_POINT_FILE_NAME, "Extension Point"); + workbench.openFile(EXTENSION_POINT_FILE_NAME); + assertFileTabIsOpen(EXTENSION_POINT_FILE_NAME); + + addExtensionPointName(workbench); + + workbench.saveAll(); + workbench.publishAll(true); + + workbench.createCustomElementInProject(PROJECT_NAME, JS_FILE_NAME, "JavaScript Service"); + workbench.openFile(JS_FILE_NAME); + assertFileTabIsOpen(JS_FILE_NAME); + workbench.publishAll(true); + + workbench.createCustomElementInProject(PROJECT_NAME, EXTENSION_FILE_NAME, "Extension"); + browser.doubleClickOnElementById("j1_6_anchor"); + assertFileTabIsOpen(EXTENSION_FILE_NAME); + + configureExtensionFields(workbench); + + workbench.saveAll(); + workbench.publishAll(true); + + OperationsPerspective operationsPerspective = ide.openOperationsPerspective(); + operationsPerspective.assertExtensionPointIsPresent(EXTENSION_POINT_FILE_NAME, EXTENSION_FILE_NAME); + } + + private void configureExtensionFields(Workbench workbench) { + browser.clickOnElementByAttributePattern(HtmlElementType.BUTTON, HtmlAttribute.GLYPH, "sap-icon--navigation-down-arrow"); + browser.clickOnElementWithText(HtmlElementType.SPAN, EXTENSION_POINT_NAME); + + workbench.addContentToField("idModule", "/CreateExtensionPointIT/test1.mjs"); + + } + + private void addExtensionPointName(Workbench workbench) { + browser.clickOnElementByAttributePattern(HtmlElementType.INPUT, HtmlAttribute.ID, "idName"); + workbench.selectAll(); + browser.type(EXTENSION_POINT_NAME); + } + + private void assertFileTabIsOpen(String fileName) { + browser.assertElementExistByAttributePatternAndText(HtmlElementType.SPAN, HtmlAttribute.CLASS, "fd-icon-tab-bar__tag", fileName); + } +}