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