From c70d4487b4886dad49543b7e315e258e0ddcb6fa Mon Sep 17 00:00:00 2001
From: RIHTARSIC Joze <joze.rihtarsic@ext.ec.europa.eu>
Date: Mon, 31 Jul 2023 14:02:56 +0200
Subject: [PATCH] add unit tests

---
 .../smp/data/ui/ServiceGroupDomainRO.java     |  60 ----
 .../edelivery/smp/data/ui/ServiceGroupRO.java |  90 ------
 .../smp/data/ui/ServiceGroupValidationRO.java |  74 -----
 .../data/ui/ServiceMetadataValidationRO.java  |  77 -----
 .../edelivery/smp/security/ResourceGuard.java |  36 +--
 .../services/ui/UIResourceSearchService.java  |   1 -
 .../smp/data/dao/AbstractJunit5BaseDao.java   |  15 +-
 .../edelivery/smp/data/dao/TestUtilsDao.java  |   9 +
 .../smp/security/DomainGuardTest.java         |  53 +++-
 .../smp/security/ResourceGuardTest.java       | 104 +++++++
 .../smp/services/CredentialServiceTest.java   |  71 ++++-
 .../smp/services/DomainServiceSMLTest.java    | 290 ------------------
 .../smp/services/DomainServiceTest.java       | 200 ++++++++++++
 .../ui/UIResourceSearchServiceTest.java       |  17 +-
 .../services/ui/UIResourceServiceTest.java    |  97 +++++-
 .../ui/UIUserServiceIntegrationTest.java      |  48 +++
 16 files changed, 578 insertions(+), 664 deletions(-)
 delete mode 100644 smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupDomainRO.java
 delete mode 100644 smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupRO.java
 delete mode 100644 smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupValidationRO.java
 delete mode 100644 smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceMetadataValidationRO.java
 create mode 100644 smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/security/ResourceGuardTest.java
 delete mode 100644 smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceSMLTest.java
 create mode 100644 smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceTest.java

diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupDomainRO.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupDomainRO.java
deleted file mode 100644
index 69e12d89e..000000000
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupDomainRO.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package eu.europa.ec.edelivery.smp.data.ui;
-
-
-/**
- * @author Joze Rihtarsic
- * @since 4.1
- */
-
-
-public class ServiceGroupDomainRO extends BaseRO {
-
-
-    private static final long serialVersionUID = 9008583888835630014L;
-    private Long id;
-    private Long domainId;
-    String domainCode;
-    String smlSubdomain;
-    boolean smlRegistered;
-
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getDomainId() {
-        return domainId;
-    }
-
-    public void setDomainId(Long domainId) {
-        this.domainId = domainId;
-    }
-
-    public String getDomainCode() {
-        return domainCode;
-    }
-
-    public void setDomainCode(String domainCode) {
-        this.domainCode = domainCode;
-    }
-
-    public String getSmlSubdomain() {
-        return smlSubdomain;
-    }
-
-    public void setSmlSubdomain(String smlSubdomain) {
-        this.smlSubdomain = smlSubdomain;
-    }
-
-    public boolean isSmlRegistered() {
-        return smlRegistered;
-    }
-
-    public void setSmlRegistered(boolean registered) {
-        this.smlRegistered = registered;
-    }
-}
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupRO.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupRO.java
deleted file mode 100644
index c01e68384..000000000
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupRO.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package eu.europa.ec.edelivery.smp.data.ui;
-
-
-import eu.europa.ec.edelivery.smp.data.ui.enums.EntityROStatus;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @author Joze Rihtarsic
- * @since 4.1
- */
-
-
-public class ServiceGroupRO extends BaseRO {
-
-
-    private static final long serialVersionUID = 9008583888835630015L;
-    private Long id;
-    private String participantIdentifier;
-    private String participantScheme;
-    private boolean smlRegistered = false;
-    private List<UserRO> lstUser = new ArrayList<>();
-    private List<ServiceGroupDomainRO> serviceGroupDomains = new ArrayList<>();
-    // for UI  service groups are  in one list.
-    private List<ServiceMetadataRO> serviceMetadata = new ArrayList<>();
-    private int extensionStatus = EntityROStatus.PERSISTED.getStatusNumber();
-    private String extension;
-
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getParticipantIdentifier() {
-        return participantIdentifier;
-    }
-
-    public void setParticipantIdentifier(String participantIdentifier) {
-        this.participantIdentifier = participantIdentifier;
-    }
-
-    public String getParticipantScheme() {
-        return participantScheme;
-    }
-
-    public void setParticipantScheme(String participantScheme) {
-        this.participantScheme = participantScheme;
-    }
-
-    public boolean isSmlRegistered() {
-        return smlRegistered;
-    }
-
-    public void setSmlRegistered(boolean smlRegistered) {
-        this.smlRegistered = smlRegistered;
-    }
-
-    public int getExtensionStatus() {
-        return extensionStatus;
-    }
-
-    public void setExtensionStatus(int extensionStatus) {
-        this.extensionStatus = extensionStatus;
-    }
-
-    public String getExtension() {
-        return extension;
-    }
-
-    public void setExtension(String extension) {
-        this.extension = extension;
-    }
-
-    public List<UserRO> getUsers() {
-        return lstUser;
-    }
-
-    public List<ServiceGroupDomainRO> getServiceGroupDomains() {
-        return serviceGroupDomains;
-    }
-
-    public List<ServiceMetadataRO> getServiceMetadata() {
-        return serviceMetadata;
-    }
-}
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupValidationRO.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupValidationRO.java
deleted file mode 100644
index 3d181ac20..000000000
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceGroupValidationRO.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package eu.europa.ec.edelivery.smp.data.ui;
-
-public class ServiceGroupValidationRO extends BaseRO {
-    private static final long serialVersionUID = 9008583888835630017L;
-
-    public static final int ERROR_CODE_OK =0;
-    public static final int ERROR_CODE_SERVICE_GROUP_EXISTS =1;
-    public static final int ERROR_CODE_INVALID_EXTENSION =2;
-
-    Long serviceGroupId;
-    String extension;
-    String errorMessage;
-    String participantScheme;
-    String participantIdentifier;
-    int statusAction = 0;
-
-    int errorCode = ERROR_CODE_OK;
-
-    public Long getServiceGroupId() {
-        return serviceGroupId;
-    }
-
-    public void setServiceGroupId(Long serviceGroupId) {
-        this.serviceGroupId = serviceGroupId;
-    }
-
-    public String getExtension() {
-        return extension;
-    }
-
-    public void setExtension(String extension) {
-        this.extension = extension;
-    }
-
-    public String getErrorMessage() {
-        return errorMessage;
-    }
-
-    public void setErrorMessage(String errorMessage) {
-        this.errorMessage = errorMessage;
-    }
-
-    public int getStatusAction() {
-        return statusAction;
-    }
-
-    public void setStatusAction(int statusAction) {
-        this.statusAction = statusAction;
-    }
-
-    public String getParticipantScheme() {
-        return participantScheme;
-    }
-
-    public void setParticipantScheme(String participantScheme) {
-        this.participantScheme = participantScheme;
-    }
-
-    public String getParticipantIdentifier() {
-        return participantIdentifier;
-    }
-
-    public void setParticipantIdentifier(String participantIdentifier) {
-        this.participantIdentifier = participantIdentifier;
-    }
-
-    public int getErrorCode() {
-        return errorCode;
-    }
-
-    public void setErrorCode(int errorCode) {
-        this.errorCode = errorCode;
-    }
-}
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceMetadataValidationRO.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceMetadataValidationRO.java
deleted file mode 100644
index b454ec551..000000000
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/ui/ServiceMetadataValidationRO.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package eu.europa.ec.edelivery.smp.data.ui;
-
-/**
- * @author Joze Rihtarsic
- * @since 4.1
- */
-public class ServiceMetadataValidationRO extends BaseRO {
-
-
-    private static final long serialVersionUID = 9008583888835630019L;
-
-    String participantScheme;
-    String participantIdentifier;
-    String documentIdentifierScheme;
-    String documentIdentifier;
-
-    String errorMessage;
-    String xmlContent;
-
-    int statusAction = 0;
-
-    public String getParticipantScheme() {
-        return participantScheme;
-    }
-
-    public void setParticipantScheme(String participantScheme) {
-        this.participantScheme = participantScheme;
-    }
-
-    public String getParticipantIdentifier() {
-        return participantIdentifier;
-    }
-
-    public void setParticipantIdentifier(String participantIdentifier) {
-        this.participantIdentifier = participantIdentifier;
-    }
-
-    public String getDocumentIdentifierScheme() {
-        return documentIdentifierScheme;
-    }
-
-    public void setDocumentIdentifierScheme(String documentIdentifierScheme) {
-        this.documentIdentifierScheme = documentIdentifierScheme;
-    }
-
-    public String getDocumentIdentifier() {
-        return documentIdentifier;
-    }
-
-    public void setDocumentIdentifier(String documentIdentifier) {
-        this.documentIdentifier = documentIdentifier;
-    }
-
-    public String getErrorMessage() {
-        return errorMessage;
-    }
-
-    public void setErrorMessage(String errorMessage) {
-        this.errorMessage = errorMessage;
-    }
-
-    public String getXmlContent() {
-        return xmlContent;
-    }
-
-    public void setXmlContent(String xmlContent) {
-        this.xmlContent = xmlContent;
-    }
-
-    public int getStatusAction() {
-        return statusAction;
-    }
-
-    public void setStatusAction(int statusAction) {
-        this.statusAction = statusAction;
-    }
-}
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/security/ResourceGuard.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/security/ResourceGuard.java
index ec76779bf..74d3ec329 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/security/ResourceGuard.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/security/ResourceGuard.java
@@ -19,8 +19,6 @@ import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
 import eu.europa.ec.edelivery.smp.servlet.ResourceAction;
 import org.springframework.stereotype.Service;
 
