Skip to content

Commit

Permalink
separated 'admins-and-groupings' into 2 endpoints 'admins' & 'all-gro…
Browse files Browse the repository at this point in the history
…upings' (#511)
  • Loading branch information
mikhail-shkaralevich authored Jan 19, 2024
1 parent b6a5642 commit d6a914b
Show file tree
Hide file tree
Showing 13 changed files with 203 additions and 167 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

import edu.hawaii.its.api.groupings.GroupingAddResult;
import edu.hawaii.its.api.groupings.GroupingAddResults;
import edu.hawaii.its.api.groupings.GroupingPaths;
import edu.hawaii.its.api.groupings.GroupingDescription;
import edu.hawaii.its.api.groupings.GroupingGroupMembers;
import edu.hawaii.its.api.groupings.GroupingGroupsMembers;
Expand All @@ -44,7 +45,6 @@
import edu.hawaii.its.api.service.MemberService;
import edu.hawaii.its.api.service.MembershipService;
import edu.hawaii.its.api.service.UpdateMemberService;
import edu.hawaii.its.api.type.AdminListsHolder;
import edu.hawaii.its.api.type.GroupingPath;
import edu.hawaii.its.api.type.GroupingsServiceResult;
import edu.hawaii.its.api.type.Membership;
Expand Down Expand Up @@ -111,15 +111,27 @@ public ResponseEntity<String> hello() {
}

