From 890253f6e741703ba5ba132b417fb231d4a9090a Mon Sep 17 00:00:00 2001
From: bozmiha <Mihai.BOZ@ext.ec.europa.eu>
Date: Fri, 20 Oct 2023 18:15:34 +0300
Subject: [PATCH] added methods to addresources to domain, add members to
 domain, create groups of domains, add members to groups, created tests for
 EditGroupsPage

Signed-off-by: bozmiha <Mihai.BOZ@ext.ec.europa.eu>
---
 .../java/ddsl/dcomponents/Grid/SmallGrid.java |  40 ++++++-
 .../editGroupsPage/EditGroupsPage.java        |  10 +-
 .../src/main/java/rest/BaseRestClient.java    |  44 +++----
 .../src/main/java/rest/DomainClient.java      |  55 ++++-----
 .../src/main/java/rest/DomiSMPRestClient.java |   7 +-
 .../src/main/java/rest/GroupClient.java       |  37 ++++++
 .../src/main/java/rest/RestServicePaths.java  |  11 ++
 .../src/main/java/rest/UserClient.java        |  23 +---
 .../main/java/rest/models/DomainModel.java    | 109 +++++++++++++++---
 .../src/main/java/rest/models/GroupModel.java |  52 ++++++---
 .../src/main/java/utils/TestRunData.java      |   4 +
 .../domiSMPTests/ui/EditDomainsPgTests.java   |  70 +++--------
 .../domiSMPTests/ui/EditGroupsPgTests.java    |  65 ++++++++---
 13 files changed, 340 insertions(+), 187 deletions(-)
 create mode 100644 domiSMP-ui-tests/src/main/java/rest/GroupClient.java

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
index 21865c5e3..8b21fe07d 100644
--- a/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/SmallGrid.java
+++ b/domiSMP-ui-tests/src/main/java/ddsl/dcomponents/Grid/SmallGrid.java
@@ -103,6 +103,45 @@ public class SmallGrid extends DComponent {
         }
         return false;
     }
