From 31586c802a2be0d24531b0ed090c8379ef14c464 Mon Sep 17 00:00:00 2001 From: RIHTARSIC Joze <joze.rihtarsic@ext.ec.europa.eu> Date: Wed, 26 Jul 2023 16:59:40 +0200 Subject: [PATCH] add unit tests --- .../edelivery/smp/security/DomainGuard.java | 24 +-- .../resource/ResourceHandlerService.java | 4 +- .../services/resource/ResourceService.java | 1 + .../services/ui/UIDomainPublicService.java | 34 ++-- .../smp/security/DomainGuardTest.java | 114 ++++++++++++ .../resource/ResourceServiceTest.java | 168 ++++++++++++++++++ .../ui/UIDomainPublicServiceTest.java | 95 ++++++++++ .../ui/UIDomainServiceIntegrationTest.java | 23 +-- 8 files changed, 419 insertions(+), 44 deletions(-) create mode 100644 smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/security/DomainGuardTest.java create mode 100644 smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/resource/ResourceServiceTest.java create mode 100644 smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainPublicServiceTest.java diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/security/DomainGuard.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/security/DomainGuard.java index 08eff34c9..2e903b54c 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/security/DomainGuard.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/security/DomainGuard.java @@ -58,13 +58,16 @@ public class DomainGuard { * Purpose of the method is to guard domain resources. It validates if users has any "rights to" execute the action * on the domain resources and subresources * - * @param user - * @param action - * @param domain - * @return + * @param user user to be authorized + * @param action action to be executed + * @param domain domain to be authorized + * @return true if user is authorized to execute the action on the domain */ public boolean isUserIsAuthorizedForDomainResourceAction(DBDomain domain, SMPUserDetails user, ResourceAction action) { LOG.debug("Authorize check for user [{}], domain [{}] and action [{}]", user, domain, action); + if (action == null) { + throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Null http action", "Action cannot be null!"); + } switch (action) { case READ: return canRead(user, domain); @@ -109,10 +112,9 @@ public class DomainGuard { * Method validates of the user can delete resources on the domain! Only users with group admin role can delete * domain resources * - * - * @param user - * @param domain - * @return + * @param user user to be authorized + * @param domain domain to be authorized + * @return true if user is authorized to execute the action on the domain */ public boolean canDelete(SMPUserDetails user, DBDomain domain) { LOG.info(SMPLogger.SECURITY_MARKER, "User: [{}] is trying to delete resource from domain: [{}]", user, domain); @@ -131,9 +133,9 @@ public class DomainGuard { * Method validates of the user can create/update resources on the domain! Only users with group admin role can create and users with admin resource role * can update * - * @param user - * @param domain - * @return + * @param user user to be authorized + * @param domain domain to be authorized + * @return true if user is authorized to execute the action on the domain */ public boolean canCreateUpdate(SMPUserDetails user, DBDomain domain) { LOG.info(SMPLogger.SECURITY_MARKER, "User: [{}] is trying to create/update resource from domain: [{}]", user, domain); diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceHandlerService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceHandlerService.java index 37147ec79..88b802f49 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceHandlerService.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceHandlerService.java @@ -134,7 +134,7 @@ public class ResourceHandlerService extends AbstractResourceHandler { } } // set headers to response - responseData.getHttpHeaders().entrySet().stream() + responseData.getHttpHeaders().entrySet() .forEach(entry -> resourceResponse.setHttpHeader(entry.getKey(), entry.getValue())); // determinate status before resource is stored to database! resourceResponse.setHttpStatus(getHttpStatusForCreateUpdate(isNewResource, responseData)); @@ -232,7 +232,7 @@ public class ResourceHandlerService extends AbstractResourceHandler { // locate the resource handler ResolvedData resolvedData = resourceRequest.getResolvedData(); DBResource resource = resolvedData.getResource(); - integrationService.unregisterParticipant(resource, resolvedData.domain); + integrationService.unregisterParticipant(resource, resolvedData.getDomain()); resourceStorage.deleteResource(resource); } diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceService.java index 9a01a2a4d..6e1f671db 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceService.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/resource/ResourceService.java @@ -23,6 +23,7 @@ import static eu.europa.ec.edelivery.smp.exceptions.ErrorCode.INVALID_OWNER; import static org.apache.commons.lang3.StringUtils.isNotBlank; /** + * * @author Joze Rihtarsic * @since 5.0 */ diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainPublicService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainPublicService.java index ad78a9ac6..2141a2025 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainPublicService.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainPublicService.java @@ -41,7 +41,7 @@ public class UIDomainPublicService extends UIServiceBase<DBDomain, DomainPublicR private final ConversionService conversionService; - public UIDomainPublicService(DomainDao domainDao, DomainMemberDao domainMemberDao,ConversionService conversionService, UserDao userDao) { + public UIDomainPublicService(DomainDao domainDao, DomainMemberDao domainMemberDao, ConversionService conversionService, UserDao userDao) { this.domainDao = domainDao; this.domainMemberDao = domainMemberDao; this.conversionService = conversionService; @@ -56,12 +56,12 @@ public class UIDomainPublicService extends UIServiceBase<DBDomain, DomainPublicR /** * Method returns Domain resource object list for page. * - * @param page - * @param pageSize - * @param sortField - * @param sortOrder - * @param filter - * @return + * @param page - page number + * @param pageSize - page size + * @param sortField - sort field + * @param sortOrder - sort order + * @param filter - filter + * @return ServiceResult<DomainPublicRO> - list of domain resource objects */ @Override public ServiceResult<DomainPublicRO> getTableList(int page, int pageSize, @@ -94,18 +94,18 @@ public class UIDomainPublicService extends UIServiceBase<DBDomain, DomainPublicR @Transactional public ServiceResult<MemberRO> getDomainMembers(Long domainId, int page, int pageSize, - String filter) { + String filter) { Long count = domainMemberDao.getDomainMemberCount(domainId, filter); - ServiceResult<MemberRO> result = new ServiceResult<>(); + ServiceResult<MemberRO> result = new ServiceResult<>(); result.setPage(page); result.setPageSize(pageSize); - if (count<1) { + if (count < 1) { result.setCount(0L); return result; } result.setCount(count); List<DBDomainMember> memberROS = domainMemberDao.getDomainMembers(domainId, page, pageSize, filter); - List<MemberRO> memberList = memberROS.stream().map(member-> conversionService.convert(member, MemberRO.class)).collect(Collectors.toList()); + List<MemberRO> memberList = memberROS.stream().map(member -> conversionService.convert(member, MemberRO.class)).collect(Collectors.toList()); result.getServiceEntities().addAll(memberList); return result; @@ -115,18 +115,18 @@ public class UIDomainPublicService extends UIServiceBase<DBDomain, DomainPublicR public MemberRO addMemberToDomain(Long domainId, MemberRO memberRO, Long memberId) { LOG.info("Add member [{}] to domain [{}]", memberRO.getUsername(), domainId); DBUser user = userDao.findUserByUsername(memberRO.getUsername()) - .orElseThrow(() -> new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Add/edit membership", "User ["+memberRO.getUsername()+"] does not exists!")); + .orElseThrow(() -> new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Add/edit membership", "User [" + memberRO.getUsername() + "] does not exists!")); DBDomainMember domainMember; - if (memberId !=null) { + if (memberId != null) { domainMember = domainMemberDao.find(memberId); domainMember.setRole(memberRO.getRoleType()); } else { DBDomain domain = domainDao.find(domainId); if (domainMemberDao.isUserDomainMember(user, domain)) { - throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Add membership", "User ["+memberRO.getUsername()+"] is already a member!"); + throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Add membership", "User [" + memberRO.getUsername() + "] is already a member!"); } - domainMember = domainMemberDao.addMemberToDomain(domain, user,memberRO.getRoleType() ); + domainMember = domainMemberDao.addMemberToDomain(domain, user, memberRO.getRoleType()); } return conversionService.convert(domainMember, MemberRO.class); } @@ -138,7 +138,7 @@ public class UIDomainPublicService extends UIServiceBase<DBDomain, DomainPublicR if (domainMember == null) { throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Membership", "Membership does not exists!"); } - if (!Objects.equals(domainMember.getDomain().getId(),domainId )){ + if (!Objects.equals(domainMember.getDomain().getId(), domainId)) { throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Membership", "Membership does not belong to domain!"); } @@ -156,7 +156,7 @@ public class UIDomainPublicService extends UIServiceBase<DBDomain, DomainPublicR //filter and validate resources to be removed List<DBDomainResourceDef> domainResourceDefs = domain.getDomainResourceDefs(); - return domainResourceDefs.stream().map(domRef -> domRef.getResourceDef()).map(resourceDef -> + return domainResourceDefs.stream().map(DBDomainResourceDef::getResourceDef).map(resourceDef -> conversionService.convert(resourceDef, ResourceDefinitionRO.class)).collect(Collectors.toList()); } } 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 new file mode 100644 index 000000000..13ea2e83c --- /dev/null +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/security/DomainGuardTest.java @@ -0,0 +1,114 @@ +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.model.DBDomain; +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.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 static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.when; + +class DomainGuardTest extends AbstractJunit5BaseDao { + + @Autowired + DomainGuard testInstance; + + ResourceRequest resourceRequest = Mockito.mock(ResourceRequest.class); + SMPUserDetails user = Mockito.mock(SMPUserDetails.class); + + @BeforeEach + public void prepareDatabase() { + testUtilsDao.clearData(); + testUtilsDao.creatDomainMemberships(); + testUtilsDao.createGroupMemberships(); + testUtilsDao.createResourceMemberships(); + } + + @Test + void testResolveAndAuthorizeForDomainInvalidRequestMissingAction() { + + SMPRuntimeException result = assertThrows(SMPRuntimeException.class, + () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, user)); + + assertThat(result.getMessage(), containsString("Invalid request")); + } + + @Test + void testResolveAndAuthorizeForDomainDeleteInvalidRequestNotUser() { + when(resourceRequest.getAction()).thenReturn(ResourceAction.DELETE); + AuthenticationServiceException result = assertThrows(AuthenticationServiceException.class, + () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, user)); + + assertThat(result.getMessage(), containsString("User is not authorized for the domain!")); + } + + @Test + void testResolveAndAuthorizeForDomainDeleteInvalidRequestUserNotAuthorized() { + when(user.getUser()).thenReturn(testUtilsDao.getUser3()); + when(resourceRequest.getAction()).thenReturn(ResourceAction.DELETE); + AuthenticationServiceException result = assertThrows(AuthenticationServiceException.class, + () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, user)); + + assertThat(result.getMessage(), containsString("User is not authorized for the domain!")); + } + + @Test + void testResolveAndAuthorizeForDomainCreateInvalidRequestUserNotAuthorized() { + when(user.getUser()).thenReturn(testUtilsDao.getUser3()); + when(resourceRequest.getAction()).thenReturn(ResourceAction.CREATE_UPDATE); + AuthenticationServiceException result = assertThrows(AuthenticationServiceException.class, + () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, user)); + + assertThat(result.getMessage(), containsString("User is not authorized for the domain!")); + } + + @Test + void testResolveAndAuthorizeForDomainDeleteUserAuthorized() { + when(user.getUser()).thenReturn(testUtilsDao.getUser1()); + when(resourceRequest.getAction()).thenReturn(ResourceAction.DELETE); + DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, user); + assertNotNull(domain); + } + + @Test + void testResolveAndAuthorizeForDomainDeleteCreateAuthorized() { + when(user.getUser()).thenReturn(testUtilsDao.getUser1()); + when(resourceRequest.getAction()).thenReturn(ResourceAction.CREATE_UPDATE); + DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, user); + assertNotNull(domain); + } + + @Test + void testResolveAndAuthorizeForDomainCreateInvalidRequestNotUser() { + when(resourceRequest.getAction()).thenReturn(ResourceAction.CREATE_UPDATE); + AuthenticationServiceException result = assertThrows(AuthenticationServiceException.class, + () -> testInstance.resolveAndAuthorizeForDomain(resourceRequest, user)); + + assertThat(result.getMessage(), containsString("User is not authorized for the domain!")); + } + + @Test + void testResolveAndAuthorizeForDomainNoUserOK() { + when(resourceRequest.getAction()).thenReturn(ResourceAction.READ); + DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, user); + assertNotNull(domain); + } + + @Test + void testResolveAndAuthorizeForDomain() { + when(user.getUser()).thenReturn(testUtilsDao.getUser1()); + when(resourceRequest.getAction()).thenReturn(ResourceAction.READ); + DBDomain domain = testInstance.resolveAndAuthorizeForDomain(resourceRequest, user); + assertNotNull(domain); + } + +} diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/resource/ResourceServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/resource/ResourceServiceTest.java new file mode 100644 index 000000000..cdb8ae53c --- /dev/null +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/resource/ResourceServiceTest.java @@ -0,0 +1,168 @@ +package eu.europa.ec.edelivery.smp.services.resource; + +import eu.europa.ec.edelivery.smp.auth.SMPUserDetails; +import eu.europa.ec.edelivery.smp.data.dao.AbstractJunit5BaseDao; +import eu.europa.ec.edelivery.smp.data.model.user.DBUser; +import eu.europa.ec.edelivery.smp.exceptions.MalformedIdentifierException; +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 eu.europa.ec.edelivery.smp.servlet.ResourceResponse; +import eu.europa.ec.edelivery.smp.testutil.TestConstants; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.Arrays; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.when; + +class ResourceServiceTest extends AbstractJunit5BaseDao { + @Autowired + ResourceService testInstance; + + ResourceRequest resourceRequest = Mockito.mock(ResourceRequest.class); + ResolvedData resolvedData = Mockito.mock(ResolvedData.class); + ResourceResponse resourceResponse = Mockito.mock(ResourceResponse.class); + SMPUserDetails user = Mockito.mock(SMPUserDetails.class); + + + @BeforeEach + public void prepareDatabase() { + testUtilsDao.clearData(); + testUtilsDao.creatDomainMemberships(); + testUtilsDao.createGroupMemberships(); + testUtilsDao.createResourceMemberships(); + } + + @Test + void handleRequestFail() { + SMPRuntimeException result = assertThrows(SMPRuntimeException.class, + () -> testInstance.handleRequest(user, resourceRequest, resourceResponse)); + + assertThat(result.getMessage(), containsString("Invalid request")); + } + + @ParameterizedTest + @CsvSource({ + ", 'Location vector coordinates must not be null!'", + "1/2/3/4/5/6/7, 'More than max. count (5) of Resource Location vector coordinates!'", + TestConstants.TEST_DOMAIN_CODE_1 + ", 'Not enough path parameters to locate resource'", + TestConstants.TEST_DOMAIN_CODE_1 + "/" + TestConstants.TEST_RESOURCE_DEF_CPP + ", 'Not enough path parameters to locate resource'", + "badIdentifier, 'Malformed identifier, scheme and id should be delimited by double colon: badidentifier'", + "doc-type/badIdentifier, 'Malformed identifier, scheme and id should be delimited by double colon: doc-type'", + "domain/doc-type/badIdentifier, 'Malformed identifier, scheme and id should be delimited by double colon: domain'", + }) + void handleRequestFailBadPath(String path, String errorMessage) { + when(resourceRequest.getUrlPathParameters()).thenReturn(path == null ? null : Arrays.asList(path.split("/"))); + when(resourceRequest.getAuthorizedDomain()).thenReturn(testUtilsDao.getD1()); + + SMPRuntimeException result = assertThrows(SMPRuntimeException.class, + () -> testInstance.handleRequest(user, resourceRequest, resourceResponse)); + + assertThat(result.getMessage(), containsString(errorMessage)); + } + + @ParameterizedTest + @CsvSource({ + "'', 'Can not parse empty identifier value!'" + } + ) + void handleRequestFailBadIdentifier(String path, String errorMessage) { + when(resourceRequest.getUrlPathParameters()).thenReturn(path == null ? null : Arrays.asList(path.split("/"))); + when(resourceRequest.getAuthorizedDomain()).thenReturn(testUtilsDao.getD1()); + + MalformedIdentifierException result = assertThrows(MalformedIdentifierException.class, + () -> testInstance.handleRequest(user, resourceRequest, resourceResponse)); + + assertThat(result.getMessage(), containsString(errorMessage)); + } + + @Test + void handleRequestReadOK() { + when(resourceRequest.getUrlPathParameters()).thenReturn(Arrays.asList(TestConstants.TEST_DOMAIN_CODE_1, TestConstants.TEST_SG_SCHEMA_1 + "::" + TestConstants.TEST_SG_ID_1)); + when(resourceRequest.getAuthorizedDomain()).thenReturn(testUtilsDao.getD1()); + when(resourceRequest.getAction()).thenReturn(ResourceAction.READ); + when(resourceRequest.getResolvedData()).thenReturn(resolvedData); + when(resolvedData.getResourceDef()).thenReturn(testUtilsDao.getResourceDefSmp()); + when(resolvedData.getResource()).thenReturn(testUtilsDao.getResourceD1G1RD1()); + when(resolvedData.getDomain()).thenReturn(testUtilsDao.getD1()); + testInstance.handleRequest(user, resourceRequest, resourceResponse); + } + + @Test + void handleRequestCreateOK() { + when(user.getUser()).thenReturn(testUtilsDao.getUser1()); + when(resourceRequest.getUrlPathParameters()).thenReturn(Arrays.asList(TestConstants.TEST_DOMAIN_CODE_1, TestConstants.TEST_SG_SCHEMA_1 + "::0007:001:utest")); + when(resourceRequest.getAuthorizedDomain()).thenReturn(testUtilsDao.getD1()); + when(resourceRequest.getAction()).thenReturn(ResourceAction.CREATE_UPDATE); + when(resourceRequest.getResolvedData()).thenReturn(resolvedData); + when(resolvedData.getResourceDef()).thenReturn(testUtilsDao.getResourceDefSmp()); + when(resolvedData.getResource()).thenReturn(testUtilsDao.getResourceD1G1RD1()); + when(resolvedData.getDomain()).thenReturn(testUtilsDao.getD1()); + when(resourceRequest.getInputStream()).thenReturn(ResourceResolverServiceTest.class.getResourceAsStream("/examples/oasis-smp-1.0/ServiceGroupOK.xml")); + testInstance.handleRequest(user, resourceRequest, resourceResponse); + } + + @Test + void handleRequestDeleteOK() { + when(user.getUser()).thenReturn(testUtilsDao.getUser1()); + when(resourceRequest.getUrlPathParameters()).thenReturn(Arrays.asList(TestConstants.TEST_DOMAIN_CODE_1, TestConstants.TEST_SG_SCHEMA_1 + "::" + TestConstants.TEST_SG_ID_1)); + when(resourceRequest.getAuthorizedDomain()).thenReturn(testUtilsDao.getD1()); + when(resourceRequest.getAction()).thenReturn(ResourceAction.DELETE); + when(resourceRequest.getResolvedData()).thenReturn(resolvedData); + when(resolvedData.getResourceDef()).thenReturn(testUtilsDao.getResourceDefSmp()); + when(resolvedData.getResource()).thenReturn(testUtilsDao.getResourceD1G1RD1()); + when(resolvedData.getDomain()).thenReturn(testUtilsDao.getD1()); + + testInstance.handleRequest(user, resourceRequest, resourceResponse); + } + + @Test + void handleRequestCreateNotAuthorized() { + + when(resourceRequest.getUrlPathParameters()).thenReturn(Arrays.asList(TestConstants.TEST_DOMAIN_CODE_1, TestConstants.TEST_SG_SCHEMA_1 + "::0007:001:utest")); + when(resourceRequest.getAuthorizedDomain()).thenReturn(testUtilsDao.getD1()); + when(resourceRequest.getAction()).thenReturn(ResourceAction.CREATE_UPDATE); + when(resourceRequest.getResolvedData()).thenReturn(resolvedData); + when(resolvedData.getResourceDef()).thenReturn(testUtilsDao.getResourceDefSmp()); + when(resolvedData.getResource()).thenReturn(testUtilsDao.getResourceD1G1RD1()); + when(resolvedData.getDomain()).thenReturn(testUtilsDao.getD1()); + when(resourceRequest.getInputStream()).thenReturn(ResourceResolverServiceTest.class.getResourceAsStream("/examples/oasis-smp-1.0/ServiceGroupOK.xml")); + SMPRuntimeException result = assertThrows(SMPRuntimeException.class, + () -> testInstance.handleRequest(user, resourceRequest, resourceResponse)); + + assertThat(result.getMessage(), containsString("User not authorized")); + } + + + @Test + void testFindOwnerOK() { + DBUser user = testInstance.findOwner(testUtilsDao.getUser1().getUsername()); + assertNotNull(user); + assertEquals(testUtilsDao.getUser1().getUsername(), user.getUsername()); + } + + @Test + void testFindOwnerNotExists() { + SMPRuntimeException result = assertThrows(SMPRuntimeException.class, () -> testInstance.findOwner("CN=User not exists,OU=Test Users,O=Test Domain,C=BE:1234567890")); + assertThat(result.getMessage(), containsString("Invalid owner id")); + } + + + @Test + void testSplitSerialFromSubject() { + String[] values = + ResourceService.splitSerialFromSubject("CN=Test User 1,OU=Test Users,O=Test Domain,C=BE:1234567890"); + assertEquals(2, values.length); + assertEquals("CN=Test User 1,OU=Test Users,O=Test Domain,C=BE", values[0]); + assertEquals("1234567890", values[1]); + } + +} diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainPublicServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainPublicServiceTest.java new file mode 100644 index 000000000..c07852542 --- /dev/null +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainPublicServiceTest.java @@ -0,0 +1,95 @@ +package eu.europa.ec.edelivery.smp.services.ui; + +import eu.europa.ec.edelivery.smp.data.dao.AbstractJunit5BaseDao; +import eu.europa.ec.edelivery.smp.data.ui.*; +import eu.europa.ec.edelivery.smp.exceptions.BadRequestException; +import org.hamcrest.MatcherAssert; +import org.junit.jupiter.api.Assertions; +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 java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@ContextConfiguration(classes = UIDomainPublicService.class) +class UIDomainPublicServiceTest extends AbstractJunit5BaseDao { + + @Autowired + UIDomainPublicService testInstance; + + @BeforeEach + public void prepareDatabase() { + testUtilsDao.clearData(); + testUtilsDao.creatDomainMemberships(); + testUtilsDao.createGroupMemberships(); + testUtilsDao.createResourceMemberships(); + + } + + @Test + public void testGetTableList() { + ServiceResult<DomainPublicRO> result = testInstance.getTableList(-1, -1, null, null, null); + assertEquals(2, result.getCount().intValue()); + } + + @Test + public void testGetAllDomainsForDomainAdminUser() { + List<DomainRO> result = testInstance.getAllDomainsForDomainAdminUser(testUtilsDao.getUser1().getId()); + assertEquals(1, result.size()); + } + + @Test + public void testGetAllDomainsForDomainAdminUser3() { + List<DomainRO> result = testInstance.getAllDomainsForDomainAdminUser(testUtilsDao.getUser3().getId()); + assertEquals(0, result.size()); + } + + @Test + public void testGetAllDomainsForGroupAdminUser() { + List<DomainRO> result = testInstance.getAllDomainsForGroupAdminUser(testUtilsDao.getUser1().getId()); + assertEquals(1, result.size()); + } + + @Test + public void testGetAllDomainsForGroupAdminUser3() { + List<DomainRO> result = testInstance.getAllDomainsForGroupAdminUser(testUtilsDao.getUser3().getId()); + assertEquals(0, result.size()); + } + + @Test + public void testGetAllDomainsForResourceAdminUser() { + List<DomainRO> result = testInstance.getAllDomainsForResourceAdminUser(testUtilsDao.getUser1().getId()); + assertEquals(1, result.size()); + } + + @Test + public void testGetAllDomainsForResourceAdminUser3() { + List<DomainRO> result = testInstance.getAllDomainsForResourceAdminUser(testUtilsDao.getUser3().getId()); + assertEquals(0, result.size()); + } + + @Test + public void testGetDomainMembers() { + ServiceResult<MemberRO> result = testInstance.getDomainMembers(testUtilsDao.getD1().getId(), -1, -1, null); + assertEquals(1, result.getCount().intValue()); + assertEquals(1, result.getServiceEntities().size()); + } + + @Test + public void testGetResourceDefDomainList() { + List<ResourceDefinitionRO> result = testInstance.getResourceDefDomainList(testUtilsDao.getD1().getId()); + assertEquals(2, result.size()); + } + + @Test + public void testGetResourceDefDomainListFal() { + BadRequestException result = assertThrows(BadRequestException.class, () -> + testInstance.getResourceDefDomainList(-100L)); + + MatcherAssert.assertThat(result.getMessage(), org.hamcrest.Matchers.containsString("Domain does not exist in database")); + + } +} diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainServiceIntegrationTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainServiceIntegrationTest.java index 807bcdc1e..548ba4128 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainServiceIntegrationTest.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/ui/UIDomainServiceIntegrationTest.java @@ -2,13 +2,10 @@ package eu.europa.ec.edelivery.smp.services.ui; 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.data.ui.DeleteEntityValidation; import eu.europa.ec.edelivery.smp.data.ui.DomainRO; import eu.europa.ec.edelivery.smp.data.ui.ServiceResult; import eu.europa.ec.edelivery.smp.services.AbstractServiceIntegrationTest; import eu.europa.ec.edelivery.smp.testutil.TestDBUtils; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -19,30 +16,28 @@ import static org.junit.Assert.*; /** - * Purpose of class is to test UIDomainService base methods + * Purpose of class is to test UIDomainService base methods * * @author Joze Rihtarsic * @since 4.1 */ -@ContextConfiguration(classes= UIDomainService.class) +@ContextConfiguration(classes = UIDomainService.class) public class UIDomainServiceIntegrationTest extends AbstractServiceIntegrationTest { - @Rule - public ExpectedException expectedExeption = ExpectedException.none(); @Autowired protected UIDomainService testInstance; - protected void insertDataObjects(int size){ - for (int i=0; i < size; i++){ - DBDomain d = TestDBUtils.createDBDomain("domain"+i); + protected void insertDataObjects(int size) { + for (int i = 0; i < size; i++) { + DBDomain d = TestDBUtils.createDBDomain("domain" + i); domainDao.persistFlushDetach(d); } } @Test - public void testGetTableListEmpty(){ + public void testGetTableListEmpty() { // given when - ServiceResult<DomainRO> res = testInstance.getTableList(-1,-1,null, null, null); + ServiceResult<DomainRO> res = testInstance.getTableList(-1, -1, null, null, null); // then assertNotNull(res); assertEquals(0, res.getCount().intValue()); @@ -53,12 +48,12 @@ public class UIDomainServiceIntegrationTest extends AbstractServiceIntegrationTe } @Test - public void testGetTableList15(){ + public void testGetTableList15() { // given insertDataObjects(15); //when - ServiceResult<DomainRO> res = testInstance.getTableList(-1,-1,null, null,null); + ServiceResult<DomainRO> res = testInstance.getTableList(-1, -1, null, null, null); // then -- GitLab