-import java.util.Collections;
-
 /**
  * Service implements logic if user can activate action on the resource
  */
@@ -82,40 +80,21 @@ public class ResourceGuard {
         DBDomain domain = group.getDomain();
         DBUser dbuser = user == null ? null : user.getUser();
         // if domain is internal check if user is member of domain, or any internal resources, groups
-        if (domain.getVisibility() == VisibilityType.PRIVATE &&
-                (dbuser == null ||
-                        !(domainMemberDao.isUserDomainMember(dbuser, domain)
-                                || groupMemberDao.isUserAnyDomainGroupResourceMember(dbuser, domain)
-                                || resourceMemberDao.isUserAnyDomainResourceMember(dbuser, domain)))
+        if ((resource.getVisibility() == null || domain.getVisibility() == VisibilityType.PRIVATE)
+                && (dbuser == null ||
+                !(domainMemberDao.isUserDomainMember(dbuser, domain)
+                        || groupMemberDao.isUserAnyDomainGroupResourceMember(dbuser, domain)
+                        || resourceMemberDao.isUserAnyDomainResourceMember(dbuser, domain)))
         ) {
             LOG.debug(SMPLogger.SECURITY_MARKER, "User [{}] is not authorized to read internal domain [{}] resources", user, domain);
             return false;
         }
-        // if group is internal check if user is member of group, or any group resources,
-        if (group.getVisibility() == VisibilityType.PRIVATE &&
-                (dbuser == null ||
-                        !(groupMemberDao.isUserGroupMember(dbuser, Collections.singletonList(group))
-                                || resourceMemberDao.isUserAnyGroupResourceMember(dbuser, group))
-                )) {
-            LOG.debug(SMPLogger.SECURITY_MARKER, "User [{}] is not authorized to read internal group [{}] resources", user, domain);
-            return false;
-        }
 
         // if resource is public anybody can see it
         if (resource.getVisibility() == VisibilityType.PUBLIC) {
             LOG.debug(SMPLogger.SECURITY_MARKER, "User [{}] authorized to read public resource [{}]", user, resource);
             return true;
         }
-        if (dbuser == null) {
-            LOG.debug(SMPLogger.SECURITY_MARKER, "Anonymous user [{}] is not authorized to read resource [{}]", user, resource);
-            return false;
-        }
-
-        if (resource.getVisibility() == null || resource.getVisibility() == VisibilityType.PRIVATE) {
-            boolean isResourceMember = resourceMemberDao.isUserResourceMember(user.getUser(), resource);
-            LOG.debug(SMPLogger.SECURITY_MARKER, "User [{}] authorized: [{}] to read private resource [{}]", user, isResourceMember, resource);
-            return isResourceMember;
-        }
         LOG.debug(SMPLogger.SECURITY_MARKER, "User [{}] is not authorized to read resource [{}]", user, resource);
         return false;
     }
@@ -160,11 +139,6 @@ public class ResourceGuard {
 
     }
 
-    public boolean canCreate(SMPUserDetails user, DBSubresource subresource) {
-        LOG.debug(SMPLogger.SECURITY_MARKER, "User [{}] is trying to create subresource [{}]", user, subresource);
-        return canUpdate(user, subresource);
-    }
-
     public boolean canDelete(SMPUserDetails user, DBResource resource, DBDomain domain) {
         LOG.debug(SMPLogger.SECURITY_MARKER, "User [{}] is trying to delete resource [{}]", user, resource);
         // same as for create
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceSearchService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceSearchService.java
index d5f38fd79..554d5eb3a 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceSearchService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceSearchService.java
@@ -102,7 +102,6 @@ public class UIResourceSearchService extends UIServiceBase<DBResource, ServiceGr
             smdro.setDocumentIdentifier(subresource.getIdentifierValue());
             smdro.setDocumentIdentifierScheme(subresource.getIdentifierScheme());
             serviceGroupRo.getServiceMetadata().add(smdro);
-
         });
 
         return serviceGroupRo;
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/AbstractJunit5BaseDao.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/AbstractJunit5BaseDao.java
index 5c06e1be4..4f1b49a3d 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/AbstractJunit5BaseDao.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/AbstractJunit5BaseDao.java
@@ -1,16 +1,15 @@
 package eu.europa.ec.edelivery.smp.data.dao;
 
 import eu.europa.ec.edelivery.smp.config.SMPDatabaseConfig;
+import eu.europa.ec.edelivery.smp.config.enums.SMPPropertyEnum;
 import eu.europa.ec.edelivery.smp.services.AbstractServiceTest;
 import org.apache.commons.io.FileUtils;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.jdbc.Sql;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import java.io.IOException;
 import java.nio.file.Path;
@@ -32,10 +31,14 @@ import static eu.europa.ec.edelivery.smp.config.enums.SMPEnvPropertyEnum.*;
         executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
 public abstract class AbstractJunit5BaseDao {
 
+    @Autowired
+    protected ConfigurationDao configurationDao;
+
     @Autowired
     protected TestUtilsDao testUtilsDao;
+
     public static final String BUILD_FOLDER = "target";
-    public static final Path SECURITY_PATH= Paths.get(BUILD_FOLDER, "smp");
+    public static final Path SECURITY_PATH = Paths.get(BUILD_FOLDER, "smp");
     public static final String DATABASE_URL = "jdbc:h2:file:./target/DomiSmpTestDb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE;AUTO_SERVER=TRUE;";
     public static final String DATABASE_USERNAME = "smp";
     public static final String DATABASE_PASS = "smp";
@@ -63,4 +66,10 @@ public abstract class AbstractJunit5BaseDao {
         FileUtils.copyDirectory(resourceDirectory.toFile(), SECURITY_PATH.toFile());
     }
 
+
+    public void setDatabaseProperty(SMPPropertyEnum prop, String value) {
+        configurationDao.setPropertyToDatabase(prop, value, "Test property");
+        configurationDao.reloadPropertiesFromDatabase();
+    }
+
 }
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/TestUtilsDao.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/TestUtilsDao.java
index 5b6ca57d5..45c18cf14 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/TestUtilsDao.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/TestUtilsDao.java
@@ -609,6 +609,15 @@ public class TestUtilsDao {
     }
 
 
+    @Transactional
+    public <E> E find(Class<E> clazz, Object id) {
+        LOG.debug("find entity: [{}] for type [{}]", id, clazz);
+        return memEManager.find(clazz, id);
+    }
+
+
+
+
     public void clear() {
         memEManager.clear();
     }
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/security/DomainGuardTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/security/DomainGuardTest.java
index 13ea2e83c..036509253 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/security/DomainGuardTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/security/DomainGuardTest.java
@@ -2,7 +2,9 @@ package eu.europa.ec.edelivery.smp.security;
 
 import eu.europa.ec.edelivery.smp.auth.SMPUserDetails;
 import eu.europa.ec.edelivery.smp.data.dao.AbstractJunit5BaseDao;
