From 49a9b4e54d38736f449c2626fb2a90c50b782ed3 Mon Sep 17 00:00:00 2001
From: RIHTARSIC Joze <joze.rihtarsic@ext.ec.europa.eu>
Date: Fri, 28 Jul 2023 16:35:32 +0200
Subject: [PATCH] add unit tests

---
 .../ui/internal/ExtensionAdminController.java |   2 -
 .../smp/test/testutils/MockMvcUtils.java      |  15 +
 ...ResourceEditControllerIntegrationTest.java | 322 ++++++++++++++++++
 ...ruststoreAdminResourceIntegrationTest.java |   2 -
 ...> UserAdminControllerIntegrationTest.java} | 177 +++++-----
 5 files changed, 438 insertions(+), 80 deletions(-)
 create mode 100644 smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIntegrationTest.java
 rename smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/{UserAdminResourceIntegrationTest.java => UserAdminControllerIntegrationTest.java} (51%)

diff --git a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/ExtensionAdminController.java b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/ExtensionAdminController.java
index 13d0ab03e..f46bf1a68 100644
--- a/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/ExtensionAdminController.java
+++ b/smp-webapp/src/main/java/eu/europa/ec/edelivery/smp/ui/internal/ExtensionAdminController.java
@@ -41,6 +41,4 @@ public class ExtensionAdminController {
         LOG.info("getExtensionList count: ");
         return uiExtensionService.getExtensions();
     }
-
-
 }
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/test/testutils/MockMvcUtils.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/test/testutils/MockMvcUtils.java
index bb83b65e7..ba656f468 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/test/testutils/MockMvcUtils.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/test/testutils/MockMvcUtils.java
@@ -5,8 +5,10 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.json.JsonMapper;
 import com.fasterxml.jackson.databind.type.CollectionType;
 import eu.europa.ec.edelivery.smp.data.ui.DomainRO;
+import eu.europa.ec.edelivery.smp.data.ui.GroupRO;
 import eu.europa.ec.edelivery.smp.data.ui.SearchUserRO;
 import eu.europa.ec.edelivery.smp.data.ui.UserRO;
+import org.junit.jupiter.api.Assertions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.http.HttpHeaders;
@@ -28,6 +30,7 @@ import java.util.List;
 
 import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.*;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
 import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
@@ -154,6 +157,18 @@ public class MockMvcUtils {
         return getArrayFromResponse(result, DomainRO.class);
     }
 
