From d66e51abc01159e24c552e7d505d928bc0178b17 Mon Sep 17 00:00:00 2001
From: zonia3000 <zonia3000@gmail.com>
Date: Sun, 3 Nov 2019 23:13:29 +0100
Subject: [PATCH] Added is_leaf property on GroupNode

---
 .../java/it/inaf/ia2/gms/model/GroupNode.java |  9 ++++
 .../gms/model/request/AddGroupRequest.java    | 10 ++++
 .../ia2/gms/service/GroupsTreeBuilder.java    |  1 +
 .../gms/controller/GroupsControllerTest.java  | 53 +++++++++++++++++++
 4 files changed, 73 insertions(+)

diff --git a/gms/src/main/java/it/inaf/ia2/gms/model/GroupNode.java b/gms/src/main/java/it/inaf/ia2/gms/model/GroupNode.java
index cc1316b..381d846 100644
--- a/gms/src/main/java/it/inaf/ia2/gms/model/GroupNode.java
+++ b/gms/src/main/java/it/inaf/ia2/gms/model/GroupNode.java
@@ -6,6 +6,7 @@ public class GroupNode {
     private String groupName;
     private Permission permission;
     private boolean hasChildren;
+    private boolean leaf;
 
     public String getGroupId() {
         return groupId;
@@ -38,4 +39,12 @@ public class GroupNode {
     public void setHasChildren(boolean hasChildren) {
         this.hasChildren = hasChildren;
     }
+
+    public boolean isLeaf() {
+        return leaf;
+    }
+
+    public void setLeaf(boolean leaf) {
+        this.leaf = leaf;
+    }
 }
diff --git a/gms/src/main/java/it/inaf/ia2/gms/model/request/AddGroupRequest.java b/gms/src/main/java/it/inaf/ia2/gms/model/request/AddGroupRequest.java
index b06f6b3..690fd72 100644
--- a/gms/src/main/java/it/inaf/ia2/gms/model/request/AddGroupRequest.java
+++ b/gms/src/main/java/it/inaf/ia2/gms/model/request/AddGroupRequest.java
@@ -9,6 +9,8 @@ public class AddGroupRequest extends PaginatedModelRequest implements SearchFilt
     @NotEmpty
     private String newGroupName;
 
+    private boolean leaf;
+
     private String searchFilter;
 
     public String getNewGroupName() {
@@ -27,6 +29,14 @@ public class AddGroupRequest extends PaginatedModelRequest implements SearchFilt
         this.parentGroupId = parentGroupId;
     }
 
+    public boolean isLeaf() {
+        return leaf;
+    }
+
+    public void setLeaf(boolean leaf) {
+        this.leaf = leaf;
+    }
+
     @Override
     public String getSearchFilter() {
         return searchFilter;
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 9da1f20..80c5384 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
@@ -59,6 +59,7 @@ public class GroupsTreeBuilder {
                 GroupNode node = new GroupNode();
                 node.setGroupId(group.getId());
                 node.setGroupName(group.getName());
+                node.setLeaf(group.isLeaf());
                 node.setPermission(permission);
                 nodes.add(node);
             });
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 fddb3bc..e7eb133 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
@@ -1,9 +1,18 @@
 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.GroupNode;
 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.model.GroupEntity;
+import it.inaf.ia2.gms.service.GroupsService;
+import it.inaf.ia2.gms.service.GroupsTreeBuilder;
+import it.inaf.ia2.gms.service.PermissionsService;
 import java.util.ArrayList;
+import java.util.List;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.notNullValue;
 import org.junit.Before;
@@ -14,10 +23,13 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 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.result.MockMvcResultMatchers.status;
 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.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -26,9 +38,23 @@ public class GroupsControllerTest {
     @Mock
     private GroupsTabResponseBuilder groupsTabResponseBuilder;
 
+    @Mock
+    private GroupsService groupsService;
+
+    @Mock
+    private SessionData session;
+
+    @Mock
+    private PermissionsService permissionsService;
+
+    @Mock
+    private GroupsTreeBuilder groupsTreeBuilder;
+
     @InjectMocks
     private GroupsController controller;
 
+    private final ObjectMapper mapper = new ObjectMapper();
+
     private MockMvc mockMvc;
 
     @Before
@@ -52,4 +78,31 @@ public class GroupsControllerTest {
                 .andExpect(jsonPath("$.groupsPanel", notNullValue()))
                 .andExpect(jsonPath("$.permission", is("ADMIN")));
     }
+
+    @Test
+    public void testAddGroups() throws Exception {
+
+        AddGroupRequest request = new AddGroupRequest();
+        request.setNewGroupName("New Group");
+        request.setParentGroupId("abcd");
+        request.setLeaf(true);
+        request.setPaginatorPage(1);
+        request.setPaginatorPageSize(10);
+
+        GroupEntity parent = new GroupEntity();
+        when(groupsService.getGroupById(any())).thenReturn(parent);
+
+        when(permissionsService.getUserPermissionForGroup(any(), any())).thenReturn(Permission.ADMIN);
+
+        List<GroupNode> nodes = new ArrayList<>();
+        PaginatedData<GroupNode> paginatedData = new PaginatedData<>(nodes, 1, 10);
+        when(groupsTreeBuilder.listSubGroups(any(), any(), any())).thenReturn(paginatedData);
+
+        when(session.getUserId()).thenReturn("admin_id");
+
+        mockMvc.perform(post("/group")
+                .content(mapper.writeValueAsString(request))
+                .contentType(MediaType.APPLICATION_JSON_UTF8))
+                .andExpect(status().isCreated());
+    }
 }
-- 
GitLab