Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
example unit test, with a mocking helper to support continued JCR int…
…eractions at API level
  • Loading branch information
barmintor committed Mar 21, 2013
1 parent 618c811 commit 08322b8
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 6 deletions.
5 changes: 5 additions & 0 deletions fcrepo-http-api/pom.xml
Expand Up @@ -131,6 +131,11 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down
Expand Up @@ -76,13 +76,10 @@ public class FedoraDatastreams extends AbstractResource {
.getLogger(FedoraDatastreams.class);

@Inject
private LowLevelStorageService llStorageService;
ObjectService objectService;

@Inject
private ObjectService objectService;

@Inject
private DatastreamService datastreamService;
DatastreamService datastreamService;

/**
* Returns a list of datastreams for the object
Expand All @@ -104,7 +101,7 @@ public ObjectDatastreams getDatastreams(@PathParam("pid")
final ObjectDatastreams objectDatastreams = new ObjectDatastreams();
final Builder<DatastreamElement> datastreams = builder();

NodeIterator i = objectService.getObjectNode(pid).getNodes();
NodeIterator i = datastreamService.getDatastreamsFor(pid);
while (i.hasNext()) {
final Node ds = i.nextNode();
datastreams.add(new DatastreamElement(ds.getName(), ds.getName(),
Expand Down
@@ -0,0 +1,47 @@
package org.fcrepo.api;

import static org.fcrepo.TestHelpers.mockDatastreamNode;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.*;

import java.io.IOException;

import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;

import org.fcrepo.jaxb.responses.access.ObjectDatastreams;
import org.fcrepo.services.DatastreamService;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class FedoraDatastreamsTest {

FedoraDatastreams testObj;

DatastreamService mockDatastreams;

@Before
public void setUp() {
mockDatastreams = mock(DatastreamService.class);
testObj = new FedoraDatastreams();
testObj.datastreamService = mockDatastreams;
}

@After
public void tearDown() {

}

@Test
public void testGetDatastreams() throws RepositoryException, IOException {
String pid = "FedoraDatastreamsTest1";
String dsid = "testDS";
NodeIterator mockIter = mockDatastreamNode(dsid, "asdf");
when(mockDatastreams.getDatastreamsFor(pid)).thenReturn(mockIter);
ObjectDatastreams actual = testObj.getDatastreams(pid);
verify(mockDatastreams).getDatastreamsFor(pid);
assertEquals(1, actual.datastreams.size());
assertEquals(dsid, actual.datastreams.iterator().next().dsid);
}
}
5 changes: 5 additions & 0 deletions fcrepo-kernel/pom.xml
Expand Up @@ -68,6 +68,11 @@
<version>3.0.0-SNAPSHOT</version>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down
Expand Up @@ -2,6 +2,7 @@
package org.fcrepo.services;

import static org.fcrepo.services.PathService.getDatastreamJcrNodePath;
import static org.fcrepo.services.PathService.getObjectJcrNodePath;

import java.io.IOException;
import java.io.InputStream;
Expand All @@ -10,11 +11,13 @@
import javax.annotation.PreDestroy;
import javax.inject.Inject;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;

import org.fcrepo.Datastream;
import org.fcrepo.FedoraObject;
import org.fcrepo.exception.InvalidChecksumException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -74,6 +77,14 @@ public void purgeDatastream(final Session session,
final String dsPath = getDatastreamJcrNodePath(pid, dsId);
new Datastream(session, dsPath).purge();
}

public NodeIterator getDatastreamsFor(String pid, Session session) throws RepositoryException {
return new FedoraObject(session, getObjectJcrNodePath(pid)).getNode().getNodes();
}

public NodeIterator getDatastreamsFor(String pid) throws RepositoryException {
return getDatastreamsFor(pid, readOnlySession);
}

@PostConstruct
public void getSession() {
Expand Down
34 changes: 34 additions & 0 deletions fcrepo-kernel/src/test/java/org/fcrepo/TestHelpers.java
@@ -0,0 +1,34 @@
package org.fcrepo;

import static org.mockito.Mockito.*;

import java.io.IOException;
import java.io.StringBufferInputStream;

import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.RepositoryException;

import org.modeshape.jcr.api.Binary;
import org.modeshape.jcr.api.JcrConstants;

public class TestHelpers {
public static NodeIterator mockDatastreamNode(String dsId, String content) throws RepositoryException, IOException {
Node mockDsNode = mock(Node.class);
Node mockContent = mock(Node.class);
Property mockData = mock(Property.class);
Binary mockBinary = mock(Binary.class);
when(mockDsNode.getName()).thenReturn(dsId);
when(mockDsNode.getNode(JcrConstants.JCR_CONTENT)).thenReturn(mockContent);
when(mockContent.getProperty(JcrConstants.JCR_DATA)).thenReturn(mockData);
when(mockData.getBinary()).thenReturn(mockBinary);
when(mockBinary.getMimeType()).thenReturn("binary/octet-stream");
when(mockBinary.getStream()).thenReturn(new StringBufferInputStream(content));
NodeIterator mockIter = mock(NodeIterator.class);
when(mockIter.hasNext()).thenReturn(true, false);
when(mockIter.next()).thenReturn(mockDsNode);
when(mockIter.nextNode()).thenReturn(mockDsNode);
return mockIter;
}
}

0 comments on commit 08322b8

Please sign in to comment.