/**
* Get a list of all admins and a list of all groupings.
* Get a list of all admins.
*/
@GetMapping(value = "/admins-and-groupings")
@GetMapping(value = "/grouping-admins")
@ResponseBody
public ResponseEntity<AdminListsHolder> adminsGroupings(@RequestHeader(CURRENT_USER_KEY) String currentUser) {
logger.info("Entered REST adminsGroupings...");
public ResponseEntity<GroupingGroupMembers> groupingAdmins(@RequestHeader(CURRENT_USER_KEY) String currentUser) {
logger.info("Entered REST groupingAdmins...");
return ResponseEntity
.ok()
.body(groupingAssignmentService.adminsGroupings(currentUser));
.body(groupingAssignmentService.groupingAdmins(currentUser));
}

/**
* Get a list of all groupings.
*/
@GetMapping(value = "/all-groupings")
@ResponseBody
public ResponseEntity<GroupingPaths> allGroupings(@RequestHeader(CURRENT_USER_KEY) String currentUser) {
logger.info("Entered REST allGroupings...");
return ResponseEntity
.ok()
.body(groupingAssignmentService.allGroupingPaths(currentUser));
}

/**
Expand Down
50 changes: 50 additions & 0 deletions src/main/java/edu/hawaii/its/api/groupings/GroupingPaths.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package edu.hawaii.its.api.groupings;

import com.fasterxml.jackson.annotation.JsonSetter;
import edu.hawaii.its.api.type.GroupingPath;
import edu.hawaii.its.api.wrapper.Group;
import edu.hawaii.its.api.wrapper.GroupAttributeResults;

import java.util.ArrayList;
import java.util.List;

public class GroupingPaths {

private String resultCode;
private List<GroupingPath> groupingPaths;


public GroupingPaths() {
setGroupingPaths(new ArrayList<>());
setResultCode("FAILURE");
}

public GroupingPaths(GroupAttributeResults groupAttributeResults) {
setGroupingPaths(groupAttributeResults);
setResultCode(groupAttributeResults.getResultCode());
}

@JsonSetter
public void setGroupingPaths(List<GroupingPath> groupingPaths) {
this.groupingPaths = groupingPaths;
}

public void setGroupingPaths(GroupAttributeResults groupAttributeResults) {
this.groupingPaths = new ArrayList<>();
for (Group group : groupAttributeResults.getGroups()) {
this.groupingPaths.add(new GroupingPath(group.getGroupPath()));
}
}

public List<GroupingPath> getGroupingPaths() {
return this.groupingPaths;
}

public void setResultCode(String resultCode) {
this.resultCode = resultCode;
}

public String getResultCode() {
return this.resultCode;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,22 @@
import static edu.hawaii.its.api.service.PathFilter.pathHasInclude;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import edu.hawaii.its.api.exception.AccessDeniedException;
import edu.hawaii.its.api.groupings.GroupingPaths;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import edu.hawaii.its.api.exception.AccessDeniedException;
import edu.hawaii.its.api.groupings.GroupingGroupMember;
import edu.hawaii.its.api.groupings.GroupingGroupMembers;
import edu.hawaii.its.api.type.AdminListsHolder;
import edu.hawaii.its.api.type.Group;
import edu.hawaii.its.api.type.GroupType;
import edu.hawaii.its.api.type.GroupingPath;
Expand All @@ -41,29 +40,34 @@ public class GroupingAssignmentService {
public static final Log logger = LogFactory.getLog(GroupingAssignmentService.class);

@Autowired
private GrouperApiService grouperApiService;
private MemberService memberService;

@Autowired
private MemberService memberService;
private GrouperApiService grouperApiService;

@Autowired
private GroupingsService groupingsService;

/**
* A list of grouping paths for all groupings, restricted to admins' use only.
*/
public GroupingPaths allGroupingPaths(String adminUhIdentifier) {
logger.info(String.format("allGroupings; adminUhIdentifier: %s;", adminUhIdentifier));
if (!memberService.isAdmin(adminUhIdentifier)) {
throw new AccessDeniedException();
}
return new GroupingPaths(groupingsService.allGroupAttributeResults());
}

/**
* Returns an adminLists object containing the list of all admins and all groupings.
* Returns groupingsAdmins object containing the list of all admins.
*/
public AdminListsHolder adminsGroupings(String adminUhIdentifier) {
logger.info(String.format("adminsGroupings; adminUhIdentifier: %s;", adminUhIdentifier));
public GroupingGroupMembers groupingAdmins(String adminUhIdentifier) {
logger.info(String.format("groupingAdmins; adminUhIdentifier: %s;", adminUhIdentifier));
if (!memberService.isAdmin(adminUhIdentifier)) {
throw new AccessDeniedException();
}
AdminListsHolder adminListsHolder = new AdminListsHolder();
List<String> adminGrouping = Arrays.asList(GROUPING_ADMINS);
Group admin = getMembers(adminUhIdentifier, adminGrouping).get(GROUPING_ADMINS);
adminListsHolder.setAllGroupingPaths(groupingsService.allGroupingPaths());
adminListsHolder.setAdminGroup(admin);
return adminListsHolder;
return new GroupingGroupMembers(grouperApiService.getMembersResult(adminUhIdentifier, GROUPING_ADMINS));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ public List<GroupingPath> allGroupingPaths() {
.map(group -> new GroupingPath(group.getGroupPath(), group.getDescription())).collect(
Collectors.toList());
}
public GroupAttributeResults allGroupAttributeResults() {
GroupAttributeResults groupAttributeResults = grouperApiService.groupAttributeResults(TRIO);
return groupAttributeResults;
}

/**
* A list of grouping paths for all opt out enabled Groupings.
Expand Down
34 changes: 0 additions & 34 deletions src/main/java/edu/hawaii/its/api/type/AdminListsHolder.java

This file was deleted.

2 changes: 1 addition & 1 deletion src/main/resources/application-localhost.properties
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ spring.config.activate.on-profile=localhost
spring.config.import=optional:file:${user.home}/.${user.name}-conf/uh-groupings-api-overrides.properties

# =========================================================================
app.environment=localhost
app.environment=localhost
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import edu.hawaii.its.api.groupings.GroupingGroupsMembers;
import edu.hawaii.its.api.groupings.GroupingMoveMembersResult;
import edu.hawaii.its.api.groupings.GroupingOptAttributes;
import edu.hawaii.its.api.groupings.GroupingPaths;
import edu.hawaii.its.api.groupings.GroupingRemoveResult;
import edu.hawaii.its.api.groupings.GroupingRemoveResults;
import edu.hawaii.its.api.groupings.GroupingReplaceGroupMembersResult;
Expand All @@ -54,7 +55,6 @@
import edu.hawaii.its.api.service.MemberService;
import edu.hawaii.its.api.service.MembershipService;
import edu.hawaii.its.api.service.UpdateMemberService;
import edu.hawaii.its.api.type.AdminListsHolder;
import edu.hawaii.its.api.type.Group;
import edu.hawaii.its.api.type.Grouping;
import edu.hawaii.its.api.type.GroupingPath;
Expand Down Expand Up @@ -234,31 +234,35 @@ public void helloTest() throws Exception {
}

@Test
public void adminsGroupingsTest() throws Exception {
List<GroupingPath> groupingPaths = new ArrayList<>();
List<Person> admins = new ArrayList<>();
public void groupingPathsTest() throws Exception {
List<GroupingPath> paths = new ArrayList<>();
for (int i = 0; i < 3; i++) {
groupingPaths.add(new GroupingPath("path:to:grouping" + i));
admins.add(new Person("admin" + i));
paths.add(new GroupingPath("path:to:grouping" + i));
}
Group adminGroup = new Group(admins);
AdminListsHolder adminListsHolder = new AdminListsHolder(groupingPaths, adminGroup);

given(groupingAssignmentService.adminsGroupings("bobo")).willReturn(adminListsHolder);
mockMvc.perform(get(API_BASE + "/admins-and-groupings")
GroupingPaths groupingPaths = new GroupingPaths();
groupingPaths.setGroupingPaths(paths);
given(groupingAssignmentService.allGroupingPaths("bobo")).willReturn(groupingPaths);
mockMvc.perform(get(API_BASE + "/all-groupings")
.header(CURRENT_USER, "bobo"))
.andExpect(status().isOk())
.andExpect(jsonPath("allGroupingPaths[0].name").value("grouping0"))
.andExpect(jsonPath("allGroupingPaths[1].name").value("grouping1"))
.andExpect(jsonPath("allGroupingPaths[2].name").value("grouping2"))
.andExpect(jsonPath("allGroupingPaths[0].path").value("path:to:grouping0"))
.andExpect(jsonPath("allGroupingPaths[1].path").value("path:to:grouping1"))
.andExpect(jsonPath("allGroupingPaths[2].path").value("path:to:grouping2"))
.andExpect(jsonPath("adminGroup.members[0].name").value("admin0"))
.andExpect(jsonPath("adminGroup.members[1].name").value("admin1"))
.andExpect(jsonPath("adminGroup.members[2].name").value("admin2"));
.andExpect(jsonPath("groupingPaths[0].name").value("grouping0"))
.andExpect(jsonPath("groupingPaths[1].name").value("grouping1"))
.andExpect(jsonPath("groupingPaths[2].name").value("grouping2"))
.andExpect(jsonPath("groupingPaths[0].path").value("path:to:grouping0"))
.andExpect(jsonPath("groupingPaths[1].path").value("path:to:grouping1"))
.andExpect(jsonPath("groupingPaths[2].path").value("path:to:grouping2"));
verify(groupingAssignmentService, times(1))
.adminsGroupings("bobo");
.allGroupingPaths("bobo");
}

@Test
public void groupingAdminsTest() throws Exception {
given(groupingAssignmentService.groupingAdmins("bobo")).willReturn(new GroupingGroupMembers());
MvcResult mvcResult = mockMvc.perform(get(API_BASE + "/grouping-admins")
.header(CURRENT_USER, "bobo"))
.andExpect(status().isOk()).andReturn();
assertNotNull(mvcResult);
verify(groupingAssignmentService, times(1)).groupingAdmins("bobo");
}

@Test
Expand Down Expand Up @@ -948,4 +952,4 @@ public void regexTest() throws Exception {
.andReturn();
assertThat(result4, notNullValue());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
Expand All @@ -29,16 +28,19 @@
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.web.bind.MissingPathVariableException;
import org.springframework.web.context.WebApplicationContext;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

import edu.hawaii.its.api.configuration.SpringBootWebApplication;
import edu.hawaii.its.api.groupings.GroupingAddResult;
import edu.hawaii.its.api.groupings.GroupingAddResults;
import edu.hawaii.its.api.groupings.GroupingGroupMembers;
import edu.hawaii.its.api.groupings.GroupingGroupsMembers;
import edu.hawaii.its.api.groupings.GroupingMoveMemberResult;
import edu.hawaii.its.api.groupings.GroupingMoveMembersResult;
import edu.hawaii.its.api.groupings.GroupingPaths;
import edu.hawaii.its.api.groupings.GroupingRemoveResult;
import edu.hawaii.its.api.groupings.GroupingRemoveResults;
import edu.hawaii.its.api.groupings.GroupingReplaceGroupMembersResult;
Expand All @@ -48,16 +50,12 @@
import edu.hawaii.its.api.service.MemberService;
import edu.hawaii.its.api.service.UhIdentifierGenerator;
import edu.hawaii.its.api.service.UpdateMemberService;
import edu.hawaii.its.api.type.AdminListsHolder;
import edu.hawaii.its.api.type.AsyncJobResult;
import edu.hawaii.its.api.type.GroupingsServiceResult;
import edu.hawaii.its.api.type.OptType;
import edu.hawaii.its.api.type.Person;
import edu.hawaii.its.api.util.JsonUtil;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

@ActiveProfiles("integrationTest")
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@SpringBootTest(classes = { SpringBootWebApplication.class })
Expand Down Expand Up @@ -155,14 +153,25 @@ public void helloTest() throws Exception {
}

@Test
public void adminsGroupingsTest() throws Exception {
String url = API_BASE_URL + "admins-and-groupings";
public void allGroupingsTest() throws Exception {
String url = API_BASE_URL + "all-groupings";
MvcResult mvcResult = mockMvc.perform(get(url)
.header(CURRENT_USER, ADMIN))
.andExpect(status().isOk())
.andReturn();
assertNotNull(objectMapper.readValue(mvcResult.getResponse().getContentAsByteArray(),
GroupingPaths.class));
}

@Test
void groupingAdmins() throws Exception {
String url = API_BASE_URL + "grouping-admins";
MvcResult mvcResult = mockMvc.perform(get(url)
.header(CURRENT_USER, ADMIN))
.andExpect(status().isOk())
.andReturn();
assertNotNull(objectMapper.readValue(mvcResult.getResponse().getContentAsByteArray(),
AdminListsHolder.class));
GroupingGroupMembers.class));
}

@Test
Expand Down Expand Up @@ -739,5 +748,4 @@ public void getAsyncJobResultTest() throws Exception {
assertNotNull(
new ObjectMapper().readValue(mvcResult.getResponse().getContentAsByteArray(), AsyncJobResult.class));
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,5 @@ public void test() {
List<GroupingGroupMember> results = groupingGroupMembers.getMembers();
assertNotNull(results);
assertEquals(2, results.size());

}
}
Loading

0 comments on commit d6a914b

Please sign in to comment.