From 4559d98db09efb7a5b9cf438a1796c5378e535ed Mon Sep 17 00:00:00 2001
From: bozmiha <Mihai.BOZ@ext.ec.europa.eu>
Date: Fri, 13 Dec 2024 11:22:48 +0200
Subject: [PATCH] added automated tests for Domains Page

---
 .../java/pages/search/ResourcePageGrid.java   |  49 +++-
 .../main/java/pages/search/ResourcesPage.java |   9 +
 .../systemSettings/domainsPage/DomainTab.java |  37 ++-
 .../domainsPage/SMLIntegrationTab.java        |  10 +-
 .../src/main/java/rest/GroupClient.java       |   2 +-
 .../java/domiSMPTests/ui/DomainsPgTests.java  | 217 +++++++++++++++---
 6 files changed, 278 insertions(+), 46 deletions(-)

diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/search/ResourcePageGrid.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/search/ResourcePageGrid.java
index a02217032..e6fadf1b9 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/pages/search/ResourcePageGrid.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/search/ResourcePageGrid.java
@@ -91,6 +91,50 @@ public class ResourcePageGrid extends DComponent {
 
     }
 
+    public boolean isElementPresentInTheGrid(String columnName, String value) {
+
+        wait.forXMillis(data.getWaitTimeoutShortMilliseconds());
+        int numOfPages;
+        try {
+            numOfPages = getGridPagination().getTotalPageNumber();
+        } catch (Exception e) {
+            LOG.debug("No pagination found");
+            numOfPages = 1;
+        }
+        List<WebElement> rowHeaders = getGridHeaders();
+        int columnIndex = -1;
+        for (int i = 0; i < rowHeaders.size(); i++) {
+            if (rowHeaders.get(i).getText().equals(columnName)) {
+                columnIndex = i;
+                break;
+            }
+        }
+        if (columnIndex == -1) {
+            LOG.error("No element found");
+            throw new NoSuchElementException("Column not found");
+        }
+        for (int pageNr = 0; pageNr < numOfPages + 1; pageNr++) {
+
+            List<WebElement> rows = getRows();
+            for (WebElement row : rows) {
+                List<WebElement> cells = getCells(row);
+                WebElement currentCell = cells.get(columnIndex);
+                if (currentCell.getText().equals(value)) {
+                    LOG.debug("[{}] found on page [{}]", value, pageNr);
+                    return true;
+                }
+            }
+
+            if (numOfPages > 1) {
+                getGridPagination().goToNextPage();
+            }
+        }
+        return false;
+
+
+    }
+
+
     public void openSubresource(String resourceColumn, String resourceValue, String columnNameSubresouce, String valueSubresource) {
 
         wait.forXMillis(data.getWaitTimeoutShortMilliseconds());
@@ -165,12 +209,9 @@ public class ResourcePageGrid extends DComponent {
                 isElementPresent = true;
                 WebElement urlCell = cells.get(2);
                 urlCell.findElement(By.cssSelector("a")).click();
+                return;
             }
         }
-        if (isElementPresent) {
-            return;
-        }
-
         if (!isElementPresent) {
             throw new NoSuchElementException("Value [" + value + "] was not found in the grid");
 
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/search/ResourcesPage.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/search/ResourcesPage.java
index 0c2d9ef89..8bd99fe52 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/pages/search/ResourcesPage.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/search/ResourcesPage.java
@@ -90,4 +90,13 @@ public class ResourcesPage extends DomiSMPPage {
         }
 
     }
+
+    public boolean isResourcePresent(String resourceIdentifier, String resourceScheme) {
+        weToDInput(resourceIdentifierInput).fill(resourceIdentifier);
+        weToDInput(resourceSchemeInput).fill(resourceScheme);
+        LOG.debug("Click on Open URL for " + resourceIdentifier);
+        weToDButton(searchBtn).click();
+        wait.forXMillis(data.getWaitTimeoutShortMilliseconds());
+        return getGrid().isElementPresentInTheGrid("Resource URL", "Open URL");
+    }
 }
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainTab.java b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainTab.java
index c5d47fa9b..3fd4d6eef 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainTab.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/pages/systemSettings/domainsPage/DomainTab.java
@@ -1,6 +1,8 @@
 package pages.systemSettings.domainsPage;
 
 import ddsl.dcomponents.DComponent;