+    public static List<GroupRO> geUserGroups(MockMvc mvc, MockHttpSession session, UserRO userRO, DomainRO domainRO, String forRole) throws Exception {
+
+        MvcResult result = mvc.perform(get(CONTEXT_PATH_EDIT_GROUP, userRO.getUserId(), domainRO.getDomainId())
+                        .session(session)
+                        .param(PARAM_NAME_TYPE, forRole)
+                        .with(csrf()))
+                .andExpect(status().isOk()).andReturn();
+
+        //then
+        return  getArrayFromResponse(result, GroupRO.class);
+    }
+
     public static List<SearchUserRO> geUsersByUsernameFilter(MockMvc mvc, MockHttpSession session, UserRO userRO, String username) throws Exception {
 
         MvcResult result = mvc.perform(get(CONTEXT_PATH_PUBLIC_USER + "/{user-id}/search", userRO.getUserId())
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIntegrationTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIntegrationTest.java
new file mode 100644
index 000000000..173d42883
--- /dev/null
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIntegrationTest.java
@@ -0,0 +1,322 @@
+package eu.europa.ec.edelivery.smp.ui.edit;
+
+import eu.europa.ec.edelivery.smp.data.enums.MembershipRoleType;
+import eu.europa.ec.edelivery.smp.data.enums.VisibilityType;
+import eu.europa.ec.edelivery.smp.data.ui.*;
+import eu.europa.ec.edelivery.smp.services.ui.UIGroupPublicService;
+import eu.europa.ec.edelivery.smp.services.ui.UIResourceSearchService;
+import eu.europa.ec.edelivery.smp.services.ui.filters.ResourceFilter;
+import eu.europa.ec.edelivery.smp.test.testutils.TestROUtils;
+import eu.europa.ec.edelivery.smp.ui.AbstractControllerTest;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.mock.web.MockHttpSession;
+import org.springframework.test.web.servlet.MvcResult;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import static eu.europa.ec.edelivery.smp.test.testutils.MockMvcUtils.*;
+import static eu.europa.ec.edelivery.smp.ui.ResourceConstants.*;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+/**
+ * For the test configuration see the webapp_integration_test_data.sql file.
+ * The system admin user is admin member of domain '1' and group '1'.
+ */
+public class ResourceEditControllerIntegrationTest extends AbstractControllerTest {
+    private static final String PATH = CONTEXT_PATH_EDIT_RESOURCE;
+
+    @Autowired
+    protected UIResourceSearchService uiResourceSearchService;
+
+    @BeforeEach
+    public void setup() throws IOException {
+        super.setup();
+    }
+
+    @ParameterizedTest
+    @CsvSource({
+            ",'', 2",
+            ",'group-admin', 2",
+            ",'resource-admin', 0",
+            "'','', 2",
+            "ehealth-actorid-qns,'', 2", // filter by group match
+            "'No match at all','', 0",
+            "australia,'', 1", // filter by value match
+    })
+    public void testGetResourcesForGroup(String filter, String roleType, int expectedResults) throws Exception {
+        // given when
+        MockHttpSession session = loginWithSystemAdmin(mvc);
+        UserRO userRO = getLoggedUserData(mvc, session);
+        List<DomainRO> domainsForUser = geUserDomainsForRole(mvc, session, userRO, null);
+        assertEquals(1, domainsForUser.size());
+        DomainRO domainRO = domainsForUser.get(0);
+        List<GroupRO> groupsForUser = geUserGroups(mvc, session, userRO, domainRO, null);
+        assertFalse(groupsForUser.isEmpty()); // set the webapp_integration_test_data.sql file
+        GroupRO groupRO = groupsForUser.get(0);
+        // when
+        MvcResult result = mvc.perform(get(PATH, userRO.getUserId(), domainRO.getDomainId(), groupRO.getGroupId())
+                        .session(session)
+                        .param(PARAM_PAGINATION_FILTER, filter)
+                        .param(PARAM_NAME_TYPE, roleType)
+                        .with(csrf()))
+                .andExpect(status().isOk()).andReturn();
+
+        //then
+        ServiceResult serviceResult = getObjectFromResponse(result, ServiceResult.class);
+        assertNotNull(serviceResult);
+        assertEquals(expectedResults, serviceResult.getServiceEntities().size());
+
+    }
+
+    @Test
+    public void testPutResource() throws Exception {
+        // given
+        MockHttpSession session = loginWithSystemAdmin(mvc);
+        UserRO userRO = getLoggedUserData(mvc, session);
+        List<DomainRO> domainsForUser = geUserDomainsForRole(mvc, session, userRO, null);
+        assertEquals(1, domainsForUser.size());
+        DomainRO domainRO = domainsForUser.get(0);
+        List<GroupRO> groupsForUser = geUserGroups(mvc, session, userRO, domainRO, null);
+        assertFalse(groupsForUser.isEmpty()); // set the webapp_integration_test_data.sql file
+        GroupRO groupRO = groupsForUser.get(0);
+
+
+        ResourceRO resource = new ResourceRO();
+        resource.setResourceTypeIdentifier("edelivery-oasis-smp-1.0-servicegroup");
+        resource.setIdentifierValue(UUID.randomUUID().toString());
+        resource.setIdentifierScheme("test-test-test");
+        resource.setVisibility(VisibilityType.PUBLIC);
+
+        int initialSize = getResourceCount();
+        // when
+        MvcResult result = mvc.perform(put(PATH + '/' + SUB_CONTEXT_PATH_EDIT_RESOURCE_CREATE, userRO.getUserId(), domainRO.getDomainId(), groupRO.getGroupId())
+                        .session(session)
+                        .with(csrf())
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(getObjectMapper().writeValueAsBytes(resource)))
+                .andExpect(status().isOk()).andReturn();
+
+        //then
+        ResourceRO response = getObjectFromResponse(result, ResourceRO.class);
+        assertNotNull(response);
+        assertEquals(VisibilityType.PUBLIC, response.getVisibility());
+        assertEquals(resource.getIdentifierValue(), response.getIdentifierValue());
+        assertEquals(resource.getIdentifierScheme(), response.getIdentifierScheme());
+
+        assertEquals(initialSize + 1, getResourceCount());
+    }
+
+    @Test
+    public void testDeleteResource() throws Exception {
+        // given
+        MockHttpSession session = loginWithSystemAdmin(mvc);
+        UserRO userRO = getLoggedUserData(mvc, session);
+        List<DomainRO> domainsForUser = geUserDomainsForRole(mvc, session, userRO, null);
+        assertEquals(1, domainsForUser.size());
+        DomainRO domainRO = domainsForUser.get(0);
+        List<GroupRO> groupsForUser = geUserGroups(mvc, session, userRO, domainRO, null);
+        GroupRO groupRO = groupsForUser.get(0);
+        ResourceRO addedResource = addResourceToGroup(session, domainRO, groupRO, userRO);
+        int initialSize = getResourceCount();
+
+        // when
+        MvcResult result = mvc.perform(delete(PATH + '/' + SUB_CONTEXT_PATH_EDIT_RESOURCE_DELETE, userRO.getUserId(), domainRO.getDomainId(), groupRO.getGroupId(),addedResource.getResourceId())
+                        .session(session)
+                        .with(csrf()))
+                        .andExpect(status().isOk()).andReturn();
+        // then
+        ResourceRO response = getObjectFromResponse(result, ResourceRO.class);
+        assertNotNull(response);
+        assertEquals(addedResource.getIdentifierValue(), response.getIdentifierValue());
+        assertEquals(addedResource.getIdentifierScheme(), response.getIdentifierScheme());
+        assertEquals(initialSize - 1,  getResourceCount());
+    }
+
+    @Test
+    public void testUpdateResource() throws Exception {
+        // given
+        MockHttpSession session = loginWithSystemAdmin(mvc);
+        UserRO userRO = getLoggedUserData(mvc, session);
+        List<DomainRO> domainsForUser = geUserDomainsForRole(mvc, session, userRO, null);
+        assertEquals(1, domainsForUser.size());
+        DomainRO domainRO = domainsForUser.get(0);
+        List<GroupRO> groupsForUser = geUserGroups(mvc, session, userRO, domainRO, null);
+        GroupRO groupRO = groupsForUser.get(0);
+        ResourceRO addedResource = addResourceToGroup(session, domainRO, groupRO, userRO);
+        addedResource.setVisibility(VisibilityType.PRIVATE);
+
+        // when
+        MvcResult result = mvc.perform(post(PATH + '/' + SUB_CONTEXT_PATH_EDIT_RESOURCE_UPDATE, userRO.getUserId(), domainRO.getDomainId(),
+                        groupRO.getGroupId(), addedResource.getResourceId())
+                        .session(session)
+                        .with(csrf())
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(getObjectMapper().writeValueAsBytes(addedResource)))
+                .andExpect(status().isOk()).andReturn();
+        // then
+        ResourceRO response = getObjectFromResponse(result, ResourceRO.class);
+        assertNotNull(response);
+        assertEquals(addedResource.getVisibility(), response.getVisibility());
+        assertEquals(addedResource.getIdentifierValue(), response.getIdentifierValue());
+        assertEquals(addedResource.getIdentifierScheme(), response.getIdentifierScheme());
+    }
+
+
+    @Test
+    public void testGetGroupMembers() throws Exception {
+        // given
+        MockHttpSession session = loginWithSystemAdmin(mvc);
+        UserRO userRO = getLoggedUserData(mvc, session);
+        List<DomainRO> domainsForUser = geUserDomainsForRole(mvc, session, userRO, null);
+        assertEquals(1, domainsForUser.size());
+        DomainRO domainRO = domainsForUser.get(0);
+        List<GroupRO> groupsForUser = geUserGroups(mvc, session, userRO, domainRO, null);
+        GroupRO groupRO = groupsForUser.get(0);
+        ResourceRO addedResource = addResourceToGroup(session, domainRO, groupRO, userRO);
+
+        // when
+        MvcResult result = mvc.perform(get(PATH + '/' + SUB_CONTEXT_PATH_EDIT_RESOURCE_MEMBER, userRO.getUserId(), domainRO.getDomainId(), groupRO.getGroupId(),
+                        addedResource.getResourceId())
+                        .session(session)
+                        .with(csrf()))
+                .andExpect(status().isOk()).andReturn();
+
+        //then
+        ServiceResult serviceResult = getObjectFromResponse(result, ServiceResult.class);
+        assertNotNull(serviceResult);
+        assertEquals(1, serviceResult.getServiceEntities().size());
+        MemberRO memberRO = getObjectMapper().convertValue(serviceResult.getServiceEntities().get(0), MemberRO.class);
+
+        // the admin user who created group is automatically added as member
+        assertEquals(userRO.getUsername(), memberRO.getUsername());
+    }
+
+
+    @Test
+    public void testAddGroupMember() throws Exception {
+        // given
+        MockHttpSession session = loginWithSystemAdmin(mvc);
+        UserRO userRO = getLoggedUserData(mvc, session);
+        List<DomainRO> domainsForUser = geUserDomainsForRole(mvc, session, userRO, null);
+        assertEquals(1, domainsForUser.size());
+        DomainRO domainRO = domainsForUser.get(0);
+        List<GroupRO> groupsForUser = geUserGroups(mvc, session, userRO, domainRO, null);
+        GroupRO groupRO = groupsForUser.get(0);
+        ResourceRO addedResource = addResourceToGroup(session, domainRO, groupRO, userRO);
+
+        //when
+        MemberRO response = addResourceMember(session, domainRO, groupRO,addedResource, userRO, SG_USER_USERNAME);
+        // then
+        assertNotNull(response);
+        assertEquals(SG_USER_USERNAME, response.getUsername());
+    }
+
+    @Test
+   public void testDeleteGroupMember() throws Exception {
+        // given
+        MockHttpSession session = loginWithSystemAdmin(mvc);
+        UserRO userRO = getLoggedUserData(mvc, session);
+        List<DomainRO> domainsForUser = geUserDomainsForRole(mvc, session, userRO, null);
+        assertEquals(1, domainsForUser.size());
+        DomainRO domainRO = domainsForUser.get(0);
+        List<GroupRO> groupsForUser = geUserGroups(mvc, session, userRO, domainRO, null);
+        GroupRO groupRO = groupsForUser.get(0);
+        ResourceRO addedResource = addResourceToGroup(session, domainRO, groupRO, userRO);
+        MemberRO member = addResourceMember(session, domainRO, groupRO, addedResource, userRO, SG_USER_USERNAME);
+        //when
+        MvcResult deleteGroupMemberResult = mvc.perform(delete(PATH + '/' + SUB_CONTEXT_PATH_EDIT_RESOURCE_MEMBER_DELETE,
+                        userRO.getUserId(), domainRO.getDomainId(), groupRO.getGroupId(), addedResource.getResourceId(), member.getMemberId())
+                        .session(session)
+                        .with(csrf()))
+                .andExpect(status().isOk()).andReturn();
+
+        //then
+        MemberRO response = getObjectFromResponse(deleteGroupMemberResult, MemberRO.class);
+        assertNotNull(response);
+        assertEquals(SG_USER_USERNAME, response.getUsername());
+    }
+
+    @Test
+    public void testUpdateGroupMember() throws Exception {
+        // given
+        MockHttpSession session = loginWithSystemAdmin(mvc);
+        UserRO userRO = getLoggedUserData(mvc, session);
+        List<DomainRO> domainsForUser = geUserDomainsForRole(mvc, session, userRO, null);
+        assertEquals(1, domainsForUser.size());
+        DomainRO domainRO = domainsForUser.get(0);
+        List<GroupRO> groupsForUser = geUserGroups(mvc, session, userRO, domainRO, null);
+        GroupRO groupRO = groupsForUser.get(0);
+        ResourceRO addedResource = addResourceToGroup(session, domainRO, groupRO, userRO);
+        MemberRO member = addResourceMember(session, domainRO, groupRO, addedResource, userRO, SG_USER_USERNAME);
+
+
+        MvcResult updateGroupMemberResult = mvc.perform(put(PATH + '/' + SUB_CONTEXT_PATH_EDIT_RESOURCE_MEMBER_PUT,
+                        userRO.getUserId(), domainRO.getDomainId(), groupRO.getGroupId(), addedResource.getResourceId(), member.getMemberId())
+                        .session(session)
+                        .with(csrf())
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(getObjectMapper().writeValueAsBytes(member)))
+                .andExpect(status().isOk()).andReturn();
+
+        //then
+        MemberRO response = getObjectFromResponse(updateGroupMemberResult, MemberRO.class);
+        assertNotNull(response);
+        assertEquals(SG_USER_USERNAME, response.getUsername());
+        assertEquals(member.getRoleType(), response.getRoleType());
+    }
+
+
+    public MemberRO addResourceMember(MockHttpSession session, DomainRO domainRO, GroupRO groupRO, ResourceRO resourceRO,  UserRO domainAdminUser, String newMemberUsername) throws Exception {
+
+        MemberRO memberToAdd = new MemberRO();
+        memberToAdd.setRoleType(MembershipRoleType.VIEWER);
+        memberToAdd.setUsername(newMemberUsername);
+
+        // when
+        MvcResult result = mvc.perform(put(PATH + '/' + SUB_CONTEXT_PATH_EDIT_RESOURCE_MEMBER_PUT,
+                        domainAdminUser.getUserId(), domainRO.getDomainId(), groupRO.getGroupId(), resourceRO.getResourceId())
+                        .session(session)
+                        .with(csrf())
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(getObjectMapper().writeValueAsBytes(memberToAdd)))
+                .andExpect(status().isOk()).andReturn();
+
+        //then
+        return getObjectFromResponse(result, MemberRO.class);
+    }
+
+
+    public ResourceRO addResourceToGroup(MockHttpSession session, DomainRO domainRO, GroupRO groupRO,  UserRO domainAdminUser) throws Exception {
+
+        ResourceRO resource = new ResourceRO();
+        resource.setResourceTypeIdentifier("edelivery-oasis-smp-1.0-servicegroup");
+        resource.setIdentifierValue(UUID.randomUUID().toString());
+        resource.setIdentifierScheme("test-test-test");
+        resource.setVisibility(VisibilityType.PUBLIC);
+
+        MvcResult result = mvc.perform(put(PATH + '/' + SUB_CONTEXT_PATH_EDIT_RESOURCE_CREATE, domainAdminUser.getUserId(), domainRO.getDomainId(), groupRO.getGroupId())
+                        .session(session)
+                        .with(csrf())
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(getObjectMapper().writeValueAsBytes(resource)))
+                .andExpect(status().isOk()).andReturn();
+
+
+        return getObjectFromResponse(result, ResourceRO.class);
+    }
+
+    public int getResourceCount(){
+        return uiResourceSearchService.getTableList(-1,-1, null, null, new ResourceFilter()).getCount().intValue();
+    }
+}
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminResourceIntegrationTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminResourceIntegrationTest.java
index 56b3423a6..a5177f664 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminResourceIntegrationTest.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/TruststoreAdminResourceIntegrationTest.java
@@ -3,7 +3,6 @@ package eu.europa.ec.edelivery.smp.ui.internal;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 import eu.europa.ec.edelivery.smp.data.ui.CertificateRO;
 import eu.europa.ec.edelivery.smp.data.ui.UserRO;
 import eu.europa.ec.edelivery.smp.services.ui.UITruststoreService;
@@ -13,7 +12,6 @@ import eu.europa.ec.edelivery.smp.ui.AbstractControllerTest;
 import eu.europa.ec.edelivery.smp.ui.external.UserResourceIntegrationTest;
 import org.apache.commons.io.IOUtils;
 import org.hamcrest.CoreMatchers;
-
 import org.junit.Ignore;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminResourceIntegrationTest.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminControllerIntegrationTest.java
similarity index 51%
rename from smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminResourceIntegrationTest.java
rename to smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminControllerIntegrationTest.java
index 381771a90..277e19ab0 100644
--- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminResourceIntegrationTest.java
+++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/internal/UserAdminControllerIntegrationTest.java
@@ -1,64 +1,33 @@
 package eu.europa.ec.edelivery.smp.ui.internal;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.json.JsonMapper;
 import eu.europa.ec.edelivery.smp.data.ui.*;
-import eu.europa.ec.edelivery.smp.test.SmpTestWebAppConfig;
+import eu.europa.ec.edelivery.smp.ui.AbstractControllerTest;
 import eu.europa.ec.edelivery.smp.ui.ResourceConstants;
 import org.apache.commons.lang3.StringUtils;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.BeforeEach;
 import org.springframework.mock.web.MockHttpSession;
-import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors;
-import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.jdbc.Sql;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.context.web.WebAppConfiguration;
-import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.MvcResult;
-import org.springframework.web.context.WebApplicationContext;
 
 import javax.ws.rs.core.MediaType;
-import java.util.Collections;
+import java.io.IOException;
 import java.util.Map;
 import java.util.UUID;
 
 import static eu.europa.ec.edelivery.smp.test.testutils.MockMvcUtils.*;
 import static org.junit.Assert.*;
 import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
-import static org.springframework.test.context.jdbc.Sql.ExecutionPhase.BEFORE_TEST_METHOD;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
-@RunWith(SpringRunner.class)
-@DirtiesContext
-@WebAppConfiguration
-@ContextConfiguration(classes = {SmpTestWebAppConfig.class})
-@Sql(scripts = {
-        "classpath:/cleanup-database.sql",
-        "classpath:/webapp_integration_test_data.sql"},
-        executionPhase = BEFORE_TEST_METHOD)
-@Ignore
-public class UserAdminResourceIntegrationTest {
 
-    private static final String PATH_INTERNAL = ResourceConstants.CONTEXT_PATH_INTERNAL_USER;
-
-    @Autowired
-    private WebApplicationContext webAppContext;
+public class UserAdminControllerIntegrationTest extends AbstractControllerTest {
 
-    private MockMvc mvc;
-
-    ObjectMapper mapper = JsonMapper.builder()
-            .findAndAddModules()
-            .build();
+    private static final String PATH_INTERNAL = ResourceConstants.CONTEXT_PATH_INTERNAL_USER;
 
-    @Before
-    public void setup() {
-        mvc = initializeMockMvc(webAppContext);
+    @BeforeEach
+    public void setup() throws IOException {
+        super.setup();
     }
 
     @Test
@@ -68,19 +37,18 @@ public class UserAdminResourceIntegrationTest {
                         .session(session)
                         .with(csrf()))
                 .andExpect(status().isOk()).andReturn();
-        ServiceResult res = mapper.readValue(result.getResponse().getContentAsString(), ServiceResult.class);
+        ServiceResult res = getObjectMapper().readValue(result.getResponse().getContentAsString(), ServiceResult.class);
         // then
         assertNotNull(res);
         assertEquals(7, res.getServiceEntities().size());
         res.getServiceEntities().forEach(sgMap -> {
-            UserRO sgro = mapper.convertValue(sgMap, UserRO.class);
+            UserRO sgro = getObjectMapper().convertValue(sgMap, UserRO.class);
             assertNotNull(sgro.getUserId());
             assertNotNull(sgro.getUsername());
         });
     }
 
     @Test
-    @Ignore
     public void testValidateDeleteUserOK() throws Exception {
 
         // login
@@ -90,10 +58,10 @@ public class UserAdminResourceIntegrationTest {
                         .with(csrf())
                         .session(session))
                 .andExpect(status().isOk()).andReturn();
-        ServiceResult res = mapper.readValue(result.getResponse().getContentAsString(), ServiceResult.class);
+        ServiceResult res = getObjectMapper().readValue(result.getResponse().getContentAsString(), ServiceResult.class);
         assertNotNull(res);
         assertFalse(res.getServiceEntities().isEmpty());
-        UserRO userRO = mapper.convertValue(res.getServiceEntities().get(0), UserRO.class);
+        UserRO userRO = getObjectMapper().convertValue(res.getServiceEntities().get(0), UserRO.class);
 
         MvcResult resultDelete = mvc.perform(post(PATH_INTERNAL + "/validate-delete")
                         .with(csrf())
@@ -102,11 +70,11 @@ public class UserAdminResourceIntegrationTest {
                         .content("[\"" + userRO.getUserId() + "\"]"))
                 .andExpect(status().isOk()).andReturn();
 
-        DeleteEntityValidation dev = mapper.readValue(resultDelete.getResponse().getContentAsString(), DeleteEntityValidation.class);
+        DeleteEntityValidation dev = getObjectMapper().readValue(resultDelete.getResponse().getContentAsString(), DeleteEntityValidation.class);
 
         assertFalse(dev.getListIds().isEmpty());
-        assertTrue(dev.getListDeleteNotPermitedIds().isEmpty());
-        assertEquals(userRO.getUserId(), dev.getListIds().get(0));
+        assertFalse(dev.getListDeleteNotPermitedIds().isEmpty());
+
     }
 
     @Test
@@ -130,16 +98,14 @@ public class UserAdminResourceIntegrationTest {
                 .andExpect(status().isOk())
                 .andReturn();
 
-        DeleteEntityValidation res = mapper.readValue(resultDelete.getResponse().getContentAsString(), DeleteEntityValidation.class);
+        DeleteEntityValidation res = getObjectMapper().readValue(resultDelete.getResponse().getContentAsString(), DeleteEntityValidation.class);
 
         assertTrue(res.getListIds().isEmpty());
         assertEquals("Could not delete logged user!", res.getStringMessage());
     }
 
-
     @Test
-    @Ignore
-    public void generateAccessTokenForUser() throws Exception {
+    public void changePasswordForUser() throws Exception {
         MockHttpSession sessionAdmin = loginWithSystemAdmin(mvc);
         UserRO userROAdmin = getLoggedUserData(mvc, sessionAdmin);
 
@@ -147,28 +113,33 @@ public class UserAdminResourceIntegrationTest {
                         .session(sessionAdmin)
                         .with(csrf()))
                 .andExpect(status().isOk()).andReturn();
-        ServiceResult res = mapper.readValue(resultUsers.getResponse().getContentAsString(), ServiceResult.class);
+        ServiceResult res = getObjectMapper().readValue(resultUsers.getResponse().getContentAsString(), ServiceResult.class);
         Map userROToUpdate = (Map) res.getServiceEntities().stream()
                 .filter(userMap ->
                         StringUtils.equals(SG_USER2_USERNAME, (String) ((Map) userMap).get("username"))).findFirst().get();
+        String newPassword = "TESTtest1234!@#$";
 
-        MvcResult result = mvc.perform(post(PATH_INTERNAL + "/" + userROAdmin.getUserId() + "/generate-access-token-for/" + userROToUpdate.get("userId"))
+
+        PasswordChangeRO newPass = new PasswordChangeRO();
+        newPass.setUsername(SG_USER2_USERNAME);
+        newPass.setCurrentPassword(SYS_ADMIN_PASSWD);
+        newPass.setNewPassword(newPassword);
+        assertNotEquals(newPassword, SG_USER2_PASSWD);
+
+        mvc.perform(put(PATH_INTERNAL + "/" + userROAdmin.getUserId() + "/change-password-for/" + userROToUpdate.get("userId"))
                 .with(csrf())
                 .session(sessionAdmin)
-                .content(SYS_ADMIN_PASSWD)
+                .contentType(MediaType.APPLICATION_JSON)
+                .content(getObjectMapper().writeValueAsString(newPass))
         ).andExpect(status().isOk()).andReturn();
 
-
-        AccessTokenRO resAccessToken = mapper.readValue(result.getResponse().getContentAsString(), AccessTokenRO.class);
-        assertNotNull(resAccessToken);
-        assertNotNull(resAccessToken.getIdentifier());
-        assertNotNull(resAccessToken.getValue());
-
+        // test to login with new password
+        MockHttpSession sessionNew = loginWithCredentials(mvc, SG_USER2_USERNAME, newPassword);
+        assertNotNull(sessionNew);
     }
 
     @Test
-    @Ignore
-    public void changePasswordForUser() throws Exception {
+    public void testGetUserData() throws Exception {
         MockHttpSession sessionAdmin = loginWithSystemAdmin(mvc);
         UserRO userROAdmin = getLoggedUserData(mvc, sessionAdmin);
 
@@ -176,29 +147,83 @@ public class UserAdminResourceIntegrationTest {
                         .session(sessionAdmin)
                         .with(csrf()))
                 .andExpect(status().isOk()).andReturn();
-        ServiceResult res = mapper.readValue(resultUsers.getResponse().getContentAsString(), ServiceResult.class);
+        ServiceResult res = getObjectMapper().readValue(resultUsers.getResponse().getContentAsString(), ServiceResult.class);
         Map userROToUpdate = (Map) res.getServiceEntities().stream()
                 .filter(userMap ->
                         StringUtils.equals(SG_USER2_USERNAME, (String) ((Map) userMap).get("username"))).findFirst().get();
-        String newPassword = "TESTtest1234!@#$";
 
+        MvcResult result =  mvc.perform(get(PATH_INTERNAL + "/" + userROAdmin.getUserId() + "/" + userROToUpdate.get("userId")+"/retrieve")
+                .with(csrf())
+                .session(sessionAdmin)
+        ).andExpect(status().isOk()).andReturn();
+        UserRO resultUser = getObjectMapper().readValue(result.getResponse().getContentAsString(), UserRO.class);
 
-        PasswordChangeRO newPass = new PasswordChangeRO();
-        newPass.setUsername(SG_USER2_USERNAME);
-        newPass.setCurrentPassword(SYS_ADMIN_PASSWD);
-        newPass.setNewPassword(newPassword);
-        assertNotEquals(newPassword, SG_USER2_PASSWD);
+        assertNotNull(resultUser);
+        assertNotNull(resultUser.getUserId());
+        assertEquals(SG_USER2_USERNAME, resultUser.getUsername());
+    }
 
-        mvc.perform(put(PATH_INTERNAL + "/" + userROAdmin.getUserId() + "//change-password-for/" + userROToUpdate.get("userId"))
+    @Test
+    public void testUpdateUserData() throws Exception {
+        MockHttpSession sessionAdmin = loginWithSystemAdmin(mvc);
+        UserRO userROAdmin = getLoggedUserData(mvc, sessionAdmin);
+
+        MvcResult resultUsers = mvc.perform(get(PATH_INTERNAL)
+                        .session(sessionAdmin)
+                        .with(csrf()))
+                .andExpect(status().isOk()).andReturn();
+        ServiceResult res = getObjectMapper().readValue(resultUsers.getResponse().getContentAsString(), ServiceResult.class);
+        UserRO userROToUpdate = (UserRO) res.getServiceEntities().stream()
+                .filter(userMap ->
+                        StringUtils.equals(SG_USER2_USERNAME, (String) ((Map) userMap).get("username")))
+                .findFirst()
+                .map(o -> getObjectMapper().convertValue(o, UserRO.class)).get();
+
+        userROToUpdate.setFullName(UUID.randomUUID().toString());
+        // when
+        MvcResult result =  mvc.perform(post(PATH_INTERNAL + "/" + userROAdmin.getUserId() + "/" + userROToUpdate.getUserId()+"/update")
                 .with(csrf())
                 .session(sessionAdmin)
                 .contentType(MediaType.APPLICATION_JSON)
-                .content(mapper.writeValueAsString(newPass))
+                .content(getObjectMapper().writeValueAsString(userROToUpdate))
         ).andExpect(status().isOk()).andReturn();
-
-        // test to login with new password
-        MockHttpSession sessionNew = loginWithCredentials(mvc, SG_USER2_USERNAME, newPassword);
-        assertNotNull(sessionNew);
+        UserRO resultUser = getObjectMapper().readValue(result.getResponse().getContentAsString(), UserRO.class);
+        //then
+        assertNotNull(resultUser);
+        assertNotNull(resultUser.getUserId());
+        assertEquals(SG_USER2_USERNAME, resultUser.getUsername());
+        assertEquals(userROToUpdate.getFullName(), resultUser.getFullName());
     }
 
+    @Test
+    public void testUDeleteUserData() throws Exception {
+        MockHttpSession sessionAdmin = loginWithSystemAdmin(mvc);
+        UserRO userROAdmin = getLoggedUserData(mvc, sessionAdmin);
+
+        MvcResult resultUsers = mvc.perform(get(PATH_INTERNAL)
+                        .session(sessionAdmin)
+                        .with(csrf()))
+                .andExpect(status().isOk()).andReturn();
+        ServiceResult res = getObjectMapper().readValue(resultUsers.getResponse().getContentAsString(), ServiceResult.class);
+        UserRO userROToUpdate = (UserRO) res.getServiceEntities().stream()
+                .filter(userMap ->
+                        StringUtils.equals(SG_USER2_USERNAME, (String) ((Map) userMap).get("username")))
+                .findFirst()
+                .map(o -> getObjectMapper().convertValue(o, UserRO.class)).get();
+
+
+        // when
+        MvcResult result =  mvc.perform(delete(PATH_INTERNAL + "/" + userROAdmin.getUserId() + "/" + userROToUpdate.getUserId()+"/delete")
+                .with(csrf())
+                .session(sessionAdmin)
+                .contentType(MediaType.APPLICATION_JSON)
+                .content(getObjectMapper().writeValueAsString(userROToUpdate))
+        ).andExpect(status().isOk()).andReturn();
+        UserRO resultUser = getObjectMapper().readValue(result.getResponse().getContentAsString(), UserRO.class);
+        //then
+        assertNotNull(resultUser);
+        assertNotNull(resultUser.getUserId());
+        assertEquals(SG_USER2_USERNAME, resultUser.getUsername());
+
+    }
 }
-- 
GitLab