+import eu.europa.ec.edelivery.smp.data.enums.VisibilityType;
 import eu.europa.ec.edelivery.smp.data.model.DBDomain;
+import eu.europa.ec.edelivery.smp.data.model.user.DBUser;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
 import eu.europa.ec.edelivery.smp.servlet.ResourceAction;
 import eu.europa.ec.edelivery.smp.servlet.ResourceRequest;
@@ -23,7 +25,7 @@ class DomainGuardTest extends AbstractJunit5BaseDao {
     DomainGuard testInstance;
 
     ResourceRequest resourceRequest = Mockito.mock(ResourceRequest.class);
-    SMPUserDetails user = Mockito.mock(SMPUserDetails.class);
+    SMPUserDetails userDetails = Mockito.mock(SMPUserDetails.class);
 
     @BeforeEach
     public void prepareDatabase() {
@@ -37,7 +39,7 @@ class DomainGuardTest extends AbstractJunit5BaseDao {
     void testResolveAndAuthorizeForDomainInvalidRequestMissingAction() {
 
         SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
-                () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, user));
+                () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, userDetails));
 
         assertThat(result.getMessage(), containsString("Invalid request"));
     }
@@ -46,44 +48,44 @@ class DomainGuardTest extends AbstractJunit5BaseDao {
     void testResolveAndAuthorizeForDomainDeleteInvalidRequestNotUser() {
         when(resourceRequest.getAction()).thenReturn(ResourceAction.DELETE);
         AuthenticationServiceException result = assertThrows(AuthenticationServiceException.class,
-                () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, user));
+                () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, userDetails));
 
         assertThat(result.getMessage(), containsString("User is not authorized for the domain!"));
     }
 
     @Test
     void testResolveAndAuthorizeForDomainDeleteInvalidRequestUserNotAuthorized() {
-        when(user.getUser()).thenReturn(testUtilsDao.getUser3());
+        when(userDetails.getUser()).thenReturn(testUtilsDao.getUser3());
         when(resourceRequest.getAction()).thenReturn(ResourceAction.DELETE);
         AuthenticationServiceException result = assertThrows(AuthenticationServiceException.class,
-                () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, user));
+                () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, userDetails));
 
         assertThat(result.getMessage(), containsString("User is not authorized for the domain!"));
     }
 
     @Test
     void testResolveAndAuthorizeForDomainCreateInvalidRequestUserNotAuthorized() {
-        when(user.getUser()).thenReturn(testUtilsDao.getUser3());
+        when(userDetails.getUser()).thenReturn(testUtilsDao.getUser3());
         when(resourceRequest.getAction()).thenReturn(ResourceAction.CREATE_UPDATE);
         AuthenticationServiceException result = assertThrows(AuthenticationServiceException.class,
-                () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, user));
+                () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, userDetails));
 
         assertThat(result.getMessage(), containsString("User is not authorized for the domain!"));
     }
 
     @Test
     void testResolveAndAuthorizeForDomainDeleteUserAuthorized() {
-        when(user.getUser()).thenReturn(testUtilsDao.getUser1());
+        when(userDetails.getUser()).thenReturn(testUtilsDao.getUser1());
         when(resourceRequest.getAction()).thenReturn(ResourceAction.DELETE);
-        DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, user);
+        DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, userDetails);
         assertNotNull(domain);
     }
 
     @Test
     void testResolveAndAuthorizeForDomainDeleteCreateAuthorized() {
-        when(user.getUser()).thenReturn(testUtilsDao.getUser1());
+        when(userDetails.getUser()).thenReturn(testUtilsDao.getUser1());
         when(resourceRequest.getAction()).thenReturn(ResourceAction.CREATE_UPDATE);
-        DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, user);
+        DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, userDetails);
         assertNotNull(domain);
     }
 
@@ -91,7 +93,7 @@ class DomainGuardTest extends AbstractJunit5BaseDao {
     void testResolveAndAuthorizeForDomainCreateInvalidRequestNotUser() {
         when(resourceRequest.getAction()).thenReturn(ResourceAction.CREATE_UPDATE);
         AuthenticationServiceException result = assertThrows(AuthenticationServiceException.class,
-                () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, user));
+                () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, userDetails));
 
         assertThat(result.getMessage(), containsString("User is not authorized for the domain!"));
     }
@@ -99,16 +101,37 @@ class DomainGuardTest extends AbstractJunit5BaseDao {
     @Test
     void testResolveAndAuthorizeForDomainNoUserOK() {
         when(resourceRequest.getAction()).thenReturn(ResourceAction.READ);
-        DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, user);
+        DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, userDetails);
         assertNotNull(domain);
     }
 
     @Test
     void testResolveAndAuthorizeForDomain() {
-        when(user.getUser()).thenReturn(testUtilsDao.getUser1());
+        when(userDetails.getUser()).thenReturn(testUtilsDao.getUser1());
         when(resourceRequest.getAction()).thenReturn(ResourceAction.READ);
-        DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, user);
+        DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, userDetails);
         assertNotNull(domain);
     }
 
+    @Test
+    void testCanReadPrivateDomainAnonimous() {
+        DBDomain domain = Mockito.mock(DBDomain.class);
+        when(domain.getVisibility()).thenReturn(VisibilityType.PRIVATE);
+        when(userDetails.getUser()).thenReturn(null);
+        boolean result = testInstance.canRead(userDetails, domain);
+        assertFalse(result);
+    }
+
+    @Test
+    void testCanReadPrivateDomainUnAuthorized() {
+        DBDomain domain = Mockito.mock(DBDomain.class);
+        DBUser user = Mockito.mock(DBUser.class);
+        when(domain.getVisibility()).thenReturn(VisibilityType.PRIVATE);
+        when(userDetails.getUser()).thenReturn(user);
+        when(user.getId()).thenReturn(-100L);
+        when(domain.getId()).thenReturn(-100L);
+        // then user is not authorized to read the domain
+        boolean result = testInstance.canRead(userDetails, domain);
+        assertFalse(result);
+    }
 }
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/security/ResourceGuardTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/security/ResourceGuardTest.java
new file mode 100644
index 000000000..18865ac0e
--- /dev/null
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/security/ResourceGuardTest.java
@@ -0,0 +1,104 @@
+package eu.europa.ec.edelivery.smp.security;
+
+import eu.europa.ec.edelivery.smp.auth.SMPUserDetails;
+import eu.europa.ec.edelivery.smp.data.dao.AbstractJunit5BaseDao;
+import eu.europa.ec.edelivery.smp.data.enums.VisibilityType;
+import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
+import eu.europa.ec.edelivery.smp.servlet.ResourceAction;
+import eu.europa.ec.edelivery.smp.servlet.ResourceRequest;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+import org.mockito.Mockito;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.when;
+
+class ResourceGuardTest extends AbstractJunit5BaseDao {
+
+    @Autowired
+    ResourceGuard testInstance;
+
+    ResourceRequest resourceRequest = Mockito.mock(ResourceRequest.class);
+    SMPUserDetails userDetails = Mockito.mock(SMPUserDetails.class);
+
+    @BeforeEach
+    public void prepareDatabase() {
+        testUtilsDao.clearData();
+        testUtilsDao.createSubresources();
+        testUtilsDao.creatDomainMemberships();
+        testUtilsDao.createGroupMemberships();
+        testUtilsDao.createResourceMemberships();
+    }
+
+    @ParameterizedTest
+    @ValueSource(strings = {"READ", "CREATE_UPDATE", "DELETE"})
+    void testUserIsNotAuthorizedForActionOK(ResourceAction action) {
+        // given - user is authorized - see  the createResourceMemberships
+        when(userDetails.getUser()).thenReturn(testUtilsDao.getUser1());
+        boolean result1 = testInstance.userIsNotAuthorizedForAction(userDetails, action, testUtilsDao.getResourceD1G1RD1(), testUtilsDao.getD1());
+        boolean result = testInstance.userIsAuthorizedForAction(userDetails, action, testUtilsDao.getResourceD1G1RD1(), testUtilsDao.getD1());
+
+        assertTrue(result);
+        assertEquals(result1, !result);
+    }
+
+    @ParameterizedTest
+    @ValueSource(strings = {"READ", "DELETE"})
+    void testUserIsAuthorizedForActionOK(ResourceAction action) {
+        // given - user is authorized - see  the createResourceMemberships
+        when(userDetails.getUser()).thenReturn(testUtilsDao.getUser1());
+        boolean result = testInstance.userIsAuthorizedForAction(userDetails, action, testUtilsDao.getSubresourceD1G1RD1_S1());
+        // then
+        assertTrue(result);
+    }
+
+    @ParameterizedTest
+    @ValueSource(strings = {"CREATE_UPDATE"})
+    void testUserIsAuthorizedForActionNotSupported(ResourceAction action) {
+        // given - user is authorized - see  the createResourceMemberships
+        when(userDetails.getUser()).thenReturn(testUtilsDao.getUser1());
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                () -> testInstance.userIsAuthorizedForAction(userDetails, action, testUtilsDao.getSubresourceD1G1RD1_S1()));
+
+        // then
+        MatcherAssert.assertThat(result.getMessage(), CoreMatchers.containsString("Action not supported"));
+    }
+
+    @Test
+    void testCanReadResourceForPrivateDomainOK() {
+        // given - user is authorized - see  the createResourceMemberships
+        testUtilsDao.getD1().setVisibility(VisibilityType.PRIVATE);
+
+        when(userDetails.getUser()).thenReturn(testUtilsDao.getUser1());
+        boolean result = testInstance.canRead(userDetails, testUtilsDao.getSubresourceD1G1RD1_S1());
+        // then
+        assertTrue(result);
+    }
+
+    @Test
+    void testCanReadResourceForPrivateDomainNotMember() {
+        // given
+        testUtilsDao.getD1().setVisibility(VisibilityType.PRIVATE);
+
+        when(userDetails.getUser()).thenReturn(testUtilsDao.getUser2());
+        boolean result = testInstance.canRead(userDetails, testUtilsDao.getSubresourceD1G1RD1_S1());
+        // then
+        assertFalse(result);
+    }
+
+    @Test
+    void testCanReadResourceForPrivateDomainAnonymous() {
+        // given
+        testUtilsDao.getD1().setVisibility(VisibilityType.PRIVATE);
+
+        when(userDetails.getUser()).thenReturn(null);
+        boolean result = testInstance.canRead(userDetails, testUtilsDao.getSubresourceD1G1RD1_S1());
+        // then
+        assertFalse(result);
+    }
+}
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/CredentialServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/CredentialServiceTest.java
index 0eb49a718..525a889b3 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/CredentialServiceTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/CredentialServiceTest.java
@@ -3,42 +3,54 @@ package eu.europa.ec.edelivery.smp.services;
 
 import eu.europa.ec.edelivery.security.PreAuthenticatedCertificatePrincipal;
 import eu.europa.ec.edelivery.security.utils.X509CertificateUtils;
