Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #95 from futures/CleaningUpTestsWithAnnotations
Shorten and clarify fcrepo-kernel unit tests
  • Loading branch information
ajs6f committed Jul 5, 2013
2 parents b4342c1 + bd06242 commit 83a2f2f
Show file tree
Hide file tree
Showing 51 changed files with 1,896 additions and 1,776 deletions.
87 changes: 43 additions & 44 deletions fcrepo-http-api/src/test/java/org/fcrepo/api/FedoraContentTest.java
Expand Up @@ -16,7 +16,14 @@

package org.fcrepo.api;

import static javax.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
import static javax.ws.rs.core.Response.Status.CREATED;
import static javax.ws.rs.core.Response.Status.NO_CONTENT;
import static org.fcrepo.test.util.PathSegmentImpl.createPathList;
import static org.fcrepo.test.util.TestHelpers.getUriInfoImpl;
import static org.fcrepo.test.util.TestHelpers.mockDatastream;
import static org.fcrepo.test.util.TestHelpers.mockSession;
import static org.fcrepo.test.util.TestHelpers.setField;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
Expand All @@ -25,6 +32,8 @@
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
import static org.modeshape.jcr.api.JcrConstants.JCR_CONTENT;

import java.io.IOException;
import java.io.InputStream;
Expand All @@ -36,43 +45,49 @@
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import org.apache.commons.io.IOUtils;
import org.fcrepo.Datastream;
import org.fcrepo.exception.InvalidChecksumException;
import org.fcrepo.identifiers.PidMinter;
import org.fcrepo.services.DatastreamService;
import org.fcrepo.services.NodeService;
import org.fcrepo.test.util.TestHelpers;
import org.junit.Before;
import org.junit.Test;
import org.modeshape.jcr.api.JcrConstants;
import org.mockito.Mock;

