diff --git a/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java b/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java index dc12bfb49506810ff3e7b8c150400f2a42d2362e..0c894e2f6b2ef2496a81c0c13ce64131b5657a23 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java +++ b/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java @@ -57,7 +57,7 @@ public class GroupsController { GroupEntity parent = groupsService.getGroupById(request.getParentGroupId()); if (permissionsService.getUserPermissionForGroup(parent, session.getUserId()) != Permission.ADMIN) { - throw new UnauthorizedException("Missing admin privileges"); + throw new UnauthorizedException("Missing admin permission"); } GroupEntity newGroup = groupsService.addGroup(parent, request.getNewGroupName()); @@ -70,7 +70,13 @@ public class GroupsController { @PutMapping(value = "/group/{groupId}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<PaginatedData<GroupNode>> renameGroup(@PathVariable("groupId") String groupId, @Valid @RequestBody RenameGroupRequest request) { - GroupEntity renamedGroup = groupsService.renameGroup(groupId, request.getNewGroupName(), session.getUserId()); + GroupEntity group = groupsService.getGroupById(groupId); + + if (permissionsService.getUserPermissionForGroup(group, session.getUserId()) != Permission.ADMIN) { + throw new UnauthorizedException("Missing admin permission"); + } + + GroupEntity renamedGroup = groupsService.renameGroup(group, request.getNewGroupName()); GroupEntity parent = groupsService.getGroupByPath(renamedGroup.getParentPath()); @@ -85,7 +91,7 @@ public class GroupsController { GroupEntity group = groupsService.getGroupById(groupId); if (permissionsService.getUserPermissionForGroup(group, session.getUserId()) != Permission.ADMIN) { - throw new UnauthorizedException("Missing admin privileges"); + throw new UnauthorizedException("Missing admin permission"); } GroupEntity parent = groupsService.deleteGroup(group); diff --git a/gms/src/main/java/it/inaf/ia2/gms/controller/MembersController.java b/gms/src/main/java/it/inaf/ia2/gms/controller/MembersController.java new file mode 100644 index 0000000000000000000000000000000000000000..3aef326aeeac096a3ca0af02f21575ae248b1969 --- /dev/null +++ b/gms/src/main/java/it/inaf/ia2/gms/controller/MembersController.java @@ -0,0 +1,72 @@ +package it.inaf.ia2.gms.controller; + +import it.inaf.ia2.gms.authn.SessionData; +import it.inaf.ia2.gms.exception.UnauthorizedException; +import it.inaf.ia2.gms.model.MemberRequest; +import it.inaf.ia2.gms.model.PaginatedData; +import it.inaf.ia2.gms.model.Permission; +import it.inaf.ia2.gms.model.RapUser; +import it.inaf.ia2.gms.persistence.model.GroupEntity; +import it.inaf.ia2.gms.service.GroupsService; +import it.inaf.ia2.gms.service.MembersService; +import it.inaf.ia2.gms.service.PermissionsService; +import java.util.List; +import javax.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MembersController { + + @Autowired + private SessionData session; + + @Autowired + private GroupsService groupsService; + + @Autowired + private PermissionsService permissionsService; + + @Autowired + private MembersService membersService; + + @PostMapping(value = "/member", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public ResponseEntity<PaginatedData<RapUser>> addMember(@Valid @RequestBody MemberRequest request) { + + GroupEntity group = groupsService.getGroupById(request.getGroupId()); + verifyCurrentUserCanManageMembers(group); + + membersService.addMember(request.getGroupId(), request.getUserId()); + + return new ResponseEntity<>(getMembersPanel(request), HttpStatus.CREATED); + } + + @DeleteMapping(value = "/member", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public ResponseEntity<PaginatedData<RapUser>> removeMember(@Valid MemberRequest request) { + + GroupEntity group = groupsService.getGroupById(request.getGroupId()); + verifyCurrentUserCanManageMembers(group); + + membersService.removeMember(group.getId(), request.getUserId()); + + return ResponseEntity.ok(getMembersPanel(request)); + } + + private void verifyCurrentUserCanManageMembers(GroupEntity group) { + Permission currentNodePermission = permissionsService.getUserPermissionForGroup(group, session.getUserId()); + if (currentNodePermission != Permission.ADMIN && currentNodePermission != Permission.MANAGE_MEMBERS) { + throw new UnauthorizedException("Missing admin or manage members permissions"); + } + } + + private PaginatedData<RapUser> getMembersPanel(MemberRequest request) { + List<RapUser> members = membersService.getMembers(request.getGroupId()); + return new PaginatedData<>(members, request.getPaginatorPage(), request.getPaginatorPageSize()); + } +} diff --git a/gms/src/main/java/it/inaf/ia2/gms/controller/PermissionsController.java b/gms/src/main/java/it/inaf/ia2/gms/controller/PermissionsController.java index fbf9879277ea6080b49a103e8017e72965100a51..53582bbbed7b141a6975291e442dc2ec1bc97926 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/controller/PermissionsController.java +++ b/gms/src/main/java/it/inaf/ia2/gms/controller/PermissionsController.java @@ -36,7 +36,7 @@ public class PermissionsController { public ResponseEntity<PaginatedData<UserPermission>> addPermission(@Valid @RequestBody PermissionRequest request) { GroupEntity group = groupsService.getGroupById(request.getGroupId()); - verifyAdminSession(group); + verifyCurrentUserCanManagePermissions(group); permissionsService.addPermission(group, request.getUserId(), request.getPermission()); @@ -47,14 +47,14 @@ public class PermissionsController { public ResponseEntity<PaginatedData<UserPermission>> deletePermission(@Valid PermissionRequest request) { GroupEntity group = groupsService.getGroupById(request.getGroupId()); - verifyAdminSession(group); + verifyCurrentUserCanManagePermissions(group); permissionsService.deletePermission(group, request.getUserId(), request.getPermission()); return ResponseEntity.ok(getPermissionsPanel(group, request)); } - private void verifyAdminSession(GroupEntity group) { + private void verifyCurrentUserCanManagePermissions(GroupEntity group) { Permission currentNodePermissions = permissionsService.getUserPermissionForGroup(group, session.getUserId()); if (currentNodePermissions != Permission.ADMIN) { throw new UnauthorizedException("Only admin users can handle permissions"); diff --git a/gms/src/main/java/it/inaf/ia2/gms/model/AddMemberRequest.java b/gms/src/main/java/it/inaf/ia2/gms/model/MemberRequest.java similarity index 88% rename from gms/src/main/java/it/inaf/ia2/gms/model/AddMemberRequest.java rename to gms/src/main/java/it/inaf/ia2/gms/model/MemberRequest.java index a22dc85bc74900b75f76511aa3923c309455b2de..20d4873b3cc8dd9ee86482ceaadc6cecd593853a 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/model/AddMemberRequest.java +++ b/gms/src/main/java/it/inaf/ia2/gms/model/MemberRequest.java @@ -2,7 +2,7 @@ package it.inaf.ia2.gms.model; import javax.validation.constraints.NotEmpty; -public class AddMemberRequest extends PaginatedModelRequest { +public class MemberRequest extends PaginatedModelRequest { @NotEmpty private String groupId; diff --git a/gms/src/main/java/it/inaf/ia2/gms/persistence/GroupsDAO.java b/gms/src/main/java/it/inaf/ia2/gms/persistence/GroupsDAO.java index 80d0c873fd76572b28c523b4bc8c52fc3cbcd3de..3469b41621b83ea0952197f2f7e50ea8acfaf856 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/persistence/GroupsDAO.java +++ b/gms/src/main/java/it/inaf/ia2/gms/persistence/GroupsDAO.java @@ -124,9 +124,12 @@ public class GroupsDAO { }); } - public List<GroupEntity> listSubGroups(String path) { + /** + * Returns the direct children (one level). + */ + public List<GroupEntity> getDirectSubGroups(String path) { - String sql = "SELECT id, name, path from gms_group WHERE path ~ ? ORDER BY name"; + String sql = "SELECT id, name, path FROM gms_group WHERE path ~ ? ORDER BY name"; return jdbcTemplate.query(conn -> { PreparedStatement ps = conn.prepareStatement(sql); @@ -145,6 +148,20 @@ public class GroupsDAO { return path; } + public List<GroupEntity> getAllChildren(String path) { + + String sql = "SELECT id, name, path FROM gms_group WHERE path <@ ? AND path <> ? ORDER BY nlevel(path) DESC"; + + return jdbcTemplate.query(conn -> { + PreparedStatement ps = conn.prepareStatement(sql); + ps.setObject(1, path, Types.OTHER); + ps.setObject(2, path, Types.OTHER); + return ps; + }, resultSet -> { + return getGroupsFromResultSet(resultSet); + }); + } + public List<GroupEntity> findGroupsByNames(List<String> names) { String sql = "SELECT id, name, path from gms_group WHERE name IN (" diff --git a/gms/src/main/java/it/inaf/ia2/gms/persistence/MembershipsDAO.java b/gms/src/main/java/it/inaf/ia2/gms/persistence/MembershipsDAO.java index a18832c52d55a71bd602c12e68ff9b43595b2d12..550b462e6fd643b01b76ff0f369f0550d93fa671 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/persistence/MembershipsDAO.java +++ b/gms/src/main/java/it/inaf/ia2/gms/persistence/MembershipsDAO.java @@ -4,6 +4,7 @@ import it.inaf.ia2.gms.persistence.model.MembershipEntity; import java.sql.PreparedStatement; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; @@ -76,4 +77,20 @@ public class MembershipsDAO { return ps; }); } + + public void deleteAllGroupsMembership(List<String> groupIds) { + + String sql = "DELETE FROM gms_membership WHERE group_id IN (" + + String.join(",", groupIds.stream().map(g -> "?").collect(Collectors.toList())) + + ")"; + + jdbcTemplate.update(conn -> { + PreparedStatement ps = conn.prepareStatement(sql); + int i = 0; + for (String groupId : groupIds) { + ps.setString(++i, groupId); + } + return ps; + }); + } } diff --git a/gms/src/main/java/it/inaf/ia2/gms/persistence/PermissionsDAO.java b/gms/src/main/java/it/inaf/ia2/gms/persistence/PermissionsDAO.java index e442b65efcf90554f147b21cb0a8686da35b4888..62460310836177809d82441e9c9d954efefbf9db 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/persistence/PermissionsDAO.java +++ b/gms/src/main/java/it/inaf/ia2/gms/persistence/PermissionsDAO.java @@ -7,6 +7,7 @@ import java.sql.Types; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; @@ -154,4 +155,20 @@ public class PermissionsDAO { return ps; }); } + + public void deleteAllGroupsPermissions(List<String> groupIds) { + + String sql = "DELETE FROM gms_permission WHERE group_id IN (" + + String.join(",", groupIds.stream().map(g -> "?").collect(Collectors.toList())) + + ")"; + + jdbcTemplate.update(conn -> { + PreparedStatement ps = conn.prepareStatement(sql); + int i = 0; + for (String groupId : groupIds) { + ps.setString(++i, groupId); + } + return ps; + }); + } } diff --git a/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java b/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java index 1960fd236eed5892a211064ec465e38e20d8e2bb..609a7873eaeaadc5f61de13b7dd06eba01ad8d82 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java +++ b/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java @@ -5,12 +5,14 @@ import it.inaf.ia2.gms.exception.UnauthorizedException; import it.inaf.ia2.gms.model.GroupBreadcrumb; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import it.inaf.ia2.gms.model.Permission; import it.inaf.ia2.gms.persistence.GroupsDAO; +import it.inaf.ia2.gms.persistence.MembershipsDAO; +import it.inaf.ia2.gms.persistence.PermissionsDAO; import it.inaf.ia2.gms.persistence.model.GroupEntity; import java.util.List; import java.util.Optional; import java.util.UUID; +import java.util.stream.Collectors; @Service public class GroupsService { @@ -18,13 +20,15 @@ public class GroupsService { public static final String ROOT = "ROOT"; private final GroupsDAO groupsDAO; - private final PermissionsService permissionsService; + private final PermissionsDAO permissionsDAO; + private final MembershipsDAO membershipsDAO; @Autowired public GroupsService(GroupsDAO groupsDAO, - PermissionsService permissionsService) { + PermissionsDAO permissionsDAO, MembershipsDAO membershipsDAO) { this.groupsDAO = groupsDAO; - this.permissionsService = permissionsService; + this.permissionsDAO = permissionsDAO; + this.membershipsDAO = membershipsDAO; createRootIfNecessary(); } @@ -40,7 +44,7 @@ public class GroupsService { public GroupEntity addGroup(GroupEntity parent, String groupName) { - if (groupsDAO.listSubGroups(parent.getPath()).stream() + if (groupsDAO.getDirectSubGroups(parent.getPath()).stream() .anyMatch(g -> g.getName().equals(groupName))) { throw new BadRequestException("There is already a group named " + groupName); } @@ -63,15 +67,9 @@ public class GroupsService { return group; } - public GroupEntity renameGroup(String groupId, String newGroupName, String userId) { + public GroupEntity renameGroup(GroupEntity group, String newGroupName) { - GroupEntity group = getGroupById(groupId); - - if (permissionsService.getUserPermissionForGroup(group, userId) != Permission.ADMIN) { - throw new UnauthorizedException("Missing admin privileges"); - } - - if (groupsDAO.listSubGroups(group.getPath()).stream() + if (groupsDAO.getDirectSubGroups(group.getPath()).stream() .anyMatch(g -> g.getName().equals(newGroupName))) { throw new BadRequestException("There is already a group named " + newGroupName); } @@ -91,7 +89,18 @@ public class GroupsService { GroupEntity parent = groupsDAO.findGroupByPath(parentPath) .orElseThrow(() -> new BadRequestException("No group found at path " + parentPath)); - groupsDAO.deleteGroupById(group.getId()); + List<GroupEntity> groupsToDelete = groupsDAO.getAllChildren(group.getPath()); + groupsToDelete.add(group); + + List<String> groupsToDeleteIds = groupsToDelete.stream() + .map(g -> g.getId()).collect(Collectors.toList()); + + membershipsDAO.deleteAllGroupsMembership(groupsToDeleteIds); + permissionsDAO.deleteAllGroupsPermissions(groupsToDeleteIds); + + for (String groupId : groupsToDeleteIds) { + groupsDAO.deleteGroupById(groupId); + } return parent; } diff --git a/gms/src/main/java/it/inaf/ia2/gms/service/GroupsTreeBuilder.java b/gms/src/main/java/it/inaf/ia2/gms/service/GroupsTreeBuilder.java index f431bf6fdc9707d5afead94c630146a4212da6cb..280d5eef731d75a6388cdd423ab0d0874290a300 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/service/GroupsTreeBuilder.java +++ b/gms/src/main/java/it/inaf/ia2/gms/service/GroupsTreeBuilder.java @@ -34,7 +34,7 @@ public class GroupsTreeBuilder { .orElseThrow(() -> new BadRequestException("Group " + parentGroupId + " not found")); // All the sub groups of given parent - List<GroupEntity> allGroups = groupsDAO.listSubGroups(parent.getPath()); + List<GroupEntity> allGroups = groupsDAO.getDirectSubGroups(parent.getPath()); // Select only the groups visible to the user List<PermissionEntity> permissions = permissionsDAO.findUserPermissions(userId); diff --git a/gms/src/test/java/it/inaf/ia2/gms/controller/GroupsControllerTest.java b/gms/src/test/java/it/inaf/ia2/gms/controller/GroupsControllerTest.java index 5ab680e13b6202b93a58288f3587fcc24b30624d..37e7b92159b932e2a14bf589bbfe6a5461f43702 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/controller/GroupsControllerTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/controller/GroupsControllerTest.java @@ -15,7 +15,6 @@ import org.mockito.Mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -33,7 +32,6 @@ public class GroupsControllerTest { @InjectMocks private GroupsController controller; - @Autowired private MockMvc mockMvc; @Before diff --git a/gms/src/test/java/it/inaf/ia2/gms/controller/MembersControllerTest.java b/gms/src/test/java/it/inaf/ia2/gms/controller/MembersControllerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..8d1a436902c47246de2eaf34877828cc93793f5c --- /dev/null +++ b/gms/src/test/java/it/inaf/ia2/gms/controller/MembersControllerTest.java @@ -0,0 +1,94 @@ +package it.inaf.ia2.gms.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import it.inaf.ia2.gms.authn.SessionData; +import it.inaf.ia2.gms.model.MemberRequest; +import it.inaf.ia2.gms.model.Permission; +import it.inaf.ia2.gms.persistence.model.GroupEntity; +import it.inaf.ia2.gms.service.GroupsService; +import it.inaf.ia2.gms.service.MembersService; +import it.inaf.ia2.gms.service.PermissionsService; +import static org.hamcrest.CoreMatchers.is; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import static org.mockito.ArgumentMatchers.eq; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +@RunWith(MockitoJUnitRunner.class) +public class MembersControllerTest { + + @Mock + private SessionData session; + + @Mock + private GroupsService groupsService; + + @Mock + private PermissionsService permissionsService; + + @Mock + private MembersService membersService; + + @InjectMocks + private MembersController controller; + + private MockMvc mockMvc; + + private final ObjectMapper mapper = new ObjectMapper(); + + @Before + public void init() { + mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); + + when(session.getUserId()).thenReturn("admin_id"); + + GroupEntity group = new GroupEntity(); + group.setId("group_id"); + group.setName("GroupName"); + group.setPath("parent_id.group_id"); + + when(groupsService.getGroupById(eq("group_id"))).thenReturn(group); + when(permissionsService.getUserPermissionForGroup(eq(group), eq("admin_id"))).thenReturn(Permission.ADMIN); + } + + @Test + public void testAddMember() throws Exception { + + MemberRequest request = new MemberRequest(); + request.setGroupId("group_id"); + request.setUserId("user_id"); + request.setPaginatorPage(1); + request.setPaginatorPageSize(10); + + mockMvc.perform(post("/member") + .content(mapper.writeValueAsString(request)) + .contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(status().isCreated()) + .andExpect(jsonPath("$.currentPage", is(1))); + + verify(membersService, times(1)).addMember(eq("group_id"), eq("user_id")); + } + + @Test + public void testRemoveMember() throws Exception { + + mockMvc.perform(delete("/member?groupId=group_id&userId=user_id&paginatorPage=1&paginatorPageSize=10")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.currentPage", is(1))); + + verify(membersService, times(1)).removeMember(eq("group_id"), eq("user_id")); + } +} diff --git a/gms/src/test/java/it/inaf/ia2/gms/controller/PermissionsControllerTest.java b/gms/src/test/java/it/inaf/ia2/gms/controller/PermissionsControllerTest.java index f36cb3a1f4f9b90f260994f6b9e591d9347915ad..7aa612e909bd72277c719dba426b862c63758a00 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/controller/PermissionsControllerTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/controller/PermissionsControllerTest.java @@ -18,7 +18,6 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; @@ -42,31 +41,32 @@ public class PermissionsControllerTest { @InjectMocks private PermissionsController controller; - @Autowired private MockMvc mockMvc; private final ObjectMapper mapper = new ObjectMapper(); + private GroupEntity group; + @Before public void init() { mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); - } - - @Test - public void testAddPermission() throws Exception { when(session.getUserId()).thenReturn("admin_id"); - GroupEntity group = new GroupEntity(); + group = new GroupEntity(); group.setId("group_id"); group.setName("GroupName"); group.setPath("parent_id.group_id"); when(groupsService.getGroupById(eq("group_id"))).thenReturn(group); when(permissionsService.getUserPermissionForGroup(eq(group), eq("admin_id"))).thenReturn(Permission.ADMIN); + } + + @Test + public void testAddPermission() throws Exception { PermissionRequest request = new PermissionRequest(); - request.setGroupId(group.getId()); + request.setGroupId("group_id"); request.setUserId("user_id"); request.setPermission(Permission.ADMIN); request.setPaginatorPage(1); @@ -84,16 +84,6 @@ public class PermissionsControllerTest { @Test public void testDeletePermission() throws Exception { - when(session.getUserId()).thenReturn("admin_id"); - - GroupEntity group = new GroupEntity(); - group.setId("group_id"); - group.setName("GroupName"); - group.setPath("parent_id.group_id"); - - when(groupsService.getGroupById(eq("group_id"))).thenReturn(group); - when(permissionsService.getUserPermissionForGroup(eq(group), eq("admin_id"))).thenReturn(Permission.ADMIN); - mockMvc.perform(delete("/permission?groupId=group_id&userId=user_id&permission=ADMIN&paginatorPage=1&paginatorPageSize=10")) .andExpect(status().isOk()) .andExpect(jsonPath("$.currentPage", is(1))); diff --git a/gms/src/test/java/it/inaf/ia2/gms/controller/WebServiceControllerTest.java b/gms/src/test/java/it/inaf/ia2/gms/controller/WebServiceControllerTest.java index 7ccbc7873f5a8b5964e11d5d806d3adf98f832bf..ee1d3f1397cb210e4142314aa82aba2e31390d1b 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/controller/WebServiceControllerTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/controller/WebServiceControllerTest.java @@ -25,7 +25,6 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; @@ -49,7 +48,6 @@ public class WebServiceControllerTest { @InjectMocks private WebServiceController controller; - @Autowired private MockMvc mockMvc; private final ObjectMapper mapper = new ObjectMapper(); diff --git a/gms/src/test/java/it/inaf/ia2/gms/persistence/GroupsDAOTest.java b/gms/src/test/java/it/inaf/ia2/gms/persistence/GroupsDAOTest.java index ae10ed1ef8f51555b6e7e356ae2737b835c919ca..ff5d365e12a385d17e0f3ef6f800f95e77c04e91 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/persistence/GroupsDAOTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/persistence/GroupsDAOTest.java @@ -79,15 +79,20 @@ public class GroupsDAOTest { assertFalse(group.isPresent()); // Sub list - List<GroupEntity> groups = dao.listSubGroups(""); + List<GroupEntity> groups = dao.getDirectSubGroups(root.getPath()); assertEquals(2, groups.size()); assertEquals("LBT", groups.get(0).getName()); assertEquals("TNG", groups.get(1).getName()); - groups = dao.listSubGroups(lbt.getId()); + groups = dao.getDirectSubGroups(lbt.getId()); assertEquals(1, groups.size()); assertEquals("INAF", groups.get(0).getName()); + // All children + groups = dao.getAllChildren(root.getPath()); + assertEquals(3, groups.size()); + assertEquals("INAF", groups.get(0).getName()); // order by path DESC + // Group by parent and name Optional<GroupEntity> optGroup = dao.findGroupByParentAndName(root.getPath(), lbt.getName()); assertTrue(optGroup.isPresent()); @@ -123,7 +128,7 @@ public class GroupsDAOTest { // Delete dao.deleteGroupById(lbtInaf.getId()); - groups = dao.listSubGroups(lbt.getId()); + groups = dao.getDirectSubGroups(lbt.getId()); assertTrue(groups.isEmpty()); } diff --git a/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java b/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java index 0a90226cd21fc2097aaefc54c39de43277c5c58f..88f18082f196ec3462f424b292c130a0ee8d92ef 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java @@ -7,9 +7,7 @@ import it.inaf.ia2.gms.model.PaginatedModelRequest; import it.inaf.ia2.gms.model.Permission; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity; -import it.inaf.ia2.gms.rap.RapClient; import it.inaf.ia2.gms.service.GroupsTreeBuilder; -import it.inaf.ia2.gms.service.PermissionsService; import java.util.List; import javax.sql.DataSource; import static org.junit.Assert.assertEquals; @@ -17,7 +15,6 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Test; import org.junit.runner.RunWith; -import static org.mockito.Mockito.mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -34,8 +31,8 @@ public class NestedGroupsIntegrationTest { GroupsDAO groupsDAO = new GroupsDAO(dataSource); PermissionsDAO permissionsDAO = new PermissionsDAO(dataSource); - PermissionsService permissionsService = new PermissionsService(permissionsDAO, mock(RapClient.class)); - GroupsService groupsService = new GroupsService(groupsDAO, permissionsService); + MembershipsDAO membershipsDAO = new MembershipsDAO(dataSource); + GroupsService groupsService = new GroupsService(groupsDAO, permissionsDAO, membershipsDAO); GroupsTreeBuilder groupsTreeBuilder = new GroupsTreeBuilder(groupsDAO, permissionsDAO); String userId = "USER_ID";