diff --git a/gms/src/main/java/it/inaf/ia2/gms/controller/JWTWebServiceController.java b/gms/src/main/java/it/inaf/ia2/gms/controller/JWTWebServiceController.java index 09ef965a5b766a7699a00a93f33eb358fab6f59d..da3a84cef886481a5b97230f072f162d7f9f8ca1 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/controller/JWTWebServiceController.java +++ b/gms/src/main/java/it/inaf/ia2/gms/controller/JWTWebServiceController.java @@ -118,6 +118,7 @@ public class JWTWebServiceController { String groupNamesString = getGroupFromRequest(request, "/ws/jwt/search/", "/vo/search/"); List<String> groupNames = groupNameService.extractGroupNames(groupNamesString); + List<String> existingGroupNames = new ArrayList<>(); GroupEntity group = null; @@ -127,19 +128,17 @@ public class JWTWebServiceController { if (optionalGroup.isPresent()) { GroupEntity groupEntity = optionalGroup.get(); parentPath = groupEntity.getPath(); + existingGroupNames.add(groupName); boolean isMember = membershipManager.isCurrentUserMemberOf(groupEntity.getId()); if (isMember) { group = groupEntity; } - } else { - group = null; - break; } } if (group != null) { try ( PrintWriter pw = new PrintWriter(response.getOutputStream())) { - pw.println(groupNameService.getCompleteName(groupNames)); + pw.println(groupNameService.getCompleteName(existingGroupNames)); } } // else: empty response (as defined by GMS standard) 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 ca81d286bd9af54efe47126affa6c177a22c3c4c..3039885ccc6aad6dbd944d8e97a8fd246b50fa83 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 @@ -131,6 +131,61 @@ public class JWTWebServiceControllerTest { .andExpect(content().string("")); } + @Test + public void testIsMemberOfParentButChildDoesntExist() throws Exception { + + GroupEntity group1 = new GroupEntity(); + group1.setId("1"); + group1.setPath("1"); + group1.setName("LBT"); + + GroupEntity group2 = new GroupEntity(); + group2.setId("2"); + group2.setPath("1.2"); + group2.setName("OTHERS"); + + when(groupsDAO.findGroupByParentAndName(eq(""), eq("LBT"))) + .thenReturn(Optional.of(group1)); + when(groupsDAO.findGroupByParentAndName(eq("1"), eq("OTHERS"))) + .thenReturn(Optional.of(group2)); + + when(membershipManager.isCurrentUserMemberOf(eq(group2.getId()))).thenReturn(true); + + String group = "LBT.OTHERS.UNKNOWN"; + + mockMvc.perform(get("/vo/search/" + group).principal(principal)) + .andExpect(status().isOk()) + .andExpect(content().string("LBT.OTHERS\n")); + } + + @Test + public void testIsMemberOfSuperParentButChildDoesntExist() throws Exception { + + GroupEntity group1 = new GroupEntity(); + group1.setId("1"); + group1.setPath("1"); + group1.setName("LBT"); + + GroupEntity group2 = new GroupEntity(); + group2.setId("2"); + group2.setPath("1.2"); + group2.setName("OTHERS"); + + when(groupsDAO.findGroupByParentAndName(eq(""), eq("LBT"))) + .thenReturn(Optional.of(group1)); + when(groupsDAO.findGroupByParentAndName(eq("1"), eq("OTHERS"))) + .thenReturn(Optional.of(group2)); + + when(membershipManager.isCurrentUserMemberOf(eq(group1.getId()))).thenReturn(true); + when(membershipManager.isCurrentUserMemberOf(eq(group2.getId()))).thenReturn(true); + + String group = "LBT.OTHERS.UNKNOWN"; + + mockMvc.perform(get("/vo/search/" + group).principal(principal)) + .andExpect(status().isOk()) + .andExpect(content().string("LBT.OTHERS\n")); + } + @Test public void testCreateGroup() throws Exception {