+import ddsl.dcomponents.mat.MatSelect;
+import ddsl.dobjects.DSelect;
 import ddsl.enums.ResponseCertificates;
 import org.apache.poi.util.StringUtil;
 import org.openqa.selenium.WebDriver;
@@ -22,6 +24,8 @@ public class DomainTab extends DComponent {
     private WebElement responseSignatureCertificateDdl;
     @FindBy(id = "domainVisibility_id")
     private WebElement visibilityOfDomainDdl;
+    @FindBy(id = "domainDefaultResourceType_id")
+    private WebElement defaultResourceTypeForDomainDdl;
     @FindBy(id = "saveButton")
     private WebElement saveBtn;
 
@@ -31,10 +35,6 @@ public class DomainTab extends DComponent {
 
     }
 
-    public WebElement getDomainIdInput() {
-        return domainIdInput;
-    }
-
     public String getResponseSignatureCertificateSelectedValue() {
         return weToMatSelect(responseSignatureCertificateDdl).getCurrentText();
     }
@@ -59,18 +59,31 @@ public class DomainTab extends DComponent {
         weToDSelect(visibilityOfDomainDdl).selectValue(domainModel.getVisibility());
     }
 
+    public void changeVisibility(String visibilityValue) {
+        String currentValue = getVisibilityOfDomainSelectedValue();
+        if (!currentValue.equals(visibilityValue)) {
+            weToDSelect(visibilityOfDomainDdl).selectValue(visibilityValue);
+        }
+    }
+
+    public MatSelect getResponseSigunatureCertificateDdl() {
+        return weToMatSelect(responseSignatureCertificateDdl);
+    }
+
+    public DSelect getDefaultResourceTypeDdl() {
+        return weToDSelect(defaultResourceTypeForDomainDdl);
+    }
+
     public void saveChanges() {
-        if (saveBtn.isEnabled()) {
-            saveBtn.click();
+        if (weToDButton(saveBtn).isEnabled()) {
+            weToDButton(saveBtn).click();
             wait.forElementToBeDisabled(saveBtn);
-            try {
-                saveBtn.getAttribute("disabled").equals("true");
-                LOG.debug("Domain tab changes were succesfully saved");
 
-            } catch (NullPointerException e) {
-                LOG.debug("Domain tab changes were not saved");
+            if (!(weToDButton(saveBtn).getAttribute("disabled") == null)) {
+                LOG.debug("Domain tab changes were succesfully saved");
+            } else {
+                LOG.error("Domain  tab changes were not saved");
             }
-
         }
     }
 
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 fa4f0cf3f..2a77090e2 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
@@ -70,10 +70,11 @@ public class SMLIntegrationTab extends DComponent {
 
     }
     public void saveChanges() {
-        if (saveBtn.isEnabled()) {
-            saveBtn.click();
+        if (weToDButton(saveBtn).isEnabled()) {
+            weToDButton(saveBtn).click();
             wait.forElementToBeDisabled(saveBtn);
-            if (saveBtn.getDomAttribute("disabled").equals("true")) {
+
+            if (!(weToDButton(saveBtn).getAttribute("disabled") == null)) {
                 LOG.debug("SML Integration tab changes were succesfully saved");
             } else {
                 LOG.error("SML Integration  tab changes were not saved");
@@ -129,6 +130,9 @@ public class SMLIntegrationTab extends DComponent {
         return weToDSelect(smlClientCertificateAliasDdl);
     }
 
+    public DInput getSMLDomainInput() {
+        return weToDInput(smlDomainInput);
+    }
 
 
 }
diff --git a/domismp-tests/domismp-tests-ui/src/main/java/rest/GroupClient.java b/domismp-tests/domismp-tests-ui/src/main/java/rest/GroupClient.java
index aaf97d87d..70181cb07 100644
--- a/domismp-tests/domismp-tests-ui/src/main/java/rest/GroupClient.java
+++ b/domismp-tests/domismp-tests-ui/src/main/java/rest/GroupClient.java
@@ -29,7 +29,7 @@ public class GroupClient extends BaseRestClient {
         ClientResponse response = jsonPUT(resource.path(addGroupMemberPath), membersJson);
         if (response.getStatus() != 200) {
             try {
-                throw new SMPRestException("Could not add members to group", response);
+                throw new SMPRestException("Could not add members to group", response.getStatus(), response.getEntity(String.class));
             } catch (SMPRestException e) {
                 throw new RuntimeException(e);
             }
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 a1684a288..fb91b6a76 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
@@ -15,6 +15,7 @@ import org.testng.asserts.SoftAssert;
 import pages.LoginPage;
 import pages.SmlPage;
 import pages.administration.editDomainsPage.EditDomainsPage;
+import pages.search.ResourcesPage;
 import pages.systemSettings.domainsPage.DomainsPage;
 import rest.models.*;
 import utils.Generator;
@@ -24,6 +25,8 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import static ddsl.enums.ResponseCertificates.SMP_DOMAIN_01;
+
 /**
  * This class has the tests against Domains Page
  */
@@ -209,12 +212,10 @@ public class DomainsPgTests extends SeleniumTest {
         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);
 
@@ -228,11 +229,9 @@ public class DomainsPgTests extends SeleniumTest {
         //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());
@@ -243,23 +242,86 @@ public class DomainsPgTests extends SeleniumTest {
         soft.assertAll();
     }
 
-    @Test(description = "DOM-10 System admin is able to change the Resource Type only if it is not used by a resource")
-    public void systemAdminIsAbleToChangeTheResourceTypeOnlyIfItIsNotUsedByAResource() throws Exception {
+    @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-08 System admin is able to change the visibility of a domain")
+    public void systemAdminIsAbleToChangeTheVisibilityOfADomain() throws Exception {
+        DomainModel domainModel = DomainModel.generatePublicDomainModelWithoutSML();
+        domainModel.setVisibility("PRIVATE");
+        UserModel normalUserForAdminRole = UserModel.generateUserWithUSERrole();
+        UserModel normalUserForViewerRole = UserModel.generateUserWithUSERrole();
+        UserModel norightsUser = UserModel.generateUserWithUSERrole();
+
         GroupModel groupModel = GroupModel.generatePublicGroup();
         ResourceModel resourceModel = ResourceModel.generatePublicResourceUnregisteredToSML();
-        resourceModel.setResourceTypeIdentifier(ResourceTypes.OASIS3.getName());
+
+        MemberModel adminMember = new MemberModel() {
+        };
+        adminMember.setUsername(normalUserForAdminRole.getUsername());
+        adminMember.setRoleType("ADMIN");
+        adminMember.setHasPermissionReview(true);
+
+        MemberModel viewMember = new MemberModel() {
+        };
+        viewMember.setUsername(normalUserForViewerRole.getUsername());
+        viewMember.setRoleType("VIEWER");
+        viewMember.setHasPermissionReview(true);
 
         MemberModel superMember = new MemberModel();
         superMember.setUsername(TestRunData.getInstance().getAdminUsername());
         superMember.setRoleType("ADMIN");
 
+        //create user
+        String noRightsUserId = rest.users().createUser(norightsUser).getString("userId");
+        String viewUserId = rest.users().createUser(normalUserForViewerRole).getString("userId");
+        String adminUserId = rest.users().createUser(normalUserForAdminRole).getString("userId");
+
+        //Set password for users
+        rest.users().changePassword(noRightsUserId, data.getNewPassword());
+        rest.users().changePassword(viewUserId, data.getNewPassword());
+        rest.users().changePassword(adminUserId, data.getNewPassword());
 
         //create domain
-        DomainModel domainModel = rest.domains().createDomain(domainModelGenerated);
+        domainModel = rest.domains().createDomain(domainModel);
 
         //add users to domain
+        rest.domains().addMembersToDomain(domainModel, viewMember);
         rest.domains().addMembersToDomain(domainModel, superMember);
+        rest.domains().addMembersToDomain(domainModel, adminMember);
+
         //add resources to domain
         List<ResourceTypes> resourcesToBeAdded = Arrays.asList(ResourceTypes.OASIS1, ResourceTypes.OASIS3, ResourceTypes.OASIS2);
         domainModel = rest.domains().addResourcesToDomain(domainModel, resourcesToBeAdded);
@@ -267,27 +329,71 @@ public class DomainsPgTests extends SeleniumTest {
         //create group for domain
         groupModel = rest.domains().createGroupForDomain(domainModel, groupModel);
 
+        //add users to groups
+        rest.groups().addMembersToGroup(domainModel, groupModel, viewMember);
 
         //add resource to group
-        rest.resources().createResourceForGroup(domainModel, groupModel, resourceModel);
-        domainsPage.refreshPage();
+        resourceModel = rest.resources().createResourceForGroup(domainModel, groupModel, resourceModel);
+        rest.resources().addMembersToResource(domainModel, groupModel, resourceModel, viewMember);
+
+        //System is able to  see private resource with private domain
+        ResourcesPage searchResourcesPage = domainsPage.getSidebar().navigateTo(Pages.SEARCH_RESOURCES);
+        soft.assertTrue(searchResourcesPage.isResourcePresent(resourceModel.getIdentifierValue(), resourceModel.getIdentifierScheme()), "System admin is NOT able to see private resource with private domain");
+
+        //Not login user is not able to see  private resource with private domain.
+        searchResourcesPage.logout();
+        searchResourcesPage = homePage.getSidebar().navigateTo(Pages.SEARCH_RESOURCES);
+        soft.assertFalse(searchResourcesPage.isResourcePresent(resourceModel.getIdentifierValue(), resourceModel.getIdentifierScheme()), "Not login user is able to see private resource with private domain");
+
+        //Admin user with domain Admin rights can see private resource with private domain
+        loginPage = homePage.goToLoginPage();
+        loginPage.login(normalUserForViewerRole.getUsername(), data.getNewPassword());
+        searchResourcesPage = homePage.getSidebar().navigateTo(Pages.SEARCH_RESOURCES);
+        soft.assertTrue(searchResourcesPage.isResourcePresent(resourceModel.getIdentifierValue(), resourceModel.getIdentifierScheme()), "Admin user with domain Admin rights can NOT see private resource with private domain");
+
+        //normal user with domain Admin rights is able to see resource of private domain.
+        searchResourcesPage.logout();
+        loginPage = homePage.goToLoginPage();
+        loginPage.login(normalUserForAdminRole.getUsername(), data.getNewPassword());
+        searchResourcesPage = homePage.getSidebar().navigateTo(Pages.SEARCH_RESOURCES);
+        soft.assertTrue(searchResourcesPage.isResourcePresent(resourceModel.getIdentifierValue(), resourceModel.getIdentifierScheme()), "User with domain admin rights is NOT able to public resource of private domain");
+
+        //user without rights is NOT able to see resource of private domain.
+        searchResourcesPage.logout();
+        loginPage = homePage.goToLoginPage();
+        loginPage.login(norightsUser.getUsername(), data.getNewPassword());
+        searchResourcesPage = homePage.getSidebar().navigateTo(Pages.SEARCH_RESOURCES);
+        soft.assertFalse(searchResourcesPage.isResourcePresent(resourceModel.getIdentifierValue(), resourceModel.getIdentifierScheme()), "User with no rights is able to see public resource of private domain");
+        searchResourcesPage.logout();
+
+        //Change the visibility of domain to PUBLIC
+        loginPage = homePage.goToLoginPage();
+        loginPage.login(data.getAdminUser().get("username"), data.getAdminUser().get("password"));
+        domainsPage = homePage.getSidebar().navigateTo(Pages.SYSTEM_SETTINGS_DOMAINS);
 
         domainsPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click();
-        domainsPage.goToTab("Resource Types");
-        domainsPage.getResourceTypesTab().checkResource("edelivery-oasis-smp-1.0-servicegroup (smp-1)", false);
-        domainsPage.getResourceTypesTab().saveChanges();
-        soft.assertFalse(domainsPage.getResourceTypesTab().getResourceTypeStatus("edelivery-oasis-smp-1.0-servicegroup (smp-1)"));
+        domainsPage.getDomainTab().changeVisibility("PUBLIC");
+        domainsPage.getDomainTab().saveChanges();
 
-        domainsPage.getResourceTypesTab().checkResource("edelivery-oasis-cppa-3.0-cpp (cpp)", false);
-        domainsPage.getResourceTypesTab().saveChanges();
-        soft.assertEquals(domainsPage.getAlertMessageAndClose(), "Can not remove resource definition [edelivery-oasis-cppa-3.0-cpp] from domain [" + domainModel.getDomainCode() + "], because it has resources. Resource count [1]!");
+        //User not logged in able to see public resource of public domain.
+        searchResourcesPage.logout();
+        searchResourcesPage = homePage.getSidebar().navigateTo(Pages.SEARCH_RESOURCES);
+        soft.assertTrue(searchResourcesPage.isResourcePresent(resourceModel.getIdentifierValue(), resourceModel.getIdentifierScheme()), "Not login user is able not to see public resource of public domain");
+
+        //User with no rights  in able to see public resource of public domain.
+        loginPage = homePage.goToLoginPage();
+        loginPage.login(norightsUser.getUsername(), data.getNewPassword());
+        searchResourcesPage = homePage.getSidebar().navigateTo(Pages.SEARCH_RESOURCES);
+        soft.assertTrue(searchResourcesPage.isResourcePresent(resourceModel.getIdentifierValue(), resourceModel.getIdentifierScheme()), "User with no rights is NOT able to see public resource of public domain");
+        searchResourcesPage.logout();
 
         soft.assertAll();
     }
 
-    @Test(description = "DOM-07 System admin can delete only unregister SML domains")
-    public void systemAdminCanDeleteOnlyUnregisterSMLDomains() throws Exception {
+    @Test(description = "DOM-09 System admin is able to modify the domain")
+    public void systemAdminIsAbleToModifyTheDomain() throws Exception {
         DomainModel domainModelGenerated = DomainModel.generatePublicDomainModelWithSML();
+        domainModelGenerated.setSignatureKeyAlias(SMP_DOMAIN_01.getAlias());
 
         MemberModel superMember = new MemberModel();
         superMember.setUsername(TestRunData.getInstance().getAdminUsername());
@@ -306,24 +412,84 @@ public class DomainsPgTests extends SeleniumTest {
         domainsPage.refreshPage();
 
         domainsPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click();
+        domainsPage.getDomainTab().getResponseSigunatureCertificateDdl().selectByVisibleText("smp_domain_02 (CN=smp_domain_02,O=digit,C=eu:000000006443d987)");
+        domainsPage.getDomainTab().getDefaultResourceTypeDdl().selectValue(ResourceTypes.OASIS2.getName());
+
+        domainsPage.getDomainTab().saveChanges();
+
+        soft.assertEquals(domainsPage.getDomainTab().getResponseSignatureCertificateSelectedValue(), "smp_domain_02 (CN=smp_domain_02,O=digit,C=eu:000000006443d987)", "Response Signature Certificate was not updated");
+        soft.assertEquals(domainsPage.getDomainTab().getDefaultResourceTypeDdl().getCurrentValue(), "Oasis SMP 2.0 ServiceGroup (edelivery-oasis-smp-2.0-servicegroup)", "Default ResourceType was not updated");
+
+        //Register domain to SML
         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");
+
+        String smlDomain = "AUTNew" + Generator.randomAlphabeticalValue(3);
+        domainsPage.getSMLIntegrationTab().getSMLDomainInput().fill(smlDomain);
+        domainsPage.getSMLIntegrationTab().saveChanges();
+        soft.assertEquals(domainsPage.getSMLIntegrationTab().getSMLDomainInput().getText(), smlDomain, "SML Domain value was not updated.");
+
+        //Update SML Client Certificate Alias with a value which is not registered to SML
+        domainsPage.getSMLIntegrationTab().getSMLClientCertificateAliasDdl().selectByVisibleText("sample_key (CN=demo-smp-signing-key,O=digit,C=eu:000000006443f9bc)");
+        domainsPage.getSMLIntegrationTab().saveChanges();
+        String smlIntegrationError = domainsPage.getAlertMessageAndClose();
+        soft.assertTrue(smlIntegrationError.startsWith("SML integration error! Error: UnauthorizedFault: [ERR-102]"), "No error appears when selecting a certificate which cannot be added to SML");
+
+        //Update SML Client Certificate Alias with a value which is registered to SML
+        domainsPage.getSMLIntegrationTab().getSMLClientCertificateAliasDdl().selectByVisibleText("smp_domain_01 (CN=smp_domain_01,O=digit,C=eu:000000006443d8a8)");
+        domainsPage.getSMLIntegrationTab().saveChanges();
+        soft.assertEquals(domainsPage.getSMLIntegrationTab().getSMLClientCertificateAliasDdl().getCurrentValue(), "smp_domain_01 (CN=smp_domain_01,O=digit,C=eu:000000006443d8a8)", "SML Domain value was not updated.");
 
 
         soft.assertAll();
     }
 
-    //Ignore tag should be removed when
+    @Test(description = "DOM-10 System admin is able to change the Resource Type only if it is not used by a resource")
+    public void systemAdminIsAbleToChangeTheResourceTypeOnlyIfItIsNotUsedByAResource() throws Exception {
+        DomainModel domainModelGenerated = DomainModel.generatePublicDomainModelWithSML();
+        GroupModel groupModel = GroupModel.generatePublicGroup();
+        ResourceModel resourceModel = ResourceModel.generatePublicResourceUnregisteredToSML();
+        resourceModel.setResourceTypeIdentifier(ResourceTypes.OASIS3.getName());
+
+        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);
+
+        //create group for domain
+        groupModel = rest.domains().createGroupForDomain(domainModel, groupModel);
+
+
+        //add resource to group
+        rest.resources().createResourceForGroup(domainModel, groupModel, resourceModel);
+        domainsPage.refreshPage();
+
+        domainsPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click();
+        domainsPage.goToTab("Resource Types");
+        domainsPage.getResourceTypesTab().checkResource("edelivery-oasis-smp-1.0-servicegroup (smp-1)", false);
+        domainsPage.getResourceTypesTab().saveChanges();
+        soft.assertFalse(domainsPage.getResourceTypesTab().getResourceTypeStatus("edelivery-oasis-smp-1.0-servicegroup (smp-1)"));
+
+        domainsPage.getResourceTypesTab().checkResource("edelivery-oasis-cppa-3.0-cpp (cpp)", false);
+        domainsPage.getResourceTypesTab().saveChanges();
+        soft.assertEquals(domainsPage.getAlertMessageAndClose(), "Can not remove resource definition [edelivery-oasis-cppa-3.0-cpp] from domain [" + domainModel.getDomainCode() + "], because it has resources. Resource count [1]!");
+
+        soft.assertAll();
+    }
     @Test(description = "DOM-15 - User tries to add invalid SML SMP identifier and receives error")
     public void systemAdminTriesToAddInvalidSMLSMPIdentifierAndReceivesError() throws Exception {
         DomainModel domainModelGenerated = DomainModel.generatePublicDomainModelWithSML();
@@ -365,7 +531,6 @@ public class DomainsPgTests extends SeleniumTest {
 
         soft.assertAll();
     }
-
     @Test(description = "DOM-16 - SML Cert Alias dropdown field contains all keys from the keystore")
     public void smlCertAliasDowndownContainsAllKeysFromKeystore() throws Exception {
         DomainModel domainModelGenerated = DomainModel.generatePublicDomainModelWithSML();
-- 
GitLab