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 ab97ed1d689799c905051c1663a2de4887419c4a..2ec1d281f16d44ac9f1660399f05fb4308cc8748 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 @@ -55,7 +55,9 @@ public class GroupsController { @PostMapping(value = "/group", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<PaginatedData<GroupNode>> createGroup(@Valid @RequestBody AddGroupRequest request) { - GroupEntity parent = groupsManager.createGroup(request.getParentGroupId(), request.getNewGroupName(), request.isLeaf()); + GroupEntity parent = groupsManager.getGroupById(request.getParentGroupId()); + + groupsManager.createGroup(parent, request.getNewGroupName(), request.isLeaf()); PaginatedData<GroupNode> groupsPanel = getGroupsPanel(parent, request); @@ -65,7 +67,9 @@ public class GroupsController { @PutMapping(value = "/group/{groupId}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<PaginatedData<GroupNode>> updateGroup(@PathVariable("groupId") String groupId, @Valid @RequestBody RenameGroupRequest request) { - GroupEntity parent = groupsManager.updateGroup(groupId, request.getNewGroupName(), request.isLeaf()); + GroupEntity updatedGroup = groupsManager.updateGroup(groupId, request.getNewGroupName(), request.isLeaf()); + + GroupEntity parent = groupsManager.getGroupByPath(updatedGroup.getParentPath()); PaginatedData<GroupNode> groupsPanel = getGroupsPanel(parent, request); diff --git a/gms/src/main/java/it/inaf/ia2/gms/manager/GroupsManager.java b/gms/src/main/java/it/inaf/ia2/gms/manager/GroupsManager.java index 4d7ae822c6211bbdc184fd1f3478ae8fbc6bf66c..5b3633772f5e51af34ecbe36dd1cd2f1ae5ea013 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/manager/GroupsManager.java +++ b/gms/src/main/java/it/inaf/ia2/gms/manager/GroupsManager.java @@ -31,9 +31,10 @@ public class GroupsManager { return group; } - public GroupEntity createGroup(String parentGroupId, String childGroupName, boolean leaf) { - GroupEntity parent = groupsService.getGroupById(parentGroupId); - return createGroup(parent, childGroupName, leaf); + public GroupEntity getGroupByPath(String path) { + GroupEntity group = groupsService.getGroupByPath(path); + verifyUserCanReadGroup(group); + return group; } public GroupEntity createGroup(GroupEntity parent, String childGroupName, boolean leaf) { @@ -44,9 +45,7 @@ public class GroupsManager { verifyUserCanManageGroup(parent); - groupsService.addGroup(parent, childGroupName, leaf); - - return parent; + return groupsService.addGroup(parent, childGroupName, leaf); } public GroupEntity updateGroup(String groupId, String newGroupName, boolean leaf) { @@ -54,9 +53,7 @@ public class GroupsManager { GroupEntity group = groupsService.getGroupById(groupId); verifyUserCanManageGroup(group); - GroupEntity updatedGroup = groupsService.updateGroup(group, newGroupName, leaf); - - return groupsService.getGroupByPath(updatedGroup.getParentPath()); + return groupsService.updateGroup(group, newGroupName, leaf); } public GroupEntity deleteGroup(String groupId) { diff --git a/gms/src/test/java/it/inaf/ia2/gms/controller/JWTWebServiceControllerTest.java b/gms/src/test/java/it/inaf/ia2/gms/controller/JWTWebServiceControllerTest.java index 257fd5f139da385261db613332b70deb5a41bebe..a665c24173767d3cfb66f11b2a8c562b57fc8e35 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/controller/JWTWebServiceControllerTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/controller/JWTWebServiceControllerTest.java @@ -19,7 +19,8 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; -import static org.mockito.ArgumentMatchers.anyBoolean; +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; @@ -122,11 +123,21 @@ public class JWTWebServiceControllerTest { public void testCreateGroup() throws Exception { when(groupsManager.getRoot()).thenReturn(root); + when(groupsManager.createGroup(any(GroupEntity.class), eq("LBT"), eq(false))).thenReturn(lbt); + when(groupsManager.createGroup(any(GroupEntity.class), eq("INAF"), eq(true))).thenReturn(inaf); - mockMvc.perform(post("/ws/jwt/group") - .param("leaf", "false") + mockMvc.perform(post("/ws/jwt/LBT.INAF") + .param("leaf", "true") .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("LBT"), eq(false)); + verify(groupsManager, times(1)).createGroup(argGroupIdEq("lbt_id"), eq("INAF"), eq(true)); + } + + private GroupEntity argGroupIdEq(String groupId) { + return argThat(g -> g.getId().equals(groupId)); } @Test