From a4fb3285c4cac4a1ef1f783ca25b1578c2640f9b Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Thu, 4 Jun 2020 14:41:34 +0200
Subject: [PATCH] Fixed issue on permission removal

---
 .../ia2/gms/controller/PermissionsController.java    | 12 ++++++------
 .../it/inaf/ia2/gms/manager/PermissionsManager.java  | 11 +++++++++++
 .../gms/controller/PermissionsControllerTest.java    | 10 +++++-----
 3 files changed, 22 insertions(+), 11 deletions(-)

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 1e39803..3f7d8e8 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
@@ -34,7 +34,7 @@ public class PermissionsController {
     @Autowired
     private PermissionsManager permissionsManager;
 
-    @GetMapping(value = "/permissions", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    @GetMapping(value = "/permissions", produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity<PaginatedData<UserPermission>> getPermissionsTab(TabRequest request) {
 
         GroupEntity group = groupsManager.getGroupById(request.getGroupId());
@@ -44,14 +44,14 @@ public class PermissionsController {
         return ResponseEntity.ok(permissionsPanel);
     }
 
-    @GetMapping(value = "/permission", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    @GetMapping(value = "/permission", produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity<Map<String, Permission>> getUserPermission(@RequestParam("groupId") String groupId, @RequestParam("userId") String userId) {
 
         GroupEntity group = groupsManager.getGroupById(groupId);
 
-        Permission permission = permissionsManager.getUserPermission(group, userId);
+        Permission permission = permissionsManager.getDirectUserPermission(group, userId);
         if (permission == null) {
-            return ResponseEntity.notFound().build();
+            return ResponseEntity.noContent().build();
         } else {
             Map<String, Permission> response = new HashMap<>();
             response.put("permission", permission);
@@ -59,7 +59,7 @@ public class PermissionsController {
         }
     }
 
-    @PostMapping(value = "/permission", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    @PostMapping(value = "/permission", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity<PaginatedData<UserPermission>> addPermission(@Valid @RequestBody AddPermissionRequest request) {
 
         GroupEntity group = groupsManager.getGroupById(request.getGroupId());
@@ -68,7 +68,7 @@ public class PermissionsController {
         return new ResponseEntity<>(getPermissionsPanel(group, request), HttpStatus.CREATED);
     }
 
-    @DeleteMapping(value = "/permission", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    @DeleteMapping(value = "/permission", produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity<PaginatedData<UserPermission>> deletePermission(@Valid MemberRequest request) {
 
         GroupEntity group = groupsManager.getGroupById(request.getGroupId());
diff --git a/gms/src/main/java/it/inaf/ia2/gms/manager/PermissionsManager.java b/gms/src/main/java/it/inaf/ia2/gms/manager/PermissionsManager.java
index 2d38ca9..7d08b2e 100644
--- a/gms/src/main/java/it/inaf/ia2/gms/manager/PermissionsManager.java
+++ b/gms/src/main/java/it/inaf/ia2/gms/manager/PermissionsManager.java
@@ -61,6 +61,17 @@ public class PermissionsManager extends UserAwareComponent {
         return result;
     }
 
+    public Permission getDirectUserPermission(GroupEntity group, String userId) {
+        verifyUserCanManagePermissions(group);
+        List<PermissionEntity> permissions = permissionsService.findUserPermissions(group, getCurrentUserId());
+        for (PermissionEntity permission : permissions) {
+            if (permission.getGroupId().equals(group.getId())) {
+                return permission.getPermission();
+            }
+        }
+        return null;
+    }
+
     public Permission getUserPermission(GroupEntity group, String userId) {
         verifyUserCanManagePermissions(group);
         List<PermissionEntity> permissions = permissionsService.findUserPermissions(group, getCurrentUserId());
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 d4c2f7c..6c8334d 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
@@ -59,10 +59,10 @@ public class PermissionsControllerTest {
     @Test
     public void testGetPermission() throws Exception {
 
-        when(permissionsManager.getUserPermission(eq(group), eq("user_id"))).thenReturn(Permission.MANAGE_MEMBERS);
+        when(permissionsManager.getDirectUserPermission(eq(group), eq("user_id"))).thenReturn(Permission.MANAGE_MEMBERS);
 
         mockMvc.perform(get("/permission?groupId=group_id&userId=user_id")
-                .contentType(MediaType.APPLICATION_JSON_UTF8))
+                .contentType(MediaType.APPLICATION_JSON))
                 .andExpect(status().isOk())
                 .andExpect(jsonPath("$.permission", is("MANAGE_MEMBERS")));
     }
@@ -71,8 +71,8 @@ public class PermissionsControllerTest {
     public void testGetInexistentPermission() throws Exception {
 
         mockMvc.perform(get("/permission?groupId=group_id&userId=user_id")
-                .contentType(MediaType.APPLICATION_JSON_UTF8))
-                .andExpect(status().isNotFound());
+                .contentType(MediaType.APPLICATION_JSON))
+                .andExpect(status().isNoContent());
     }
 
     @Test
@@ -87,7 +87,7 @@ public class PermissionsControllerTest {
 
         mockMvc.perform(post("/permission")
                 .content(mapper.writeValueAsString(request))
-                .contentType(MediaType.APPLICATION_JSON_UTF8))
+                .contentType(MediaType.APPLICATION_JSON))
                 .andExpect(status().isCreated())
                 .andExpect(jsonPath("$.currentPage", is(1)));
 
-- 
GitLab