This is an automated email from the ASF dual-hosted git repository. ofuks pushed a commit to branch DLAB-1590 in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
The following commit(s) were added to refs/heads/DLAB-1590 by this push: new ca73d94 Admin per project ca73d94 is described below commit ca73d949d6e22b16e274def1365a810c25da1bd9 Author: Oleh Fuks <olegfuk...@gmail.com> AuthorDate: Wed Mar 25 18:45:24 2020 +0200 Admin per project --- .../com/epam/dlab/backendapi/dao/UserRoleDao.java | 2 +- .../epam/dlab/backendapi/dao/UserRoleDaoImpl.java | 13 ++- .../backendapi/resources/UserGroupResource.java | 12 ++- .../backendapi/resources/UserRoleResource.java | 8 +- .../dlab/backendapi/service/UserGroupService.java | 3 +- .../dlab/backendapi/service/UserRoleService.java | 3 +- .../backendapi/service/UserRoleServiceImpl.java | 20 ++++- .../service/impl/UserGroupServiceImpl.java | 28 +++++- .../resources/UserGroupResourceTest.java | 90 +++++++++++-------- .../backendapi/resources/UserRoleResourceTest.java | 11 ++- .../service/UserRoleServiceImplTest.java | 42 ++++----- .../service/impl/UserGroupServiceImplTest.java | 100 ++++++++++----------- 12 files changed, 198 insertions(+), 134 deletions(-) diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDao.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDao.java index c2a401b..530724b 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDao.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDao.java @@ -49,5 +49,5 @@ public interface UserRoleDao { boolean removeGroup(String groupId); - List<UserGroupDto> aggregateRolesByGroup(); + List<UserGroupDto> aggregateRolesByGroup(boolean isAdmin); } diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDaoImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDaoImpl.java index fffc70b..154cbf8 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDaoImpl.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/UserRoleDaoImpl.java @@ -24,7 +24,9 @@ import com.epam.dlab.cloud.CloudProvider; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.Singleton; +import com.mongodb.client.model.Aggregates; import com.mongodb.client.model.BsonField; +import com.mongodb.client.model.Filters; import com.mongodb.client.result.UpdateResult; import org.bson.Document; import org.bson.conversions.Bson; @@ -65,6 +67,7 @@ public class UserRoleDaoImpl extends BaseDAO implements UserRoleDao { private static final String EXPLORATORIES_FIELD = "exploratories"; private static final String COMPUTATIONALS_FIELD = "computationals"; private static final String GROUP_INFO = "groupInfo"; + private static final String ADMIN = "admin"; @Override @@ -144,15 +147,19 @@ public class UserRoleDaoImpl extends BaseDAO implements UserRoleDao { } @Override - public List<UserGroupDto> aggregateRolesByGroup() { + public List<UserGroupDto> aggregateRolesByGroup(boolean isAdmin) { final Document role = roleDocument(); final Bson groupBy = group(GROUPS, new BsonField(ROLES, new Document(ADD_TO_SET, role))); final Bson lookup = lookup(USER_GROUPS, ID, ID, GROUP_INFO); - final List<Bson> pipeline = Arrays.asList(unwind(GROUPS), groupBy, lookup, + final List<Bson> pipeline = new ArrayList<>(); + if (!isAdmin) { + pipeline.add(Aggregates.match(Filters.not(eq(ID, ADMIN)))); + } + pipeline.addAll(Arrays.asList(unwind(GROUPS), groupBy, lookup, project(new Document(GROUP, "$" + ID).append(GROUP_INFO, elementAt(GROUP_INFO, 0)) .append(ROLES, "$" + ROLES)), project(new Document(GROUP, "$" + ID).append(USERS_FIELD, "$" + GROUP_INFO + "." + USERS_FIELD) - .append(ROLES, "$" + ROLES))); + .append(ROLES, "$" + ROLES)))); return stream(aggregate(MongoCollections.ROLES, pipeline)) .map(d -> convertFromDocument(d, UserGroupDto.class)) diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/UserGroupResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/UserGroupResource.java index 154ddc2..67aa073 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/UserGroupResource.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/UserGroupResource.java @@ -30,7 +30,15 @@ import org.hibernate.validator.constraints.NotEmpty; import javax.annotation.security.RolesAllowed; import javax.validation.Valid; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.Set; @@ -68,7 +76,7 @@ public class UserGroupResource { @GET public Response getGroups(@Auth UserInfo userInfo) { log.debug("Getting all groups for admin {}...", userInfo.getName()); - return Response.ok(userGroupService.getAggregatedRolesByGroup()).build(); + return Response.ok(userGroupService.getAggregatedRolesByGroup(userInfo)).build(); } @PUT diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/UserRoleResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/UserRoleResource.java index b9d0619..b74ef1c 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/UserRoleResource.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/UserRoleResource.java @@ -26,7 +26,11 @@ import io.dropwizard.auth.Auth; import lombok.extern.slf4j.Slf4j; import javax.annotation.security.RolesAllowed; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -47,7 +51,7 @@ public class UserRoleResource { @GET public Response getRoles(@Auth UserInfo userInfo) { log.debug("Getting all roles for admin {}...", userInfo.getName()); - return Response.ok(userRoleService.getUserRoles()).build(); + return Response.ok(userRoleService.getUserRoles(userInfo)).build(); } @POST diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserGroupService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserGroupService.java index e9e3e47..fe81f4e 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserGroupService.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserGroupService.java @@ -18,6 +18,7 @@ */ package com.epam.dlab.backendapi.service; +import com.epam.dlab.auth.UserInfo; import com.epam.dlab.backendapi.resources.dto.UserGroupDto; import java.util.List; @@ -38,5 +39,5 @@ public interface UserGroupService { void removeGroup(String groupId); - List<UserGroupDto> getAggregatedRolesByGroup(); + List<UserGroupDto> getAggregatedRolesByGroup(UserInfo user); } diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserRoleService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserRoleService.java index 0b22b1d..a010684 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserRoleService.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserRoleService.java @@ -18,13 +18,14 @@ */ package com.epam.dlab.backendapi.service; +import com.epam.dlab.auth.UserInfo; import com.epam.dlab.backendapi.resources.dto.UserRoleDto; import java.util.List; public interface UserRoleService { - List<UserRoleDto> getUserRoles(); + List<UserRoleDto> getUserRoles(UserInfo userInfo); void createRole(UserRoleDto dto); diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserRoleServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserRoleServiceImpl.java index ce9462f..6940533 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserRoleServiceImpl.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/UserRoleServiceImpl.java @@ -18,8 +18,11 @@ */ package com.epam.dlab.backendapi.service; +import com.epam.dlab.auth.UserInfo; import com.epam.dlab.backendapi.dao.UserRoleDao; import com.epam.dlab.backendapi.resources.dto.UserRoleDto; +import com.epam.dlab.backendapi.roles.UserRoles; +import com.epam.dlab.exceptions.DlabException; import com.epam.dlab.exceptions.ResourceNotFoundException; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -27,16 +30,29 @@ import com.google.inject.Singleton; import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; @Singleton public class UserRoleServiceImpl implements UserRoleService { private static final String ROLE_NOT_FOUND_MSG = "Any of role : %s were not found"; + private static final String ADMIN = "admin"; + @Inject private UserRoleDao userRoleDao; @Override - public List<UserRoleDto> getUserRoles() { - return userRoleDao.findAll(); + public List<UserRoleDto> getUserRoles(UserInfo user) { + List<UserRoleDto> all = userRoleDao.findAll(); + if (UserRoles.isAdmin(user)) { + return all; + } else if (UserRoles.isProjectAdmin(user)) { + return all + .stream() + .filter(role -> !role.getId().equalsIgnoreCase(ADMIN)) + .collect(Collectors.toList()); + } else { + throw new DlabException(String.format("User %s doesn't have appropriate permission", user)); + } } @Override diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImpl.java index a1c8854..288b84e 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImpl.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImpl.java @@ -18,34 +18,42 @@ */ package com.epam.dlab.backendapi.service.impl; +import com.epam.dlab.auth.UserInfo; import com.epam.dlab.backendapi.dao.ProjectDAO; import com.epam.dlab.backendapi.dao.UserGroupDao; import com.epam.dlab.backendapi.dao.UserRoleDao; import com.epam.dlab.backendapi.domain.ProjectDTO; import com.epam.dlab.backendapi.resources.dto.UserGroupDto; +import com.epam.dlab.backendapi.roles.UserRoles; +import com.epam.dlab.backendapi.service.ProjectService; import com.epam.dlab.backendapi.service.UserGroupService; import com.epam.dlab.dto.UserInstanceStatus; +import com.epam.dlab.exceptions.DlabException; import com.epam.dlab.exceptions.ResourceConflictException; import com.epam.dlab.exceptions.ResourceNotFoundException; import com.google.inject.Inject; import com.google.inject.Singleton; import lombok.extern.slf4j.Slf4j; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; @Singleton @Slf4j public class UserGroupServiceImpl implements UserGroupService { - private static final String ROLE_NOT_FOUND_MSG = "Any of role : %s were not found"; + @Inject private UserGroupDao userGroupDao; @Inject private UserRoleDao userRoleDao; @Inject private ProjectDAO projectDAO; + @Inject + private ProjectService projectService; @Override public void createGroup(String group, Set<String> roleIds, Set<String> users) { @@ -100,8 +108,22 @@ public class UserGroupServiceImpl implements UserGroupService { } @Override - public List<UserGroupDto> getAggregatedRolesByGroup() { - return userRoleDao.aggregateRolesByGroup(); + public List<UserGroupDto> getAggregatedRolesByGroup(UserInfo user) { + if (UserRoles.isAdmin(user)) { + return userRoleDao.aggregateRolesByGroup(true); + } else if (UserRoles.isProjectAdmin(user)) { + Set<String> groups = projectService.getProjects(user) + .stream() + .map(ProjectDTO::getGroups) + .flatMap(Collection::stream) + .collect(Collectors.toSet()); + return userRoleDao.aggregateRolesByGroup(false) + .stream() + .filter(userGroup -> groups.contains(userGroup.getGroup())) + .collect(Collectors.toList()); + } else { + throw new DlabException(String.format("User %s doesn't have appropriate permission", user)); + } } private void checkAnyRoleFound(Set<String> roleIds, boolean anyRoleFound) { diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/UserGroupResourceTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/UserGroupResourceTest.java index 1953694..5325848 100644 --- a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/UserGroupResourceTest.java +++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/UserGroupResourceTest.java @@ -19,6 +19,9 @@ package com.epam.dlab.backendapi.resources; +import com.epam.dlab.auth.UserInfo; +import com.epam.dlab.backendapi.dao.ProjectDAO; +import com.epam.dlab.backendapi.domain.ProjectDTO; import com.epam.dlab.backendapi.resources.dto.GroupDTO; import com.epam.dlab.backendapi.resources.dto.UpdateRoleGroupDto; import com.epam.dlab.backendapi.resources.dto.UpdateUserGroupDto; @@ -38,29 +41,36 @@ import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Set; import static java.util.Collections.singleton; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; public class UserGroupResourceTest extends TestBase { - private static final String USER = "user"; - private static final String ROLE_ID = "id"; - private static final String GROUP = "group"; - private UserGroupService userGroupService = mock(UserGroupService.class); + private static final String USER = "user"; + private static final String ROLE_ID = "id"; + private static final String GROUP = "group"; + private UserGroupService userGroupService = mock(UserGroupService.class); + private ProjectDAO projectDAO = mock(ProjectDAO.class); - @Before - public void setup() throws AuthenticationException { - authSetup(); - } + @Before + public void setup() throws AuthenticationException { + authSetup(); + } - @Rule - public final ResourceTestRule resources = - getResourceTestRuleInstance(new UserGroupResource(userGroupService)); + @Rule + public final ResourceTestRule resources = + getResourceTestRuleInstance(new UserGroupResource(userGroupService)); @Test public void createGroup() { @@ -122,25 +132,25 @@ public class UserGroupResourceTest extends TestBase { @Test public void getGroups() { - when(userGroupService.getAggregatedRolesByGroup()).thenReturn(Collections.singletonList(getUserGroup())); + when(userGroupService.getAggregatedRolesByGroup(any(UserInfo.class))).thenReturn(Collections.singletonList(getUserGroup())); - final Response response = resources.getJerseyTest() - .target("/group") - .request() - .header("Authorization", "Bearer " + TOKEN) - .get(); + final Response response = resources.getJerseyTest() + .target("/group") + .request() + .header("Authorization", "Bearer " + TOKEN) + .get(); - final List<UserGroupDto> actualRoles = response.readEntity(new GenericType<List<UserGroupDto>>() { - }); + final List<UserGroupDto> actualRoles = response.readEntity(new GenericType<List<UserGroupDto>>() { + }); - assertEquals(HttpStatus.SC_OK, response.getStatus()); - assertEquals(GROUP, actualRoles.get(0).getGroup()); - assertTrue(actualRoles.get(0).getRoles().isEmpty()); - assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE)); + assertEquals(HttpStatus.SC_OK, response.getStatus()); + assertEquals(GROUP, actualRoles.get(0).getGroup()); + assertTrue(actualRoles.get(0).getRoles().isEmpty()); + assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE)); - verify(userGroupService).getAggregatedRolesByGroup(); - verifyNoMoreInteractions(userGroupService); - } + verify(userGroupService).getAggregatedRolesByGroup(getUserInfo()); + verifyNoMoreInteractions(userGroupService); + } @Test public void addRolesToGroup() { @@ -277,15 +287,19 @@ public class UserGroupResourceTest extends TestBase { private UserGroupDto getUserGroup() { return new UserGroupDto(GROUP, Collections.emptyList(), Collections.emptySet()); - } - - private GroupDTO getCreateGroupDto(String group, Set<String> roleIds) { - final GroupDTO dto = new GroupDTO(); - dto.setName(group); - dto.setRoleIds(roleIds); - dto.setUsers(Collections.singleton(USER)); - return dto; - } - - + } + + private GroupDTO getCreateGroupDto(String group, Set<String> roleIds) { + final GroupDTO dto = new GroupDTO(); + dto.setName(group); + dto.setRoleIds(roleIds); + dto.setUsers(Collections.singleton(USER)); + return dto; + } + + private List<ProjectDTO> getProjects() { + return Collections.singletonList(ProjectDTO.builder() + .groups(new HashSet<>(Collections.singletonList(GROUP))) + .build()); + } } \ No newline at end of file diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/UserRoleResourceTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/UserRoleResourceTest.java index 6c0f5be..c335db7 100644 --- a/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/UserRoleResourceTest.java +++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/resources/UserRoleResourceTest.java @@ -35,9 +35,12 @@ import javax.ws.rs.core.Response; import java.util.Collections; import java.util.List; -import static java.util.Collections.singleton; import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.refEq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; public class UserRoleResourceTest extends TestBase { @@ -59,7 +62,7 @@ public class UserRoleResourceTest extends TestBase { @Test public void getRoles() { - when(rolesService.getUserRoles()).thenReturn(Collections.singletonList(getUserRole())); + when(rolesService.getUserRoles(getUserInfo())).thenReturn(Collections.singletonList(getUserRole())); final Response response = resources.getJerseyTest() .target("/role") @@ -74,7 +77,7 @@ public class UserRoleResourceTest extends TestBase { assertEquals(ROLE_ID, actualRoles.get(0).getId()); assertEquals(MediaType.APPLICATION_JSON, response.getHeaderString(HttpHeaders.CONTENT_TYPE)); - verify(rolesService).getUserRoles(); + verify(rolesService).getUserRoles(getUserInfo()); verifyNoMoreInteractions(rolesService); } diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/UserRoleServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/UserRoleServiceImplTest.java index 83fab66..883630c 100644 --- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/UserRoleServiceImplTest.java +++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/UserRoleServiceImplTest.java @@ -19,6 +19,7 @@ package com.epam.dlab.backendapi.service; import com.epam.dlab.backendapi.dao.UserRoleDao; +import com.epam.dlab.backendapi.resources.TestBase; import com.epam.dlab.backendapi.resources.dto.UserRoleDto; import com.epam.dlab.exceptions.ResourceNotFoundException; import org.junit.Rule; @@ -29,37 +30,24 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import java.util.Collections; -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.refEq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) -public class UserRoleServiceImplTest { - - private static final String ROLE_ID = "roleId"; - @Mock - private UserRoleDao dao; - @InjectMocks - private UserRoleServiceImpl userRoleService; - @Rule - public ExpectedException expectedException = ExpectedException.none(); +public class UserRoleServiceImplTest extends TestBase { - @Test - public void getUserRoles() { - when(dao.findAll()).thenReturn(Collections.singletonList(getUserRole())); - final List<UserRoleDto> roles = userRoleService.getUserRoles(); + private static final String ROLE_ID = "roleId"; + @Mock + private UserRoleDao dao; + @InjectMocks + private UserRoleServiceImpl userRoleService; + @Rule + public ExpectedException expectedException = ExpectedException.none(); - assertEquals(1, roles.size()); - assertEquals(ROLE_ID, roles.get(0).getId()); - - verify(dao).findAll(); - verifyNoMoreInteractions(dao); - } - - - @Test + @Test public void createRole() { userRoleService.createRole(getUserRole()); diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImplTest.java index 53d2f6b..4b775e1 100644 --- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImplTest.java +++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/UserGroupServiceImplTest.java @@ -23,10 +23,13 @@ import com.epam.dlab.backendapi.dao.ProjectDAO; import com.epam.dlab.backendapi.dao.UserGroupDao; import com.epam.dlab.backendapi.dao.UserRoleDao; import com.epam.dlab.backendapi.domain.ProjectDTO; +import com.epam.dlab.backendapi.resources.TestBase; import com.epam.dlab.backendapi.resources.dto.UserGroupDto; import com.epam.dlab.dto.UserInstanceStatus; import com.epam.dlab.exceptions.DlabException; import com.epam.dlab.exceptions.ResourceNotFoundException; +import io.dropwizard.auth.AuthenticationException; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -36,10 +39,10 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.util.Collections; +import java.util.HashSet; import java.util.List; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.anySet; import static org.mockito.Mockito.anySetOf; import static org.mockito.Mockito.anyString; @@ -52,32 +55,37 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) -public class UserGroupServiceImplTest { - - private static final String ROLE_ID = "Role id"; - private static final String USER = "test"; - private static final String GROUP = "admin"; - @Mock - private UserRoleDao userRoleDao; - @Mock - private UserGroupDao userGroupDao; - @Mock - private ProjectDAO projectDAO; - @InjectMocks - private UserGroupServiceImpl userGroupService; - - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - @Test - public void createGroup() { - when(userRoleDao.addGroupToRole(anySet(), anySet())).thenReturn(true); - - userGroupService.createGroup(GROUP, Collections.singleton(ROLE_ID), Collections.singleton(USER)); - - verify(userRoleDao).addGroupToRole(Collections.singleton(GROUP), Collections.singleton(ROLE_ID)); - verify(userGroupDao).addUsers(GROUP, Collections.singleton(USER)); - } +public class UserGroupServiceImplTest extends TestBase { + + private static final String ROLE_ID = "Role id"; + private static final String USER = "test"; + private static final String GROUP = "admin"; + @Mock + private UserRoleDao userRoleDao; + @Mock + private UserGroupDao userGroupDao; + @Mock + private ProjectDAO projectDAO; + @InjectMocks + private UserGroupServiceImpl userGroupService; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Before + public void setup() throws AuthenticationException { + authSetup(); + } + + @Test + public void createGroup() { + when(userRoleDao.addGroupToRole(anySet(), anySet())).thenReturn(true); + + userGroupService.createGroup(GROUP, Collections.singleton(ROLE_ID), Collections.singleton(USER)); + + verify(userRoleDao).addGroupToRole(Collections.singleton(GROUP), Collections.singleton(ROLE_ID)); + verify(userGroupDao).addUsers(GROUP, Collections.singleton(USER)); + } @Test public void createGroupWithNoUsers() { @@ -98,20 +106,6 @@ public class UserGroupServiceImplTest { } @Test - public void getAggregatedRoles() { - when(userRoleDao.aggregateRolesByGroup()).thenReturn(Collections.singletonList(getUserGroup())); - - final List<UserGroupDto> aggregatedRolesByGroup = userGroupService.getAggregatedRolesByGroup(); - - assertEquals(1, aggregatedRolesByGroup.size()); - assertEquals(GROUP, aggregatedRolesByGroup.get(0).getGroup()); - assertTrue(aggregatedRolesByGroup.get(0).getRoles().isEmpty()); - - verify(userRoleDao).aggregateRolesByGroup(); - verifyNoMoreInteractions(userRoleDao); - } - - @Test public void addUserToGroup() { userGroupService.addUsersToGroup(GROUP, Collections.singleton(USER)); @@ -233,13 +227,19 @@ public class UserGroupServiceImplTest { public void updateGroup() { userGroupService.updateGroup(GROUP, Collections.singleton(ROLE_ID), Collections.singleton(USER)); - verify(userGroupDao).updateUsers(GROUP, Collections.singleton(USER)); - verify(userRoleDao).removeGroupWhenRoleNotIn(GROUP, Collections.singleton(ROLE_ID)); - verify(userRoleDao).addGroupToRole(Collections.singleton(GROUP), Collections.singleton(ROLE_ID)); - verifyNoMoreInteractions(userRoleDao, userGroupDao); - } - - private UserGroupDto getUserGroup() { - return new UserGroupDto(GROUP, Collections.emptyList(), Collections.emptySet()); - } + verify(userGroupDao).updateUsers(GROUP, Collections.singleton(USER)); + verify(userRoleDao).removeGroupWhenRoleNotIn(GROUP, Collections.singleton(ROLE_ID)); + verify(userRoleDao).addGroupToRole(Collections.singleton(GROUP), Collections.singleton(ROLE_ID)); + verifyNoMoreInteractions(userRoleDao, userGroupDao); + } + + private UserGroupDto getUserGroup() { + return new UserGroupDto(GROUP, Collections.emptyList(), Collections.emptySet()); + } + + private List<ProjectDTO> getProjects() { + return Collections.singletonList(ProjectDTO.builder() + .groups(new HashSet<>(Collections.singletonList(GROUP))) + .build()); + } } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@dlab.apache.org For additional commands, e-mail: commits-h...@dlab.apache.org