Skip to content
......@@ -8,10 +8,12 @@ import it.inaf.ia2.gms.model.request.PaginatedModelRequest;
import it.inaf.ia2.gms.model.request.RemoveMemberRequest;
import it.inaf.ia2.gms.model.request.TabRequest;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.service.GroupNameService;
import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.rap.data.RapUser;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
......@@ -21,6 +23,7 @@ import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
......@@ -35,6 +38,9 @@ public class MembersController {
@Autowired
private PermissionsManager permissionsManager;
@Autowired
protected GroupNameService groupNameService;
@GetMapping(value = "/members", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<PaginatedData<RapUser>> getMembersTab(TabRequest request) {
......@@ -77,4 +83,22 @@ public class MembersController {
});
return new PaginatedData<>(members, request.getPaginatorPage(), request.getPaginatorPageSize());
}
@PostMapping(value = "/membership", produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void addMember(@RequestParam("group") Optional<String> groupNames,
@RequestParam("user_id") String targetUserId) {
GroupEntity groupEntity = groupNameService.getGroupFromNames(groupNames);
membershipManager.addMember(groupEntity, targetUserId);
}
@DeleteMapping(value = "/membership", produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<?> removeMember(@RequestParam("group") Optional<String> groupNames, @RequestParam("user_id") String userId) {
GroupEntity groupEntity = groupNameService.getGroupFromNames(groupNames);
membershipManager.removeMember(groupEntity, userId);
return ResponseEntity.noContent().build();
}
}
package it.inaf.ia2.gms.controller;
import it.inaf.ia2.gms.exception.BadRequestException;
import it.inaf.ia2.gms.manager.GroupsManager;
import it.inaf.ia2.gms.manager.PermissionsManager;
import it.inaf.ia2.gms.model.request.AddPermissionRequest;
......@@ -15,13 +14,16 @@ import it.inaf.ia2.gms.model.response.UserPermission;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.PermissionEntity;
import it.inaf.ia2.gms.service.GroupNameService;
import it.inaf.ia2.gms.service.SearchService;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
......@@ -29,6 +31,7 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -44,6 +47,12 @@ public class PermissionsController {
@Autowired
private PermissionsManager permissionsManager;
@Autowired
protected GroupNameService groupNameService;
@Autowired
private SearchService searchService;
@GetMapping(value = "/permissions", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<PaginatedData<RapUserPermission>> getPermissionsTab(TabRequest request) {
......@@ -109,4 +118,45 @@ public class PermissionsController {
});
return new PaginatedData<>(permissions, request.getPaginatorPage(), request.getPaginatorPageSize());
}
@GetMapping(value = "/permission", produces = MediaType.TEXT_PLAIN_VALUE)
public void getUserPermission(@RequestParam("group") Optional<String> groupNames, @RequestParam("user_id") Optional<String> userId, HttpServletRequest request, HttpServletResponse response) throws IOException {
GroupEntity groupEntity = groupNameService.getGroupFromNames(groupNames);
if (userId.isPresent()) {
try ( PrintWriter pw = new PrintWriter(response.getOutputStream())) {
for (UserPermission userPermission : searchService.getUserPermission(groupEntity, userId.get(), permissionsManager.getCurrentUserPermissions(groupEntity))) {
String group = String.join(".", userPermission.getGroupCompleteName());
pw.println(group + " " + userPermission.getPermission());
}
}
} else {
try ( PrintWriter pw = new PrintWriter(response.getOutputStream())) {
for (it.inaf.ia2.gms.model.RapUserPermission up : permissionsManager.getAllPermissions(groupEntity)) {
pw.println(up.getUser().getId() + " " + up.getPermission());
}
}
}
}
@PostMapping(value = "/permission", produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void addPermission(@RequestParam("group") Optional<String> groupNames, @RequestParam("user_id") String targetUserId, @RequestParam("permission") Permission permission) throws IOException {
GroupEntity groupEntity = groupNameService.getGroupFromNames(groupNames);
permissionsManager.addPermission(groupEntity, targetUserId, permission);
}
@PutMapping(value = "/permission", produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void setPermission(@RequestParam("group") Optional<String> groupNames, @RequestParam("user_id") String targetUserId, @RequestParam("permission") Permission permission) throws IOException {
GroupEntity groupEntity = groupNameService.getGroupFromNames(groupNames);
permissionsManager.createOrUpdatePermission(groupEntity, targetUserId, permission);
}
@DeleteMapping(value = "/permission", produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<?> removePermission(@RequestParam("group") Optional<String> groupNames, @RequestParam("user_id") String userId) {
GroupEntity groupEntity = groupNameService.getGroupFromNames(groupNames);
permissionsManager.removePermission(groupEntity, userId);
return ResponseEntity.noContent().build();
}
}
......@@ -5,7 +5,11 @@ import it.inaf.ia2.gms.exception.UnauthorizedException;
import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.persistence.LoggingDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.PermissionEntity;
import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.gms.service.PermissionUtils;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
......@@ -37,6 +41,22 @@ public class GroupsManager extends UserAwareComponent {
return group;
}
public List<GroupEntity> getChildGroups(GroupEntity parentGroup, boolean recursive) {
List<GroupEntity> allSubGroups = groupsService.getChildGroups(parentGroup, recursive);
// Select only the groups visible to the user
List<PermissionEntity> permissions = permissionsManager.getCurrentUserPermissions();
List<GroupEntity> visibleSubgroups = new ArrayList<>();
for (GroupEntity subgroup : allSubGroups) {
PermissionUtils.getGroupPermission(subgroup, permissions).ifPresent(permission -> {
visibleSubgroups.add(subgroup);
});
}
return visibleSubgroups;
}
public GroupEntity createGroup(GroupEntity parent, String childGroupName, boolean leaf) {
if (parent.isLeaf()) {
......
......@@ -148,6 +148,10 @@ public class PermissionsManager extends UserAwareComponent {
return () -> new UnauthorizedException("You don't have the privileges for managing the requested permission");
}
public List<PermissionEntity> getCurrentUserPermissions() {
return permissionsService.findUserPermissions(getCurrentUserId());
}
public List<PermissionEntity> getCurrentUserPermissions(GroupEntity group) {
return permissionsService.findUserPermissions(group, getCurrentUserId());
}
......
......@@ -144,7 +144,7 @@ public class GroupNameService {
currentName += c;
}
}
names.add(currentName);
names.add(currentName.replace("\\.", "."));
return names;
}
......
......@@ -184,4 +184,12 @@ public class GroupsService {
public List<GroupEntity> searchGroups(String searchText) {
return groupsDAO.searchGroups(searchText);
}
public List<GroupEntity> getChildGroups(GroupEntity parentGroup, boolean recursive) {
if (recursive) {
return groupsDAO.getAllChildren(parentGroup.getPath());
} else {
return groupsDAO.getDirectSubGroups(parentGroup.getPath());
}
}
}
......@@ -26,6 +26,10 @@ public class PermissionsService {
return permissionsDAO.getGroupsPermissions(group.getId());
}
public List<PermissionEntity> findUserPermissions(String userId) {
return permissionsDAO.findUserPermissions(userId);
}
public List<PermissionEntity> findUserPermissions(GroupEntity group, String userId) {
return permissionsDAO.findUserPermissions(userId, group.getPath());
}
......
package it.inaf.ia2.gms.controller;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.rap.data.RapUser;
import java.security.Principal;
public class ControllersMockData {
public static GroupEntity getRoot() {
GroupEntity root = new GroupEntity();
root.setId(GroupsService.ROOT);
root.setName(GroupsService.ROOT);
root.setPath("");
return root;
}
public static GroupEntity getLbtGroup() {
GroupEntity lbt = new GroupEntity();
lbt.setId("lbt_id");
lbt.setName("LBT");
lbt.setPath("lbt_id");
return lbt;
}
public static GroupEntity getInafGroup() {
GroupEntity inaf = new GroupEntity();
inaf.setId("inaf_id");
inaf.setName("INAF");
inaf.setPath("lbt_id.inaf_id");
return inaf;
}
public static GroupEntity getPeopleGroup() {
GroupEntity lbt = new GroupEntity();
lbt.setId("people_id");
lbt.setName("people");
lbt.setPath("people_id");
return lbt;
}
public static GroupEntity getNameSurnameGroup() {
GroupEntity inaf = new GroupEntity();
inaf.setId("user_group_id");
inaf.setName("name.surname");
inaf.setPath("people_id.user_group_id");
return inaf;
}
public static RapUser getRapUser() {
RapUser user = new RapUser();
user.setId("rap_user");
return user;
}
public static Principal getPrincipal() {
return new Principal() {
@Override
public String getName() {
return "TEST_PRINCIPAL";
}
};
}
}
......@@ -2,6 +2,7 @@ package it.inaf.ia2.gms.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import it.inaf.ia2.gms.GmsTestUtils;
import static it.inaf.ia2.gms.controller.ControllersMockData.*;
import it.inaf.ia2.gms.manager.GroupsManager;
import it.inaf.ia2.gms.manager.PermissionsManager;
import it.inaf.ia2.gms.model.GroupNode;
......@@ -9,11 +10,15 @@ import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.model.request.AddGroupRequest;
import it.inaf.ia2.gms.model.response.GroupsTabResponse;
import it.inaf.ia2.gms.model.response.PaginatedData;
import it.inaf.ia2.gms.persistence.GroupsDAO;
import it.inaf.ia2.gms.persistence.LoggingDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.service.GroupNameService;
import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.gms.service.GroupsTreeBuilder;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javax.servlet.http.HttpServletRequest;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
......@@ -21,6 +26,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import org.mockito.InjectMocks;
import org.mockito.Mock;
......@@ -59,6 +65,9 @@ public class GroupsControllerTest {
@Mock
private GroupsTreeBuilder groupsTreeBuilder;
@Mock
private GroupsDAO groupsDAO;
@Mock
private LoggingDAO loggingDAO;
......@@ -72,6 +81,7 @@ public class GroupsControllerTest {
@Before
public void init() {
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
controller.groupNameService = new GroupNameService(groupsDAO);
GmsTestUtils.mockPrincipal(servletRequest);
}
......@@ -93,7 +103,7 @@ public class GroupsControllerTest {
}
@Test
public void testAddGroups() throws Exception {
public void testAddGroupPaginated() throws Exception {
AddGroupRequest request = new AddGroupRequest();
request.setNewGroupName("New Group");
......@@ -108,12 +118,13 @@ public class GroupsControllerTest {
mockMvc.perform(post("/group")
.content(mapper.writeValueAsString(request))
.accept(MediaType.APPLICATION_JSON)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated());
}
@Test
public void testDeleteGroup() throws Exception {
public void testDeleteGroupPaginated() throws Exception {
mockMvc.perform(delete("/group/id?paginatorPageSize=20&paginatorPage=1&searchFilter="))
.andDo(print())
......@@ -121,4 +132,43 @@ public class GroupsControllerTest {
verify(groupsManager, times(1)).deleteGroup(eq("id"));
}
@Test
public void testAddGroupWs() throws Exception {
GroupEntity peopleGroup = getPeopleGroup();
when(groupsManager.getRoot()).thenReturn(getRoot());
when(groupsManager.createGroup(any(GroupEntity.class), eq("people"), eq(false))).thenReturn(peopleGroup);
when(groupsManager.createGroup(any(GroupEntity.class), eq("name.surname"), eq(true))).thenReturn(getNameSurnameGroup());
mockMvc.perform(post("/group")
.param("name", "people.name\\.surname")
.param("leaf", "true")
.accept(MediaType.TEXT_PLAIN)
.contentType(MediaType.APPLICATION_FORM_URLENCODED))
.andExpect(status().isCreated());
verify(groupsService, times(2)).findGroupByParentAndName(any(GroupEntity.class), any());
verify(groupsManager, times(1)).createGroup(argGroupIdEq(GroupsService.ROOT), eq("people"), eq(false));
verify(groupsManager, times(1)).createGroup(argGroupIdEq("people_id"), eq("name.surname"), eq(true));
}
@Test
public void testDeleteGroupWs() throws Exception {
GroupEntity inafGroup = getInafGroup();
when(groupsDAO.findGroupByParentAndName("", "LBT")).thenReturn(Optional.of(getLbtGroup()));
when(groupsDAO.findGroupByParentAndName("lbt_id", "INAF")).thenReturn(Optional.of(inafGroup));
mockMvc.perform(delete("/group?name=LBT.INAF"))
.andExpect(status().isNoContent());
verify(groupsManager, times(1)).deleteGroup(eq(inafGroup.getId()));
}
private GroupEntity argGroupIdEq(String groupId) {
return argThat(g -> g.getId().equals(groupId));
}
}
......@@ -152,7 +152,7 @@ public class JWTWebServiceControllerTest {
mockMvc.perform(delete("/ws/jwt/LBT.INAF"))
.andExpect(status().isNoContent());
verify(groupsDAO, times(1)).deleteGroup(eq(inaf));
verify(groupsManager, times(1)).deleteGroup(eq(inaf.getId()));
}
@Test
......
package it.inaf.ia2.gms.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import static it.inaf.ia2.gms.controller.ControllersMockData.getInafGroup;
import static it.inaf.ia2.gms.controller.ControllersMockData.getLbtGroup;
import it.inaf.ia2.gms.manager.MembershipManager;
import it.inaf.ia2.gms.manager.PermissionsManager;
import it.inaf.ia2.gms.model.request.AddMemberRequest;
import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.persistence.GroupsDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.MembershipEntity;
import it.inaf.ia2.gms.service.GroupNameService;
import it.inaf.ia2.gms.service.GroupsService;
import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
import org.junit.Before;
import org.junit.Test;
......@@ -39,6 +45,9 @@ public class MembersControllerTest {
@Mock
private MembershipManager membershipManager;
@Mock
private GroupsDAO groupsDAO;
@InjectMocks
private MembersController controller;
......@@ -46,23 +55,25 @@ public class MembersControllerTest {
private final ObjectMapper mapper = new ObjectMapper();
private GroupEntity lbt = getLbtGroup();
private GroupEntity inaf = getInafGroup();
@Before
public void init() {
controller.groupNameService = new GroupNameService(groupsDAO);
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
GroupEntity group = new GroupEntity();
group.setId("group_id");
group.setName("GroupName");
group.setPath("parent_id.group_id");
when(groupsService.getGroupById(eq("lbt_id"))).thenReturn(lbt);
when(groupsService.getGroupById(eq("group_id"))).thenReturn(group);
when(groupsDAO.findGroupByParentAndName("", "LBT")).thenReturn(Optional.of(lbt));
when(groupsDAO.findGroupByParentAndName("lbt_id", "INAF")).thenReturn(Optional.of(inaf));
}
@Test
public void testAddMember() throws Exception {
AddMemberRequest request = new AddMemberRequest();
request.setGroupId("group_id");
request.setGroupId("lbt_id");
request.setUserId("user_id");
request.setPaginatorPage(1);
request.setPaginatorPageSize(10);
......@@ -86,4 +97,35 @@ public class MembersControllerTest {
verify(membershipManager, times(1)).removeMember(any(), eq("user_id"));
}
@Test
public void testAddMemberWs() throws Exception {
when(groupsDAO.findGroupByParentAndName("", "LBT")).thenReturn(Optional.of(lbt));
when(groupsDAO.findGroupByParentAndName("lbt_id", "INAF")).thenReturn(Optional.of(inaf));
String userId = "target_user";
MembershipEntity membership = new MembershipEntity();
membership.setGroupId(lbt.getId());
membership.setUserId(userId);
mockMvc.perform(post("/membership")
.param("group", "LBT.INAF")
.param("user_id", userId)
.accept(MediaType.TEXT_PLAIN)
.contentType(MediaType.APPLICATION_FORM_URLENCODED))
.andExpect(status().isOk());
verify(membershipManager, times(1)).addMember(eq(inaf), eq(userId));
}
@Test
public void testRemoveMemberWs() throws Exception {
mockMvc.perform(delete("/membership?group=LBT.INAF&user_id=userId"))
.andExpect(status().isNoContent());
verify(membershipManager, times(1)).removeMember(eq(inaf), eq("userId"));
}
}
package it.inaf.ia2.gms.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import static it.inaf.ia2.gms.controller.ControllersMockData.*;
import it.inaf.ia2.gms.manager.GroupsManager;
import it.inaf.ia2.gms.manager.PermissionsManager;
import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.model.RapUserPermission;
import it.inaf.ia2.gms.model.request.AddPermissionRequest;
import it.inaf.ia2.gms.persistence.GroupsDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.PermissionEntity;
import it.inaf.ia2.gms.service.GroupNameService;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import org.mockito.InjectMocks;
import org.mockito.Mock;
......@@ -22,6 +31,7 @@ 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.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
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;
......@@ -35,6 +45,9 @@ public class PermissionsControllerTest {
@Mock
private PermissionsManager permissionsManager;
@Mock
private GroupsDAO groupsDAO;
@InjectMocks
private PermissionsController controller;
......@@ -46,6 +59,7 @@ public class PermissionsControllerTest {
@Before
public void init() {
controller.groupNameService = new GroupNameService(groupsDAO);
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
group = new GroupEntity();
......@@ -103,4 +117,72 @@ public class PermissionsControllerTest {
verify(permissionsManager, times(1)).removePermission(eq(group), eq("user_id"));
}
@Test
public void testGetGroupPermissions() throws Exception {
when(groupsDAO.findGroupByParentAndName("", "LBT")).thenReturn(Optional.of(getLbtGroup()));
when(groupsDAO.findGroupByParentAndName("lbt_id", "INAF")).thenReturn(Optional.of(getInafGroup()));
List<RapUserPermission> permissions = new ArrayList<>();
RapUserPermission up = new RapUserPermission();
up.setUser(getRapUser());
up.setPermission(Permission.ADMIN);
permissions.add(up);
when(permissionsManager.getAllPermissions(any())).thenReturn(permissions);
mockMvc.perform(get("/permission?group=LBT.INAF").principal(getPrincipal())
.accept(MediaType.TEXT_PLAIN))
.andExpect(status().isOk())
.andExpect(content().string("rap_user ADMIN\n"));
}
@Test
public void testAddPermissionWs() throws Exception {
String userId = "target_user";
Permission permission = Permission.ADMIN;
GroupEntity lbt = getLbtGroup();
GroupEntity inaf = getInafGroup();
when(groupsDAO.findGroupByParentAndName("", "LBT")).thenReturn(Optional.of(lbt));
when(groupsDAO.findGroupByParentAndName("lbt_id", "INAF")).thenReturn(Optional.of(inaf));
PermissionEntity permissionEntity = new PermissionEntity();
permissionEntity.setGroupId(inaf.getId());
permissionEntity.setUserId(userId);
permissionEntity.setPermission(permission);
permissionEntity.setGroupPath(inaf.getPath());
when(permissionsManager.addPermission(eq(inaf), eq(userId),
eq(permission))).thenReturn(permissionEntity);
mockMvc.perform(post("/permission")
.param("group", "LBT.INAF")
.param("user_id", userId)
.param("permission", permission.toString())
.accept(MediaType.TEXT_PLAIN)
.contentType(MediaType.APPLICATION_FORM_URLENCODED))
.andExpect(status().isOk());
verify(permissionsManager, times(1))
.addPermission(eq(inaf), eq(userId), eq(permission));
}
@Test
public void testRemovePermissionWs() throws Exception {
GroupEntity lbt = getLbtGroup();
GroupEntity inaf = getInafGroup();
when(groupsDAO.findGroupByParentAndName("", "LBT")).thenReturn(Optional.of(lbt));
when(groupsDAO.findGroupByParentAndName("lbt_id", "INAF")).thenReturn(Optional.of(inaf));
mockMvc.perform(delete("/permission?group=LBT.INAF&user_id=userId")
.accept(MediaType.TEXT_PLAIN))
.andExpect(status().isNoContent());
verify(permissionsManager, times(1)).removePermission(eq(inaf), eq("userId"));
}
}
......@@ -11,6 +11,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.mockito.ArgumentMatchers.any;
......@@ -76,4 +77,26 @@ public class GroupNameServiceTest {
assertEquals(1, names.get("ROOT").size());
assertEquals("ROOT", names.get("ROOT").get(0));
}
@Test
public void extractGroupNamesTest() {
List<String> names = groupNameService.extractGroupNames("group1.people.name\\.surname.another\\.composite");
assertEquals(4, names.size());
assertEquals("group1", names.get(0));
assertEquals("people", names.get(1));
assertEquals("name.surname", names.get(2));
assertEquals("another.composite", names.get(3));
}
@Test
public void extractGroupNamesTestEmpty() {
assertTrue(groupNameService.extractGroupNames("").isEmpty());
}
@Test
public void extractGroupNamesTestNull() {
assertTrue(groupNameService.extractGroupNames(null).isEmpty());
}
}