+import eu.europa.ec.edelivery.smp.data.dao.AbstractJunit5BaseDao;
+import eu.europa.ec.edelivery.smp.data.dao.ConfigurationDao;
 import eu.europa.ec.edelivery.smp.data.model.user.DBCredential;
 import eu.europa.ec.edelivery.smp.testutil.TestConstants;
 import eu.europa.ec.edelivery.smp.testutil.X509CertificateTestUtils;
+import org.hamcrest.CoreMatchers;
 import org.hamcrest.MatcherAssert;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.AuthenticationServiceException;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.core.Authentication;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.util.ReflectionTestUtils;
 
 import java.io.IOException;
 import java.math.BigInteger;
 import java.security.cert.X509Certificate;
 import java.time.OffsetDateTime;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 
-import static org.junit.Assert.*;
+import static eu.europa.ec.edelivery.smp.services.ui.UITruststoreServiceIntegrationTest.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 
-@RunWith(SpringRunner.class)
-@ContextConfiguration(classes = {CredentialService.class})
-public class CredentialServiceTest extends AbstractServiceIntegrationTest {
+public class CredentialServiceTest extends AbstractJunit5BaseDao {
 
     @Autowired
     CredentialService testInstance;
+    @Autowired
+    ConfigurationService configurationService;
+    @Autowired
+    ConfigurationDao configurationDao;
 
-    @Before
+    ConfigurationService spyConfigurationService;
+
+    @BeforeEach
     public void beforeMethods() throws IOException {
         testUtilsDao.clearData();
         testUtilsDao.createUsers();
         resetKeystore();
         configurationDao.reloadPropertiesFromDatabase();
+
+        spyConfigurationService = Mockito.spy(configurationService);
+        ReflectionTestUtils.setField(testInstance, "configurationService", spyConfigurationService);
     }
 
     @Test
@@ -66,7 +78,6 @@ public class CredentialServiceTest extends AbstractServiceIntegrationTest {
     }
 
     @Test
-    @Ignore
     public void authenticateByUsernamePasswordTestBadPassword() {
         // given
         String username = TestConstants.USERNAME_1;
@@ -264,4 +275,40 @@ public class CredentialServiceTest extends AbstractServiceIntegrationTest {
         // then
         MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.startsWith("Login failed"));
     }
+
+
+    @Test
+    public void testValidateCertificatePolicyLegacyMatchOk() {
+        String certID = "CN=SMP Test,OU=eDelivery,O=DIGITAL,C=BE:000111";
+        Mockito.doReturn(Arrays.asList(CERTIFICATE_POLICY_QCP_LEGAL, CERTIFICATE_POLICY_QCP_NATURAL))
+                .when(spyConfigurationService).getAllowedCertificatePolicies();
+        List<String> certPolicies = Collections.singletonList(CERTIFICATE_POLICY_QCP_NATURAL);
+        testInstance.validateCertificatePolicyMatchLegacy(certID, certPolicies);
+    }
+
+    @Test
+    public void testValidateCertificatePolicyLegacyMatchMatchEmpty() {
+        String certID = "CN=SMP Test,OU=eDelivery,O=DIGITAL,C=BE:000111";
+        Mockito.doReturn(Arrays.asList(CERTIFICATE_POLICY_QCP_LEGAL, CERTIFICATE_POLICY_QCP_NATURAL))
+                .when(spyConfigurationService).getAllowedCertificatePolicies();
+        List<String> certPolicies = Collections.emptyList();
+
+        AuthenticationServiceException result = assertThrows(AuthenticationServiceException.class,
+                () -> testInstance.validateCertificatePolicyMatchLegacy(certID, certPolicies));
+        MatcherAssert.assertThat(result.getMessage(), CoreMatchers.startsWith("Certificate [" + certID + "] does not have CertificatePolicy extension."));
+    }
+
+    @Test
+    public void testValidateCertificatePolicyLegacyMatchMismatch() {
+        String certID = "CN=SMP Test,OU=eDelivery,O=DIGITAL,C=BE:000111";
+        Mockito.doReturn(Arrays.asList(CERTIFICATE_POLICY_QCP_LEGAL, CERTIFICATE_POLICY_QCP_NATURAL))
+                .when(spyConfigurationService).getAllowedCertificatePolicies();
+        List<String> certPolicies = Collections.singletonList(CERTIFICATE_POLICY_QCP_LEGAL_QSCD);
+
+        AuthenticationServiceException result = assertThrows(AuthenticationServiceException.class,
+                () -> testInstance.validateCertificatePolicyMatchLegacy(certID, certPolicies));
+        MatcherAssert.assertThat(result.getMessage(), CoreMatchers.startsWith("Certificate policy verification failed."));
+    }
+
+
 }
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceSMLTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceSMLTest.java
deleted file mode 100644
index 9943f3786..000000000
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceSMLTest.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright 2018 European Commission | CEF eDelivery
- *
- * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
- * You may not use this work except in compliance with the Licence.
- *
- * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the Licence for the specific language governing permissions and limitations under the Licence.
- */
-
-package eu.europa.ec.edelivery.smp.services;
-
-import eu.europa.ec.bdmsl.ws.soap.BadRequestFault;
-import eu.europa.ec.bdmsl.ws.soap.InternalErrorFault;
-import eu.europa.ec.bdmsl.ws.soap.NotFoundFault;
-import eu.europa.ec.bdmsl.ws.soap.UnauthorizedFault;
-import eu.europa.ec.edelivery.smp.config.SmlIntegrationConfiguration;
-import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
-import eu.europa.ec.edelivery.smp.data.model.DBDomain;
-import eu.europa.ec.edelivery.smp.data.model.DBDomainResourceDef;
-import eu.europa.ec.edelivery.smp.config.enums.SMPPropertyEnum;
-import eu.europa.ec.edelivery.smp.exceptions.ErrorCode;
-import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
-import eu.europa.ec.edelivery.smp.sml.SmlConnector;
-import eu.europa.ec.edelivery.smp.testutil.TestConstants;
-import eu.europa.ec.edelivery.smp.testutil.TestDBUtils;
-import org.apache.commons.lang3.exception.ExceptionUtils;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.util.ReflectionTestUtils;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.xml.ws.http.HTTPException;
-import java.io.IOException;
-import java.util.regex.Pattern;
-
-import static eu.europa.ec.edelivery.smp.testutil.TestConstants.*;
-import static org.junit.Assert.*;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.verify;
-
-/**
- * Purpose of class is to test ServiceGroupService base methods
- *
- * @author Joze Rihtarsic
- * @since 4.1
- */
-@RunWith(SpringRunner.class)
-@ContextConfiguration(classes = {SmlIntegrationConfiguration.class,
-        SmlConnector.class, DomainService.class})
-public class DomainServiceSMLTest extends AbstractServiceIntegrationTest {
-
-    @Rule
-    public ExpectedException expectedExeption = ExpectedException.none();
-
-    @Autowired
-    IdentifierService identifierService;
-    @Autowired
-    SmlIntegrationConfiguration integrationMock;
-    @Autowired
-    SmlConnector smlConnector;
-    @Autowired
-    private SMLIntegrationService smlIntegrationService;
-
-
-    @Autowired
-    protected DomainService testInstance;
-
-    @Before
-    public void prepareDatabase() throws IOException {
-
-        smlConnector = Mockito.spy(smlConnector);
-        Mockito.doNothing().when(smlConnector).configureClient(any(), any(), any());
-
-        ReflectionTestUtils.setField(smlIntegrationService,"smlConnector",smlConnector);
-        ReflectionTestUtils.setField(testInstance,"smlIntegrationService",smlIntegrationService);
-
-        ReflectionTestUtils.setField(smlIntegrationService,"identifierService",identifierService);
-        identifierService.configureParticipantIdentifierFormatter(null,false, Pattern.compile(".*"));
-
-        resetKeystore();
-        setDatabaseProperty(SMPPropertyEnum.SML_PHYSICAL_ADDRESS, "0.0.0.0");
-        setDatabaseProperty(SMPPropertyEnum.SML_LOGICAL_ADDRESS, "http://localhost/smp");
-        setDatabaseProperty(SMPPropertyEnum.SML_URL, "http://localhost/edelivery-sml");
-        setDatabaseProperty(SMPPropertyEnum.SML_ENABLED, "true");
-
-        integrationMock.reset();
-        prepareDatabaseForSingleDomainEnv(false);
-
-    }
-
-    @Test
-    public void getDomainForBlankCodeForSingleDomain() {
-
-        // given
-        assertEquals(1, domainDao.getAllDomains().size());
-
-        //Only one domain is in database - get domain should return the one.
-        DBDomain dmn = testInstance.getDomain(null);
-        assertEquals(TEST_DOMAIN_CODE_1, dmn.getDomainCode());
-        dmn = testInstance.getDomain("");
-        assertEquals(TEST_DOMAIN_CODE_1, dmn.getDomainCode());
-        dmn = testInstance.getDomain(" ");
-        assertEquals(TEST_DOMAIN_CODE_1, dmn.getDomainCode());
-    }
-
-    @Test
-    public void getDomainForBlankCodeForMultipleDomain() {
-        // given
-        DBDomain testDomain02 = TestDBUtils.createDBDomain(TEST_DOMAIN_CODE_2);
-        domainDao.persistFlushDetach(testDomain02);
-        assertEquals(2, domainDao.getAllDomains().size());
-        expectedExeption.expect(SMPRuntimeException.class);
-        expectedExeption.expectMessage(ErrorCode.MISSING_DOMAIN.getMessage());
-
-        // when-then
-        //Multiple domains in database - get domain should return the SMPRuntimeException.
-        testInstance.getDomain(null);
-    }
-
-
-    @Test
-    public void registerDomainAndParticipantsOK() throws NotFoundFault, UnauthorizedFault, InternalErrorFault, BadRequestFault {
-        /* given (init database - check setup)
-         * Domain: TEST_DOMAIN_CODE_1
-         * Users: USERNAME_1, USER_CERT_2
-         * ServiceGroup1: TEST_SG_ID_1, TEST_SG_SCHEMA_1
-         *    - Domain: TEST_DOMAIN_CODE_1
-         * ServiceGroup2: TEST_SG_ID_2, TEST_SG_SCHEMA_2
-         *    - Domain: TEST_DOMAIN_CODE_1
-         *    - Owners: USERNAME_1
-         *    - Metadata: /
-         *  ServiceGroup3: TEST_SG_ID_NO_SCHEME, null
-         *    - Domain: TEST_DOMAIN_CODE_1
-         *    - Owners: USERNAME_1, USER_CERT_2
-         *    - Metadata: /
-
-        DBDomain testDomain01 = domainDao.getDomainByCode(TestConstants.TEST_DOMAIN_CODE_1).get();
-        DBDomainResourceDef serviceGroupDomain = serviceGroupDao.findServiceGroupDomain(
-                TEST_SG_ID_1, TEST_SG_SCHEMA_1, TEST_DOMAIN_CODE_1).get();
-        DBDomainResourceDef serviceGroupDomain2 = serviceGroupDao
-                .findServiceGroupDomain(TEST_SG_ID_2, TEST_SG_SCHEMA_2, TEST_DOMAIN_CODE_1).get();
-        DBDomainResourceDef serviceGroupDomain3 = serviceGroupDao
-                .findServiceGroupDomain(TEST_SG_ID_NO_SCHEME, null, TEST_DOMAIN_CODE_1).get();
-        assertFalse(testDomain01.isSmlRegistered());
-        assertFalse(serviceGroupDomain.isSmlRegistered());
-        assertFalse(serviceGroupDomain2.isSmlRegistered());
-        assertFalse(serviceGroupDomain3.isSmlRegistered());
-
-        // when
-        testInstance.registerDomainAndParticipants(testDomain01);
-
-        // then
-        serviceGroupDomain = serviceGroupDao.findServiceGroupDomain(
-                TEST_SG_ID_1, TEST_SG_SCHEMA_1, TEST_DOMAIN_CODE_1).get();
-        serviceGroupDomain2 = serviceGroupDao
-                .findServiceGroupDomain(TEST_SG_ID_2, TEST_SG_SCHEMA_2, TEST_DOMAIN_CODE_1).get();
-        serviceGroupDomain3 = serviceGroupDao
-                .findServiceGroupDomain(TEST_SG_ID_NO_SCHEME, null, TEST_DOMAIN_CODE_1).get();
-
-        assertTrue(testDomain01.isSmlRegistered());
-        assertTrue(serviceGroupDomain.isSmlRegistered());
-        assertTrue(serviceGroupDomain2.isSmlRegistered());
-        assertTrue(serviceGroupDomain3.isSmlRegistered());
-
-        // one sml domain create and two participant create was called
-        assertEquals(1, integrationMock.getSmpManagerClientMocks().size());
-        verify(integrationMock.getSmpManagerClientMocks().get(0)).create(any());
-        Mockito.verifyNoMoreInteractions(integrationMock.getSmpManagerClientMocks().toArray());
-
-        assertEquals(3, integrationMock.getParticipantManagmentClientMocks().size());
-        verify(integrationMock.getParticipantManagmentClientMocks().get(0)).create(any());
-        verify(integrationMock.getParticipantManagmentClientMocks().get(1)).create(any());
-        verify(integrationMock.getParticipantManagmentClientMocks().get(2)).create(any());
-        Mockito.verifyNoMoreInteractions(integrationMock.getParticipantManagmentClientMocks().toArray());
-
-
-    }
-
-    @Test
-    public void registerDomainAndParticipantsFailed() throws NotFoundFault, UnauthorizedFault, InternalErrorFault, BadRequestFault {
-/*
-        DBDomain testDomain01 = domainDao.getDomainByCode(TestConstants.TEST_DOMAIN_CODE_1).get();
-        DBDomainResourceDef serviceGroupDomain = serviceGroupDao.findServiceGroupDomain(
-                TEST_SG_ID_1, TEST_SG_SCHEMA_1, TEST_DOMAIN_CODE_1).get();
-        DBDomainResourceDef serviceGroupDomain2 = serviceGroupDao
-                .findServiceGroupDomain(TEST_SG_ID_2, TEST_SG_SCHEMA_2, TEST_DOMAIN_CODE_1).get();
-
-        assertFalse(testDomain01.isSmlRegistered());
-        assertFalse(serviceGroupDomain.isSmlRegistered());
-        assertFalse(serviceGroupDomain2.isSmlRegistered());
-        integrationMock.setThrowExceptionAfterParticipantCallCount(1);
-
-
-        // when
-        try {
-            testInstance.registerDomainAndParticipants(testDomain01);
-            fail("Testcase should throw an error with code 400");
-        } catch (Exception ex) {
-            ex.printStackTrace();
-            assertEquals(400, ((HTTPException) ExceptionUtils.getRootCause(ex)).getStatusCode());
-       }
-
-
-        // then
-        serviceGroupDomain = serviceGroupDao.findServiceGroupDomain(
-                TEST_SG_ID_1, TEST_SG_SCHEMA_1, TEST_DOMAIN_CODE_1).get();
-        serviceGroupDomain2 = serviceGroupDao
-                .findServiceGroupDomain(TEST_SG_ID_2, TEST_SG_SCHEMA_2, TEST_DOMAIN_CODE_1).get();
-        assertTrue(testDomain01.isSmlRegistered());
-        assertTrue(serviceGroupDomain.isSmlRegistered());
-        assertFalse(serviceGroupDomain2.isSmlRegistered());
-
-        // one sml domain create and two participant create was called
-        assertEquals(1, integrationMock.getSmpManagerClientMocks().size());
-        verify(integrationMock.getSmpManagerClientMocks().get(0)).create(any());
-        Mockito.verifyNoMoreInteractions(integrationMock.getSmpManagerClientMocks().toArray());
-
-        // only first succeeded
-        assertEquals(1, integrationMock.getParticipantManagmentClientMocks().size());
-        verify(integrationMock.getParticipantManagmentClientMocks().get(0)).create(any());
-        Mockito.verifyNoMoreInteractions(integrationMock.getParticipantManagmentClientMocks().toArray());
-*/
-    }
-
-    @Test
-    @Transactional
-    public void unregisterDomainAndParticipantsFromSmlOK() throws NotFoundFault, UnauthorizedFault, InternalErrorFault, BadRequestFault {
-        /* given (init database - check setup)
-         * Domain: TEST_DOMAIN_CODE_1
-         * Users: USERNAME_1, USER_CERT_2
-         * ServiceGroup1: TEST_SG_ID_1, TEST_SG_SCHEMA_1
-         *    - Domain: TEST_DOMAIN_CODE_1
-         *    - Owners: USERNAME_1, USER_CERT_2
-         *    - Metadata:
-         *          - TEST_DOC_ID_1, TEST_DOC_SCHEMA_1
-         *
-         *
-         * ServiceGroup2: TEST_SG_ID_2, TEST_SG_SCHEMA_2
-         *    - Domain: TEST_DOMAIN_CODE_1
-         *    - Owners: USERNAME_1
-         *    - Metadata: /
-
-        DBDomain testDomain01 = domainDao.getDomainByCode(TestConstants.TEST_DOMAIN_CODE_1).get();
-        DBDomainResourceDef serviceGroupDomain = serviceGroupDao.findServiceGroupDomain(
-                TEST_SG_ID_1, TEST_SG_SCHEMA_1, TEST_DOMAIN_CODE_1).get();
-        DBDomainResourceDef serviceGroupDomain2 = serviceGroupDao
-                .findServiceGroupDomain(TEST_SG_ID_2, TEST_SG_SCHEMA_2, TEST_DOMAIN_CODE_1).get();
-        testDomain01.setSmlRegistered(true);
-        serviceGroupDomain.setSmlRegistered(true);
-        serviceGroupDomain2.setSmlRegistered(true);
-        serviceGroupDao.updateServiceGroupDomain(serviceGroupDomain);
-        serviceGroupDao.updateServiceGroupDomain(serviceGroupDomain2);
-
-        // when
-        testInstance.unregisterDomainAndParticipantsFromSml(testDomain01);
-
-        // then
-        serviceGroupDomain = serviceGroupDao.findServiceGroupDomain(
-                TEST_SG_ID_1, TEST_SG_SCHEMA_1, TEST_DOMAIN_CODE_1).get();
-        serviceGroupDomain2 = serviceGroupDao
-                .findServiceGroupDomain(TEST_SG_ID_2, TEST_SG_SCHEMA_2, TEST_DOMAIN_CODE_1).get();
-        assertFalse(testDomain01.isSmlRegistered());
-        assertFalse(serviceGroupDomain.isSmlRegistered());
-        assertFalse(serviceGroupDomain2.isSmlRegistered());
-
-        // one sml domain create and two participant create was called
-        assertEquals(1, integrationMock.getSmpManagerClientMocks().size());
-        verify(integrationMock.getSmpManagerClientMocks().get(0)).delete(testDomain01.getSmlSmpId());
-        Mockito.verifyNoMoreInteractions(integrationMock.getSmpManagerClientMocks().toArray());
-
-        assertEquals(2, integrationMock.getParticipantManagmentClientMocks().size());
-        verify(integrationMock.getParticipantManagmentClientMocks().get(0)).delete(any());
-        verify(integrationMock.getParticipantManagmentClientMocks().get(1)).delete(any());
-        Mockito.verifyNoMoreInteractions(integrationMock.getParticipantManagmentClientMocks().toArray());
-    */
-    }
-
-}
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceTest.java
new file mode 100644
index 000000000..e4aa39de0
--- /dev/null
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/DomainServiceTest.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright 2018 European Commission | CEF eDelivery
+ *
+ * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
+ * You may not use this work except in compliance with the Licence.
+ *
+ * You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the Licence for the specific language governing permissions and limitations under the Licence.
+ */
+
+package eu.europa.ec.edelivery.smp.services;
+
+import eu.europa.ec.edelivery.smp.config.SmlIntegrationConfiguration;
+import eu.europa.ec.edelivery.smp.config.enums.SMPPropertyEnum;
+import eu.europa.ec.edelivery.smp.conversion.IdentifierService;
+import eu.europa.ec.edelivery.smp.data.dao.AbstractJunit5BaseDao;
+import eu.europa.ec.edelivery.smp.data.dao.DomainDao;
+import eu.europa.ec.edelivery.smp.data.model.DBDomain;
+import eu.europa.ec.edelivery.smp.data.model.doc.DBResource;
+import eu.europa.ec.edelivery.smp.exceptions.ErrorCode;
+import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
+import eu.europa.ec.edelivery.smp.sml.SmlConnector;
+import eu.europa.ec.edelivery.smp.testutil.TestDBUtils;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.NullSource;
+import org.junit.jupiter.params.provider.ValueSource;
+import org.mockito.Mockito;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import java.io.IOException;
+import java.util.regex.Pattern;
+
+import static eu.europa.ec.edelivery.smp.testutil.TestConstants.TEST_DOMAIN_CODE_1;
+import static eu.europa.ec.edelivery.smp.testutil.TestConstants.TEST_DOMAIN_CODE_2;
+import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.any;
+
+/**
+ * Purpose of class is to test ServiceGroupService base methods
+ *
+ * @author Joze Rihtarsic
+ * @since 4.1
+ */
+
+public class DomainServiceTest extends AbstractJunit5BaseDao {
+
+    @Autowired
+    IdentifierService identifierService;
+    @Autowired
+    SmlIntegrationConfiguration integrationMock;
+    @Autowired
+    SmlConnector smlConnector;
+    @Autowired
+    private SMLIntegrationService smlIntegrationService;
+
+
+    @Autowired
+    protected DomainDao domainDao;
+
+    @Autowired
+    protected DomainService testInstance;
+
+
+    @BeforeEach
+    public void prepareDatabase() throws IOException {
+        smlConnector = Mockito.spy(smlConnector);
+        Mockito.doNothing().when(smlConnector).configureClient(any(), any(), any());
+
+        ReflectionTestUtils.setField(smlIntegrationService, "smlConnector", smlConnector);
+        ReflectionTestUtils.setField(testInstance, "smlIntegrationService", smlIntegrationService);
+
+        ReflectionTestUtils.setField(smlIntegrationService, "identifierService", identifierService);
+        identifierService.configureParticipantIdentifierFormatter(null, false, Pattern.compile(".*"));
+
+        resetKeystore();
+        setDatabaseProperty(SMPPropertyEnum.SML_PHYSICAL_ADDRESS, "0.0.0.0");
+        setDatabaseProperty(SMPPropertyEnum.SML_LOGICAL_ADDRESS, "http://localhost/smp");
+        setDatabaseProperty(SMPPropertyEnum.SML_URL, "http://localhost/edelivery-sml");
+        setDatabaseProperty(SMPPropertyEnum.SML_ENABLED, "true");
+
+        integrationMock.reset();
+
+
+    }
+
+    @ParameterizedTest
+    @NullSource
+    @ValueSource(strings = {"", " "})
+    public void getDomainForBlankCodeForSingleDomain(String searchCode) {
+
+        // given
+        DBDomain testDomain01 = testUtilsDao.createDomain(TEST_DOMAIN_CODE_1);
+        assertEquals(1, domainDao.getAllDomains().size());
+
+        //Only one domain is in database - get domain should return the one.
+        DBDomain dmn = testInstance.getDomain(searchCode);
+        assertEquals(testDomain01.getDomainCode(), dmn.getDomainCode());
+    }
+
+    @Test
+    public void getDomainForBlankCodeForMultipleDomain() {
+        // given
+        DBDomain testDomain01 = testUtilsDao.createDomain(TEST_DOMAIN_CODE_1);
+        DBDomain testDomain02 = TestDBUtils.createDBDomain(TEST_DOMAIN_CODE_2);
+        domainDao.persistFlushDetach(testDomain02);
+        assertEquals(2, domainDao.getAllDomains().size());
+
+        // when-then
+        //Multiple domains in database - get domain should return the SMPRuntimeException.
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                () -> testInstance.getDomain(null));
+
+        assertEquals(ErrorCode.MISSING_DOMAIN, result.getErrorCode());
+    }
+
+    @Test
+    public void getDomainForBlankCodeForMultipleDomainNotExists() {
+        // given
+        DBDomain testDomain01 = testUtilsDao.createDomain(TEST_DOMAIN_CODE_1);
+        DBDomain testDomain02 = TestDBUtils.createDBDomain(TEST_DOMAIN_CODE_2);
+        domainDao.persistFlushDetach(testDomain02);
+        assertEquals(2, domainDao.getAllDomains().size());
+        String searchDomain = "DomainCodeNotExists";
+
+        // when-then
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                () -> testInstance.getDomain(searchDomain));
+
+        assertEquals(ErrorCode.DOMAIN_NOT_EXISTS, result.getErrorCode());
+    }
+
+    @Test
+    public void getDomainForInvalidCode() {
+        // given
+        DBDomain testDomain01 = testUtilsDao.createDomain(TEST_DOMAIN_CODE_1);
+        DBDomain testDomain02 = TestDBUtils.createDBDomain(TEST_DOMAIN_CODE_2);
+        domainDao.persistFlushDetach(testDomain02);
+        assertEquals(2, domainDao.getAllDomains().size());
+        String searchDomain = "s2###Q23@#";
+
+        // when-then
+        //Multiple domains in database - get domain should return the SMPRuntimeException.
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                () -> testInstance.getDomain(searchDomain));
+        assertEquals(ErrorCode.INVALID_DOMAIN_CODE, result.getErrorCode());
+        MatcherAssert.assertThat(result.getMessage(),
+                CoreMatchers.containsString("Provided Domain Code '" + searchDomain + "' does not match required pattern"));
+    }
+
+    @Test
+    public void testRegisterDomainAndParticipantsOK() {
+        // given
+        testUtilsDao.clearData();
+        testUtilsDao.createResources();
+        DBDomain testDomain = testUtilsDao.getD1();
+        DBResource testResource = testUtilsDao.getResourceD1G1RD1();
+        assertFalse(testDomain.isSmlRegistered());
+        assertFalse(testResource.isSmlRegistered());
+
+        // when
+        testInstance.registerDomainAndParticipants(testDomain);
+
+        // then
+        // update resource because testResource is detached
+        DBResource dbUpdatedResource = testUtilsDao.find(DBResource.class, testResource.getId());
+
+        assertTrue(testDomain.isSmlRegistered());
+        assertTrue(dbUpdatedResource.isSmlRegistered());
+    }
+
+    @Test
+    public void testUnRegisterDomainAndParticipantsOK() {
+        // given
+        testUtilsDao.clearData();
+        testUtilsDao.createResources();
+        DBDomain testDomain = testUtilsDao.getD1();
+        testInstance.registerDomainAndParticipants(testDomain);
+        DBResource dbUpdatedResource = testUtilsDao.find(DBResource.class, testUtilsDao.getResourceD1G1RD1().getId());
+
+        assertTrue(testDomain.isSmlRegistered());
+        assertTrue(dbUpdatedResource.isSmlRegistered());
+
+        // when
+        testInstance.unregisterDomainAndParticipantsFromSml(testDomain);
+
+        // then
+        dbUpdatedResource = testUtilsDao.find(DBResource.class, dbUpdatedResource.getId());
+        assertFalse(testDomain.isSmlRegistered());
+        assertFalse(dbUpdatedResource.isSmlRegistered());
+    }
+
+}
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceSearchServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceSearchServiceTest.java
index a6ee9e3ea..6f16b4b23 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceSearchServiceTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceSearchServiceTest.java
@@ -1,27 +1,24 @@
 package eu.europa.ec.edelivery.smp.services.ui;
 
