diff --git a/domiSMP-ui-tests/pom.xml b/domiSMP-ui-tests/pom.xml index 7e72072c7d093fba031917a4344224a7f9c15f06..250a248d34094f35680d5ebb67245a973f018b17 100644 --- a/domiSMP-ui-tests/pom.xml +++ b/domiSMP-ui-tests/pom.xml @@ -9,10 +9,9 @@ <version>1.0-SNAPSHOT</version> <properties> - <slf4j_version>2.0.0-alpha0</slf4j_version> <commons-csv_version>1.5</commons-csv_version> - <selenium-chrome-driver_version>4.8.3</selenium-chrome-driver_version> - <selenium-java_version>4.8.3</selenium-java_version> + <selenium-chrome-driver_version>4.10.0</selenium-chrome-driver_version> + <selenium-java_version>4.10.0</selenium-java_version> <poi-ooxml_version>5.2.3</poi-ooxml_version> <reflections_version>0.10.2</reflections_version> <jersey-client_version>1.19.4</jersey-client_version> @@ -20,6 +19,10 @@ <json_version>20230227</json_version> <jackson_version>2.15.0-rc3</jackson_version> <javax.ws.rs-api_version>2.1.1</javax.ws.rs-api_version> + <javax.ws.rs-api_version>2.1.1</javax.ws.rs-api_version> + <xmlunit_version>1.6</xmlunit_version> + <maven-surefire-plugin_version>3.0.0-M7</maven-surefire-plugin_version> + </properties> <build> @@ -221,19 +224,13 @@ <dependency> <groupId>xmlunit</groupId> <artifactId>xmlunit</artifactId> - <version>1.6</version> + <version>${xmlunit_version}</version> </dependency> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> - <version>3.0.0-M7</version> - </dependency> - <dependency> - <groupId>org.jetbrains</groupId> - <artifactId>annotations</artifactId> - <version>RELEASE</version> - <scope>compile</scope> + <version>${maven-surefire-plugin_version}</version> </dependency> </dependencies> diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java b/domiSMP-ui-tests/src/main/java/ddsl/DomiSMPPage.java similarity index 55% rename from domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java rename to domiSMP-ui-tests/src/main/java/ddsl/DomiSMPPage.java index 62c88f5864af2a582fc529ba846b082c3442b790..8189d08ed5a19b15540dcea63ffdadfd30aff3a7 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DomiSMPPage.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/DomiSMPPage.java @@ -1,12 +1,19 @@ -package ddsl.dcomponents; +package ddsl; +import ddsl.dcomponents.AlertComponent; +import ddsl.dcomponents.BreadcrumpComponent; +import ddsl.dcomponents.DComponent; +import ddsl.dcomponents.SideNavigationComponent; import ddsl.dobjects.DButton; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import pages.LoginPage; public class DomiSMPPage extends DComponent { @@ -14,9 +21,9 @@ public class DomiSMPPage extends DComponent { /** * Page object for the common components from Domismp like navigation, right menu. This contains the locators of the page and the methods for the behaviour of the page */ - - @FindBy(css = "page-header > h1") - protected WebElement pageTitle; + private final static Logger LOG = LoggerFactory.getLogger(DomiSMPPage.class); + @FindBy(css = "cdk-overlay-backdrop cdk-overlay-dark-backdrop cdk-overlay-backdrop-showing") + protected WebElement overlay; @FindBy(id = "login_id") private WebElement loginBtnTop; @FindBy(id = "settingsmenu_id") @@ -48,14 +55,15 @@ public class DomiSMPPage extends DComponent { return new LoginPage(driver); } - public LoginPage logout() { + public void logout() { rightMenuBtn.click(); logoutMenuBtn.click(); - return new LoginPage(driver); + } public void refreshPage() { driver.navigate().refresh(); + waitForPageToLoaded(); } public AlertComponent getAlertArea() { @@ -65,4 +73,34 @@ public class DomiSMPPage extends DComponent { public DButton getExpiredDialoginbutton() { return weToDButton(dialogOKbutton); } + + public boolean isExpiredDialoginbuttonEnabled() { + return dialogOKbutton.isEnabled(); + } + + public boolean isExpiredPopupEnabled() { + try { + return dialogOKbutton.isDisplayed(); + } catch (Exception e) { + LOG.info("Expiration poup not found", e); + return false; + } + + } + + public void closeExpirationPopupIfEnabled() { + try { + if (isExpiredPopupEnabled()) { + LOG.info("Expired password dialog is present."); + getSidebar().getExpiredDialoginbutton().click(); + } + } catch (Exception e) { + LOG.error("Could not close Expiration popup", e); + } + } + + public void waitForPageToLoaded() { + wait.defaultWait.until(ExpectedConditions.visibilityOf(getBreadcrump().BreadcrumpItems.get(0))); + } + } diff --git a/domiSMP-ui-tests/src/main/java/ddsl/PageWithGrid.java b/domiSMP-ui-tests/src/main/java/ddsl/PageWithGrid.java new file mode 100644 index 0000000000000000000000000000000000000000..b8de9affe439a510ced37c9c42446ecc93441231 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/PageWithGrid.java @@ -0,0 +1,49 @@ +package ddsl; + +import ddsl.dcomponents.Grid.GridPagination; +import ddsl.dcomponents.Grid.SmallGrid; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; + +public class PageWithGrid extends DomiSMPPage { + + /** + * Generic page used for pages which have small grid in the right of the page. This element gives access to action buttons and elements of the page. + */ + + @FindBy(css = "mat-form-field input") + public WebElement FilterInput; + @FindBy(css = "data-panel >div >div> mat-toolbar button:first-of-type") + public WebElement AddBtn; + + @FindBy(css = "data-panel >div >div> mat-toolbar button:last-of-type") + public WebElement DeleteBtn; + @FindBy(css = "data-panel > div [class=\"smp-column-data\"]") + public WebElement SidePanel; + + public PageWithGrid(WebDriver driver) { + super(driver); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this); + } + + public GridPagination getPagination() { + return new GridPagination(driver); + } + + public SmallGrid getGrid() { + return new SmallGrid(driver); + } + + public void filter(String filterValue) { + try { + weToDInput(FilterInput).fill(filterValue); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java index e9fbd067029b145fdf4f4042ca6e5ca3e6e1d84b..312d30442bd118128e1c10c0871259847e34c30a 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/AlertComponent.java @@ -1,48 +1,39 @@ package ddsl.dcomponents; -import ddsl.dobjects.DObject; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class AlertComponent extends DComponent { + + /** + * This component is used to retrive the alerts which appear in application + */ private final static Logger LOG = LoggerFactory.getLogger(AlertComponent.class); @FindBy(id = "alertmessage_id") public WebElement alertToaster; - @FindBy(css = "#alertmessage_id > span.closebtn") - public WebElement closeButton; public AlertComponent(WebDriver driver) { super(driver); - } - - public void closeAlert() throws Exception { - weToDButton(closeButton).click(); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this); } public String getAlertMessage() { try { wait.forElementToBeVisible(alertToaster, true); + String alertMesageText = alertToaster.getText().replace("×", "").replaceAll("\n", ""); + LOG.debug("Displayed message : {}.", alertToaster.getText()); - LOG.error(closeButton.getText()); + return alertMesageText; } catch (Exception e) { - } - DObject alertObject = new DObject(driver, alertToaster); - - if (!alertObject.isPresent()) { LOG.debug("No messages displayed."); return null; } - - String messageTxt = alertToaster.getText().replace(closeButton.getText(), "").replaceAll("\n", "").trim(); - - LOG.debug("messageTxt = " + messageTxt); - - LOG.debug("Getting alert message ..."); - return messageTxt.trim(); } } diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/BreadcrumpComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/BreadcrumpComponent.java index 117b03067762f40d709fd6a951fb76387c28ea95..815d302e1e036c5215785fd10046628b7b3b30d9 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/BreadcrumpComponent.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/BreadcrumpComponent.java @@ -1,6 +1,7 @@ package ddsl.dcomponents; +import ddsl.DomiSMPPage; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; @@ -8,6 +9,9 @@ import org.openqa.selenium.support.FindBy; import java.util.List; public class BreadcrumpComponent extends DomiSMPPage { + /** + * Component for the Breadcrump of DomiSMP + */ @FindBy(xpath = "//smp-breadcrumb/div/smp-breadcrumb-item/a/div[3]/span") public List<WebElement> BreadcrumpItems; diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/ConfirmationDialog.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/ConfirmationDialog.java index 7104941694dfc4e8b597b79ec0bf46b921e824dd..96f00df89bb5b8283942b29ebaa2ab56197e9299 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/ConfirmationDialog.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/ConfirmationDialog.java @@ -9,6 +9,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ConfirmationDialog extends DComponent { + /** + * Page component for conformation popups/dialogs for different actions + */ private final static Logger LOG = LoggerFactory.getLogger(ConfirmationDialog.class); @FindBy(id = "yesbuttondialog_id") diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java index 5b1e6203dccf2c080b30705e353a410c7c4fae38..ff8d285f889f371e6009a34be5541618e8c1d8b5 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/DComponent.java @@ -6,13 +6,14 @@ import ddsl.dobjects.DSelect; import ddsl.dobjects.DWait; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import utils.TestRunData; public class DComponent { - private final static Logger LOG = LoggerFactory.getLogger(DComponent.class); + /** + * Generic component which which gives access of driver, wait and wrappers of elements. This should be inhered by each component class. + */ + public DWait wait; protected WebDriver driver; protected TestRunData data = new TestRunData(); @@ -33,4 +34,5 @@ public class DComponent { protected DSelect weToDSelect(WebElement element) { return new DSelect(driver, element); } + } diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/BasicGrid.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/BasicGrid.java index 9bde25e34d2c0a7b86fa15191393aa61539358f4..82c8240ab0335875afa3d93dcbdc04e2d4fa4b79 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/BasicGrid.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/BasicGrid.java @@ -47,9 +47,9 @@ public class BasicGrid extends DComponent { wait.forXMillis(500); } - public void doubleClickRow(String propertyName) { + public void doubleClickRow(String fieldName) { gridRows.forEach(row -> { - if (row.getText().startsWith(propertyName)) { + if (row.getText().startsWith(fieldName)) { Actions action = new Actions(driver); action.doubleClick(row).perform(); } @@ -59,24 +59,16 @@ public class BasicGrid extends DComponent { wait.forXMillis(500); } - public void doubleClickRow(int rowNumber) { + public String getValue(String fieldName) { + String fieldValue = null; + for (WebElement row : gridRows) { + if (row.getText().startsWith(fieldName)) { + fieldValue = row.getText().replace(fieldName, "").trim(); - LOG.info("double clicking row ... " + rowNumber); - wait.forXMillis(500); - if (rowNumber >= gridRows.size()) { - return; + } } - Actions action = new Actions(driver); - action.doubleClick(gridRows.get(rowNumber)).perform(); - } - - public int getColumnsNo() { - LOG.info("getting number of columns"); - return gridHeaders.size(); - } + return fieldValue; - public int getRowsNo() { - return gridRows.size(); } public void scrollRow(int index) { diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/GridPagination.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/GridPagination.java new file mode 100644 index 0000000000000000000000000000000000000000..a45faaf69b4491bffa0ace67d811f2ea1f19c115 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/GridPagination.java @@ -0,0 +1,73 @@ +package ddsl.dcomponents.Grid; + +import ddsl.dcomponents.DComponent; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class GridPagination extends DComponent { + private final static Logger LOG = LoggerFactory.getLogger(GridPagination.class); + + @FindBy(css = "#extension-paginator > div > div > div > div") + public WebElement currentElementsLbl; + + @FindBy(css = "#extension-paginator > div > div > div [aria-label = \"First page\"]") + public WebElement firstPageBtn; + @FindBy(css = "#extension-paginator > div > div > div [aria-label = \"Next page\"]") + public WebElement previousPageBtn; + + @FindBy(css = "#extension-paginator > div > div > div [aria-label = \"Next page\"]") + public WebElement nextPageBtn; + + @FindBy(css = "#extension-paginator > div > div > div [aria-label = \"Last page\"]") + public WebElement lastPageBtn; + + + public GridPagination(WebDriver driver) { + super(driver); + PageFactory.initElements(driver, this); + } + + public Integer getTotalPageNumber() { + String val = currentElementsLbl.getText(); + Pattern pattern = Pattern.compile("of (\\d+)"); + Matcher matcher = pattern.matcher(val); + if (matcher.find()) { + Integer totalRecord = Integer.parseInt(matcher.group(1)); + return (totalRecord % 5 == 0) ? (totalRecord / 5) : ((totalRecord / 5) + 1); + } + return null; + } + + + public void goToNextPage() { + try { + if (weToDButton(nextPageBtn).isPresent()) { + weToDButton(nextPageBtn).click(); + LOG.error("Click on Grid Next Page button"); + + } else { + LOG.error("Next page button is not available."); + } + } catch (Exception e) { + LOG.error("Next page button is not available."); + throw new RuntimeException(e); + } + } + + + public void goToPreviousPage() throws Exception { + if (weToDButton(previousPageBtn).isEnabled()) { + weToDButton(previousPageBtn).click(); + + } else { + LOG.error("Previous page button is not available."); + } + } +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/SmallGrid.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/SmallGrid.java new file mode 100644 index 0000000000000000000000000000000000000000..5d62cd0c2b86b1a94916e08fe4c896a5eb254707 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/SmallGrid.java @@ -0,0 +1,78 @@ +package ddsl.dcomponents.Grid; + +import ddsl.dcomponents.DComponent; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +public class SmallGrid extends DComponent { + private final static Logger LOG = LoggerFactory.getLogger(SmallGrid.class); + + @FindBy(css = "data-panel table thead th") + protected List<WebElement> gridHeaders; + @FindBy(css = "data-panel table tbody tr") + protected List<WebElement> gridRows; + + public SmallGrid(WebDriver driver) { + super(driver); + PageFactory.initElements(driver, this); + + } + + public GridPagination getGridPagination() { + return new GridPagination(driver); + } + + public List<WebElement> gerGridHeaders() { + return wait.defaultWait.until(ExpectedConditions.visibilityOfAllElements(gridHeaders)); + } + + public List<WebElement> getRows() { + wait.forXMillis(50); + return wait.defaultWait.until(ExpectedConditions.visibilityOfAllElements(gridRows)); + } + + public List<WebElement> getCells(WebElement row) { + return row.findElements(By.cssSelector("td")); + } + + public WebElement searchValueInColumn(String columnName, String value) { + + Integer numOfPages = getGridPagination().getTotalPageNumber(); + List<WebElement> rowHeaders = gerGridHeaders(); + int columnIndex = -1; + for (int i = 0; i < rowHeaders.size(); i++) { + if (rowHeaders.get(i).getText().equals(columnName)) { + columnIndex = i; + break; + } + } + if (columnIndex == -1) { + return null; + } + for (int pageNr = 1; pageNr < numOfPages + 1; pageNr++) { + + List<WebElement> rows = getRows(); + for (WebElement row : rows) { + List<WebElement> cells = getCells(row); + if (cells.get(columnIndex).getText().equals(value)) { + LOG.debug("[{}] found on page [{}]", value, pageNr); + return row; + } + } + getGridPagination().goToNextPage(); + + } + return null; + } + + +} + diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SetChangePasswordDialog.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SetChangePasswordDialog.java index aa53f075aac593edc1f1a7e4b1dcf30c3f935598..a370088082e404d702ae91fde8d4e050a31081c4 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SetChangePasswordDialog.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SetChangePasswordDialog.java @@ -7,24 +7,28 @@ import org.openqa.selenium.support.PageFactory; import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import pages.ProfilePage.SuccesfullPasswordChangedPopup; import java.util.ArrayList; import java.util.List; public class SetChangePasswordDialog extends DComponent { + /** + * Component object for dialog of changing password. + */ + private final static Logger LOG = LoggerFactory.getLogger(SetChangePasswordDialog.class); @FindBy(css = ".smp-field-error") List<WebElement> fieldsError; @FindBy(id = "cp_id") private WebElement currentPasswordInput; - @SuppressWarnings("SpellCheckingInspection") @FindBy(id = "np_id") private WebElement newPasswordInput; @FindBy(id = "cnp_id") private WebElement confirmationPasswordInput; - @FindBy(id = "cnp_id") + @FindBy(id = "changeCurrentUserPasswordButton") private WebElement setPasswordBtn; - @FindBy(id = "cnp_id") + @FindBy(id = "closeDialogButton") private WebElement closeBtn; @@ -33,27 +37,22 @@ public class SetChangePasswordDialog extends DComponent { PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this); } - public boolean trySetPassword(String currentPassword, String newPassword) throws Exception { + public List<WebElement> setNewPassword(String currentPassword, String newPassword) throws Exception { LOG.info("Set new password"); weToDInput(currentPasswordInput).fill(currentPassword); weToDInput(newPasswordInput).fill(newPassword); weToDInput(confirmationPasswordInput).fill(newPassword); - Integer hasError; - if (weToDButton(setPasswordBtn).isEnabled() && fieldsError.size() < 1) { - weToDButton(setPasswordBtn).click(); - return true; - } - { - getFieldErrorMessage().forEach(LOG::error); - return false; - } + weToDButton(setPasswordBtn).click(); + SuccesfullPasswordChangedPopup popup = new SuccesfullPasswordChangedPopup(driver); + popup.closePopup(); + return fieldsError; } public List<String> getFieldErrorMessage() { ArrayList<String> fieldErrors = new ArrayList<>(); - if (fieldsError.size() > 0) { + if (!fieldsError.isEmpty()) { fieldsError.forEach(error -> { fieldErrors.add(error.getText()); }); diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigationComponent.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigationComponent.java index 4fde72f9f468785813c8023707cb688e4f6f4df3..fa01a60d1ae948ef13eafa75d356bca91faed111 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigationComponent.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/SideNavigationComponent.java @@ -1,5 +1,6 @@ package ddsl.dcomponents; +import ddsl.DomiSMPPage; import ddsl.enums.Pages; import org.openqa.selenium.ElementNotInteractableException; import org.openqa.selenium.NoSuchElementException; @@ -8,14 +9,21 @@ import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; +import org.openqa.selenium.support.ui.ExpectedConditions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import pages.ProfilePage; +import pages.DomainsPage.DomainsPage; +import pages.ProfilePage.ProfilePage; import pages.PropertiesPage.PropertiesPage; +import pages.UsersPage; import java.util.Objects; public class SideNavigationComponent extends DomiSMPPage { + + /** + * Navigation object to navigate through application. + */ private final static Logger LOG = LoggerFactory.getLogger(SideNavigationComponent.class); @FindBy(id = "window-sidenav-panel") @@ -85,6 +93,7 @@ public class SideNavigationComponent extends DomiSMPPage { public SideNavigationComponent(WebDriver driver) { super(driver); PageFactory.initElements(new AjaxElementLocatorFactory(driver, 1), this); + wait.forElementToBeGone(overlay); } private MenuNavigation getNavigationLinks(Pages pages) { @@ -94,13 +103,25 @@ public class SideNavigationComponent extends DomiSMPPage { return null; } + public <T> T navigateTo2(Pages page) { + + wait.defaultWait.until(ExpectedConditions.visibilityOf(sideBar)); + if (page == Pages.SYSTEM_SETTINGS_DOMAINS) { + openSubmenu(systemSettingsExpand, domainsLnk); + return (T) new DomainsPage(driver); + } + return null; + + + } + public DomiSMPPage navigateTo(Pages page) { - wait.forElementToHaveText(sideBar); + wait.defaultWait.until(ExpectedConditions.visibilityOf(sideBar)); LOG.debug("Get link to " + page.name()); // case SEARCH_RESOURCES: - // expandSection(resourcesExpandLnk); + // expandSection(resourcesExpandLnk);s // return new DLink(driver, resourcesLnk); // case ADMINISTRATION_EDIT_DOMAINS: // expandSection(administrationExpand); @@ -111,12 +132,16 @@ public class SideNavigationComponent extends DomiSMPPage { // case ADMINISTRATION_EDIT_RESOURCES: // expandSection(administrationExpand); // return new DLink(driver, editResourcesLnk); - // case SYSTEM_SETTINGS_USERS: - // expandSection(systemSettingsExpand); - // return new DLink(driver, usersLnk); - // case SYSTEM_SETTINGS_DOMAINS: - // expandSection(systemSettingsExpand); - // return new DLink(driver, domainsLnk); + + if (page == Pages.SYSTEM_SETTINGS_USERS) { + openSubmenu(systemSettingsExpand, usersLnk); + return new UsersPage(driver); + } + if (page == Pages.SYSTEM_SETTINGS_DOMAINS) { + openSubmenu(systemSettingsExpand, domainsLnk); + return new DomainsPage(driver); + } + // case SYSTEM_SETTINGS_KEYSTORE: // expandSection(systemSettingsExpand); // return new DLink(driver, keystoreLnk); @@ -151,41 +176,45 @@ public class SideNavigationComponent extends DomiSMPPage { public Boolean isMenuAvailable(Pages page) { MenuNavigation navigationLinks = getNavigationLinks(page); try { + assert navigationLinks != null; if (navigationLinks.menuLink.isEnabled()) { navigationLinks.menuLink.click(); return navigationLinks.submenuLink.isEnabled(); } return false; } catch (NoSuchElementException e) { + LOG.error("No menu element found"); return false; } } - private void openSubmenu(WebElement menu, WebElement submenu) { + private void openSubmenu(WebElement menuBtn, WebElement submenuBtn) { try { - submenu.click(); - if (submenu.getText().contains(getBreadcrump().getCurrentPage())) { + submenuBtn.click(); + if (submenuBtn.getText().contains(getBreadcrump().getCurrentPage())) { LOG.info("Current page is " + getBreadcrump().getCurrentPage()); } else { - LOG.error("Current page is not as expected. EXPECTED: [{}] but ACTUAL PAGE [{}]", submenu.getText().toString(), getBreadcrump().getCurrentPage().toString()); + LOG.error("Current page is not as expected. EXPECTED: [{}] but ACTUAL PAGE [{}]", submenuBtn.getText(), getBreadcrump().getCurrentPage()); throw new RuntimeException(); } } catch (ElementNotInteractableException exception) { - menu.click(); - submenu.click(); - if (submenu.getText().contains(getBreadcrump().getCurrentPage())) { + + // closeExpirationPopupIfEnabled(); + menuBtn.click(); + submenuBtn.click(); + if (submenuBtn.getText().contains(getBreadcrump().getCurrentPage())) { LOG.info("Current page is " + getBreadcrump().getCurrentPage()); } else { - LOG.error("Current page is not as expected. EXPECTED: " + submenu.getText() + "but ACTUAL PAGE: " + getBreadcrump().getCurrentPage()); + LOG.error("Current page is not as expected. EXPECTED: " + submenuBtn.getText() + "but ACTUAL PAGE: " + getBreadcrump().getCurrentPage()); throw new RuntimeException(); } } } - public class MenuNavigation { + public static class MenuNavigation { WebElement menuLink; WebElement submenuLink; diff --git a/domiSMP-ui-tests/src/main/java/pages/ProfilePage.java b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/UserDataCommonComponent.java similarity index 50% rename from domiSMP-ui-tests/src/main/java/pages/ProfilePage.java rename to domiSMP-ui-tests/src/main/java/ddsl/dcomponents/UserDataCommonComponent.java index 8727d4a453308c23045c05fade5e70164ceb4238..deb3c3deb17712a0b56a53a6fc9f167cefb67ff1 100644 --- a/domiSMP-ui-tests/src/main/java/pages/ProfilePage.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/UserDataCommonComponent.java @@ -1,25 +1,23 @@ -package pages; +package ddsl.dcomponents; -import ddsl.dcomponents.DomiSMPPage; -import ddsl.dcomponents.SetChangePasswordDialog; +import ddsl.DomiSMPPage; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; -import org.openqa.selenium.support.PageFactory; -import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class ProfilePage extends DomiSMPPage { +public class UserDataCommonComponent extends DomiSMPPage { + /** - * Page object for the Profile page. This contains the locators of the page and the methods for the behaviour of the page + * Common component for user data used in Profile and Users page. This contains the locators of the page and the methods for the behaviour of the page */ - - private final static Logger LOG = LoggerFactory.getLogger(ProfilePage.class); - + private final static Logger LOG = LoggerFactory.getLogger(UserDataCommonComponent.class); + @FindBy(id = "changePassword_id") + public WebElement setChangePasswordBtn; @FindBy(id = "smpTheme_id") private WebElement themeSel; - @FindBy(id = "moment-locale") + @FindBy(id = "smpLocale_id") private WebElement localeSel; @FindBy(id = "saveButton") private WebElement saveBtn; @@ -27,16 +25,45 @@ public class ProfilePage extends DomiSMPPage { private WebElement emailAddressInput; @FindBy(id = "fullName_id") private WebElement fullNameInput; - @FindBy(id = "changePassword_id") - private WebElement setChangePasswordBtn; + @FindBy(id = "passwordUpdatedOn_id") + private WebElement lastSetLbl; + @FindBy(id = "passwordExpireOnMessage_id") + private WebElement passwordExpiresOnLbl; - public ProfilePage(WebDriver driver) { + public UserDataCommonComponent(WebDriver driver) { super(driver); - LOG.debug(".... init"); - PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this); } - public void changeUserProfileData(String emailValue, String fullNameValue, String selectThemeValue, String localeValue) throws Exception { + public String getSelectedTheme() { + return weToDSelect(themeSel).getCurrentValue(); + } + + public String getSelectedLocale() { + return weToDSelect(localeSel).getCurrentValue(); + } + + public String getEmailAddress() { + return weToDInput(emailAddressInput).getText(); + } + + public String getFullName() { + return weToDInput(fullNameInput).getText(); + } + + public String getLastSetValue() { + return lastSetLbl.getText(); + } + + public String getPasswordExpiresOnValue() { + return passwordExpiresOnLbl.getText(); + } + + public SetChangePasswordDialog setChangePasswordDialog() { + return new SetChangePasswordDialog(driver); + } + + + public String fillUserProfileData(String emailValue, String fullNameValue, String selectThemeValue, String localeValue) { try { if (!emailValue.isEmpty()) { weToDInput(emailAddressInput).fill(emailValue); @@ -44,12 +71,9 @@ public class ProfilePage extends DomiSMPPage { if (!emailValue.isEmpty()) { weToDInput(fullNameInput).fill(fullNameValue); } - if (!(selectThemeValue == null)) { - weToDSelect(themeSel).selectValue(selectThemeValue); - } - if (!localeValue.isEmpty()) { - weToDSelect(localeSel).selectValue(localeValue); - } + weToDSelect(themeSel).selectValue(selectThemeValue); + weToDSelect(localeSel).selectValue(localeValue); + } catch (Exception e) { LOG.error("Cannot change User Profile Data ", e); @@ -58,38 +82,19 @@ public class ProfilePage extends DomiSMPPage { if (saveBtn.isEnabled()) { saveBtn.click(); } else { - LOG.debug("Save button enable is " + saveBtn.isEnabled()); + LOG.debug("Save button is " + saveBtn.isEnabled()); } try { - getAlertArea().getAlertMessage(); + return getAlertArea().getAlertMessage(); } catch (Exception e) { - throw new RuntimeException(e); + return null; } - } - public Boolean tryChangePassword(String currentPasssword, String newPassword) throws Exception { - weToDButton(setChangePasswordBtn).click(); + public void ChangePassword(String currentPasssword, String newPassword) throws Exception { SetChangePasswordDialog dialog = new SetChangePasswordDialog(driver); - return dialog.trySetPassword(currentPasssword, newPassword); - } - - public String getSelectedTheme() { - return weToDSelect(themeSel).getCurrentValue(); - } - - public String getSelectedLocale() { - return weToDSelect(localeSel).getCurrentValue(); - } - - public String getEmailAddress() { - return weToDInput(emailAddressInput).getText(); - } - - public String getFullName() { - return weToDInput(fullNameInput).getText(); + dialog.setNewPassword(currentPasssword, newPassword); } - -} \ No newline at end of file +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java index fd7926f7323b78cc13c5632e39ff8d769dc2cf9a..fb17c359393790bd64369f6dec8e35993e5a3d74 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DButton.java @@ -5,11 +5,13 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; public class DButton extends DObject { + /** + * Generic wrapper for button element. + */ public DButton(WebDriver driver, WebElement element) { super(driver, element); } - @Override public String getText() { return element.findElement(By.cssSelector("span > span")).getText().trim(); diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java index ab600b12eb040ded023dcc1adb385186a64741cc..12558c60b61c04c86236fd42dddb9394d40860fb 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DInput.java @@ -5,6 +5,9 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; public class DInput extends DObject { + /** + * Generic wrapper for input element. + */ public DInput(WebDriver driver, WebElement element) { super(driver, element); } diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java index 05abd0bfc5ee292a876abe1a0e6a715919f40e62..9563dbc21dca90f0c3762f2c6b2bb4cb2880a84e 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DLink.java @@ -4,8 +4,9 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; public class DLink extends DObject { - - + /** + * Generic wrapper for link element. + */ public DLink(WebDriver driver, WebElement element) { super(driver, element); } diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java index 93f1cd6ff03af626f03b2e57e15e9627fcc3b47f..8839146c0e678fc336c1d08ef79902ec332cb1f3 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DObject.java @@ -7,6 +7,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DObject { + /** + * Generic element object used to have access to element actions. + */ protected final Logger log = LoggerFactory.getLogger(this.getClass()); public WebElement element; protected WebDriver driver; @@ -69,11 +72,11 @@ public class DObject { if (isEnabled()) { wait.forElementToBeClickable(element).click(); } else { - throw new Exception("Not enabled"); + throw new Exception(element.getAccessibleName() + "Not enabled"); } } - public String getAttribute(String attributeName) throws Exception { + public String getAttribute(String attributeName) { if (isPresent()) { String attr = element.getAttribute(attributeName); if (attr == null) { diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java index 52423540cbfab0106b3fc331ea368e7d9738c1b6..f9e1393b5a58053fbe8942aedd7244f28f10cce9 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DSelect.java @@ -6,7 +6,9 @@ import org.openqa.selenium.support.ui.Select; public class DSelect extends DObject { - + /** + * Generic wrapper for select element. + */ Select select = new Select(element); public DSelect(WebDriver driver, WebElement element) { @@ -21,5 +23,4 @@ public class DSelect extends DObject { return select.getAllSelectedOptions().get(0).getText(); } - } diff --git a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java index 9e235b5bac87c317635c83ffadc2b733fa30b9af..9ed3bf0c48c3aed01252756c464fdc0eced8246d 100644 --- a/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java +++ b/domiSMP-ui-tests/src/main/java/ddsl/dobjects/DWait.java @@ -1,9 +1,6 @@ package ddsl.dobjects; -import org.openqa.selenium.By; -import org.openqa.selenium.StaleElementReferenceException; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; +import org.openqa.selenium.*; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; @@ -14,6 +11,12 @@ import utils.TestRunData; import java.time.Duration; public class DWait { + /** + * Wait class util used to have access to different types of waits. + */ + + private final static Logger LOG = LoggerFactory.getLogger(DWait.class); + public final WebDriverWait defaultWait; public final WebDriverWait longWait; public final WebDriverWait shortWait; @@ -40,6 +43,7 @@ public class DWait { return defaultWait.until(ExpectedConditions.elementToBeClickable(element)); } + public WebElement forElementToBeVisible(WebElement element) { return defaultWait.until(ExpectedConditions.visibilityOf(element)); } @@ -72,18 +76,16 @@ public class DWait { } } - public void forAttributeNotEmpty(WebElement element, String attributeName) { - defaultWait.until(ExpectedConditions.attributeToBeNotEmpty(element, attributeName)); - } - public void forElementToBeGone(WebElement element) { - defaultWait.until((ExpectedConditions.invisibilityOf(element))); + try { + if (element.isDisplayed()) { + defaultWait.until((ExpectedConditions.invisibilityOf(element))); - forXMillis(500); - } + } - public void forInvisibilityofLocator(By locator) { - defaultWait.until((ExpectedConditions.invisibilityOfElementLocated(locator))); + } catch (NoSuchElementException e) { + LOG.error("element {} not found", element); + } } public void forElementToBeGone(By selector) { @@ -105,12 +107,7 @@ public class DWait { public void forElementToBe(WebElement element) { - defaultWait.until(new ExpectedCondition<Boolean>() { - @Override - public Boolean apply(WebDriver driver) { - return element.getLocation() != null; - } - }); + defaultWait.until((ExpectedCondition<Boolean>) driver -> element.getLocation() != null); } @@ -119,12 +116,7 @@ public class DWait { } public void forAttributeToNOTContain(WebElement element, String attributeName, String value) { - defaultWait.until(new ExpectedCondition<Boolean>() { - @Override - public Boolean apply(WebDriver driver) { - return !element.getAttribute(attributeName).contains(value); - } - }); + defaultWait.until((ExpectedCondition<Boolean>) driver -> !element.getAttribute(attributeName).contains(value)); } public void forAttributeToContain(WebElement element, String attributeName, String value, boolean waitLonger) { @@ -137,12 +129,7 @@ public class DWait { } public void forElementToHaveText(WebElement element) { - defaultWait.until(new ExpectedCondition<Boolean>() { - @Override - public Boolean apply(WebDriver driver) { - return !element.getText().trim().isEmpty(); - } - }); + defaultWait.until((ExpectedCondition<Boolean>) driver -> !element.getText().trim().isEmpty()); } public void forElementToContainText(WebElement element, String text) { diff --git a/domiSMP-ui-tests/src/main/java/ddsl/enums/ResourceTypes.java b/domiSMP-ui-tests/src/main/java/ddsl/enums/ResourceTypes.java new file mode 100644 index 0000000000000000000000000000000000000000..0eda2cf5511692a983a3e3a28dc830464e33845c --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/enums/ResourceTypes.java @@ -0,0 +1,27 @@ +package ddsl.enums; + +import java.util.Random; + +public enum ResourceTypes { + OASIS1("edelivery-oasis-smp-1.0-servicegroup (smp-1)"), + OASIS2("edelivery-oasis-smp-2.0-servicegroup (oasis-bdxr-smp-2)"), + OASIS3("edelivery-oasis-cppa-3.0-cpp (cpp)"); + + + public final String name; + + + ResourceTypes(String name) { + this.name = name; + + } + + public static String getRandomResourceType() { + ResourceTypes[] resourceTypes = values(); + int size = resourceTypes.length; + Random random = new Random(); + int index = random.nextInt(size); + return resourceTypes[index].name; + } + +} diff --git a/domiSMP-ui-tests/src/main/java/ddsl/enums/ResponseCertificates.java b/domiSMP-ui-tests/src/main/java/ddsl/enums/ResponseCertificates.java new file mode 100644 index 0000000000000000000000000000000000000000..af3d3edcf1ac370fbf325ef0473126ea99ea1630 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/ddsl/enums/ResponseCertificates.java @@ -0,0 +1,29 @@ +package ddsl.enums; + +import java.util.Random; + +public enum ResponseCertificates { + SMP_DOMAIN_02("smp_domain_02 (CN=smp_domain_02,O=digit,C=eu:000000006443d987)"), + SMP_EDDSA_448("smp_eddsa_448 (CN=smp_eddsa_448,O=digit,C=eu:000000006443fcba)"), + SMP_ECDSA_NIST_B409("smp_ecdsa_nist-b409 (CN=smp_ecdsa_nist-b409,O=digit,C=eu:000000006443fd57)"), + SMP_DOMAIN_01("smp_domain_01 (CN=smp_domain_01,O=digit,C=eu:000000006443d8a8"), + SAMPLE_KEY("sample_key (CN=demo-smp-signing-key,O=digit,C=eu:000000006443f9bc"), + SMP_EDDSA_25519("smp_eddsa_25519 (CN=smp_eddsa_25519,O=digit,C=eu:000000006443d95d"); + + public final String name; + + + ResponseCertificates(String name) { + this.name = name; + + } + + public static String getRandomCertificate() { + ResponseCertificates[] certificates = values(); + int size = certificates.length; + Random random = new Random(); + int index = random.nextInt(size); + return certificates[index].name; + } + +} diff --git a/domiSMP-ui-tests/src/main/java/pages/DomainsPage/DomainsPage.java b/domiSMP-ui-tests/src/main/java/pages/DomainsPage/DomainsPage.java new file mode 100644 index 0000000000000000000000000000000000000000..3fd59dd32c8a6c627be059010a622e30bb10c39e --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/pages/DomainsPage/DomainsPage.java @@ -0,0 +1,74 @@ +package pages.DomainsPage; + +import ddsl.PageWithGrid; +import ddsl.dobjects.DButton; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import rest.models.DomainModel; + +import java.util.List; + +public class DomainsPage extends PageWithGrid { + /** + * Page object for the Users page. This contains the locators of the page and the methods for the behaviour of the page + */ + private final static Logger LOG = LoggerFactory.getLogger(DomainsPage.class); + + @FindBy(id = "domainCode_id") + private WebElement domainIdInput; + @FindBy(id = "signatureKeyAlias_id") + private WebElement responseSignatureCertificateDdl; + + @FindBy(id = "domainVisibility_id") + private WebElement visibilityOfDomainDdl; + + @FindBy(id = "saveButton") + private WebElement saveBtn; + + @FindBy(css = "[role = \"tab\"] ") + private List<WebElement> tabList; + + private ResourceTab resourceTab; + + + public DomainsPage(WebDriver driver) { + super(driver); + LOG.debug("Loading Domains page."); + } + + public DButton getCreateDomainBtn() { + return new DButton(driver, AddBtn); + } + + public ResourceTab getResourceTab() { + + return new ResourceTab(driver); + } + + + public void fillDomainData(DomainModel domainModel) { + + domainIdInput.sendKeys(domainModel.getDomainCode()); + weToDSelect(responseSignatureCertificateDdl).selectValue(domainModel.getSignatureKeyAlias()); + } + + public String saveChangesAndGetMessage() { + saveBtn.click(); + return getAlertArea().getAlertMessage(); + } + + public void goToTab(String tabName) { + for (WebElement element : tabList) { + if (element.getText().contains(tabName)) { + element.click(); + wait.forAttributeToContain(element, "aria-selected", "true"); + LOG.debug("Domain tab {} is opened", tabName); + } + } + } + + +} diff --git a/domiSMP-ui-tests/src/main/java/pages/DomainsPage/ResourceTab.java b/domiSMP-ui-tests/src/main/java/pages/DomainsPage/ResourceTab.java new file mode 100644 index 0000000000000000000000000000000000000000..4e1bb994b3fa567515d5e8047930aeeb28dea540 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/pages/DomainsPage/ResourceTab.java @@ -0,0 +1,59 @@ +package pages.DomainsPage; + +import ddsl.dcomponents.DComponent; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; +import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +public class ResourceTab extends DComponent { + + /** + * Resource tab component of Domain page. Gives access to resource tab behaviour. + */ + private final static Logger LOG = LoggerFactory.getLogger(ResourceTab.class); + + @FindBy(css = "mat-list-option") + private List<WebElement> resourceOptions; + + @FindBy(id = "saveButton") + private WebElement saveBtn; + + public ResourceTab(WebDriver driver) { + super(driver); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this); + + } + + public void saveChanges() { + if (saveBtn.isEnabled()) { + saveBtn.click(); + if (saveBtn.getAttribute("disabled").equals("truw")) { + LOG.debug("Resource tab changes were succesfully saved"); + } + LOG.debug("Resource tab changes were not saved"); + } + } + + + public void checkResource(String resourceName) { + wait.forElementToBeClickable(resourceOptions.get(0)); + for (WebElement element : resourceOptions) { + if (element.getText().contains(resourceName)) { + if (element.getAttribute("aria-selected").equals("false")) { + element.click(); + wait.forAttributeToContain(element, "aria-selected", "true"); + LOG.debug("Selecting resource {} is opened", resourceName); + } else { + LOG.debug("Resource {} is already selected", resourceName); + } + + } + } + } +} diff --git a/domiSMP-ui-tests/src/main/java/pages/LoginPage.java b/domiSMP-ui-tests/src/main/java/pages/LoginPage.java index 41ad9a1767435f71479c77ff58ac7fe5edfd073e..5aaba22ef4a5a921610371ae50ef8dc6bc4686f8 100644 --- a/domiSMP-ui-tests/src/main/java/pages/LoginPage.java +++ b/domiSMP-ui-tests/src/main/java/pages/LoginPage.java @@ -1,6 +1,6 @@ package pages; -import ddsl.dcomponents.DomiSMPPage; +import ddsl.DomiSMPPage; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; @@ -32,7 +32,7 @@ public class LoginPage extends DomiSMPPage { PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getTIMEOUT()), this); } - public DomiSMPPage login(String user, String pass) throws Exception { + public void login(String user, String pass) throws Exception { HashMap<String, String> usr = new HashMap<>(); usr.put("username", user); usr.put("pass", pass); @@ -43,13 +43,17 @@ public class LoginPage extends DomiSMPPage { weToDInput(password).fill(usr.get("pass")); weToDButton(loginBtn).click(); - if (getExpiredDialoginbutton().isPresent()) { - LOG.info("Expired password dialog is present."); - getExpiredDialoginbutton().click(); - } + try { + if (isExpiredDialoginbuttonEnabled()) { + getExpiredDialoginbutton().click(); + } + + } catch (Exception e) { + LOG.debug("Password expiration popup is not present"); + throw new RuntimeException(e); + } - return new DomiSMPPage(driver); } diff --git a/domiSMP-ui-tests/src/main/java/pages/ProfilePage/ProfilePage.java b/domiSMP-ui-tests/src/main/java/pages/ProfilePage/ProfilePage.java new file mode 100644 index 0000000000000000000000000000000000000000..80cfce297e2384c188a87e8082c13c968e3e0524 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/pages/ProfilePage/ProfilePage.java @@ -0,0 +1,22 @@ +package pages.ProfilePage; + +import ddsl.PageWithGrid; +import ddsl.dcomponents.UserDataCommonComponent; +import org.openqa.selenium.WebDriver; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ProfilePage extends PageWithGrid { + /** + * Page object for the Profile page. This contains the locators of the page and the methods for the behaviour of the page + */ + private final static Logger LOG = LoggerFactory.getLogger(ProfilePage.class); + public UserDataCommonComponent userData; + + + public ProfilePage(WebDriver driver) { + super(driver); + userData = new UserDataCommonComponent(driver); + + } +} \ No newline at end of file diff --git a/domiSMP-ui-tests/src/main/java/pages/ProfilePage/SuccesfullPasswordChangedPopup.java b/domiSMP-ui-tests/src/main/java/pages/ProfilePage/SuccesfullPasswordChangedPopup.java new file mode 100644 index 0000000000000000000000000000000000000000..febf89b9b69ecbc629932b1e14533960503c3da3 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/pages/ProfilePage/SuccesfullPasswordChangedPopup.java @@ -0,0 +1,34 @@ +package pages.ProfilePage; + +import ddsl.dcomponents.DComponent; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.PageFactory; + +public class SuccesfullPasswordChangedPopup extends DComponent { + + /** + * This class is used to map the succesfull password changed dialog. + */ + @FindBy(css = "#mat-mdc-dialog-2 > div > div > app-information-dialog > div > div.panel") + WebElement message; + @FindBy(id = "closebuttondialog_id") + WebElement closeBtn; + + public SuccesfullPasswordChangedPopup(WebDriver driver) { + super(driver); + PageFactory.initElements(driver, this); + wait.forElementToBeClickable(closeBtn); + + } + + public void closePopup() { + try { + weToDButton(closeBtn).click(); + } catch (Exception e) { + throw new RuntimeException(e); + + } + } +} diff --git a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropGrid.java b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropGrid.java index cff28c6c78ee7d1116e60c7df72241ff05669dd7..16058b35f043180cc8d2de9f0b6a30fccebd92ad 100644 --- a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropGrid.java +++ b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropGrid.java @@ -6,6 +6,10 @@ import org.openqa.selenium.WebElement; public class PropGrid extends BasicGrid { + /** + * This class is used to map Property grid component. + */ + public PropGrid(WebDriver driver, WebElement container) { super(driver, container); } @@ -15,6 +19,7 @@ public class PropGrid extends BasicGrid { return new PropertyPopup(driver); } - ; - + public String getPropertyValue(String propertyName) { + return getValue(propertyName); + } } diff --git a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertiesPage.java b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertiesPage.java index 323d9cae99582d6352439f47e0fd2376cdd45fd3..08ed90d4633a6f19f20c68c11641362c5e30f8d0 100644 --- a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertiesPage.java +++ b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertiesPage.java @@ -1,7 +1,7 @@ package pages.PropertiesPage; +import ddsl.DomiSMPPage; import ddsl.dcomponents.ConfirmationDialog; -import ddsl.dcomponents.DomiSMPPage; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; @@ -11,6 +11,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PropertiesPage extends DomiSMPPage { + + /** + * Page object for the Properties page. This contains the locators of the page and the methods for the behaviour of the page + */ private final static Logger LOG = LoggerFactory.getLogger(PropertiesPage.class); @FindBy(id = "searchTable") @@ -50,6 +54,10 @@ public class PropertiesPage extends DomiSMPPage { } catch (Exception e) { LOG.error("Cannot set value for property {1}", propertyName); } + } + + public String getPropertyValue(String propertyName) { + return grid().getPropertyValue(propertyName); } diff --git a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertyPopup.java b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertyPopup.java index a754aca2c28b1c52dc4352322ecf2194de2a1a10..5aa06310ef575928243e399243f2d334d1ceb975 100644 --- a/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertyPopup.java +++ b/domiSMP-ui-tests/src/main/java/pages/PropertiesPage/PropertyPopup.java @@ -10,6 +10,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PropertyPopup extends DComponent { + /** + * Property popup component used when modifying a property. + */ private final static Logger LOG = LoggerFactory.getLogger(PropertiesPage.class); @FindBy(id = "updatePropertyButton") WebElement popupOkBtn; @@ -63,9 +66,9 @@ public class PropertyPopup extends DComponent { } public PropertiesPage enableCheckboxOfProperty() { - Boolean bool = propertyCheckbox.isSelected(); + boolean bool = propertyCheckbox.isSelected(); - if (bool == false) { + if (!bool) { propertyCheckbox.click(); popupOkBtn.click(); } else { @@ -75,14 +78,14 @@ public class PropertyPopup extends DComponent { } public PropertiesPage disableCheckboxOfProperty() { - Boolean bool = propertyCheckbox.isSelected(); - if (bool == true) { + boolean bool = propertyCheckbox.isSelected(); + if (bool) { JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", propertyCheckbox); try { Thread.sleep(1000); } catch (Exception e) { - e.printStackTrace(); + LOG.error(String.valueOf(e)); } popupOkBtn.click(); } else { diff --git a/domiSMP-ui-tests/src/main/java/pages/UsersPage.java b/domiSMP-ui-tests/src/main/java/pages/UsersPage.java new file mode 100644 index 0000000000000000000000000000000000000000..2c59cae419e7fa41ffb300171089f11abf7bfe64 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/pages/UsersPage.java @@ -0,0 +1,84 @@ +package pages; + +import ddsl.PageWithGrid; +import ddsl.dcomponents.UserDataCommonComponent; +import ddsl.dobjects.DButton; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import rest.models.UserModel; + +public class UsersPage extends PageWithGrid { + /** + * Page object for the Users page. This contains the locators of the page and the methods for the behaviour of the page + */ + private final static Logger LOG = LoggerFactory.getLogger(UsersPage.class); + + public UserDataCommonComponent userData; + @FindBy(id = "username_id") + private WebElement usernameInput; + @FindBy(id = "role_id") + private WebElement applicationRoleDdl; + @FindBy(id = "active_id") + private WebElement isActive; + + + public UsersPage(WebDriver driver) { + super(driver); + userData = new UserDataCommonComponent(driver); + LOG.debug("Loading Users page."); + } + + public DButton getCreateUserBtn() { + return new DButton(driver, AddBtn); + } + + public String fillNewUserDataAndSave(UserModel newUserData) { + LOG.debug("Filling user data..."); + try { + weToDInput(usernameInput).fill(newUserData.getUsername()); + } catch (Exception e) { + throw new RuntimeException(e); + } + weToDSelect(applicationRoleDdl).selectValue(newUserData.getRole()); + + String alertMessage = userData.fillUserProfileData(newUserData.getEmailAddress(), newUserData.getFullName(), newUserData.getSmpTheme(), newUserData.getSmpLocale()); + LOG.debug("User {} was created", newUserData.getUsername()); + return alertMessage; + } + + public String getApplicationRoleValue() { + return weToDSelect(applicationRoleDdl).getCurrentValue(); + } + + public String getFullNameValue() { + return userData.getFullName(); + } + + public Boolean isSelectedUserActive() { + try { + return weToDInput(isActive).getAttribute("class").contains("checked"); + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public String getEmailValue() { + return userData.getEmailAddress(); + } + + public String getSelectedThemeValue() { + return userData.getSelectedTheme(); + + } + + public String getSelectedLocaleValue() { + return userData.getSelectedLocale(); + + } + + +} diff --git a/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java index 2f30da5f1a477f0a8e09c30ea309f67e36aad4f0..a7545ad6c2c911ae688483ea0d00320e2f71206d 100644 --- a/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java +++ b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java @@ -27,7 +27,6 @@ public class BaseRestClient { protected String token; protected String username; protected String password; - protected String newPassword; public BaseRestClient(String username, String password) { this.username = username; @@ -37,7 +36,7 @@ public class BaseRestClient { public BaseRestClient() { this.username = data.getAdminUser().get("username"); - this.password = data.getAdminUser().get("pass"); + this.password = data.getAdminUser().get("password"); } // ---------------------------------------Default request methods ------------------------------------------------- @@ -72,11 +71,6 @@ public class BaseRestClient { return builder.type(type).put(ClientResponse.class, body.toString()); } - - protected ClientResponse jsonPUT(WebResource resource, String params) { - return requestPUT(resource, params, MediaType.APPLICATION_JSON); - } - protected ClientResponse jsonPUT(WebResource resource, JSONObject body) { return requestPUT(resource, body, MediaType.APPLICATION_JSON); } @@ -108,6 +102,7 @@ public class BaseRestClient { return builder; } + public List<NewCookie> login() throws SMPRestException { log.debug("Rest client using to login: " + this.username); HashMap<String, String> params = new HashMap<>(); @@ -128,6 +123,7 @@ public class BaseRestClient { throw new SMPRestException("Login failed", response); } + private String extractToken() { String mytoken = null; for (NewCookie cookie : cookies) { @@ -137,6 +133,7 @@ public class BaseRestClient { } return mytoken; } + public void refreshCookies() throws Exception { if (isLoggedIn()) { return; @@ -152,6 +149,7 @@ public class BaseRestClient { throw new Exception("Could not obtain XSRF token, tests will not be able to generate necessary data!"); } } + public boolean isLoggedIn() { WebResource.Builder builder = decorateBuilder(resource.path(RestServicePaths.CONNECTED)); int response = builder.get(ClientResponse.class).getStatus(); diff --git a/domiSMP-ui-tests/src/main/java/rest/DomainClient.java b/domiSMP-ui-tests/src/main/java/rest/DomainClient.java new file mode 100644 index 0000000000000000000000000000000000000000..a0921d740b9afd5f10ed617cc98cd2f11af5dcae --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/rest/DomainClient.java @@ -0,0 +1,45 @@ +package rest; + +import com.sun.jersey.api.client.ClientResponse; +import org.json.JSONObject; +import rest.models.DomainModel; + +public class DomainClient extends BaseRestClient { + + /** + * Rest client for domain actions + */ + public DomainClient() { + super(); + } + + public JSONObject createDomain(DomainModel domainModel) { + + JSONObject domainJson = new JSONObject(domainModel); + + if (!isLoggedIn()) { + try { + refreshCookies(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + String createDomainPath = RestServicePaths.getDomainPath(data.userId); + + ClientResponse response = jsonPUT(resource.path(createDomainPath), domainJson); + JSONObject responseBody = new JSONObject(response.getEntity(String.class)); + if (response.getStatus() != 200) { + try { + throw new SMPRestException("Could not create domain", response); + } catch (SMPRestException e) { + throw new RuntimeException(e); + } + } + log.debug("Domain: " + domainModel.getDomainCode() + " has been created successfully!"); + return responseBody; + + } + + +} diff --git a/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java index cbbb65d919eeaaca29bbcba65bb63426f3cfeef0..8818ef18297e686a3467fe27c9841e100ddd92da 100644 --- a/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java +++ b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java @@ -9,5 +9,10 @@ public class DomiSMPRestClient extends BaseRestClient { public UserClient users() { return new UserClient(username, password); } + + public DomainClient domains() { + return new DomainClient(); + } + } diff --git a/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java b/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java index bcbe59ef187b43328adb50894b2800e6fa34e19d..b5890b5da26376750796bcd7ec3bd8777a209a41 100644 --- a/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java +++ b/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java @@ -1,12 +1,11 @@ package rest; public class RestServicePaths { - private RestServicePaths() { - } - public static final String LOGIN = "/public/rest/security/authentication"; public static final String CONNECTED = "/public/rest/security/user"; + private RestServicePaths() { + } public static String getUsersPath(String currentUserId) { @@ -18,5 +17,12 @@ public class RestServicePaths { return "/internal/rest/user/" + currentUserId + "/change-password-for/" + forUserId; } + //Domains paths + + public static String getDomainPath(String currentUserId) { + + return "/internal/rest/domain/" + currentUserId + "/create"; + } + } diff --git a/domiSMP-ui-tests/src/main/java/rest/UserClient.java b/domiSMP-ui-tests/src/main/java/rest/UserClient.java index 7dcd9a7896865ec5fb713a8b4871cb779d496a29..1470289b560ebb3fcef30fb28e3dcd07fe28729d 100644 --- a/domiSMP-ui-tests/src/main/java/rest/UserClient.java +++ b/domiSMP-ui-tests/src/main/java/rest/UserClient.java @@ -6,6 +6,11 @@ import rest.models.UserModel; public class UserClient extends BaseRestClient { + + /** + * Rest client for user actions + */ + public UserClient(String username, String password) { super(username, password); } diff --git a/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java b/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java new file mode 100644 index 0000000000000000000000000000000000000000..005f154c803c4f9333faae611ce0e5f5e47e13a1 --- /dev/null +++ b/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java @@ -0,0 +1,73 @@ +package rest.models; + +import ddsl.enums.ResponseCertificates; +import utils.Generator; + +public class DomainModel { + + private String smlSmpId; + private String domainCode; + private boolean smlRegistered; + private String visibility; + private String smlClientKeyAlias; + private String signatureKeyAlias; + private String smlSubdomain; + private String smlParticipantIdentifierRegExp; + private boolean smlClientCertAuth; + private int status; + + public DomainModel() { + } + + public static DomainModel generatePublicDomainModelWithoutSML() { + DomainModel domainModel = new DomainModel(); + domainModel.domainCode = "AUTDom" + Generator.randomAlphaNumeric(6); + domainModel.signatureKeyAlias = ResponseCertificates.getRandomCertificate(); + domainModel.visibility = "PUBLIC"; + + + return domainModel; + } + + public String getSmlSmpId() { + return smlSmpId; + } + + public String getDomainCode() { + return domainCode; + } + + public boolean isSmlRegistered() { + return smlRegistered; + } + + public String getVisibility() { + return visibility; + } + + public String getSmlClientKeyAlias() { + return smlClientKeyAlias; + } + + public String getSignatureKeyAlias() { + return signatureKeyAlias; + } + + public String getSmlSubdomain() { + return smlSubdomain; + } + + public String getSmlParticipantIdentifierRegExp() { + return smlParticipantIdentifierRegExp; + } + + public boolean isSmlClientCertAuth() { + return smlClientCertAuth; + } + + public int getStatus() { + return status; + } +} + + diff --git a/domiSMP-ui-tests/src/main/java/rest/models/UserModel.java b/domiSMP-ui-tests/src/main/java/rest/models/UserModel.java index 838f30c4b90450583306011bf4b430571e1a55d3..46d49ea6a4d9c21b406e5cf9b6a5959e891c2445 100644 --- a/domiSMP-ui-tests/src/main/java/rest/models/UserModel.java +++ b/domiSMP-ui-tests/src/main/java/rest/models/UserModel.java @@ -94,7 +94,7 @@ public class UserModel { this.smpLocale = smpLocale; } - public static UserModel createUserWithUSERrole() { + public static UserModel generateUserWithUSERrole() { UserModel userModel = new UserModel(); userModel.username = ("AUT_username_" + Generator.randomAlphaNumeric(4)).toLowerCase(); userModel.active = true; @@ -106,7 +106,7 @@ public class UserModel { return userModel; } - public static UserModel createUserWithADMINrole() { + public static UserModel generateUserWithADMINrole() { UserModel userModel = new UserModel(); userModel.username = ("AUT_username_" + Generator.randomAlphaNumeric(4)).toLowerCase(); userModel.active = true; @@ -127,5 +127,6 @@ public class UserModel { return userModel; } + } diff --git a/domiSMP-ui-tests/src/main/java/utils/DriverManager.java b/domiSMP-ui-tests/src/main/java/utils/DriverManager.java index 2ac4c7a7e3a90fad4a3d44f5b989560650aba740..c603446736432b6525d07b71d6469a3848a24022 100644 --- a/domiSMP-ui-tests/src/main/java/utils/DriverManager.java +++ b/domiSMP-ui-tests/src/main/java/utils/DriverManager.java @@ -8,8 +8,8 @@ import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxOptions; +import java.time.Duration; import java.util.HashMap; -import java.util.concurrent.TimeUnit; public class DriverManager { static TestRunData data = new TestRunData(); @@ -18,14 +18,15 @@ public class DriverManager { public static WebDriver getDriver() { WebDriver driver; - if ( StringUtils.equalsIgnoreCase(data.getRunBrowser(), "firefox")) { + if (StringUtils.equalsIgnoreCase(data.getRunBrowser(), "firefox")) { driver = getFirefoxDriver(); } else { driver = getChromeDriver(); } driver.manage().window().setSize(new Dimension(1920, 1080)); driver.manage().window().maximize(); - driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS); + driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(1)); + return driver; } @@ -42,16 +43,19 @@ public class DriverManager { ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems options.addArguments("--disable-popup-blocking"); + // options.addArguments("--headless=new"); options.setExperimentalOption("prefs", prefs); return new ChromeDriver(options); } + private static WebDriver getFirefoxDriver() { System.setProperty("webdriver.gecko.driver", data.getFirefoxDriverPath()); FirefoxOptions options = new FirefoxOptions(); - options.setHeadless(data.isHeadless()); + options.addArguments("--headless=new"); + //code added for auto download options.addPreference("browser.download.folderList", 2); options.addPreference("browser.download.manager.showWhenStarting", false); diff --git a/domiSMP-ui-tests/src/main/java/utils/TestRunData.java b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java index 2deb4c502532b7dc1c89699e829fb7ffc596619b..4963100af413885b2a180ba3ab73f7aac5746a1f 100644 --- a/domiSMP-ui-tests/src/main/java/utils/TestRunData.java +++ b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java @@ -18,9 +18,9 @@ public class TestRunData { public static SimpleDateFormat CSV_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); public static SimpleDateFormat REST_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); public static SimpleDateFormat REST_JMS_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - public String userId; static Properties prop = new Properties(); protected final Logger log = LoggerFactory.getLogger(this.getClass()); + public String userId; public TestRunData() { if (prop.isEmpty()) { @@ -51,7 +51,7 @@ public class TestRunData { HashMap<String, String> toReturn = new HashMap<>(); toReturn.put("username", prop.getProperty(role + ".username")); - toReturn.put("pass", prop.getProperty(role + ".password")); + toReturn.put("password", prop.getProperty(role + ".password")); return toReturn; } diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java index 6b01911f70cf449531bb216cf6ff994a7f69ea35..c8c01d25e102b4db2d5f077ca07b94518f55430a 100644 --- a/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java +++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/SeleniumTest.java @@ -10,6 +10,7 @@ import utils.DriverManager; import utils.TestRunData; import java.lang.reflect.Method; +import java.util.logging.Level; public class SeleniumTest { @@ -17,17 +18,15 @@ public class SeleniumTest { * This class is extending all the test classes to have access to the Base tests methods. */ protected static final Logger LOG = LoggerFactory.getLogger(SeleniumTest.class); - static int methodCount = 1; - public String logFilename; - public static TestRunData data = new TestRunData(); public static DomiSMPRestClient rest = new DomiSMPRestClient(); + static int methodCount = 1; + public String logFilename; public WebDriver driver; @BeforeSuite(alwaysRun = true) public void beforeSuite() { - LOG.info("Log file name is " + logFilename); LOG.info("-------- Starting -------"); } @@ -41,6 +40,9 @@ public class SeleniumTest { public void beforeClass() { LOG.info("--------Initialize test class-------"); driver = DriverManager.getDriver(); + java.util.logging.Logger.getLogger("io.netty.util.NetUtil").setLevel(Level.OFF); + java.util.logging.Logger.getLogger("org.asynchttpclient.netty.handler").setLevel(Level.OFF); + } @@ -61,6 +63,15 @@ public class SeleniumTest { } } + @AfterMethod + protected void afterMethod(Method method) { + try { + driver.quit(); + } catch (Exception e) { + LOG.warn("Closing the driver failed"); + LOG.error("EXCEPTION: ", e); + } + } @AfterClass(alwaysRun = true) protected void afterClass() { diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/DomainsPgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/DomainsPgTests.java new file mode 100644 index 0000000000000000000000000000000000000000..20c403d88d24e376c850fce17e978b3c18e1d2a6 --- /dev/null +++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/DomainsPgTests.java @@ -0,0 +1,39 @@ +package domiSMPTests.ui; +import ddsl.DomiSMPPage; +import ddsl.enums.Pages; +import ddsl.enums.ResourceTypes; +import domiSMPTests.SeleniumTest; +import org.testng.Assert; +import org.testng.annotations.Test; +import pages.DomainsPage.DomainsPage; +import pages.LoginPage; +import rest.models.DomainModel; + +public class DomainsPgTests extends SeleniumTest { + + /** + * This class has the tests against Domains Page + */ + @Test(description = "DOM-01 System admin is able to create Domains") + public void SystemAdminIsAbleToCreateDomains() throws Exception { + DomainModel domainModel = DomainModel.generatePublicDomainModelWithoutSML(); + + DomiSMPPage homePage = new DomiSMPPage(driver); + LoginPage loginPage = homePage.goToLoginPage(); + loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password")); + + DomainsPage domainsPage = homePage.getSidebar().navigateTo2(Pages.SYSTEM_SETTINGS_DOMAINS); + domainsPage.getCreateDomainBtn().click(); + domainsPage.fillDomainData(domainModel); + String alert = domainsPage.saveChangesAndGetMessage(); + Assert.assertEquals(alert, "Domain: [" + domainModel.getDomainCode() + "] was created!"); + + domainsPage.getGrid().searchValueInColumn("Domain code", domainModel.getDomainCode()).click(); + + domainsPage.goToTab("Resource Types"); + domainsPage.getResourceTab().checkResource(ResourceTypes.getRandomResourceType()); + domainsPage.getResourceTab().saveChanges(); + + + } +} diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java index 5981e87a9b6155d3bbc1564ae3ae216ab26d19a0..11edf65cbb5c053aebf97a2998b8a894a3e1602f 100644 --- a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java +++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/ProfilePgTests.java @@ -1,14 +1,15 @@ package domiSMPTests.ui; -import ddsl.dcomponents.DomiSMPPage; +import ddsl.DomiSMPPage; import ddsl.enums.Pages; import domiSMPTests.SeleniumTest; import org.testng.Assert; import org.testng.annotations.Test; import pages.LoginPage; -import pages.ProfilePage; +import pages.ProfilePage.ProfilePage; import pages.PropertiesPage.PropertiesPage; import rest.models.UserModel; +import utils.Generator; public class ProfilePgTests extends SeleniumTest { @@ -16,9 +17,9 @@ public class ProfilePgTests extends SeleniumTest { /** * This class has the tests against Profile Page */ - @Test(description = "PROF-01") + @Test(description = "PROF-01 All logged users are able to view the Profile Page") public void AllLoggedUsersShouldAbleToSeeProfilePage() throws Exception { - UserModel normalUser = UserModel.createUserWithUSERrole(); + UserModel normalUser = UserModel.generateUserWithUSERrole(); rest.users().createUser(normalUser); @@ -35,7 +36,7 @@ public class ProfilePgTests extends SeleniumTest { homePage.logout(); //Check if page is avaiable for Admin users - UserModel adminUser = UserModel.createUserWithUSERrole(); + UserModel adminUser = UserModel.generateUserWithUSERrole(); rest.users().createUser(adminUser); loginPage = homePage.goToLoginPage(); @@ -52,9 +53,9 @@ public class ProfilePgTests extends SeleniumTest { Assert.assertFalse(homePage.getSidebar().isMenuAvailable(Pages.USER_SETTINGS_PROFILE)); } - @Test(description = "PROF-02") + @Test(description = "PROF-02 All loggedin users are able to update profile data") public void AllLoggedUsersShouldAbleToUpdateProfilePage() throws Exception { - UserModel normalUser = UserModel.createUserWithUSERrole(); + UserModel normalUser = UserModel.generateUserWithUSERrole(); rest.users().createUser(normalUser); @@ -65,21 +66,21 @@ public class ProfilePgTests extends SeleniumTest { //Navigate to page ProfilePage profilePage = (ProfilePage) homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE); UserModel userNewProfileData = UserModel.generateUserProfileData(); - profilePage.changeUserProfileData(userNewProfileData.getEmailAddress(), userNewProfileData.getFullName(), userNewProfileData.getSmpTheme(), userNewProfileData.getSmpLocale()); + profilePage.userData.fillUserProfileData(userNewProfileData.getEmailAddress(), userNewProfileData.getFullName(), userNewProfileData.getSmpTheme(), userNewProfileData.getSmpLocale()); profilePage.refreshPage(); //Verify if data is changed - Assert.assertEquals(profilePage.getEmailAddress(), userNewProfileData.getEmailAddress()); - Assert.assertEquals(profilePage.getFullName(), userNewProfileData.getFullName()); - Assert.assertEquals(profilePage.getSelectedTheme(), userNewProfileData.getSmpTheme()); - Assert.assertEquals(profilePage.getSelectedLocale(), userNewProfileData.getSmpLocale()); + Assert.assertEquals(profilePage.userData.getEmailAddress(), userNewProfileData.getEmailAddress()); + Assert.assertEquals(profilePage.userData.getFullName(), userNewProfileData.getFullName()); + Assert.assertEquals(profilePage.userData.getSelectedTheme(), userNewProfileData.getSmpTheme()); + Assert.assertEquals(profilePage.userData.getSelectedLocale(), userNewProfileData.getSmpLocale()); homePage.logout(); - UserModel adminUser = UserModel.createUserWithUSERrole(); + UserModel adminUser = UserModel.generateUserWithUSERrole(); rest.users().createUser(adminUser); @@ -90,22 +91,25 @@ public class ProfilePgTests extends SeleniumTest { //Navigate to page profilePage = (ProfilePage) homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE); UserModel adminNewProfileData = UserModel.generateUserProfileData(); - profilePage.changeUserProfileData(adminNewProfileData.getEmailAddress(), adminNewProfileData.getFullName(), adminNewProfileData.getSmpTheme(), adminNewProfileData.getSmpLocale()); + profilePage.userData.fillUserProfileData(adminNewProfileData.getEmailAddress(), adminNewProfileData.getFullName(), adminNewProfileData.getSmpTheme(), adminNewProfileData.getSmpLocale()); profilePage.refreshPage(); //Verify if data is changed - Assert.assertEquals(profilePage.getEmailAddress(), adminNewProfileData.getEmailAddress()); - Assert.assertEquals(profilePage.getFullName(), adminNewProfileData.getFullName()); - Assert.assertEquals(profilePage.getSelectedTheme(), adminNewProfileData.getSmpTheme()); - Assert.assertEquals(profilePage.getSelectedLocale(), adminNewProfileData.getSmpLocale()); + Assert.assertEquals(profilePage.userData.getEmailAddress(), adminNewProfileData.getEmailAddress()); + Assert.assertEquals(profilePage.userData.getFullName(), adminNewProfileData.getFullName()); + Assert.assertEquals(profilePage.userData.getSelectedTheme(), adminNewProfileData.getSmpTheme()); + Assert.assertEquals(profilePage.userData.getSelectedLocale(), adminNewProfileData.getSmpLocale()); } - @Test(description = "PROF-03") + @Test(description = "PROF-03 Password validation is accord to the smp propeties values") public void PasswordValidationsShouldBeAccordingToPropertiesValue() throws Exception { - UserModel adminUser = UserModel.createUserWithADMINrole(); + String propertyValue = "smp.passwordPolicy.validationRegex"; + String newPropertyValue = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~`!@#$%^&+=\\-_<>.,?:;*/()|\\[\\]{}'\"\\\\]).{16,35}$"; + + UserModel adminUser = UserModel.generateUserWithADMINrole(); rest.users().createUser(adminUser); @@ -114,12 +118,41 @@ public class ProfilePgTests extends SeleniumTest { loginPage.login(adminUser.getUsername(), data.getNewPassword()); PropertiesPage propertiesPage = (PropertiesPage) homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_PROPERTIES); - propertiesPage.propertySearch("smp.passwordPolicy.validationRegex"); - propertiesPage.setPropertyValue("smp.passwordPolicy.validationRegex", "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~`!@#$%^&+=\\-_<>.,?:;*/()|\\[\\]{}'\"\\\\]).{16,35}$"); - propertiesPage.save(); + propertiesPage.propertySearch(propertyValue); + if (!propertiesPage.getPropertyValue(propertyValue).equals(newPropertyValue)) { + propertiesPage.setPropertyValue("smp.passwordPolicy.validationRegex", "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~`!@#$%^&+=\\-_<>.,?:;*/()|\\[\\]{}'\"\\\\]).{16,35}$"); + propertiesPage.save(); + } ProfilePage profilePage = (ProfilePage) propertiesPage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE); - Boolean isPasswordChanged = profilePage.tryChangePassword(data.getNewPassword(), "Edeltest!23456789Edeltest!234567890"); - Assert.assertTrue(isPasswordChanged); + profilePage.userData.setChangePasswordBtn.click(); + Assert.assertEquals(0, profilePage.userData.setChangePasswordDialog().setNewPassword(data.getNewPassword(), "Edeltest!23456789Edeltest!234567890").size(), "Could not change the password of the user"); + + } + + + @Test(description = "PROF-04 User should be able to change his password") + public void UserShouldBeAbleToChangeHisPassword() throws Exception { + UserModel adminUser = UserModel.generateUserWithADMINrole(); + rest.users().createUser(adminUser); + DomiSMPPage homePage = new DomiSMPPage(driver); + LoginPage loginPage = homePage.goToLoginPage(); + loginPage.login(adminUser.getUsername(), data.getNewPassword()); + ProfilePage profilePage = (ProfilePage) loginPage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE); + String oldLastSet = profilePage.userData.getLastSetValue(); + String oldPasswordExpiresOn = profilePage.userData.getPasswordExpiresOnValue(); + + profilePage.userData.setChangePasswordBtn.click(); + String newPass = "Edeltest!23456789Edelt" + Generator.randomAlphaNumeric(4); + + Assert.assertEquals(profilePage.userData.setChangePasswordDialog().setNewPassword(data.getNewPassword(), newPass).size(), 0, "Could not change the password of the user"); + + loginPage.login(adminUser.getUsername(), newPass); + profilePage = (ProfilePage) loginPage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE); + + // Assert.assertNotSame(profilePage2.getLastSetValue(), oldLastSet, "Last set value is not reseted"); + //Assert.assertNotSame(profilePage2.getPasswordExpiresOnValue(), oldPasswordExpiresOn, "Password expires on value is not reseted"); + + } } diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/UsersPgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/UsersPgTests.java new file mode 100644 index 0000000000000000000000000000000000000000..ae4fd1e60f08417789735040586ae12fb9060bce --- /dev/null +++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/UsersPgTests.java @@ -0,0 +1,66 @@ +package domiSMPTests.ui; + +import ddsl.DomiSMPPage; +import ddsl.enums.Pages; +import domiSMPTests.SeleniumTest; +import org.openqa.selenium.WebElement; +import org.testng.Assert; +import org.testng.annotations.Test; +import pages.LoginPage; +import pages.UsersPage; +import rest.models.UserModel; + +public class UsersPgTests extends SeleniumTest { + @Test(description = "USR-01 System admin is able to create new users") + public void SystemAdminIsAbleToCreateNewUsers() throws Exception { + + DomiSMPPage homePage = new DomiSMPPage(driver); + LoginPage loginPage = homePage.goToLoginPage(); + loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password")); + + UsersPage usersPage = (UsersPage) homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_USERS); + usersPage.getCreateUserBtn().click(); + UserModel adminNewUserData = UserModel.generateUserWithADMINrole(); + usersPage.fillNewUserDataAndSave(adminNewUserData); + + usersPage.refreshPage(); + usersPage.filter(adminNewUserData.getUsername()); + WebElement newUser = usersPage.getGrid().searchValueInColumn("Username", adminNewUserData.getUsername()); + Assert.assertNotNull(newUser); + newUser.click(); + + Assert.assertEquals(usersPage.getApplicationRoleValue(), adminNewUserData.getRole()); + Assert.assertEquals(usersPage.getFullNameValue(), adminNewUserData.getFullName()); + + Assert.assertEquals(usersPage.getEmailValue(), adminNewUserData.getEmailAddress()); + Assert.assertEquals(usersPage.getSelectedThemeValue(), adminNewUserData.getSmpTheme()); + Assert.assertEquals(usersPage.getSelectedLocaleValue(), adminNewUserData.getSmpLocale()); + + + } + + @Test(description = "USR-02 USR-02 System admin is not able to create duplicated user") + public void SystemAdminIsNotAbleToCreateDuplicatedUser() throws Exception { + DomiSMPPage homePage = new DomiSMPPage(driver); + LoginPage loginPage = homePage.goToLoginPage(); + loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password")); + + UsersPage usersPage = (UsersPage) homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_USERS); + usersPage.getCreateUserBtn().click(); + UserModel adminNewUserData = UserModel.generateUserWithADMINrole(); + usersPage.fillNewUserDataAndSave(adminNewUserData); + + usersPage.refreshPage(); + usersPage.getCreateUserBtn().click(); + String alertMessage = usersPage.fillNewUserDataAndSave(adminNewUserData); + Assert.assertEquals(alertMessage, "Invalid request [CreateUser]. Error: User with username [" + adminNewUserData.getUsername() + "] already exists!!"); + + + + + + + + + } +} \ No newline at end of file