+
+    public String getColumnValueForSpecificRow(String columnNameToSearch, String valueToSearch, String searchedColumnValue) {
+        wait.forXMillis(100);
+        Integer numOfPages = getGridPagination().getTotalPageNumber();
+        List<WebElement> rowHeaders = getGridHeaders();
+        int columnIndex = -1;
+        int searchedColumnIndex = -1;
+
+        for (int i = 0; i < rowHeaders.size(); i++) {
+            if (rowHeaders.get(i).getText().equals(columnNameToSearch)) {
+                columnIndex = i;
+            } else if (rowHeaders.get(i).getText().equals(searchedColumnValue)) {
+                searchedColumnIndex = i;
+            }
+            if (columnIndex != -1 && searchedColumnIndex != -1) {
+                break;
+            }
+        }
+
+        if (columnIndex == -1 || searchedColumnIndex == -1) {
+            LOG.debug("Search value was not found in the grid");
+            return null;
+        }
+        for (int pageNr = 1; 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(valueToSearch)) {
+                    LOG.debug("[{}] found on page [{}]", valueToSearch, pageNr);
+                    return cells.get(searchedColumnIndex).getText();
+                }
+            }
+            getGridPagination().goToNextPage();
+
+        }
+        return null;
+    }
     public void searchAndClickElementInColumn(String columnName, String value) {
 
         wait.forXMillis(100);
@@ -117,7 +156,6 @@ public class SmallGrid extends DComponent {
         }
         if (columnIndex == -1) {
             LOG.error("No element found");
-            ;
         }
         for (int pageNr = 1; pageNr < numOfPages + 1; pageNr++) {
 
diff --git a/domiSMP-ui-tests/src/main/java/pages/administration/editGroupsPage/EditGroupsPage.java b/domiSMP-ui-tests/src/main/java/pages/administration/editGroupsPage/EditGroupsPage.java
index 2cd13a80b..e3a6524dd 100644
--- a/domiSMP-ui-tests/src/main/java/pages/administration/editGroupsPage/EditGroupsPage.java
+++ b/domiSMP-ui-tests/src/main/java/pages/administration/editGroupsPage/EditGroupsPage.java
@@ -4,7 +4,6 @@ import ddsl.CommonPageWithTabs;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
-import org.openqa.selenium.support.ui.Select;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import rest.models.DomainModel;
@@ -17,7 +16,7 @@ public class EditGroupsPage extends CommonPageWithTabs {
     @FindBy(id = "domain_id")
     private WebElement domainDdl;
     @FindBy(id = "group_id")
-    private Select groupDdl;
+    private WebElement groupDdl;
 
     public EditGroupsPage(WebDriver driver) {
         super(driver);
@@ -28,7 +27,7 @@ public class EditGroupsPage extends CommonPageWithTabs {
         weToMatSelect(domainDdl).selectByVisibleText(domainModel.getDomainCode());
     }
 
-    public GroupMembersTab getDomainMembersTab() {
+    public GroupMembersTab getGroupMembersTab() {
         return new GroupMembersTab(driver);
     }
 
@@ -36,4 +35,9 @@ public class EditGroupsPage extends CommonPageWithTabs {
         return new ResourceTab(driver);
     }
 
+    public void selectDomain(DomainModel domainModel, GroupModel groupModel) {
+        weToMatSelect(domainDdl).selectByVisibleText(domainModel.getDomainCode());
+        weToMatSelect(groupDdl).selectByVisibleText(groupModel.getGroupName());
+    }
+
 }
diff --git a/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java
index 8e3bab998..34031ec10 100644
--- a/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java
+++ b/domiSMP-ui-tests/src/main/java/rest/BaseRestClient.java
@@ -41,15 +41,7 @@ public class BaseRestClient {
     //	---------------------------------------Default request methods -------------------------------------------------
     protected ClientResponse requestPUT(WebResource resource, JSONObject body, String type) {
 
-        if (!isLoggedIn()) {
-            log.info("User is not loggedin");
-            try {
-                createSession();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
+        startSession();
         WebResource.Builder builder = decorateBuilder(resource);
 
         return builder.type(type).put(ClientResponse.class, body.toString());
@@ -57,15 +49,7 @@ public class BaseRestClient {
 
     protected ClientResponse requestPUT(WebResource resource, String body, String type) {
 
-        if (!isLoggedIn()) {
-            log.info("User is not loggedin");
-            try {
-                createSession();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
+        startSession();
         WebResource.Builder builder = decorateBuilder(resource);
 
         return builder.type(type).put(ClientResponse.class, body);
@@ -80,15 +64,7 @@ public class BaseRestClient {
     }
 
     protected ClientResponse requestPOST(WebResource resource, String body) {
-        if (!isLoggedIn()) {
-            log.info("User is not loggedin");
-            try {
-                createSession();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
+        startSession();
         WebResource.Builder builder = decorateBuilder(resource);
 
         return builder.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, body);
@@ -114,7 +90,7 @@ public class BaseRestClient {
         return builder;
     }
 
-    public void createSession() throws Exception {
+    private void createNewSession() throws Exception {
         log.debug("Rest client using to login: " + this.username);
         HashMap<String, String> params = new HashMap<>();
         params.put("username", this.username);
@@ -156,11 +132,21 @@ public class BaseRestClient {
         return mytoken;
     }
 
-    public boolean isLoggedIn() {
+    private boolean isLoggedIn() {
 
         WebResource.Builder builder = decorateBuilder(resource.path(RestServicePaths.CONNECTED));
         int response = builder.get(ClientResponse.class).getStatus();
         log.debug("Connected endpoint returns: " + response);
         return (!(response == 401));
     }
+
+    public void startSession() {
+        if (!isLoggedIn()) {
+            try {
+                createNewSession();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
 }
diff --git a/domiSMP-ui-tests/src/main/java/rest/DomainClient.java b/domiSMP-ui-tests/src/main/java/rest/DomainClient.java
index 4c01579ea..c2c224c9f 100644
--- a/domiSMP-ui-tests/src/main/java/rest/DomainClient.java
+++ b/domiSMP-ui-tests/src/main/java/rest/DomainClient.java
@@ -6,6 +6,7 @@ import com.sun.jersey.api.client.ClientResponse;
 import ddsl.enums.ResourceTypes;
 import org.json.JSONObject;
 import rest.models.DomainModel;
+import rest.models.GroupModel;
 import rest.models.MemberModel;
 import utils.TestRunData;
 
@@ -21,22 +22,11 @@ public class DomainClient extends BaseRestClient {
         super();
     }
 
-    public JSONObject createDomain(DomainModel domainModel) {
+    public DomainModel createDomain(DomainModel domainModel) {
 
         JSONObject domainJson = new JSONObject(domainModel);
-
-        if (!isLoggedIn()) {
-            try {
-                createSession();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
         String createDomainPath = RestServicePaths.getCreateDomainPath(TestRunData.getInstance().getUserId());
-
         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);
@@ -45,22 +35,13 @@ public class DomainClient extends BaseRestClient {
             }
         }
         log.debug("Domain: " + domainModel.getDomainCode() + "  has been created successfully!");
-        return responseBody;
-
+        return response.getEntity(DomainModel.class);
     }
 
-
-    public MemberModel addMembersToDomain(String domainId, MemberModel domainMember) throws JsonProcessingException {
+    public MemberModel addMembersToDomain(DomainModel domainModel, MemberModel domainMember) throws JsonProcessingException {
         ObjectMapper mapper = new ObjectMapper();
         String membersJson = mapper.writeValueAsString(domainMember);
-        if (!isLoggedIn()) {
-            try {
-                createSession();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-        String addMemberPath = RestServicePaths.getDomainAddMemberPath(TestRunData.getInstance().getUserId(), domainId);
+        String addMemberPath = RestServicePaths.getDomainAddMemberPath(TestRunData.getInstance().getUserId(), domainModel.getDomainId());
 
         ClientResponse response = jsonPUT(resource.path(addMemberPath), membersJson);
         if (response.getStatus() != 200) {
@@ -74,7 +55,7 @@ public class DomainClient extends BaseRestClient {
         return response.getEntity(MemberModel.class);
     }
 
-    public DomainModel addResourcesToDomain(String domainId, List<ResourceTypes> resourceTypesList) throws JsonProcessingException {
+    public DomainModel addResourcesToDomain(DomainModel domainModel, List<ResourceTypes> resourceTypesList) throws JsonProcessingException {
         ObjectMapper mapper = new ObjectMapper();
         List<String> resourceListToBeAdded = new ArrayList<>();
         for (ResourceTypes resourceType : resourceTypesList) {
@@ -82,14 +63,7 @@ public class DomainClient extends BaseRestClient {
         }
 
         String resourceTypes = mapper.writeValueAsString(resourceListToBeAdded);
-        if (!isLoggedIn()) {
-            try {
-                createSession();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-        String addMemberPath = RestServicePaths.getAddResourcePath(TestRunData.getInstance().getUserId(), resourceTypes);
+        String addMemberPath = RestServicePaths.getAddResourcePath(TestRunData.getInstance().getUserId(), domainModel.getDomainId());
         ClientResponse response = requestPOST(resource.path(addMemberPath), resourceTypes);
         if (response.getStatus() != 200) {
             try {
@@ -101,4 +75,19 @@ public class DomainClient extends BaseRestClient {
         log.debug("Resources have been added!");
         return response.getEntity(DomainModel.class);
     }
+
+    public GroupModel createGroupForDomain(DomainModel domainModel, GroupModel groupToBeCreated) {
+        JSONObject groupJson = new JSONObject(groupToBeCreated);
+        String createGroupPath = RestServicePaths.getCreateGroupPath(TestRunData.getInstance().getUserId(), domainModel.getDomainId());
+        ClientResponse response = jsonPUT(resource.path(createGroupPath), groupJson);
+        if (response.getStatus() != 200) {
+            try {
+                throw new SMPRestException("Could not create group!", response);
+            } catch (SMPRestException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        log.debug("Group have been added!");
+        return response.getEntity(GroupModel.class);
+    }
 }
diff --git a/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java
index 8818ef182..45f72156c 100644
--- a/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java
+++ b/domiSMP-ui-tests/src/main/java/rest/DomiSMPRestClient.java
@@ -4,15 +4,16 @@ public class DomiSMPRestClient extends BaseRestClient {
     public DomiSMPRestClient() {
         super();
     }
-
-    // -------------------------------------------- get clients -----------------------------------------------------------
     public UserClient users() {
         return new UserClient(username, password);
     }
-
     public DomainClient domains() {
         return new DomainClient();
     }
 
+    public GroupClient groups() {
+        return new GroupClient();
+    }
+
 }
 
diff --git a/domiSMP-ui-tests/src/main/java/rest/GroupClient.java b/domiSMP-ui-tests/src/main/java/rest/GroupClient.java
new file mode 100644
index 000000000..a25adef56
--- /dev/null
+++ b/domiSMP-ui-tests/src/main/java/rest/GroupClient.java
@@ -0,0 +1,37 @@
+package rest;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.sun.jersey.api.client.ClientResponse;
+import rest.models.DomainModel;
+import rest.models.GroupModel;
+import rest.models.MemberModel;
+import utils.TestRunData;
+
+/**
+ * Rest client for group actions
+ */
+public class GroupClient extends BaseRestClient {
+
+    public GroupClient() {
+        super();
+    }
+
+    public MemberModel addMembersToGroup(DomainModel domainModel, GroupModel groupModel, MemberModel groupMember) throws JsonProcessingException {
+        ObjectMapper mapper = new ObjectMapper();
+        String membersJson = mapper.writeValueAsString(groupMember);
+
+        String addGroupMemberPath = RestServicePaths.getGroupAddMemberPath(TestRunData.getInstance().getUserId(), domainModel.getDomainId(), groupModel.getGroupId());
+
+        ClientResponse response = jsonPUT(resource.path(addGroupMemberPath), membersJson);
+        if (response.getStatus() != 200) {
+            try {
+                throw new SMPRestException("Could not add members to group", response);
+            } catch (SMPRestException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        log.debug("Member: " + groupMember.getUsername() + " has been added!");
+        return response.getEntity(MemberModel.class);
+    }
+}
diff --git a/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java b/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java
index db1bd2957..32058cae9 100644
--- a/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java
+++ b/domiSMP-ui-tests/src/main/java/rest/RestServicePaths.java
@@ -41,4 +41,15 @@ public class RestServicePaths {
     }
 
 
+    //Groups
+    public static String getCreateGroupPath(String currentUserId, String domainId) {
+
+        return CONTEXT_PATH_EDIT + currentUserId + "/domain/" + domainId + "/group/create";
+    }
+
+    public static String getGroupAddMemberPath(String currentUserId, String domainId, String groupId) {
+
+        return CONTEXT_PATH_EDIT + currentUserId + "/domain/" + domainId + "/group/" + groupId + "/member/put";
+    }
+
 }
diff --git a/domiSMP-ui-tests/src/main/java/rest/UserClient.java b/domiSMP-ui-tests/src/main/java/rest/UserClient.java
index 3e3f1554f..80301f2d4 100644
--- a/domiSMP-ui-tests/src/main/java/rest/UserClient.java
+++ b/domiSMP-ui-tests/src/main/java/rest/UserClient.java
@@ -5,31 +5,17 @@ import org.json.JSONObject;
 import rest.models.UserModel;
 import utils.TestRunData;
 
+/**
+ * Rest client for user actions
+ */
 public class UserClient extends BaseRestClient {
-
-
-    /**
-     * Rest client for user actions
-     */
-
     public UserClient(String username, String password) {
         super(username, password);
     }
-
     public JSONObject createUser(UserModel user) {
 
         JSONObject usrObj = new JSONObject(user);
-
-        if (!isLoggedIn()) {
-            try {
-                createSession();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
-            }
-        }
-
         String usersPath = RestServicePaths.getUsersPath(TestRunData.getInstance().getUserId());
-
         ClientResponse response = jsonPUT(resource.path(usersPath), usrObj);
         JSONObject responseBody = new JSONObject(response.getEntity(String.class));
         // extract userId to be used in the Paths of the requests
@@ -53,13 +39,10 @@ public class UserClient extends BaseRestClient {
 
     public JSONObject changePassword(String forUserId, String newPassword) {
 
-
         String changePasswordPath = RestServicePaths.getChangePasswordPath(TestRunData.getInstance().getUserId(), forUserId);
         JSONObject passwordChangeBody = new JSONObject();
         passwordChangeBody.put("currentPassword", password);
         passwordChangeBody.put("newPassword", newPassword);
-
-
         ClientResponse response = jsonPUT(resource.path(changePasswordPath), passwordChangeBody);
         return new JSONObject(response.getEntity(String.class));
     }
diff --git a/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java b/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java
index 1c3d1b8d4..a06ec1b23 100644
--- a/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java
+++ b/domiSMP-ui-tests/src/main/java/rest/models/DomainModel.java
@@ -1,9 +1,12 @@
 package rest.models;
 
 import ddsl.enums.ResponseCertificates;
+import org.apache.commons.lang3.StringUtils;
 import utils.Generator;
 import utils.Utils;
 
+import java.util.List;
+
 import static ddsl.enums.ResponseCertificates.SMP_DOMAIN_01;
 import static ddsl.enums.ResponseCertificates.SMP_DOMAIN_02;
 
@@ -11,6 +14,7 @@ public class DomainModel {
 
     private String smlSmpId;
     private String domainCode;
+    private String domainId;
     private boolean smlRegistered;
     private String visibility;
     private String smlClientKeyAlias;
@@ -18,10 +22,12 @@ public class DomainModel {
     private String smlSubdomain;
     private String smlParticipantIdentifierRegExp;
     private boolean smlClientCertAuth;
-    private int status;
-
-    public DomainModel() {
-    }
+    private Object actionMessage;
+    private Object defaultResourceTypeIdentifier;
+    private List<Object> groups;
+    private Long index;
+    private List<String> resourceDefinitions;
+    private Long status;
 
     public static DomainModel generatePublicDomainModelWithoutSML() {
         DomainModel domainModel = new DomainModel();
@@ -31,19 +37,8 @@ public class DomainModel {
         return domainModel;
     }
 
-    public static DomainModel generatePublicDomainModelWithSML() {
-        DomainModel domainModel = new DomainModel();
-        domainModel.domainCode = "AUTDom" + Generator.randomAlphaNumeric(6);
-        domainModel.signatureKeyAlias = Utils.randomEnum(new ResponseCertificates[]{SMP_DOMAIN_01, SMP_DOMAIN_02}).getName();
-        domainModel.visibility = "PUBLIC";
-        domainModel.smlClientCertAuth = true;
-        domainModel.smlSubdomain = "AUTDomSML" + Generator.randomAlphaNumeric(6);
-        domainModel.smlSmpId = "AUTSMLSMP" + Generator.randomAlphaNumeric(4);
-        domainModel.smlClientKeyAlias = Utils.randomEnum(new ResponseCertificates[]{SMP_DOMAIN_01, SMP_DOMAIN_02}).toString().toLowerCase();
-        return domainModel;
+    public DomainModel() {
     }
-
-
     public String getSmlSmpId() {
         return smlSmpId;
     }
@@ -80,9 +75,89 @@ public class DomainModel {
         return smlClientCertAuth;
     }
 
-    public int getStatus() {
+    public static DomainModel generatePublicDomainModelWithSML() {
+        DomainModel domainModel = new DomainModel();
+        domainModel.domainCode = "AUTDom" + Generator.randomAlphaNumeric(6);
+        domainModel.signatureKeyAlias = Utils.randomEnum(new ResponseCertificates[]{SMP_DOMAIN_01, SMP_DOMAIN_02}).getName();
+        domainModel.visibility = "PUBLIC";
+        domainModel.smlClientCertAuth = true;
+        domainModel.smlSubdomain = "AUTDomSML" + Generator.randomAlphaNumeric(6);
+        domainModel.smlSmpId = "AUTSMLSMP" + Generator.randomAlphaNumeric(4);
+        domainModel.smlClientKeyAlias = StringUtils.lowerCase(Utils.randomEnum(new ResponseCertificates[]{SMP_DOMAIN_01, SMP_DOMAIN_02}).toString());
+        return domainModel;
+    }
+
+    public void setIndex(Long index) {
+        this.index = index;
+    }
+
+    public Long getStatus() {
         return status;
     }
+
+    public void setStatus(Long status) {
+        this.status = status;
+    }
+
+    public void setResourceDefinitions(List<String> resourceDefinitions) {
+        this.resourceDefinitions = resourceDefinitions;
+    }
+
+    public void setSmlSmpId(String smlSmpId) {
+        this.smlSmpId = smlSmpId;
+    }
+
+    public void setDomainCode(String domainCode) {
+        this.domainCode = domainCode;
+    }
+
+    public String getDomainId() {
+        return domainId;
+    }
+
+    public void setDomainId(String domainId) {
+        this.domainId = domainId;
+    }
+
+    public void setSmlRegistered(boolean smlRegistered) {
+        this.smlRegistered = smlRegistered;
+    }
+
+    public void setVisibility(String visibility) {
+        this.visibility = visibility;
+    }
+
+    public void setSmlClientKeyAlias(String smlClientKeyAlias) {
+        this.smlClientKeyAlias = smlClientKeyAlias;
+    }
+
+    public void setSignatureKeyAlias(String signatureKeyAlias) {
+        this.signatureKeyAlias = signatureKeyAlias;
+    }
+
+    public void setSmlSubdomain(String smlSubdomain) {
+        this.smlSubdomain = smlSubdomain;
+    }
+
+    public void setSmlParticipantIdentifierRegExp(String smlParticipantIdentifierRegExp) {
+        this.smlParticipantIdentifierRegExp = smlParticipantIdentifierRegExp;
+    }
+
+    public void setSmlClientCertAuth(boolean smlClientCertAuth) {
+        this.smlClientCertAuth = smlClientCertAuth;
+    }
+
+    public void setActionMessage(Object actionMessage) {
+        this.actionMessage = actionMessage;
+    }
+
+    public void setDefaultResourceTypeIdentifier(Object defaultResourceTypeIdentifier) {
+        this.defaultResourceTypeIdentifier = defaultResourceTypeIdentifier;
+    }
+
+    public void setGroups(List<Object> groups) {
+        this.groups = groups;
+    }
 }
 
 
diff --git a/domiSMP-ui-tests/src/main/java/rest/models/GroupModel.java b/domiSMP-ui-tests/src/main/java/rest/models/GroupModel.java
index cf5e6a666..08c85e280 100644
--- a/domiSMP-ui-tests/src/main/java/rest/models/GroupModel.java
+++ b/domiSMP-ui-tests/src/main/java/rest/models/GroupModel.java
@@ -1,14 +1,18 @@
 package rest.models;
 
-
 import utils.Generator;
 
+
 public class GroupModel {
     private String groupName;
     private String visibility;
     private String groupDescription;
+    private Object actionMessage;
+    private String groupId;
+    private Long index;
+    private Long status;
 
-    public static GroupModel generatePublicDomain() {
+    public static GroupModel generatePublicGroup() {
         GroupModel groupModel = new GroupModel();
         groupModel.groupName = ("AUT_groupName_" + Generator.randomAlphaNumeric(4)).toLowerCase();
         groupModel.groupDescription = Generator.randomAlphaNumeric(10).toLowerCase();
@@ -16,7 +20,7 @@ public class GroupModel {
         return groupModel;
     }
 
-    public static GroupModel generatePrivateDomain() {
+    public static GroupModel generatePrivateGroup() {
         GroupModel groupModel = new GroupModel();
         groupModel.groupName = ("AUT_groupName_" + Generator.randomAlphaNumeric(4)).toLowerCase();
         groupModel.groupDescription = Generator.randomAlphaNumeric(10).toLowerCase();
@@ -24,27 +28,47 @@ public class GroupModel {
         return groupModel;
     }
 
-    public String getGroupName() {
-        return groupName;
-    }
-
     public void setGroupName(String groupName) {
         this.groupName = groupName;
     }
 
-    public String getVisibility() {
-        return visibility;
-    }
-
     public void setVisibility(String visibility) {
         this.visibility = visibility;
     }
 
+    public void setGroupDescription(String groupDescription) {
+        this.groupDescription = groupDescription;
+    }
+
+    public void setActionMessage(Object actionMessage) {
+        this.actionMessage = actionMessage;
+    }
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public void setIndex(Long index) {
+        this.index = index;
+    }
+
+    public void setStatus(Long status) {
+        this.status = status;
+    }
+
+    public String getGroupName() {
+        return groupName;
+    }
+    public String getVisibility() {
+        return visibility;
+    }
     public String getGroupDescription() {
         return groupDescription;
     }
 
-    public void setGroupDescription(String groupDescription) {
-        this.groupDescription = groupDescription;
-    }
+
 }
diff --git a/domiSMP-ui-tests/src/main/java/utils/TestRunData.java b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java
index 01fc5bff5..f07c50943 100644
--- a/domiSMP-ui-tests/src/main/java/utils/TestRunData.java
+++ b/domiSMP-ui-tests/src/main/java/utils/TestRunData.java
@@ -153,6 +153,10 @@ public class TestRunData {
         return getUser(ApplicationRoles.SYSTEM_ADMIN);
     }
 
+    public String getAdminUsername() {
+        return getUser(ApplicationRoles.SYSTEM_ADMIN).get("username");
+    }
+
     public String getDefaultPassword() {
         return getPropertyValue(TestEnvironmentProperty.TEST_DATA_PASSWORD_DEFAULT);
     }
diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/EditDomainsPgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/EditDomainsPgTests.java
index 4c43ea4ee..2c9b6e02d 100644
--- a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/EditDomainsPgTests.java
+++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/EditDomainsPgTests.java
@@ -3,7 +3,6 @@ package domiSMPTests.ui;
 import ddsl.DomiSMPPage;
 import ddsl.enums.Pages;
 import domiSMPTests.SeleniumTest;
-import org.json.JSONObject;
 import org.openqa.selenium.WebElement;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Ignore;
@@ -39,9 +38,8 @@ public class EditDomainsPgTests extends SeleniumTest {
         domainMember.setRoleType("ADMIN");
 
         rest.users().createUser(adminUser);
-        JSONObject domainJson = rest.domains().createDomain(domainModel);
-        domainId = domainJson.get("domainId").toString();
-        rest.domains().addMembersToDomain(domainId, domainMember);
+        domainModel = rest.domains().createDomain(domainModel);
+        rest.domains().addMembersToDomain(domainModel, domainMember);
 
         homePage = new DomiSMPPage(driver);
         loginPage = homePage.goToLoginPage();
@@ -51,64 +49,30 @@ public class EditDomainsPgTests extends SeleniumTest {
 
     @Test(description = "EDTDOM-01 Domain admins are able to invite/edit/remove members")
     public void DomainAdminsAreAbleToInviteEditRemoveMembers() throws Exception {
-        UserModel memberUser = UserModel.generateUserWithADMINrole();
-        rest.users().createUser(memberUser);
+        UserModel domainMember = UserModel.generateUserWithUSERrole();
+        rest.users().createUser(domainMember);
 
-        //Invite user as VIEW and check if he has admin rights for domain
-        editDomainPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click();
+        //Add user
         editDomainPage.getDomainMembersTab().getInviteMemberBtn().click();
-        editDomainPage.getDomainMembersTab().getInviteMembersPopup().selectMember(memberUser.getUsername(), "VIEWER");
-        WebElement userMemberElement = editDomainPage.getDomainMembersTab().getMembersGrid().searchAndGetElementInColumn("Username", memberUser.getUsername());
-        soft.assertNotNull(userMemberElement, "Invited user is found");
-
-        //check if user has admin rights to domain as VIEWER
-        homePage.logout();
-        homePage.goToLoginPage();
-        loginPage.login(memberUser.getUsername(), data.getNewPassword());
-        EditDomainsPage editDomainsPage = homePage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_DOMAINS);
-        WebElement domainElement = editDomainsPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode());
-        soft.assertNull(domainElement, "Domain found for user which doesn't have rights");
-
-        homePage.logout();
-        loginPage = homePage.goToLoginPage();
-        loginPage.login(adminUser.getUsername(), data.getNewPassword());
-        editDomainPage = homePage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_DOMAINS);
-        editDomainPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click();
-        editDomainPage.getDomainMembersTab().changeRoleOfUser(memberUser.getUsername(), "ADMIN");
+        editDomainPage.getDomainMembersTab().getInviteMembersPopup().selectMember(domainMember.getUsername(), "VIEWER");
+        soft.assertTrue(editDomainPage.getDomainMembersTab().getMembersGrid().isValuePresentInColumn("Username", domainMember.getUsername()));
 
-        //check if user has admin rights to domain as Admin
-        homePage.logout();
-        homePage.goToLoginPage();
-        loginPage.login(memberUser.getUsername(), data.getNewPassword());
-        editDomainsPage = homePage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_DOMAINS);
-        domainElement = editDomainsPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode());
-        soft.assertNotNull(domainElement, "Domain found for user which doesn't have rights");
+        //Change role of user
+        editDomainPage.getDomainMembersTab().changeRoleOfUser(domainMember.getUsername(), "ADMIN");
+        String currentRoleTypeOfuser = editDomainPage.getDomainMembersTab().getMembersGrid().getColumnValueForSpecificRow("Username", domainMember.getUsername(), "Role type");
+        soft.assertEquals(currentRoleTypeOfuser, "ADMIN");
 
+        //Remove user
+        editDomainPage.getDomainMembersTab().removeUser(domainMember.getUsername());
+        soft.assertFalse(editDomainPage.getDomainMembersTab().getMembersGrid().isValuePresentInColumn("Username", domainMember.getUsername()));
 
-        //Remove member user and check if he has access to the domain
-        homePage.logout();
-        homePage.goToLoginPage();
-        loginPage.login(adminUser.getUsername(), data.getNewPassword());
-        editDomainPage = homePage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_DOMAINS);
-        editDomainPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click();
-        editDomainPage.getDomainMembersTab().removeUser(memberUser.getUsername());
-        userMemberElement = editDomainPage.getDomainMembersTab().getMembersGrid().searchAndGetElementInColumn("Username", memberUser.getUsername());
-        soft.assertNull(userMemberElement, "Domain found for user which doesn't have rights");
-
-        homePage.logout();
-        homePage.goToLoginPage();
-        loginPage.login(memberUser.getUsername(), data.getNewPassword());
-        editDomainsPage = homePage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_DOMAINS);
-        domainElement = editDomainsPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode());
-        soft.assertNull(domainElement, "Domain found for user which doesn't have rights");
         soft.assertAll();
-
     }
 
     @Ignore
     @Test(description = "EDTDOM-02 Domain admins are able to create new groups")
     public void domainAdminsAreAbleToCreate() throws Exception {
-        GroupModel groupToBeCreated = GroupModel.generatePublicDomain();
+        GroupModel groupToBeCreated = GroupModel.generatePublicGroup();
         editDomainPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click();
 
         editDomainPage.goToTab("Group");
@@ -128,7 +92,7 @@ public class EditDomainsPgTests extends SeleniumTest {
 
     @Test(description = "EDTDOM-03 Domain admins are not able to create duplicated groups")
     public void domainAdminsAreNotAbleToCreateDuplicatedGroups() throws Exception {
-        GroupModel duplicatedGroup = GroupModel.generatePublicDomain();
+        GroupModel duplicatedGroup = GroupModel.generatePublicGroup();
 
         editDomainPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click();
         editDomainPage.goToTab("Group");
@@ -149,7 +113,7 @@ public class EditDomainsPgTests extends SeleniumTest {
 
     @Test(description = "EDTDOM-04 Domain admins are able to delete groups without resources")
     public void domainAdminsAreNotAbleToDeleteGroups() throws Exception {
-        GroupModel groupToBeDeleted = GroupModel.generatePublicDomain();
+        GroupModel groupToBeDeleted = GroupModel.generatePublicGroup();
 
         editDomainPage.getLeftSideGrid().searchAndGetElementInColumn("Domain code", domainModel.getDomainCode()).click();
         editDomainPage.goToTab("Group");
diff --git a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/EditGroupsPgTests.java b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/EditGroupsPgTests.java
index 25629381d..b53198594 100644
--- a/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/EditGroupsPgTests.java
+++ b/domiSMP-ui-tests/src/test/java/domiSMPTests/ui/EditGroupsPgTests.java
@@ -4,13 +4,13 @@ import ddsl.DomiSMPPage;
 import ddsl.enums.Pages;
 import ddsl.enums.ResourceTypes;
 import domiSMPTests.SeleniumTest;
-import org.json.JSONObject;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 import org.testng.asserts.SoftAssert;
 import pages.LoginPage;
-import pages.administration.editDomainsPage.EditDomainsPage;
+import pages.administration.editGroupsPage.EditGroupsPage;
 import rest.models.DomainModel;
+import rest.models.GroupModel;
 import rest.models.MemberModel;
 import rest.models.UserModel;
 
@@ -20,10 +20,11 @@ import java.util.List;
 public class EditGroupsPgTests extends SeleniumTest {
     DomiSMPPage homePage;
     LoginPage loginPage;
-    EditDomainsPage editDomainPage;
+    EditGroupsPage editGroupPage;
     String domainId;
-    DomainModel domainModel;
     UserModel adminUser;
+    DomainModel domainModel;
+    GroupModel groupModel;
     SoftAssert soft;
 
     @BeforeMethod(alwaysRun = true)
@@ -31,28 +32,64 @@ public class EditGroupsPgTests extends SeleniumTest {
         soft = new SoftAssert();
         domainModel = DomainModel.generatePublicDomainModelWithSML();
         adminUser = UserModel.generateUserWithADMINrole();
+        groupModel = GroupModel.generatePublicGroup();
+        MemberModel adminMember = new MemberModel() {
+        };
+        adminMember.setUsername(adminUser.getUsername());
+        adminMember.setRoleType("ADMIN");
+
+        MemberModel superMember = new MemberModel();
+        superMember.setUsername(data.getAdminUsername());
+        superMember.setRoleType("ADMIN");
+
+        //create user
+        String adminUserId = rest.users().createUser(adminUser).getString("userId");
+
+        //create domain
+        domainModel = rest.domains().createDomain(domainModel);
 
-        MemberModel domainMember = new MemberModel();
-        domainMember.setUsername(adminUser.getUsername());
-        domainMember.setRoleType("ADMIN");
+        //add users to domain
+        rest.domains().addMembersToDomain(domainModel, adminMember);
+        rest.domains().addMembersToDomain(domainModel, superMember);
 
-        rest.users().createUser(adminUser);
-        JSONObject domainJson = rest.domains().createDomain(domainModel);
-        domainId = domainJson.get("domainId").toString();
-        rest.domains().addMembersToDomain(domainId, domainMember);
+        //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 users to groups
+        rest.groups().addMembersToGroup(domainModel, groupModel, adminMember);
 
-        rest.domains().addResourcesToDomain(domainId, resourcesToBeAdded);
 
         homePage = new DomiSMPPage(driver);
         loginPage = homePage.goToLoginPage();
         loginPage.login(adminUser.getUsername(), data.getNewPassword());
-        editDomainPage = homePage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_DOMAINS);
+        editGroupPage = homePage.getSidebar().navigateTo(Pages.ADMINISTRATION_EDIT_GROUPS);
     }
 
-    @Test(description = "EDTDOM-01 Domain admins are able to invite/edit/remove members")
+    @Test(description = "EDTGRP-01 Group admins are able to invite/edit/remove group members", priority = 2)
     public void domainAdminsAreAbleToInviteEditRemoveMembers(){
 
+        UserModel domainMember = UserModel.generateUserWithUSERrole();
+        rest.users().createUser(domainMember);
+
+        editGroupPage.selectDomain(domainModel, groupModel);
+        //Add user
+        editGroupPage.getGroupMembersTab().getInviteMemberBtn().click();
+        editGroupPage.getGroupMembersTab().getInviteMembersPopup().selectMember(domainMember.getUsername(), "VIEWER");
+        soft.assertTrue(editGroupPage.getGroupMembersTab().getMembersGrid().isValuePresentInColumn("Username", domainMember.getUsername()));
+
+        //Change role of user
+        editGroupPage.getGroupMembersTab().changeRoleOfUser(domainMember.getUsername(), "ADMIN");
+        String currentRoleTypeOfuser = editGroupPage.getGroupMembersTab().getMembersGrid().getColumnValueForSpecificRow("Username", domainMember.getUsername(), "Role type");
+        soft.assertEquals(currentRoleTypeOfuser, "ADMIN");
+
+        //Remove user
+        editGroupPage.getGroupMembersTab().removeUser(domainMember.getUsername());
+        soft.assertFalse(editGroupPage.getGroupMembersTab().getMembersGrid().isValuePresentInColumn("Username", domainMember.getUsername()));
+
+        soft.assertAll();
     }
 }
-- 
GitLab