-import eu.europa.ec.edelivery.smp.config.ConversionTestConfig;
+import eu.europa.ec.edelivery.smp.data.dao.AbstractJunit5BaseDao;
 import eu.europa.ec.edelivery.smp.data.ui.ServiceGroupSearchRO;
 import eu.europa.ec.edelivery.smp.data.ui.ServiceResult;
-import eu.europa.ec.edelivery.smp.services.AbstractServiceIntegrationTest;
 import eu.europa.ec.edelivery.smp.services.ui.filters.ResourceFilter;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.ContextConfiguration;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 
-@ContextConfiguration(classes = {UIResourceSearchService.class, ConversionTestConfig.class})
-public class UIResourceSearchServiceTest extends AbstractServiceIntegrationTest {
+public class UIResourceSearchServiceTest extends AbstractJunit5BaseDao {
 
 
     @Autowired
     protected UIResourceSearchService testInstance;
 
-    @Before
+    @BeforeEach
     public void prepareDatabase() {
         // setup initial data!
         testUtilsDao.clearData();
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceServiceTest.java
index bac7784cc..92c1a47d3 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceServiceTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIResourceServiceTest.java
@@ -164,8 +164,62 @@ public class UIResourceServiceTest extends AbstractJunit5BaseDao {
         assertEquals(VisibilityType.PRIVATE, result.getVisibility());
     }
 
+
     @Test
-    public void testDeleteResourceFromGroup() {
+    public void testUpdateResourceForGroupGroupNotFound() {
+        // given
+        DBResource dbResource = testUtilsDao.getResourceD1G1RD1();
+        ResourceRO testResource = TestROUtils.createResource(dbResource.getIdentifierValue(), dbResource.getIdentifierScheme(), dbResource.getDomainResourceDef().getResourceDef().getIdentifier());
+        assertNotEquals(dbResource.getVisibility(), VisibilityType.PRIVATE);
+        testResource.setVisibility(VisibilityType.PRIVATE);
+
+        // when
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()-> testInstance.updateResourceForGroup(testResource, dbResource.getId(),
+                        -1000L, testUtilsDao.getD1().getId()));
+        // then
+        assertEquals(ErrorCode.INVALID_REQUEST, result.getErrorCode());
+        assertThat(result.getMessage(), containsString("Group does not exist!"));
+    }
+
+    @Test
+    public void testUpdateResourceForGroupNotBelongToDomain() {
+        // given
+        DBResource dbResource = testUtilsDao.getResourceD1G1RD1();
+        ResourceRO testResource = TestROUtils.createResource(dbResource.getIdentifierValue(), dbResource.getIdentifierScheme(), dbResource.getDomainResourceDef().getResourceDef().getIdentifier());
+        assertNotEquals(dbResource.getVisibility(), VisibilityType.PRIVATE);
+        testResource.setVisibility(VisibilityType.PRIVATE);
+
+        // when
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()-> testInstance.updateResourceForGroup(testResource, dbResource.getId(),
+                        testUtilsDao.getGroupD2G1().getId(), testUtilsDao.getD1().getId()));
+        // then
+        assertEquals(ErrorCode.INVALID_REQUEST, result.getErrorCode());
+        assertThat(result.getMessage(), containsString("Group does not belong to the given domain!"));
+    }
+
+
+    @Test
+    public void testUpdateResourceForGroupResourceDefNotFound() {
+        // given
+        String defIdNotExist = UUID.randomUUID().toString();
+        DBResource dbResource = testUtilsDao.getResourceD1G1RD1();
+        ResourceRO testResource = TestROUtils.createResource(dbResource.getIdentifierValue(), dbResource.getIdentifierScheme(), defIdNotExist);
+        assertNotEquals(dbResource.getVisibility(), VisibilityType.PRIVATE);
+        testResource.setVisibility(VisibilityType.PRIVATE);
+
+        // when
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()-> testInstance.updateResourceForGroup(testResource, dbResource.getId(),
+                testUtilsDao.getGroupD1G1().getId(), testUtilsDao.getD1().getId()));
+        // then
+        assertEquals(ErrorCode.INVALID_REQUEST, result.getErrorCode());
+        assertThat(result.getMessage(), containsString("Resource definition ["+defIdNotExist+"] does not exist!"));
+    }
+
+    @Test
+    public void testDeleteResourceFromGroupOK() {
         // given
         ResourceRO testResource = TestROUtils.createResource(UUID.randomUUID().toString(), TEST_SG_SCHEMA_1,
                 testUtilsDao.getDomainResourceDefD1R1().getResourceDef().getIdentifier());
@@ -179,6 +233,47 @@ public class UIResourceServiceTest extends AbstractJunit5BaseDao {
         assertNull(resourceDao.find(resourceId));
     }
 
+
+    @Test
+    public void testDeleteResourceFromGroupResourceNotExists() {
+        // given
+        // when
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()-> testInstance.deleteResourceFromGroup(-1000L, testUtilsDao.getGroupD1G1().getId(), testUtilsDao.getD1().getId()));
+        // then
+        assertEquals(ErrorCode.INVALID_REQUEST, result.getErrorCode());
+        assertThat(result.getMessage(), containsString("Resource does not exist!"));
+    }
+
+
+    @Test
+    public void testDeleteResourceFromGroupResourceNotBelongToGroup() {
+        // given
+        // when
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()-> testInstance.deleteResourceFromGroup(testUtilsDao.getResourceD2G1RD1().getId(), testUtilsDao.getGroupD1G1().getId(), testUtilsDao.getD1().getId()));
+        // then
+        assertEquals(ErrorCode.INVALID_REQUEST, result.getErrorCode());
+        assertThat(result.getMessage(), containsString("Resource does not belong to the group!"));
+    }
+
+    @Test
+    public void testDeleteResourceFromGroup() {
+        // given
+        ResourceRO testResource = TestROUtils.createResource(UUID.randomUUID().toString(), TEST_SG_SCHEMA_1,
+                testUtilsDao.getDomainResourceDefD1R1().getResourceDef().getIdentifier());
+        ResourceRO resourceRO = testInstance.createResourceForGroup(testResource, testUtilsDao.getGroupD1G1().getId(),
+                testUtilsDao.getD1().getId(), testUtilsDao.getUser1().getId());
+        Long resourceId = new Long(resourceRO.getResourceId());
+        assertNotNull(resourceDao.find(resourceId));
+        // when
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                ()-> testInstance.deleteResourceFromGroup(resourceId, testUtilsDao.getGroupD1G1().getId(), testUtilsDao.getD2().getId()));
+        // then
+        assertEquals(ErrorCode.INVALID_REQUEST, result.getErrorCode());
+        assertThat(result.getMessage(), containsString("Group does not belong to the given domain!"));
+    }
+
     @Test
     public void testGetResourceMembers() {
         // given
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIUserServiceIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIUserServiceIntegrationTest.java
index 598ec7fe0..fede9cd3e 100644
--- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIUserServiceIntegrationTest.java
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIUserServiceIntegrationTest.java
@@ -214,6 +214,27 @@ public class UIUserServiceIntegrationTest extends AbstractJunit5BaseDao {
         testInstance.updateUserPassword(authorizedUserId, userToUpdateId, authorizedPassword, newPassword);
     }
 
+    @Test
+    public void testUpdateUserPasswordByAdminUserNotExists() {
+        // system admin
+        DBUser user = TestDBUtils.createDBUserByUsername(UUID.randomUUID().toString());
+        user.setApplicationRole(ApplicationRoleType.SYSTEM_ADMIN);
+        DBCredential credential = TestDBUtils.createDBCredentialForUser(user, null, null, null);
+        credential.setValue(BCrypt.hashpw("userPassword", BCrypt.gensalt()));
+        userDao.persistFlushDetach(user);
+        credentialDao.persistFlushDetach(credential);
+
+        long authorizedUserId = user.getId();
+        long userToUpdateId =-1000L;
+        String authorizedPassword = "userPassword";
+        String newPassword = "TTTTtttt1111$$$$$";
+
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                () -> testInstance.updateUserPassword(authorizedUserId,userToUpdateId, authorizedPassword, newPassword));
+
+        MatcherAssert.assertThat(result.getMessage(), CoreMatchers.containsString("Invalid request [UserId]. Error: Can not find user id to update"));
+    }
+
     @Test
     public void testAdminUpdateUserdataOK() {
         DBUser user = TestDBUtils.createDBUserByUsername(UUID.randomUUID().toString());
@@ -259,6 +280,18 @@ public class UIUserServiceIntegrationTest extends AbstractJunit5BaseDao {
         assertEqualDates(accessToken.getGeneratedOn(), accessToken.getCredential().getActiveFrom());
     }
 
+    @Test
+    public void testCreateAccessTokenForUserUserNotExists() {
+        CredentialRO credentialRO = new CredentialRO();
+        credentialRO.setCredentialType(CredentialType.ACCESS_TOKEN);
+        credentialRO.setDescription("test description");
+
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                () -> testInstance.createAccessTokenForUser(-100L, credentialRO));
+
+        MatcherAssert.assertThat(result.getMessage(), CoreMatchers.containsString("Invalid request [UserId]. Error: Can not find user id!"));
+    }
+
     @Test
     public void testStoreCertificateCredentialForUser() throws Exception {
         DBUser user = TestDBUtils.createDBUserByUsername(UUID.randomUUID().toString());
@@ -280,6 +313,21 @@ public class UIUserServiceIntegrationTest extends AbstractJunit5BaseDao {
         assertEquals(credentialRO.getDescription(), result.getDescription());
     }
 
+    @Test
+    public void testStoreCertificateCredentialForUserUserNotExists() throws Exception {
+        CertificateRO certificateRO = TestROUtils.createCertificateRO("CN=Test,OU=Test,O=Test,L=Test,ST=Test,C=EU", BigInteger.TEN);
+
+        CredentialRO credentialRO = new CredentialRO();
+        credentialRO.setCredentialType(CredentialType.CERTIFICATE);
+        credentialRO.setDescription("test description");
+        credentialRO.setCertificate(certificateRO);
+
+        SMPRuntimeException result = assertThrows(SMPRuntimeException.class,
+                () -> testInstance.storeCertificateCredentialForUser(-100L, credentialRO));
+
+        MatcherAssert.assertThat(result.getMessage(), CoreMatchers.containsString("Invalid request [UserId]. Error: Can not find user id!"));
+    }
+
     @Test
     public void testUpdateUserProfile() {
         DBUser user = TestDBUtils.createDBUserByUsername(UUID.randomUUID().toString());
-- 
GitLab