diff --git a/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/SideNavigationComponent.java b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/SideNavigationComponent.java index 84a758394909ff7c4a05f3e6dc0a21220b28259d..2c0668c5b31261e0d3a0a3b7f4a1b21e206eceb8 100644 --- a/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/SideNavigationComponent.java +++ b/domismp-tests/domismp-tests-ui/src/main/java/ddsl/dcomponents/SideNavigationComponent.java @@ -22,6 +22,8 @@ import pages.systemSettings.domainsPage.DomainsPage; import pages.systemSettings.keyStorePage.KeystorePage; import pages.systemSettings.propertiesPage.PropertiesPage; import pages.userSettings.ProfilePage; +import pages.userSettings.accessTokensPage.AccessTokensPage; +import pages.userSettings.certificatesPage.accessTokensPage.CertificatesPage; import java.util.Objects; /** @@ -168,14 +170,17 @@ public class SideNavigationComponent extends DomiSMPPage { if (page == Pages.USER_SETTINGS_PROFILE) { openSubmenu(userSettingsExpand, profileLnk); return (T) new ProfilePage(driver); -// case USER_SETTINGS_ACCESS_TOKEN: -// //expandSection(userSettingsExpand); -// //accessTokensLnk.click(); -// return new ProfilePage(driver); -// case USER_SETTINGS_CERTIFICATES: -// expandSection(userSettingsExpand); -// return new DLink(driver, certificatesLnk); + + } + if (page == Pages.USER_SETTINGS_ACCESS_TOKEN) { + openSubmenu(userSettingsExpand, accessTokensLnk); + return (T) new AccessTokensPage(driver); } + if (page == Pages.USER_SETTINGS_CERTIFICATES) { + openSubmenu(userSettingsExpand, certificatesLnk); + return (T) new CertificatesPage(driver); + } + return null; } diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editResourcesPage/SubresourceTab.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editResourcesPage/SubresourceTab.java index bdbea75593e9323c3fc9a2a80ad5094e08dc2a6b..8950d951a774b16f2d12f628625637707ec43f18 100644 --- a/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editResourcesPage/SubresourceTab.java +++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/administration/editResourcesPage/SubresourceTab.java @@ -27,5 +27,9 @@ public class SubresourceTab extends SubcategoryTabComponent { return new EditSubresourceDocumentPage(driver); } + public void deleteSubresouceDocument(SubresourceModel subresourceModel) { + delete("Identifier", subresourceModel.getIdentifierValue()); + } + } diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/UsersPage.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/UsersPage.java index 2ba12594d154ca0c35f8a6f8b251421acd28e5b4..06f6f8f18a84dd3f359a6d202e7021c827f55a67 100644 --- a/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/UsersPage.java +++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/UsersPage.java @@ -1,6 +1,7 @@ package pages.systemSettings; import ddsl.CommonPageWithTabsAndGrid; +import ddsl.dcomponents.ConfirmationDialog; import ddsl.dcomponents.Grid.SmallGrid; import ddsl.dcomponents.commonComponents.UserDataCommonComponent; import ddsl.dobjects.DButton; @@ -21,7 +22,9 @@ public class UsersPage extends CommonPageWithTabsAndGrid { @FindBy(id = "role_id") private WebElement applicationRoleDdl; @FindBy(id = "active_id") - private WebElement isActive; + private WebElement isActiveCheckBox; + @FindBy(id = "saveButton") + private WebElement saveBtn; public UsersPage(WebDriver driver) { @@ -39,6 +42,12 @@ public class UsersPage extends CommonPageWithTabsAndGrid { return new DButton(driver, addBtn); } + public String deleteAndConfirm() { + weToDButton(deleteBtn).click(); + new ConfirmationDialog(driver).confirm(); + return getAlertMessageAndClose(); + } + public String fillNewUserDataAndSave(UserModel newUserData) { LOG.debug("Filling user data..."); try { @@ -63,7 +72,7 @@ public class UsersPage extends CommonPageWithTabsAndGrid { public Boolean isSelectedUserActive() { try { - return weToDInput(isActive).getAttribute("class").contains("checked"); + return weToDInput(isActiveCheckBox).getAttribute("class").contains("checked"); } catch (Exception e) { throw new RuntimeException(e); @@ -82,5 +91,30 @@ public class UsersPage extends CommonPageWithTabsAndGrid { return userData.getSelectedLocale(); } + public void changeApplicationRole(String role) { + try { + weToDSelect(applicationRoleDdl).selectByVisibleText(role); + weToDButton(saveBtn).click(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public String modifyIsActiveForUser(Boolean isActive) throws Exception { + if (isActive) { + weToDChecked(isActiveCheckBox).check(); + + } else { + weToDChecked(isActiveCheckBox).uncheck(); + + } + if (weToDButton(saveBtn).isEnabled()) ; + { + LOG.debug("Changing active value of access token to: [{}]", isActive); + + weToDButton(saveBtn).click(); + return getAlertArea().getAlertMessage(); + } + } } diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainsPage.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainsPage.java index a293fa7af4f939c7345de673c8c4d157793bed5d..20c4f19c3bda95ecf6cc5b33864c6697e8baf7e4 100644 --- a/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainsPage.java +++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainsPage.java @@ -1,6 +1,7 @@ package pages.systemSettings.domainsPage; import ddsl.CommonPageWithTabsAndGrid; +import ddsl.dcomponents.ConfirmationDialog; import ddsl.dcomponents.Grid.SmallGrid; import ddsl.dobjects.DButton; import org.openqa.selenium.WebDriver; @@ -57,5 +58,13 @@ public class DomainsPage extends CommonPageWithTabsAndGrid { return warningLabel.getText(); } + public void deleteandConfirm() { + weToDButton(deleteBtn).click(); + ConfirmationDialog confirmationDialog = new ConfirmationDialog(driver); + confirmationDialog.confirm(); + } + public DButton getDeleteBtn() { + return weToDButton(deleteBtn); + } } diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/SMLIntegrationTab.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/SMLIntegrationTab.java index a1c79865cf04c64b64c3c5b2bf7cd5c69f5089a1..91f78dc724a25bb5812defd302ef4c3bc65aa6df 100644 --- a/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/SMLIntegrationTab.java +++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/SMLIntegrationTab.java @@ -33,6 +33,8 @@ public class SMLIntegrationTab extends DComponent { @FindBy(id = "registerButton") private WebElement registerBtn; + @FindBy(id = "unregisterButton") + private WebElement unregisterBtn; public SMLIntegrationTab(WebDriver driver) { super(driver); @@ -90,4 +92,19 @@ public class SMLIntegrationTab extends DComponent { } + public void unregisterToSML() throws Exception { + try { + if (weToDButton(unregisterBtn).isEnabled()) { + weToDButton(unregisterBtn).click(); + ConfirmationDialog confirmationDialog = new ConfirmationDialog(driver); + confirmationDialog.confirm(); + } + + } catch (Exception e) { + LOG.error("Unregister button is not enabled"); + throw new Exception(e); + } + + } + } diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/accessTokensPage/AccessTokensPage.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/accessTokensPage/AccessTokensPage.java new file mode 100644 index 0000000000000000000000000000000000000000..46251929ae1a320e577776791e0de3ab31877875 --- /dev/null +++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/accessTokensPage/AccessTokensPage.java @@ -0,0 +1,119 @@ +package pages.userSettings.accessTokensPage; + +import ddsl.DomiSMPPage; +import ddsl.dcomponents.ConfirmationDialog; +import ddsl.dcomponents.Grid.GridPagination; +import org.openqa.selenium.By; +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 java.util.HashMap; +import java.util.List; +import java.util.NoSuchElementException; + +public class AccessTokensPage extends DomiSMPPage { + protected static final By nameLocator = By.cssSelector("input:first-of-type"); + protected static final By deleteBtnLocator = By.id("deleteButton"); + protected static final By saveBtnLocator = By.id("saveButton"); + protected static final By descriptionLocator = By.cssSelector("input[formcontrolname=\"description\"]"); + protected static final By isActiveLocator = By.cssSelector("mat-checkbox"); + protected static final By startDateLocator = By.cssSelector("input[formcontrolname=\"activeFrom\""); + protected static final By endDateLocator = By.cssSelector("input[formcontrolname=\"expireOn\"]"); + protected static final By sequenceFailedAttempsLocator = By.id("sequentialTokenLoginFailureCount_id"); + protected static final By lastFailedAttemptLocator = By.id("LastFailedAttempt_id"); + protected static final By suspendedUtilLocator = By.id("SuspendedUtil_id"); + protected static final By pagination = By.id("tokens-paginator"); + private final static Logger LOG = LoggerFactory.getLogger(AccessTokensPage.class); + GridPagination gridPagination = new GridPagination(driver, driver.findElement(pagination)); + @FindBy(id = "createAccessTokenButton") + private WebElement createBtn; + @FindBy(css = "td access-token-panel") + private List<WebElement> accessTokens; + + public AccessTokensPage(WebDriver driver) { + super(driver); + LOG.debug("Access Tokens page has loaded"); + + } + + public CreateNewAccessTokenDialog clickCreateAccessTokenBtn() { + weToDButton(createBtn).click(); + return new CreateNewAccessTokenDialog(driver); + } + + private WebElement getAccessToken(String accessTokenName) { + for (int i = 0; i <= gridPagination.getTotalPageNumber(); i++) { + for (WebElement accessToken : accessTokens) { + String currentElementName = weToDInput(accessToken.findElement(nameLocator)).getText(); + if (currentElementName.equals(accessTokenName)) { + LOG.debug("Access Token [{}] has been found on page [{}].", accessTokenName, i); + + return accessToken; + } + + } + gridPagination.goToNextPage(); + } + throw new NoSuchElementException(); + } + + public Boolean isAccessTokenPresent(String accessTokenName) { + WebElement accessToken = getAccessToken(accessTokenName); + + + return accessToken != null; + } + + public HashMap<String, String> getAccessTokenInfo(String accessTokenName) throws Exception { + HashMap<String, String> accessTokenInfo = new HashMap<>(); + WebElement accessToken = getAccessToken(accessTokenName); + + accessToken.findElement(By.cssSelector("mat-expansion-panel")).click(); + + accessTokenInfo.put("Description", weToDInput(accessToken.findElement(descriptionLocator)).getText()); + accessTokenInfo.put("Active", String.valueOf(weToDChecked(accessToken.findElement(isActiveLocator)).isChecked())); + accessTokenInfo.put("StartDate", weToDInput(accessToken.findElement(startDateLocator)).getText()); + accessTokenInfo.put("EndDate", weToDInput(accessToken.findElement(endDateLocator)).getText()); + accessTokenInfo.put("SequenceFailedAttempts", weToDInput(accessToken.findElement(sequenceFailedAttempsLocator)).getText()); + accessTokenInfo.put("LastFailedAttempts", weToDInput(accessToken.findElement(lastFailedAttemptLocator)).getText()); + accessTokenInfo.put("SuspendedUntil", weToDInput(accessToken.findElement(suspendedUtilLocator)).getText()); + return accessTokenInfo; + + } + + public String deleteAccessToken(String accessTokenName) { + + WebElement accessToken = getAccessToken(accessTokenName); + + accessToken.findElement(By.cssSelector("mat-expansion-panel")).click(); + weToDButton(accessToken.findElement(deleteBtnLocator)).click(); + new ConfirmationDialog(driver).confirm(); + return getAlertArea().getAlertMessage(); + } + + public String modifyIsActiveForAccessToken(String accessTokenName, boolean isActive) throws Exception { + + WebElement accessToken = getAccessToken(accessTokenName); + + accessToken.findElement(By.cssSelector("mat-expansion-panel")).click(); + if (isActive) { + weToDChecked(accessToken.findElement(isActiveLocator)).check(); + + } else { + weToDChecked(accessToken.findElement(isActiveLocator)).uncheck(); + + } + if (weToDButton(accessToken.findElement(saveBtnLocator)).isEnabled()) ; + { + LOG.debug("Changing active value of access token to: [{}]", isActive); + + weToDButton(accessToken.findElement(saveBtnLocator)).click(); + new ConfirmationDialog(driver).confirm(); + return getAlertArea().getAlertMessage(); + } + } + +} diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/accessTokensPage/CreateNewAccessTokenDialog.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/accessTokensPage/CreateNewAccessTokenDialog.java new file mode 100644 index 0000000000000000000000000000000000000000..b3232590f72d686897abb6783d8f67d08e491915 --- /dev/null +++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/accessTokensPage/CreateNewAccessTokenDialog.java @@ -0,0 +1,72 @@ +package pages.userSettings.accessTokensPage; + +import ddsl.dcomponents.DComponent; +import ddsl.dobjects.DButton; +import ddsl.dobjects.DInput; +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 java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class CreateNewAccessTokenDialog extends DComponent { + @FindBy(css = "mat-dialog-content mat-form-field input[formcontrolname=\"description\"]") + private WebElement descriptionInput; + @FindBy(css = "mat-dialog-content mat-form-field input[placeholder=\"Start date\"]") + private WebElement startDateInput; + @FindBy(css = "mat-dialog-content mat-form-field input[placeholder=\"End date\"]") + private WebElement enddateInput; + @FindBy(css = "mat-dialog-content mat-checkbox") + private WebElement activeCheckbox; + @FindBy(id = "generatedAccessTokenButton") + private WebElement generateTokenBtn; + @FindBy(id = "alertmessage_id") + private WebElement accesstokenGeneratedMessage; + @FindBy(id = "closeDialogButton") + private WebElement closeBtn; + + + public CreateNewAccessTokenDialog(WebDriver driver) { + + super(driver); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this); + + } + + public DInput getDescriptionInput() { + return new DInput(driver, descriptionInput); + } + + public DInput getStartDateInput() { + return new DInput(driver, startDateInput); + } + + public DInput getEndDateInput() { + return new DInput(driver, enddateInput); + } + + public DButton getCreateNewTokenBtn() { + return new DButton(driver, generateTokenBtn); + } + + public String getTokenIdAndCloseDialog() { + String message = accesstokenGeneratedMessage.getText(); + String pattern = "ID: \"([^\"]+)\""; + Pattern regex = Pattern.compile(pattern); + Matcher matcher = regex.matcher(message); + if (matcher.find()) { + String tokenId = matcher.group(1); + if (!tokenId.isEmpty()) { + weToDButton(closeBtn).click(); + return tokenId; + } + } + + return null; + } + + +} diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/certificatesPage/accessTokensPage/CertificateDetailsDialog.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/certificatesPage/accessTokensPage/CertificateDetailsDialog.java new file mode 100644 index 0000000000000000000000000000000000000000..b7a1dc9a5223ac9116e4311f193a6f38bb3c5d13 --- /dev/null +++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/certificatesPage/accessTokensPage/CertificateDetailsDialog.java @@ -0,0 +1,45 @@ +package pages.userSettings.certificatesPage.accessTokensPage; + +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 java.util.HashMap; + +public class CertificateDetailsDialog extends DComponent { + @FindBy(id = "certificateId_id") + private WebElement smpCertificateId; + @FindBy(id = "subject_id") + private WebElement subjectName; + @FindBy(css = "keystore-certificate-dialog input[placeholder=\"Valid from date\"]") + private WebElement validFrom; + @FindBy(css = "mat-dialog-content mat-form-field input[placeholder=\"Valid to date\"]") + private WebElement validTo; + @FindBy(id = "issuer_id") + private WebElement issuerName; + @FindBy(id = "servialNumber_id") + private WebElement serialNumber; + @FindBy(id = "closeDialogButton") + private WebElement closeBtn; + + + public CertificateDetailsDialog(WebDriver driver) { + super(driver); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this); + } + + public HashMap<String, String> getCertificateDetails() { + HashMap<String, String> certificateDetailsInfo = new HashMap<>(); + certificateDetailsInfo.put("SmpCertificateId", weToDInput(smpCertificateId).getText()); + certificateDetailsInfo.put("SubjectName", weToDInput(subjectName).getText()); + certificateDetailsInfo.put("ValidFromDate", weToDInput(validFrom).getText()); + certificateDetailsInfo.put("ValidToDate", weToDInput(validTo).getText()); + certificateDetailsInfo.put("Issuer", weToDInput(issuerName).getText()); + certificateDetailsInfo.put("SerialNumber", weToDInput(serialNumber).getText()); + return certificateDetailsInfo; + } + +} diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/certificatesPage/accessTokensPage/CertificatesPage.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/certificatesPage/accessTokensPage/CertificatesPage.java new file mode 100644 index 0000000000000000000000000000000000000000..950b3866138151df4d6ef44d684a3ff51478edf7 --- /dev/null +++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/certificatesPage/accessTokensPage/CertificatesPage.java @@ -0,0 +1,101 @@ +package pages.userSettings.certificatesPage.accessTokensPage; + +import ddsl.DomiSMPPage; +import ddsl.dcomponents.ConfirmationDialog; +import ddsl.dcomponents.Grid.GridPagination; +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.pagefactory.AjaxElementLocatorFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.List; + +public class CertificatesPage extends DomiSMPPage { + protected static final By nameLocator = By.cssSelector("input:first-of-type"); + protected static final By deleteBtnLocator = By.id("deleteButton"); + protected static final By showDetailsBtnLocator = By.id("showButton"); + protected static final By descriptionLocator = By.cssSelector("input[formcontrolname=\"description\"]"); + protected static final By isActiveLocator = By.cssSelector("mat-checkbox"); + protected static final By startDateLocator = By.cssSelector("input[formcontrolname=\"activeFrom\""); + protected static final By endDateLocator = By.cssSelector("input[formcontrolname=\"expireOn\"]"); + protected static final By pagination = By.id("tokens-paginator"); + private final static Logger LOG = LoggerFactory.getLogger(CertificatesPage.class); + GridPagination gridPagination = new GridPagination(driver, driver.findElement(pagination)); + @FindBy(id = "importNewCertificateButton") + private WebElement importBtn; + @FindBy(css = "td user-certificate-panel") + private List<WebElement> certificateList; + + public CertificatesPage(WebDriver driver) { + super(driver); + LOG.debug("Certificate page has loaded"); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this); + + } + + public ImportNewCertificatesDialog clickOnImportNewCertificate() { + weToDButton(importBtn).click(); + return new ImportNewCertificatesDialog(driver); + } + + private WebElement getCertificate(String certificateName) { + for (int i = 0; i <= gridPagination.getTotalPageNumber(); i++) { + for (WebElement accessToken : certificateList) { + String currentElementName = weToDInput(accessToken.findElement(nameLocator)).getText(); + if (currentElementName.equals(certificateName)) { + LOG.debug("Certificate [{}] has been found on page [{}].", certificateName, i); + + return accessToken; + } + + } + gridPagination.goToNextPage(); + } + return null; + } + + public Boolean isCertificatePresent(String certificateId) { + WebElement certificate = getCertificate(certificateId); + + + return certificate != null; + } + + public HashMap<String, String> getCertificateInfo(String certificateId) throws Exception { + HashMap<String, String> certificateIdInfo = new HashMap<>(); + WebElement accessToken = getCertificate(certificateId); + + accessToken.findElement(By.cssSelector("mat-expansion-panel")).click(); + + certificateIdInfo.put("Description", weToDInput(accessToken.findElement(descriptionLocator)).getText()); + certificateIdInfo.put("Active", String.valueOf(weToDChecked(accessToken.findElement(isActiveLocator)).isChecked())); + certificateIdInfo.put("StartDate", weToDInput(accessToken.findElement(startDateLocator)).getText()); + certificateIdInfo.put("EndDate", weToDInput(accessToken.findElement(endDateLocator)).getText()); + return certificateIdInfo; + + } + + public HashMap<String, String> getCertificateDetailsInfo(String certificateId) { + WebElement accessToken = getCertificate(certificateId); + accessToken.findElement(By.cssSelector("mat-expansion-panel")).click(); + accessToken.findElement(showDetailsBtnLocator).click(); + return new CertificateDetailsDialog(driver).getCertificateDetails(); + } + + + public String deleteCertificate(String certificateId) { + + WebElement certificate = getCertificate(certificateId); + + certificate.findElement(By.cssSelector("mat-expansion-panel")).click(); + weToDButton(certificate.findElement(deleteBtnLocator)).click(); + new ConfirmationDialog(driver).confirm(); + return getAlertArea().getAlertMessage(); + } + +} diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/certificatesPage/accessTokensPage/ImportNewCertificatesDialog.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/certificatesPage/accessTokensPage/ImportNewCertificatesDialog.java new file mode 100644 index 0000000000000000000000000000000000000000..66c4a8f82f88e601b7638b7f0e8c77015d2ae0bf --- /dev/null +++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/userSettings/certificatesPage/accessTokensPage/ImportNewCertificatesDialog.java @@ -0,0 +1,65 @@ +package pages.userSettings.certificatesPage.accessTokensPage; + +import ddsl.dcomponents.DComponent; +import ddsl.dobjects.DButton; +import ddsl.dobjects.DInput; +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 ImportNewCertificatesDialog extends DComponent { + @FindBy(css = "mat-dialog-content mat-form-field input[formcontrolname=\"description\"]") + private WebElement descriptionInput; + @FindBy(css = "mat-dialog-content mat-form-field input[placeholder=\"Start date\"]") + private WebElement startDateInput; + @FindBy(css = "mat-dialog-content mat-form-field input[placeholder=\"End date\"]") + private WebElement enddateInput; + @FindBy(css = "mat-dialog-content mat-checkbox") + private WebElement activeCheckbox; + @FindBy(id = "custom-file-upload") + private WebElement importBtn; + @FindBy(css = "mat-dialog-content mat-form-field input[formcontrolname=\"certificateId\"]") + private WebElement smpCertificateId; + @FindBy(css = "mat-dialog-content mat-form-field input[formcontrolname=\"subject\"]") + private WebElement subjectName; + @FindBy(css = "mat-dialog-content mat-form-field input[formcontrolname=\"validFrom\"]") + private WebElement validFrom; + @FindBy(css = "mat-dialog-content mat-form-field input[formcontrolname=\"validTo\"]") + private WebElement validTo; + @FindBy(css = "mat-dialog-content mat-form-field input[formcontrolname=\"issuer\"]") + private WebElement issuerName; + @FindBy(css = "mat-dialog-content mat-form-field input[formcontrolname=\"serialNumber\"]") + private WebElement serialNumber; + @FindBy(id = "storeCertificateCredentialsButton") + private WebElement saveCertificateBtn; + @FindBy(id = "closeDialogButton") + private WebElement closeBtn; + @FindBy(css = "mat-dialog-content div[id=\"alertmessage_id\"]") + private WebElement alertMessage; + + + public ImportNewCertificatesDialog(WebDriver driver) { + + super(driver); + PageFactory.initElements(new AjaxElementLocatorFactory(driver, data.getWaitTimeShort()), this); + + } + + public DInput getDescriptionInput() { + return new DInput(driver, descriptionInput); + } + + public void importCertificate(String filePath) { + importBtn.sendKeys(filePath); + } + + public DButton getSaveCertificateBtn() { + return new DButton(driver, saveCertificateBtn); + } + + public String getAlertMessage() { + return alertMessage.getText(); + } +} diff --git a/domismp-tests/domismp-tests-ui/src/main/java/utils/Utils.java b/domismp-tests/domismp-tests-ui/src/main/java/utils/Utils.java index 6ced07f5fce0ed2852eccb12615d085846ddbec6..830995cbae197b1f7cc2e2afa253fcf6d5e2e9d9 100644 --- a/domismp-tests/domismp-tests-ui/src/main/java/utils/Utils.java +++ b/domismp-tests/domismp-tests-ui/src/main/java/utils/Utils.java @@ -2,6 +2,9 @@ package utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -29,4 +32,11 @@ public class Utils { LOG.error("No alias found in the message: "+message); throw new NullPointerException("No alias found in the message: "+message); } + + public static String getCurrentDate(String pattern) { + SimpleDateFormat dateFormat = new SimpleDateFormat(pattern); + Date currentDate = new Date(); + return dateFormat.format(currentDate); + + } } diff --git a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/AccessTokensPgTests.java b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/AccessTokensPgTests.java new file mode 100644 index 0000000000000000000000000000000000000000..bdf01f3f5e2f9ea92dac0711a9fabafa30235d64 --- /dev/null +++ b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/AccessTokensPgTests.java @@ -0,0 +1,157 @@ +package domiSMPTests.ui; + +import ddsl.DomiSMPPage; +import ddsl.enums.Pages; +import domiSMPTests.SeleniumTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import org.testng.asserts.SoftAssert; +import pages.LoginPage; +import pages.userSettings.accessTokensPage.AccessTokensPage; +import pages.userSettings.accessTokensPage.CreateNewAccessTokenDialog; +import rest.models.UserModel; +import utils.Generator; +import utils.Utils; + +import java.util.HashMap; + + +public class AccessTokensPgTests extends SeleniumTest { + + SoftAssert soft; + DomiSMPPage homePage; + LoginPage loginPage; + AccessTokensPage accessTokensPage; + UserModel normalUser; + + @BeforeMethod(alwaysRun = true) + public void beforeTest() throws Exception { + soft = new SoftAssert(); + homePage = new DomiSMPPage(driver); + loginPage = homePage.goToLoginPage(); + loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password")); + accessTokensPage = homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_ACCESS_TOKEN); + + normalUser = UserModel.generateUserWithUSERrole(); + rest.users().createUser(normalUser); + + } + + @Test(description = "ACCTOK-01 User is able to create valid Access Token") + public void userIsAbleToCreateValidAccessToken() throws Exception { + String currentDate = Utils.getCurrentDate("MM/dd/yyyy"); + String description = Generator.randomAlphaNumericValue(10); + //Create new token + CreateNewAccessTokenDialog createNewAccessTokenDialog = accessTokensPage.clickCreateAccessTokenBtn(); + createNewAccessTokenDialog.getDescriptionInput().fill(description); + createNewAccessTokenDialog.getStartDateInput().fill(currentDate); + createNewAccessTokenDialog.getEndDateInput().fill(currentDate); + createNewAccessTokenDialog.getCreateNewTokenBtn().click(); + String tokenID = createNewAccessTokenDialog.getTokenIdAndCloseDialog(); + + + soft.assertTrue(accessTokensPage.isAccessTokenPresent(tokenID), "Access Token ID is not correct"); + HashMap<String, String> accessTokenInfo = accessTokensPage.getAccessTokenInfo(tokenID); + soft.assertEquals(accessTokenInfo.get("Description"), description, "Access Token description is not correct"); + soft.assertEquals(accessTokenInfo.get("Active"), "true", "Access Token active status is not correct"); + soft.assertEquals(accessTokenInfo.get("StartDate"), currentDate, "Access Token start date is not correct"); + soft.assertEquals(accessTokenInfo.get("EndDate"), currentDate, "Access Token end date is not correct"); + soft.assertEquals(accessTokenInfo.get("SequenceFailedAttempts"), "0", "Access Token SequenceFailedAttempts is not correct"); + soft.assertEquals(accessTokenInfo.get("LastFailedAttempts"), "---", "Access Token LastFailedAttempts is not correct"); + soft.assertEquals(accessTokenInfo.get("SuspendedUntil"), "---", "Access Token SuspendedUntil is not correct"); + + //Check if user role can create access tokens + accessTokensPage.logout(); + loginPage.login(normalUser.getUsername(), data.getNewPassword()); + accessTokensPage = homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_ACCESS_TOKEN); + description = Generator.randomAlphaNumericValue(10); + //Create new token + createNewAccessTokenDialog = accessTokensPage.clickCreateAccessTokenBtn(); + createNewAccessTokenDialog.getDescriptionInput().fill(description); + createNewAccessTokenDialog.getStartDateInput().fill(currentDate); + createNewAccessTokenDialog.getEndDateInput().fill(currentDate); + createNewAccessTokenDialog.getCreateNewTokenBtn().click(); + tokenID = createNewAccessTokenDialog.getTokenIdAndCloseDialog(); + + + soft.assertTrue(accessTokensPage.isAccessTokenPresent(tokenID), "Access Token ID is not correct"); + accessTokenInfo = accessTokensPage.getAccessTokenInfo(tokenID); + soft.assertEquals(accessTokenInfo.get("Description"), description, "Access Token description is not correct"); + soft.assertEquals(accessTokenInfo.get("Active"), "true", "Access Token active status is not correct"); + soft.assertEquals(accessTokenInfo.get("StartDate"), currentDate, "Access Token start date is not correct"); + soft.assertEquals(accessTokenInfo.get("EndDate"), currentDate, "Access Token end date is not correct"); + soft.assertEquals(accessTokenInfo.get("SequenceFailedAttempts"), "0", "Access Token SequenceFailedAttempts is not correct"); + soft.assertEquals(accessTokenInfo.get("LastFailedAttempts"), "---", "Access Token LastFailedAttempts is not correct"); + soft.assertEquals(accessTokenInfo.get("SuspendedUntil"), "---", "Access Token SuspendedUntil is not correct"); + + + soft.assertAll(); + } + + @Test(description = "ACCTOK-04 User is able to Delete access token") + public void userIsAbleToDeleteAccessToken() { + String currentDate = Utils.getCurrentDate("MM/dd/yyyy"); + String description = Generator.randomAlphaNumericValue(10); + //Create new token + CreateNewAccessTokenDialog createNewAccessTokenDialog = accessTokensPage.clickCreateAccessTokenBtn(); + createNewAccessTokenDialog.getDescriptionInput().fill(description); + createNewAccessTokenDialog.getStartDateInput().fill(currentDate); + createNewAccessTokenDialog.getEndDateInput().fill(currentDate); + createNewAccessTokenDialog.getCreateNewTokenBtn().click(); + String tokenID = createNewAccessTokenDialog.getTokenIdAndCloseDialog(); + String alertMessage = accessTokensPage.deleteAccessToken(tokenID); + + soft.assertEquals(alertMessage, "Access token \"" + tokenID + "\" has been deleted!", "Access Token ID is not correct"); + soft.assertTrue(accessTokensPage.isAccessTokenPresent(tokenID)); + soft.assertAll(); + } + + @Test(description = "ACCTOK-04 User is able to activate/inactivate existing access token") + public void userIsAbleToActivateDeactivateExistingAccessToken() throws Exception { + String currentDate = Utils.getCurrentDate("MM/dd/yyyy"); + String description = Generator.randomAlphaNumericValue(10); + //Create new token + CreateNewAccessTokenDialog createNewAccessTokenDialog = accessTokensPage.clickCreateAccessTokenBtn(); + createNewAccessTokenDialog.getDescriptionInput().fill(description); + createNewAccessTokenDialog.getStartDateInput().fill(currentDate); + createNewAccessTokenDialog.getEndDateInput().fill(currentDate); + createNewAccessTokenDialog.getCreateNewTokenBtn().click(); + + String tokenID = createNewAccessTokenDialog.getTokenIdAndCloseDialog(); + String alertMessage = accessTokensPage.modifyIsActiveForAccessToken(tokenID, false); + //Set accesss token to inactive + soft.assertEquals(alertMessage, "Access token \"" + tokenID + "\" has been updated!", "Access Token ID is not correct"); + HashMap<String, String> accessTokenInfo = accessTokensPage.getAccessTokenInfo(tokenID); + soft.assertEquals(accessTokenInfo.get("Active"), "false", "Access Token active status is not correct"); + + //Set accesss token to active + + accessTokensPage.modifyIsActiveForAccessToken(tokenID, true); + accessTokenInfo = accessTokensPage.getAccessTokenInfo(tokenID); + soft.assertEquals(accessTokenInfo.get("Active"), "true", "Access Token active status is not correct"); + + //Check if user role can create inactivate tokens + + accessTokensPage.logout(); + loginPage.login(normalUser.getUsername(), data.getNewPassword()); + accessTokensPage = homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_ACCESS_TOKEN); + + description = Generator.randomAlphaNumericValue(10); + //Create new token + createNewAccessTokenDialog = accessTokensPage.clickCreateAccessTokenBtn(); + createNewAccessTokenDialog.getDescriptionInput().fill(description); + createNewAccessTokenDialog.getStartDateInput().fill(currentDate); + createNewAccessTokenDialog.getEndDateInput().fill(currentDate); + createNewAccessTokenDialog.getCreateNewTokenBtn().click(); + + tokenID = createNewAccessTokenDialog.getTokenIdAndCloseDialog(); + alertMessage = accessTokensPage.modifyIsActiveForAccessToken(tokenID, false); + //Set accesss token to inactive + soft.assertEquals(alertMessage, "Access token \"" + tokenID + "\" has been updated!", "Access Token ID is not correct"); + accessTokenInfo = accessTokensPage.getAccessTokenInfo(tokenID); + soft.assertEquals(accessTokenInfo.get("Active"), "false", "Access Token active status is not correct"); + + soft.assertAll(); + } + +} diff --git a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/CertificatesPgTests.java b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/CertificatesPgTests.java new file mode 100644 index 0000000000000000000000000000000000000000..2e377393afc6f67a2652dce7b4028f3e1973cb65 --- /dev/null +++ b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/CertificatesPgTests.java @@ -0,0 +1,134 @@ +package domiSMPTests.ui; + +import ddsl.DomiSMPPage; +import ddsl.enums.Pages; +import domiSMPTests.SeleniumTest; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; +import org.testng.asserts.SoftAssert; +import pages.LoginPage; +import pages.userSettings.certificatesPage.accessTokensPage.CertificatesPage; +import pages.userSettings.certificatesPage.accessTokensPage.ImportNewCertificatesDialog; +import rest.models.UserModel; +import utils.FileUtils; +import utils.Generator; + +import java.util.HashMap; + + +public class CertificatesPgTests extends SeleniumTest { + + SoftAssert soft; + DomiSMPPage homePage; + LoginPage loginPage; + CertificatesPage certificatePage; + UserModel normalUser; + + @BeforeMethod(alwaysRun = true) + public void beforeTest() throws Exception { + soft = new SoftAssert(); + homePage = new DomiSMPPage(driver); + loginPage = homePage.goToLoginPage(); + loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password")); + certificatePage = homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_CERTIFICATES); + + normalUser = UserModel.generateUserWithUSERrole(); + rest.users().createUser(normalUser); + + } + + @Test(description = "CERT-01 Users are able to import valid certificate") + public void usersAreAbleToImportValidCertificate() throws Exception { + String description = Generator.randomAlphaNumericValue(10); + String path = FileUtils.getAbsoluteTruststorePath("validCertificate.cer"); + String certificateId = "CN=red_gw,O=eDelivery,C=BE:00000000110fa0d8"; + //Delete certificate if exists + try { + certificatePage.deleteCertificate(certificateId); + } catch (Exception ignored) { + + } + //Import new certificate + ImportNewCertificatesDialog importNewCertificatesDialog = certificatePage.clickOnImportNewCertificate(); + importNewCertificatesDialog.getDescriptionInput().fill(description); + + importNewCertificatesDialog.importCertificate(path); + importNewCertificatesDialog.getSaveCertificateBtn().click(); + soft.assertTrue(certificatePage.isCertificatePresent(certificateId)); + + HashMap<String, String> certificateInfo = certificatePage.getCertificateInfo(certificateId); + soft.assertEquals(certificateInfo.get("Description"), description, "Access Token description is not correct"); + soft.assertEquals(certificateInfo.get("Active"), "true", "Access Token active status is not correct"); + soft.assertEquals(certificateInfo.get("StartDate"), "3/23/2023", "Access Token start date is not correct"); + soft.assertEquals(certificateInfo.get("EndDate"), "3/22/2033", "Access Token end date is not correct"); + //Validate certificate details + HashMap<String, String> certificateIDetailsnfo = certificatePage.getCertificateDetailsInfo(certificateId); + soft.assertEquals(certificateIDetailsnfo.get("SmpCertificateId"), "CN=red_gw,O=eDelivery,C=BE:00000000110fa0d8", "Certificate id is not correct"); + soft.assertEquals(certificateIDetailsnfo.get("SubjectName"), "C=BE,O=eDelivery,CN=red_gw", "Certificate subject is not correct"); + soft.assertTrue(certificateIDetailsnfo.get("ValidFromDate").startsWith("3/23/23"), "Certificate start date is not correct"); + soft.assertTrue(certificateIDetailsnfo.get("ValidToDate").startsWith("3/22/33"), "Certificate end date is not correct"); + soft.assertEquals(certificateIDetailsnfo.get("Issuer"), "C=BE,O=eDelivery,CN=red_gw", "Certificate issuer is not correct"); + soft.assertEquals(certificateIDetailsnfo.get("SerialNumber"), "110fa0d8", "Certificate serial number is not correct"); + soft.assertAll(); + } + + @Test(description = "CERT-03 User is not able to add duplicated certificate") + public void userIsNotAbleToAddDuplicatedCertificate() { + + String description = Generator.randomAlphaNumericValue(10); + String path = FileUtils.getAbsoluteTruststorePath("validCertificate.cer"); + String certificateId = "CN=red_gw,O=eDelivery,C=BE:00000000110fa0d8"; + //Delete certificate if exists + try { + certificatePage.deleteCertificate(certificateId); + } catch (Exception ignored) { + + } + //Import new certificate + ImportNewCertificatesDialog importNewCertificatesDialog = certificatePage.clickOnImportNewCertificate(); + importNewCertificatesDialog.getDescriptionInput().fill(description); + + importNewCertificatesDialog.importCertificate(path); + importNewCertificatesDialog.getSaveCertificateBtn().click(); + soft.assertTrue(certificatePage.isCertificatePresent(certificateId)); + + //Try to import duplicated certificate + //Import new certificate + importNewCertificatesDialog = certificatePage.clickOnImportNewCertificate(); + importNewCertificatesDialog.getDescriptionInput().fill(description); + + importNewCertificatesDialog.importCertificate(path); + soft.assertEquals(importNewCertificatesDialog.getAlertMessage(), "Certificate with the same Subject is already registered!"); + soft.assertFalse(importNewCertificatesDialog.getSaveCertificateBtn().isEnabled()); + + soft.assertAll(); + } + + @Test(description = "CERT-04 User is able to delete certificate") + public void userIsAbleToDeleteCertificate() { + + String description = Generator.randomAlphaNumericValue(10); + String path = FileUtils.getAbsoluteTruststorePath("validCertificate.cer"); + String certificateId = "CN=red_gw,O=eDelivery,C=BE:00000000110fa0d8"; + //Delete certificate if exists + try { + certificatePage.deleteCertificate(certificateId); + } catch (Exception ignored) { + + } + //Import new certificate + ImportNewCertificatesDialog importNewCertificatesDialog = certificatePage.clickOnImportNewCertificate(); + importNewCertificatesDialog.getDescriptionInput().fill(description); + + importNewCertificatesDialog.importCertificate(path); + importNewCertificatesDialog.getSaveCertificateBtn().click(); + soft.assertTrue(certificatePage.isCertificatePresent(certificateId)); + String deleteAlert = certificatePage.deleteCertificate(certificateId); + soft.assertEquals(deleteAlert, "Certificate \"" + certificateId + "\" has been deleted!", "Certificate has not been deleted"); + soft.assertFalse(certificatePage.isCertificatePresent(certificateId)); + + soft.assertAll(); + } + + +} diff --git a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/DomainsPgTests.java b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/DomainsPgTests.java index e7dde0bd0c4d018e032c69b7031de2f19099e139..9de2bd7ca134d4dc2f8181e5fd94654ac93a816f 100644 --- a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/DomainsPgTests.java +++ b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/DomainsPgTests.java @@ -1,5 +1,6 @@ package domiSMPTests.ui; +import com.fasterxml.jackson.core.JsonProcessingException; import ddsl.DomiSMPPage; import ddsl.dcomponents.commonComponents.domanPropertyEditDialog.DomainPropertyEditDialog; import ddsl.enums.Pages; @@ -14,9 +15,7 @@ import pages.LoginPage; import pages.SmlPage; import pages.administration.editDomainsPage.EditDomainsPage; import pages.systemSettings.domainsPage.DomainsPage; -import rest.models.DomainModel; -import rest.models.MemberModel; -import rest.models.UserModel; +import rest.models.*; import utils.TestRunData; import java.util.Arrays; @@ -25,10 +24,7 @@ import java.util.List; /** * This class has the tests against Domains Page */ -//@Ignore("DomainsPgTests:beforeTest Failing tests: org.openqa.selenium.ElementClickInterceptedException: Element <select id=\"signatureKeyAlias_id\" " + -// "class=\"mat-mdc-input-element mat-mdc-tooltip-trigger ng-tns-c1205077789-11 ng-untouched ng-pristine ng-valid " + -// "mat-mdc-form-field-input-control mdc-text-field__input cdk-text-field-autofill-monitored cdk-focused cdk-program-focused\"> " + -// "is not clickable at point (1014,364) because another element <mat-label class=\"ng-tns-c1205077789-11\"> obscures it" ) + public class DomainsPgTests extends SeleniumTest { DomiSMPPage homePage; LoginPage loginPage; @@ -180,6 +176,107 @@ public class DomainsPgTests extends SeleniumTest { soft.assertAll(); } + @Test(description = "DOM-04 System admin is not able to create duplicated Domains") + public void systemAdminIsAbleToDeleteDomainsWithoutResources() throws JsonProcessingException { + DomainModel domainModel = DomainModel.generatePublicDomainModelWithSML(); + + MemberModel superMember = new MemberModel(); + superMember.setUsername(TestRunData.getInstance().getAdminUsername()); + superMember.setRoleType("ADMIN"); + + //create domain + domainModel = rest.domains().createDomain(domainModel); + + //add users to domain + rest.domains().addMembersToDomain(domainModel, superMember); + domainsPage.refreshPage(); + domainsPage + .getLeftSideGrid().searchAndClickElementInColumn("Domain code", domainModel.getDomainCode()); + domainsPage.deleteandConfirm(); + soft.assertEquals(domainsPage.getAlertArea().getAlertMessage(), "Domain: [" + domainModel.getDomainCode() + "] is removed!", "Alert message is wrong"); + + soft.assertFalse(domainsPage + .getLeftSideGrid().isValuePresentInColumn("Domain code", domainModel.getDomainCode())); + soft.assertAll(); + } + + @Test(description = "DOM-04 System admin is not able to create duplicated Domains") + public void systemAdminIsNotAbleToDeleteDomainsWithResources() throws JsonProcessingException { + DomainModel domainModel = DomainModel.generatePublicDomainModelWithSML(); + GroupModel groupModel = GroupModel.generatePublicGroup(); + ResourceModel resourceModel = ResourceModel.generatePublicResourceUnregisteredToSML(); + + + MemberModel superMember = new MemberModel(); + superMember.setUsername(TestRunData.getInstance().getAdminUsername()); + superMember.setRoleType("ADMIN"); + + + //create domain + domainModel = rest.domains().createDomain(domainModel); + + //add users to domain + rest.domains().addMembersToDomain(domainModel, superMember); + + //add resources to domain + List<ResourceTypes> resourcesToBeAdded = Arrays.asList(ResourceTypes.OASIS1, ResourceTypes.OASIS3, ResourceTypes.OASIS2); + domainModel = rest.domains().addResourcesToDomain(domainModel, resourcesToBeAdded); + + //create group for domain + groupModel = rest.domains().createGroupForDomain(domainModel, groupModel); + + + //add resource to group + rest.resources().createResourceForGroup(domainModel, groupModel, resourceModel); + + + domainsPage.refreshPage(); + domainsPage + .getLeftSideGrid().searchAndClickElementInColumn("Domain code", domainModel.getDomainCode()); + domainsPage.deleteandConfirm(); + soft.assertEquals(domainsPage.getAlertArea().getAlertMessage(), "Can not delete domain because it has resources [1]! Delete resources first!", "Alert message is wrong"); + soft.assertTrue(domainsPage + .getLeftSideGrid().isValuePresentInColumn("Domain code", domainModel.getDomainCode())); + soft.assertAll(); + } + + @Test(description = "DOM-07 System admin can delete only unregister SML domains") + public void systemAdminCanDeleteOnlyUnregisterSMLDomains() throws Exception { + DomainModel domainModelGenerated = DomainModel.generatePublicDomainModelWithSML(); + + MemberModel superMember = new MemberModel(); + superMember.setUsername(TestRunData.getInstance().getAdminUsername()); + superMember.setRoleType("ADMIN"); + + + //create domain + DomainModel domainModel = rest.domains().createDomain(domainModelGenerated); + + //add users to domain + rest.domains().addMembersToDomain(domainModel, superMember); + //add resources to domain + List<ResourceTypes> resourcesToBeAdded = Arrays.asList(ResourceTypes.OASIS1, ResourceTypes.OASIS3, ResourceTypes.OASIS2); + domainModel = rest.domains().addResourcesToDomain(domainModel, resourcesToBeAdded); + + domainsPage.refreshPage(); + + domainsPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click(); + domainsPage.goToTab("SML integration"); + domainsPage.getSMLIntegrationTab().fillSMLIntegrationTab(domainModelGenerated); + domainsPage.getSMLIntegrationTab().saveChanges(); + domainsPage.getSMLIntegrationTab().registerToSML(); + + String alert = domainsPage.getAlertMessageAndClose(); + soft.assertEquals(alert, "Domain [" + domainModel.getDomainCode() + "] registered to SML!"); + soft.assertFalse(domainsPage.getDeleteBtn().isEnabled(), "Delete button is enabled!"); + + domainsPage.getSMLIntegrationTab().unregisterToSML(); + domainsPage.deleteandConfirm(); + soft.assertFalse(domainsPage.getLeftSideGrid().isValuePresentInColumn("Domain code", domainModel.getDomainCode()), "Deleted domain is still in the grid"); + + + soft.assertAll(); + } @Test(description = "DOM-19 - Domain admins are able to change default properties for domains") public void systemAdminsAreAbleToChangeDefaultPropertiesForDomains() throws Exception { diff --git a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/EditResourcePgTests.java b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/EditResourcePgTests.java index 0a67e2b7c406928e08c067112793eba43c450c9d..e007edff16d66e113d4d4d3daaa6bafd5e8e59f4 100644 --- a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/EditResourcePgTests.java +++ b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/EditResourcePgTests.java @@ -25,6 +25,7 @@ import utils.XMLUtils; import javax.xml.parsers.ParserConfigurationException; import java.util.Arrays; import java.util.List; +import java.util.NoSuchElementException; public class EditResourcePgTests extends SeleniumTest { DomiSMPPage homePage; @@ -272,6 +273,40 @@ public class EditResourcePgTests extends SeleniumTest { soft.assertAll(); } + @Test(description = "EDTRES-11 Resource admin is able to delete subresource", priority = 1) + public void resourceAdminsIsAbleToDeleteSubResource() throws Exception { + + ResourceModel resourceModelOasis1 = ResourceModel.generatePublicResourceWithReview(ResourceTypes.OASIS1); + SubresourceModel subresourceModel = SubresourceModel.generatePublicSubResource(); + + //add resource to group + resourceModelOasis1 = rest.resources().createResourceForGroup(domainModel, groupModel, resourceModelOasis1); + rest.resources().addMembersToResource(domainModel, groupModel, resourceModelOasis1, adminMember); + + editResourcePage.refreshPage(); + editResourcePage.selectDomain(domainModel, groupModel, resourceModelOasis1); + + editResourcePage.goToTab("Subresources"); + CreateSubresourceDetailsDialog createSubresourceDetailsDialog = editResourcePage.getSubresourceTab().createSubresource(); + createSubresourceDetailsDialog.fillResourceDetails(subresourceModel); + createSubresourceDetailsDialog.tryClickOnSave(); + editResourcePage.getSubresourceTab().deleteSubresouceDocument(subresourceModel); + String deleteResourceAlert = editResourcePage.getAlertMessageAndClose(); + + + soft.assertEquals(deleteResourceAlert, "Subresource with scheme [" + subresourceModel.getIdentifierScheme() + "] and identifier: [" + subresourceModel.getIdentifierValue() + "] deleted."); + soft.assertFalse(editResourcePage.getSubresourceTab().getGrid().isValuePresentInColumn("Identifier", subresourceModel.getIdentifierValue()), "Deleted subresource is stil in the grid."); + ResourcesPage resourcesPage = editResourcePage.getSidebar().navigateTo(Pages.SEARCH_RESOURCES); + try { + resourcesPage.openURLSubResouceDocument(resourceModelOasis1.getIdentifierValue(), resourceModelOasis1.getIdentifierScheme(), subresourceModel.getIdentifierValue()); + soft.assertTrue(false); + } catch (NoSuchElementException e) { + soft.assertTrue(true); + } + soft.assertAll(); + + } + @Test(description = "EDTRES-15 - Resource Administrator can publish resource documents with approve status", priority = 1) public void resourceAdministratorsCanPublisResourceDocumentsWithApproveStatus() throws JsonProcessingException { @@ -317,7 +352,7 @@ public class EditResourcePgTests extends SeleniumTest { } - @Test(description = "EDTRES-15 - Resource Administrator can publish subresource documents with approve status", priority = 1) + @Test(description = "EDTRES-16 - Resource Administrator can publish SubResource documents with approve status", priority = 1) public void resourceAdministratorsCanPublisSUBResourceDocumentsWithApproveStatus() throws Exception { diff --git a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/UsersPgTests.java b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/UsersPgTests.java index 2361b7e7f15d436c93f84257556a1433864373da..b40ee83aebfa4bd9a4642036efe73d65f17e9740 100644 --- a/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/UsersPgTests.java +++ b/domismp-tests/domismp-tests-ui/src/test/java/domiSMPTests/ui/UsersPgTests.java @@ -1,7 +1,9 @@ package domiSMPTests.ui; import ddsl.DomiSMPPage; +import ddsl.dcomponents.SetChangePasswordDialog; import ddsl.dobjects.DWait; +import ddsl.enums.ApplicationRoles; import ddsl.enums.Pages; import domiSMPTests.SeleniumTest; import org.openqa.selenium.WebElement; @@ -11,6 +13,7 @@ import org.testng.asserts.SoftAssert; import pages.LoginPage; import pages.ResetCredentialsPage; import pages.systemSettings.UsersPage; +import pages.userSettings.ProfilePage; import rest.InbucketRestClient; import rest.models.UserModel; @@ -53,10 +56,9 @@ public class UsersPgTests extends SeleniumTest { soft.assertEquals(usersPage.getSelectedLocaleValue(), "en"); soft.assertAll(); - - } + @Test(description = "USR-02 System admin is not able to create duplicated user") public void systemAdminIsNotAbleToCreateDuplicatedUser() throws Exception { @@ -74,8 +76,129 @@ public class UsersPgTests extends SeleniumTest { soft.assertAll(); } + @Test(description = "USR-03 System admin is able to delete user") + public void systemAdminIsAbleToDeleteUser() throws Exception { + UserModel newNormalUser = UserModel.generateUserWithUSERrole(); + + String normalUserId = rest.users().createUser(newNormalUser).getString("userId"); + rest.users().changePassword(normalUserId, data.getNewPassword()); + + loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password")); + UsersPage usersPage = homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_USERS); + WebElement newUser = usersPage.getLeftSideGrid().searchAndGetElementInColumn("Username", newNormalUser.getUsername()); + newUser.click(); + String deleteAlert = usersPage.deleteAndConfirm(); + soft.assertEquals(deleteAlert, "User [" + newNormalUser.getUsername() + "] has been deleted!", "Delete user alert message is wrong"); + soft.assertFalse(usersPage.getLeftSideGrid().isValuePresentInColumn("Username", newNormalUser.getUsername())); + loginPage.logout(); + loginPage.login(newNormalUser.getUsername(), data.getNewPassword()); + soft.assertEquals(loginPage.getAlertArea().getAlertMessage(), "Login failed; Invalid userID or password!", "Login failed alert message is not correct"); + soft.assertAll(); + } + + @Test(description = "USR-04 System admin is able to change the password of selected user") + public void systemAdminIsAbleToChangePasswordOfSelectedUser() throws Exception { + String newPassword = "@#$#asdddersPasswordValue12"; + UserModel newNormalUser = UserModel.generateUserWithUSERrole(); + rest.users().createUser(newNormalUser).getString("userId"); + + loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password")); + UsersPage usersPage = homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_USERS); + WebElement newUser = usersPage.getLeftSideGrid().searchAndGetElementInColumn("Username", newNormalUser.getUsername()); + newUser.click(); + + SetChangePasswordDialog setChangePasswordDialog = usersPage.userData.clickOnChangePassword(); + setChangePasswordDialog.fillChangePassword(data.getAdminUser().get("password"), newPassword); + setChangePasswordDialog.TryClickOnChangePassword(); + + loginPage.logout(); + loginPage.login(newNormalUser.getUsername(), newPassword); + homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE); + soft.assertEquals(homePage.getBreadcrump().getCurrentPage(), "Profile"); + soft.assertAll(); + } + + @Test(description = "USR-05 System admin can modify user's data") + public void systemAdminCanModifyUserData() throws Exception { + UserModel newNormalUser = UserModel.generateUserWithUSERrole(); + + String normalUserId = rest.users().createUser(newNormalUser).getString("userId"); + rest.users().changePassword(normalUserId, data.getNewPassword()); + + loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password")); + UsersPage usersPage = homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_USERS); + WebElement newUser = usersPage.getLeftSideGrid().searchAndGetElementInColumn("Username", newNormalUser.getUsername()); + newUser.click(); + + String newEmail = "newemail@email.com"; + String newFullname = "AUT_NewFullName"; + String newTheme = "Blue theme"; + String newLocale = "Romanian"; + usersPage.userData.fillUserProfileData(newEmail, newFullname, newTheme, newLocale); + + loginPage.logout(); + loginPage.login(newNormalUser.getUsername(), data.getNewPassword()); + ProfilePage profilePage = homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE); + soft.assertEquals(profilePage.profileData.getEmailAddress(), newEmail, "Email is not updated!"); + soft.assertEquals(profilePage.profileData.getFullName(), newFullname, "Fullname is not updated!"); + soft.assertEquals(profilePage.profileData.getSelectedTheme(), newTheme, "Theme is not updated!"); + soft.assertEquals(profilePage.profileData.getSelectedLocale(), "ro", "Locale is not updated!"); + soft.assertAll(); + } + + @Test(description = "USR-06 System admin is able to change the role of an user") + public void systemAdminIsAbleToChangeTheRoleOfUsers() throws Exception { + UserModel newNormalUser = UserModel.generateUserWithUSERrole(); + + String normalUserId = rest.users().createUser(newNormalUser).getString("userId"); + rest.users().changePassword(normalUserId, data.getNewPassword()); + + loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password")); + UsersPage usersPage = homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_USERS); + WebElement newUser = usersPage.getLeftSideGrid().searchAndGetElementInColumn("Username", newNormalUser.getUsername()); + newUser.click(); + usersPage.changeApplicationRole(ApplicationRoles.SYSTEM_ADMIN); + + loginPage.logout(); + loginPage.login(newNormalUser.getUsername(), data.getNewPassword()); + homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_DOMAINS); + soft.assertEquals(homePage.getBreadcrump().getCurrentPage(), "Domain"); + soft.assertAll(); + } + + @Test(description = "USR-07 System admin is able to active/deactivate users") + public void systemAdminIsAbleToActivatDeactivateUser() throws Exception { + UserModel newNormalUser = UserModel.generateUserWithUSERrole(); + + String normalUserId = rest.users().createUser(newNormalUser).getString("userId"); + rest.users().changePassword(normalUserId, data.getNewPassword()); + //Deactivate user + loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password")); + UsersPage usersPage = homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_USERS); + WebElement newUser = usersPage.getLeftSideGrid().searchAndGetElementInColumn("Username", newNormalUser.getUsername()); + newUser.click(); + usersPage.modifyIsActiveForUser(false); + + loginPage.logout(); + loginPage.login(newNormalUser.getUsername(), data.getNewPassword()); + soft.assertEquals(loginPage.getAlertArea().getAlertMessage(), "Login failed; Invalid userID or password!", "Login failed alert message is not correct"); + //Activate user + + loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password")); + usersPage = homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_USERS); + newUser = usersPage.getLeftSideGrid().searchAndGetElementInColumn("Username", newNormalUser.getUsername()); + newUser.click(); + usersPage.modifyIsActiveForUser(true); + + loginPage.logout(); + loginPage.login(newNormalUser.getUsername(), data.getNewPassword()); + homePage.getSidebar().navigateTo(Pages.USER_SETTINGS_PROFILE); + soft.assertEquals(homePage.getBreadcrump().getCurrentPage(), "Profile"); + soft.assertAll(); + } + @Test(description = "LGN-32 - User is able to reset password") - public void userIsAbleToResetHisPassword() throws Exception { + public void userIsAbleToResetPassword() throws Exception { UserModel newAdminUser = UserModel.generateUserWithADMINrole(); UserModel newNormalUser = UserModel.generateUserWithUSERrole(); @@ -255,4 +378,5 @@ public class UsersPgTests extends SeleniumTest { soft.assertAll(); } + } \ No newline at end of file