From e9be2eb523cbf1bebae7ab981ecb44b52126581b Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Fri, 10 Apr 2020 14:42:32 +0200
Subject: [PATCH] Bugfix group creation

---
 .../ia2/gms/controller/GroupsController.java    |  8 ++++++--
 .../it/inaf/ia2/gms/manager/GroupsManager.java  | 15 ++++++---------
 .../controller/JWTWebServiceControllerTest.java | 17 ++++++++++++++---
 3 files changed, 26 insertions(+), 14 deletions(-)

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 ab97ed1..2ec1d28 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 4d7ae82..5b36337 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 257fd5f..a665c24 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
-- 
GitLab