Skip to content

Commit

Permalink
BXC-4430 finish tests
Browse files Browse the repository at this point in the history
  • Loading branch information
sharonluong committed Feb 22, 2024
1 parent 508d7d5 commit aa0f178
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public ResponseEntity<Object> getViewSetting(@PathVariable("id") String id) {
PID pid = PIDs.get(id);
// Check if the user is allowed to view this object
AccessGroupSet principals = getAgentPrincipals().getPrincipals();
accessControlService.assertHasAccess("Insufficient permissions to get a region for " + id,
accessControlService.assertHasAccess("Insufficient permissions to get view settings for " + id,
pid, principals, Permission.viewHidden);

// check if object is a WorkObject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,17 @@
import edu.unc.lib.boxc.auth.api.services.AccessControlService;
import edu.unc.lib.boxc.auth.fcrepo.models.AccessGroupSetImpl;
import edu.unc.lib.boxc.auth.fcrepo.services.GroupsThreadStore;
import edu.unc.lib.boxc.model.api.ResourceType;
import edu.unc.lib.boxc.model.api.ids.PID;
import edu.unc.lib.boxc.model.api.services.RepositoryObjectFactory;
import edu.unc.lib.boxc.model.api.objects.FileObject;
import edu.unc.lib.boxc.model.api.objects.RepositoryObjectLoader;
import edu.unc.lib.boxc.model.api.objects.WorkObject;
import edu.unc.lib.boxc.model.api.rdf.CdrView;
import edu.unc.lib.boxc.model.fcrepo.ids.PIDs;
import edu.unc.lib.boxc.search.solr.models.ContentObjectSolrRecord;
import edu.unc.lib.boxc.operations.jms.viewSettings.ViewSettingRequest;
import edu.unc.lib.boxc.web.services.rest.MvcTestHelpers;
import edu.unc.lib.boxc.web.services.rest.exceptions.RestResponseEntityExceptionHandler;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.rdf.model.Statement;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand All @@ -21,9 +26,15 @@
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import java.util.Map;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.openMocks;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
Expand All @@ -33,9 +44,18 @@ public class ViewSettingIT {
private ViewSettingController controller;
@Mock
private AccessControlService accessControlService;
@Mock
private RepositoryObjectLoader repositoryObjectLoader;
@Mock
private FileObject fileObject;
@Mock
private WorkObject workObject;
@Mock
private Resource resource;
@Mock
private Statement stmt;
private MockMvc mockMvc;
private AutoCloseable closeable;
private ContentObjectSolrRecord workObject;
private final static String USERNAME = "test_user";
private final static AccessGroupSet GROUPS = new AccessGroupSetImpl("adminGroup");
private static final String OBJECT_ID = "f277bb38-272c-471c-a28a-9887a1328a1f";
Expand All @@ -47,12 +67,10 @@ public void setup() {
mockMvc = MockMvcBuilders.standaloneSetup(controller)
.setControllerAdvice(new RestResponseEntityExceptionHandler())
.build();
workObject = new ContentObjectSolrRecord();
workObject.setId(OBJECT_ID);
workObject.setResourceType(ResourceType.Work.name());
workObject.setTitle("Test Work");
GroupsThreadStore.storeUsername(USERNAME);
GroupsThreadStore.storeGroups(GROUPS);
when(repositoryObjectLoader.getRepositoryObject(eq(PIDs.get(OBJECT_ID)))).thenReturn(workObject);
when(workObject.getResource()).thenReturn(resource);
}

@AfterEach
Expand All @@ -61,27 +79,48 @@ void closeService() throws Exception {
}

@Test
public void testGetViewSetting() {
public void testGetViewSetting() throws Exception {
var paged = ViewSettingRequest.ViewBehavior.PAGED.toString();
when(resource.getProperty(eq(CdrView.viewBehavior))).thenReturn(stmt);
when(stmt.getString()).thenReturn(paged);

var result = mockMvc.perform(get("/edit/viewSettings/" + OBJECT_ID)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().is2xxSuccessful())
.andReturn();

Map<String, Object> respMap = MvcTestHelpers.getMapFromResponse(result);
assertEquals(paged, respMap.get("viewBehavior"));
}

@Test
public void testGetViewSettingNoPermission() throws Exception {
doThrow(new AccessRestrictionException()).when(accessControlService)
.assertHasAccess(eq(workObject.getPid()), any(), eq(Permission.viewHidden));
.assertHasAccess(anyString(), eq(OBJECT_PID), any(), eq(Permission.viewHidden));

mockMvc.perform(get("/edit/viewSettings/" + OBJECT_ID)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isForbidden());
}

@Test
public void testGetViewSettingWithNullViewBehavior() {
public void testGetViewSettingWithNullViewBehavior() throws Exception {
var result = mockMvc.perform(get("/edit/viewSettings/" + OBJECT_ID)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().is2xxSuccessful())
.andReturn();

Map<String, Object> respMap = MvcTestHelpers.getMapFromResponse(result);
assertNull(respMap.get("viewBehavior"));
}

@Test
public void testGetViewSettingNotAWork() {
public void testGetViewSettingNotAWork() throws Exception {
var fileId = "ba70a1ee-fa7c-437f-a979-cc8b16599652";
when(repositoryObjectLoader.getRepositoryObject(eq(PIDs.get(fileId)))).thenReturn(fileObject);

mockMvc.perform(get("/edit/viewSettings/" + fileId)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isBadRequest());
}
}

0 comments on commit aa0f178

Please sign in to comment.