public class FedoraContentTest {

FedoraContent testObj;

DatastreamService mockDatastreams;
@Mock
private DatastreamService mockDatastreams;

@Mock
private NodeService mockNodeService;

@Mock
private Session mockSession;

@Mock
private Node mockNode;

NodeService mockNodeService;
@Mock
private Node mockContentNode;

Session mockSession;
@Mock
private PidMinter mockMinter;

@Before
public void setUp() throws Exception {
mockDatastreams = mock(DatastreamService.class);
mockNodeService = mock(NodeService.class);

initMocks(this);
testObj = new FedoraContent();
TestHelpers.setField(testObj, "datastreamService", mockDatastreams);
TestHelpers.setField(testObj, "nodeService", mockNodeService);
TestHelpers.setField(testObj, "uriInfo", TestHelpers.getUriInfoImpl());
mockSession = TestHelpers.mockSession(testObj);
TestHelpers.setField(testObj, "session", mockSession);
setField(testObj, "datastreamService", mockDatastreams);
setField(testObj, "nodeService", mockNodeService);
setField(testObj, "uriInfo", getUriInfoImpl());
mockSession = mockSession(testObj);
setField(testObj, "session", mockSession);
}

@Test
Expand All @@ -83,11 +98,8 @@ public void testPutContent() throws RepositoryException, IOException,
final String dsContent = "asdf";
final String dsPath = "/" + pid + "/" + dsId;
final InputStream dsContentStream = IOUtils.toInputStream(dsContent);
final Node mockNode = mock(Node.class);
when(mockNode.isNew()).thenReturn(true);
final Node mockContentNode = mock(Node.class);
when(mockNode.getNode(JcrConstants.JCR_CONTENT)).thenReturn(
mockContentNode);
when(mockNode.getNode(JCR_CONTENT)).thenReturn(mockContentNode);
when(mockContentNode.getPath()).thenReturn(dsPath + "/jcr:content");
when(mockNodeService.exists(mockSession, dsPath)).thenReturn(false);
when(
Expand All @@ -98,7 +110,7 @@ public void testPutContent() throws RepositoryException, IOException,
final Response actual =
testObj.modifyContent(createPathList(pid, dsId), null,
dsContentStream, null);
assertEquals(Status.CREATED.getStatusCode(), actual.getStatus());
assertEquals(CREATED.getStatusCode(), actual.getStatus());
verify(mockDatastreams).createDatastreamNode(any(Session.class),
eq(dsPath), anyString(), any(InputStream.class));
verify(mockSession).save();
Expand All @@ -112,12 +124,8 @@ public void testCreateContent() throws RepositoryException, IOException,
final String dsContent = "asdf";
final String dsPath = "/" + pid + "/" + dsId;
final InputStream dsContentStream = IOUtils.toInputStream(dsContent);
final Node mockNode = mock(Node.class);

when(mockNode.isNew()).thenReturn(true);
final Node mockContentNode = mock(Node.class);
when(mockNode.getNode(JcrConstants.JCR_CONTENT)).thenReturn(
mockContentNode);
when(mockNode.getNode(JCR_CONTENT)).thenReturn(mockContentNode);
when(mockContentNode.getPath()).thenReturn(dsPath + "/jcr:content");
when(mockNodeService.exists(mockSession, dsPath)).thenReturn(false);
when(
Expand All @@ -127,8 +135,8 @@ public void testCreateContent() throws RepositoryException, IOException,
when(mockDatastreams.exists(mockSession, dsPath)).thenReturn(true);
final Response actual =
testObj.create(createPathList(pid, dsId), null,
MediaType.TEXT_PLAIN_TYPE, dsContentStream);
assertEquals(Status.CREATED.getStatusCode(), actual.getStatus());
TEXT_PLAIN_TYPE, dsContentStream);
assertEquals(CREATED.getStatusCode(), actual.getStatus());
verify(mockDatastreams).createDatastreamNode(mockSession, dsPath,
"text/plain", dsContentStream, null);
verify(mockSession).save();
Expand All @@ -143,15 +151,10 @@ public void testCreateContentAtMintedPath() throws RepositoryException,
final String dsContent = "asdf";
final String dsPath = "/" + pid + "/" + dsId;
final InputStream dsContentStream = IOUtils.toInputStream(dsContent);
final Node mockNode = mock(Node.class);

final PidMinter mockMinter = mock(PidMinter.class);
when(mockMinter.mintPid()).thenReturn("xyz");
TestHelpers.setField(testObj, "pidMinter", mockMinter);
setField(testObj, "pidMinter", mockMinter);
when(mockNode.isNew()).thenReturn(true);
final Node mockContentNode = mock(Node.class);
when(mockNode.getNode(JcrConstants.JCR_CONTENT)).thenReturn(
mockContentNode);
when(mockNode.getNode(JCR_CONTENT)).thenReturn(mockContentNode);
when(mockContentNode.getPath()).thenReturn(dsPath + "/jcr:content");
when(mockNodeService.exists(mockSession, dsPath)).thenReturn(false);
when(
Expand All @@ -162,8 +165,8 @@ public void testCreateContentAtMintedPath() throws RepositoryException,
when(mockDatastreams.exists(mockSession, dsPath)).thenReturn(true);
final Response actual =
testObj.create(createPathList(pid, dsId), null,
MediaType.TEXT_PLAIN_TYPE, dsContentStream);
assertEquals(Status.CREATED.getStatusCode(), actual.getStatus());
TEXT_PLAIN_TYPE, dsContentStream);
assertEquals(CREATED.getStatusCode(), actual.getStatus());
verify(mockDatastreams).createDatastreamNode(mockSession,
"/" + pid + "/xyz", "text/plain", dsContentStream, null);
verify(mockSession).save();
Expand All @@ -177,11 +180,8 @@ public void testModifyContent() throws RepositoryException, IOException,
final String dsContent = "asdf";
final String dsPath = "/" + pid + "/" + dsId;
final InputStream dsContentStream = IOUtils.toInputStream(dsContent);
final Node mockNode = mock(Node.class);
when(mockNode.isNew()).thenReturn(false);

final Datastream mockDs =
TestHelpers.mockDatastream(pid, dsId, dsContent);
final Datastream mockDs = mockDatastream(pid, dsId, dsContent);
when(mockDatastreams.getDatastream(mockSession, dsPath)).thenReturn(
mockDs);
final Request mockRequest = mock(Request.class);
Expand All @@ -196,7 +196,7 @@ public void testModifyContent() throws RepositoryException, IOException,
final Response actual =
testObj.modifyContent(createPathList(pid, dsId), null,
dsContentStream, mockRequest);
assertEquals(Status.NO_CONTENT.getStatusCode(), actual.getStatus());
assertEquals(NO_CONTENT.getStatusCode(), actual.getStatus());
verify(mockDatastreams).createDatastreamNode(any(Session.class),
eq(dsPath), anyString(), any(InputStream.class));
verify(mockSession).save();
Expand All @@ -208,8 +208,7 @@ public void testGetContent() throws RepositoryException, IOException {
final String dsId = "testDS";
final String path = "/" + pid + "/" + dsId;
final String dsContent = "asdf";
final Datastream mockDs =
TestHelpers.mockDatastream(pid, dsId, dsContent);
final Datastream mockDs = mockDatastream(pid, dsId, dsContent);
when(mockDatastreams.getDatastream(mockSession, path)).thenReturn(
mockDs);
final Request mockRequest = mock(Request.class);
Expand Down
Expand Up @@ -16,15 +16,24 @@

package org.fcrepo.api;

import static java.util.Arrays.asList;
import static javax.ws.rs.core.Response.notModified;
import static javax.ws.rs.core.Response.Status.CREATED;
import static javax.ws.rs.core.Response.Status.NOT_MODIFIED;
import static javax.ws.rs.core.Response.Status.NO_CONTENT;
import static org.fcrepo.test.util.PathSegmentImpl.createPathList;
import static org.fcrepo.test.util.TestHelpers.getUriInfoImpl;
import static org.fcrepo.test.util.TestHelpers.mockDatastream;
import static org.fcrepo.test.util.TestHelpers.mockSession;
import static org.fcrepo.test.util.TestHelpers.setField;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;

import java.io.IOException;
import java.io.InputStream;
Expand All @@ -44,18 +53,15 @@
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import org.apache.commons.io.IOUtils;
import org.fcrepo.Datastream;
import org.fcrepo.FedoraResource;
import org.fcrepo.exception.InvalidChecksumException;
import org.fcrepo.services.DatastreamService;
import org.fcrepo.services.NodeService;
import org.fcrepo.test.util.TestHelpers;
import org.junit.Before;
import org.junit.Test;

import org.mockito.Mock;
import com.sun.jersey.core.header.FormDataContentDisposition;
import com.sun.jersey.multipart.MultiPart;
import com.sun.jersey.multipart.file.StreamDataBodyPart;
Expand All @@ -64,23 +70,38 @@ public class FedoraDatastreamsTest {

FedoraDatastreams testObj;

DatastreamService mockDatastreams;
@Mock
private DatastreamService mockDatastreams;

@Mock
private NodeService mockNodes;

@Mock
private Node mockDsNode;

@Mock
private FedoraResource mockObject;

@Mock
private NodeIterator mockIterator;

@Mock
private Request mockRequest;

NodeService mockNodes;
private Session mockSession;

Session mockSession;
@Mock
private Node mockNode;

@Before
public void setUp() throws Exception {
mockDatastreams = mock(DatastreamService.class);
mockNodes = mock(NodeService.class);

initMocks(this);
testObj = new FedoraDatastreams();
TestHelpers.setField(testObj, "datastreamService", mockDatastreams);
TestHelpers.setField(testObj, "nodeService", mockNodes);
TestHelpers.setField(testObj, "uriInfo", TestHelpers.getUriInfoImpl());
mockSession = TestHelpers.mockSession(testObj);
TestHelpers.setField(testObj, "session", mockSession);
setField(testObj, "datastreamService", mockDatastreams);
setField(testObj, "nodeService", mockNodes);
setField(testObj, "uriInfo", getUriInfoImpl());
mockSession = mockSession(testObj);
setField(testObj, "session", mockSession);
}

@Test
Expand All @@ -93,14 +114,13 @@ public void testModifyDatastreams() throws RepositoryException,
atts.put(dsId1, "asdf");
atts.put(dsId2, "sdfg");
final MultiPart multipart = getStringsAsMultipart(atts);
final Node mockNode = mock(Node.class);
when(mockNode.getPath()).thenReturn("/FedoraDatastreamsTest1");
when(mockSession.getNode("/FedoraDatastreamsTest1")).thenReturn(
mockNode);
final Response actual =
testObj.modifyDatastreams(createPathList(pid), Arrays.asList(
dsId1, dsId2), multipart);
assertEquals(Status.CREATED.getStatusCode(), actual.getStatus());
assertEquals(CREATED.getStatusCode(), actual.getStatus());
verify(mockDatastreams).createDatastreamNode(any(Session.class),
eq("/" + pid + "/" + dsId1), anyString(),
any(InputStream.class));
Expand All @@ -114,10 +134,10 @@ public void testModifyDatastreams() throws RepositoryException,
public void testDeleteDatastreams() throws RepositoryException, IOException {
final String pid = "FedoraDatastreamsTest1";
final String path = "/" + pid;
final List<String> dsidList = Arrays.asList("ds1", "ds2");
final List<String> dsidList = asList("ds1", "ds2");
final Response actual =
testObj.deleteDatastreams(createPathList(pid), dsidList);
assertEquals(Status.NO_CONTENT.getStatusCode(), actual.getStatus());
assertEquals(NO_CONTENT.getStatusCode(), actual.getStatus());
verify(mockNodes).deleteObject(mockSession, path + "/" + "ds1");
verify(mockNodes).deleteObject(mockSession, path + "/" + "ds2");
verify(mockSession).save();
Expand All @@ -126,31 +146,22 @@ public void testDeleteDatastreams() throws RepositoryException, IOException {
@Test
public void testGetDatastreamsContents() throws RepositoryException,
IOException, NoSuchAlgorithmException {
final Request mockRequest = mock(Request.class);
final String pid = "FedoraDatastreamsTest1";
final String dsId = "testDS";
final String dsContent = "asdf";

final Datastream mockDs =
TestHelpers.mockDatastream(pid, dsId, dsContent);
final Datastream mockDs = mockDatastream(pid, dsId, dsContent);
when(mockDs.hasContent()).thenReturn(true);
final Node mockDsNode = mock(Node.class);
final FedoraResource mockObject = mock(FedoraResource.class);
final Node mockNode = mock(Node.class);
final NodeIterator mockIterator = mock(NodeIterator.class);
when(mockIterator.hasNext()).thenReturn(true, false);
when(mockIterator.nextNode()).thenReturn(mockDsNode);

when(mockObject.getNode()).thenReturn(mockNode);
when(mockNode.getNodes(new String[] {dsId})).thenReturn(mockIterator);

when(mockNodes.getObject(mockSession, "/FedoraDatastreamsTest1"))
.thenReturn(mockObject);
when(mockDatastreams.asDatastream(mockDsNode)).thenReturn(mockDs);

final Response resp =
testObj.getDatastreamsContents(createPathList(pid), Arrays
.asList(dsId), mockRequest);
testObj.getDatastreamsContents(createPathList(pid),
asList(dsId), mockRequest);
final MultiPart multipart = (MultiPart) resp.getEntity();

verify(mockDs).getContent();
Expand All @@ -169,34 +180,24 @@ public void testGetDatastreamsContentsCached() throws RepositoryException,
final String pid = "FedoraDatastreamsTest1";
final String dsId = "testDS";
final String dsContent = "asdf";
final Datastream mockDs =
TestHelpers.mockDatastream(pid, dsId, dsContent);
final Node mockDsNode = mock(Node.class);
final FedoraResource mockObject = mock(FedoraResource.class);
final Node mockNode = mock(Node.class);
final NodeIterator mockIterator = mock(NodeIterator.class);
final Datastream mockDs = mockDatastream(pid, dsId, dsContent);
when(mockIterator.hasNext()).thenReturn(true, false);
when(mockIterator.nextNode()).thenReturn(mockDsNode);

when(mockObject.getNode()).thenReturn(mockNode);
when(mockNode.getNodes(new String[] {dsId})).thenReturn(mockIterator);

when(mockNodes.getObject(mockSession, "/FedoraDatastreamsTest1"))
.thenReturn(mockObject);
when(mockDatastreams.asDatastream(mockDsNode)).thenReturn(mockDs);

final Request mockRequest = mock(Request.class);
when(
mockRequest.evaluatePreconditions(any(Date.class),
any(EntityTag.class))).thenReturn(
Response.notModified());
any(EntityTag.class))).thenReturn(notModified());

final Response resp =
testObj.getDatastreamsContents(createPathList(pid), Arrays
.asList(dsId), mockRequest);
testObj.getDatastreamsContents(createPathList(pid),
asList(dsId), mockRequest);
verify(mockDs, never()).getContent();
verify(mockSession, never()).save();
assertEquals(Status.NOT_MODIFIED.getStatusCode(), resp.getStatus());
assertEquals(NOT_MODIFIED.getStatusCode(), resp.getStatus());
}

public static MultiPart getStringsAsMultipart(
Expand Down

0 comments on commit 83a2f2f

Please sign in to comment.