Skip to content

Commit

Permalink
Add unit test for FedoraSparql.java class
Browse files Browse the repository at this point in the history
  • Loading branch information
lsitu authored and Andrew Woods committed Oct 12, 2014
1 parent 2bb1e61 commit c3c25fe
Showing 1 changed file with 94 additions and 10 deletions.
Expand Up @@ -15,9 +15,28 @@
*/
package org.fcrepo.transform.http;

import org.fcrepo.http.commons.test.util.TestHelpers;
import static javax.ws.rs.core.Response.Status.OK;
import static javax.ws.rs.core.Response.ok;

import static org.springframework.test.util.ReflectionTestUtils.setField;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RDFLanguages;
import org.fcrepo.http.api.FedoraNodes;
import org.fcrepo.http.commons.api.rdf.HttpIdentifierTranslator;
import org.fcrepo.kernel.RdfLexicon;
import org.fcrepo.kernel.rdf.IdentifierTranslator;
import org.fcrepo.transform.http.responses.ResultSetStreamingOutput;
import org.fcrepo.transform.sparql.JQLResultSet;
import org.fcrepo.transform.sparql.SparqlServiceDescription;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.mockito.Mock;
import org.modeshape.jcr.api.NamespaceRegistry;
Expand All @@ -35,25 +54,35 @@
import javax.jcr.query.QueryResult;
import javax.jcr.query.qom.Column;
import javax.jcr.query.qom.QueryObjectModel;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.core.Variant;

import static org.apache.jena.riot.WebContent.contentTypeTextTSV;
import static org.fcrepo.http.commons.domain.RDFMediaType.POSSIBLE_SPARQL_RDF_VARIANTS;
import static org.fcrepo.http.commons.test.util.TestHelpers.getUriInfoImpl;
import static org.fcrepo.http.commons.test.util.TestHelpers.mockSession;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;

/**
* <p>FedoraSparqlTest class.</p>
*
* @author lsitu
* @author cbeer
*/
public class FedoraSparqlTest {

FedoraSparql testObj;

private Session mockSession;

private UriInfo uriInfo;

@Mock
Expand Down Expand Up @@ -86,17 +115,28 @@ public class FedoraSparqlTest {
@Mock
private QueryResult mockResults;

@Mock
private IdentifierTranslator MockIdentifierTranslator;

@Mock
private Variant mockVariant;

@Mock
private Request mockRequest;

private static String testSparql = "SELECT ?s WHERE { ?x <" + RdfLexicon.DC_TITLE.getURI() + "> ?z }";

@Before
public void setUp() throws RepositoryException {
initMocks(this);

testObj = new FedoraSparql();

this.uriInfo = getUriInfoImpl();
TestHelpers.setField(testObj, "uriInfo", uriInfo);
setField(testObj, "uriInfo", uriInfo);

mockSession = mockSession(testObj);
TestHelpers.setField(testObj, "session", mockSession);
setField(testObj, "session", mockSession);
when(mockSession.getWorkspace()).thenReturn(mockWorkspace);

when(mockWorkspace.getQueryManager()).thenReturn(mockQueryManager);
Expand All @@ -114,14 +154,58 @@ public void setUp() throws RepositoryException {
when(mockQueryFactory.createQuery(any(SelectQuery.class))).thenReturn(mockQuery);

when(mockQuery.execute()).thenReturn(mockResults);

}

@Test
@Ignore
public void testRunSparqlQuery() {
// final JQLResultSet resultSet = (JQLResultSet)testObj.runSparqlQuery(IOUtils.toInputStream("SELECT ?pid
// WHERE { ?pid <info:x> \"a\" }"), uriInfo);
public void testSparqlServiceDescription() {
final Response response = testObj.sparqlServiceDescription(mockRequest, uriInfo);
assertTrue(response.getStatus() == OK.getStatusCode());
final StreamingOutput stream = new StreamingOutput() {
@Override
public void write(final OutputStream output) {
final SparqlServiceDescription sd = new SparqlServiceDescription(mockSession, uriInfo);
final Lang rdfLang = RDFLanguages.contentTypeToLang(response.getMediaType().toString());
final Writer outWriter = new OutputStreamWriter(output);
sd.createServiceDescription().asModel().write(outWriter, rdfLang.getName());
}
};
final String expected = ok(stream).header("Content-Type",
RDFLanguages.contentTypeToLang(response.getMediaType().toString()))
.build().toString();
assertEquals(expected, response.toString());
}

@Test
public void testSparqlQueryForm() throws IOException, RepositoryException {
final String[] nsPrefix = {};
when(mockNamespaceRegistry.getPrefixes()).thenReturn(nsPrefix);
final Response response = testObj.sparqlQueryForm();
assertTrue(response.getStatus() == OK.getStatusCode());
}

// assertEquals(mockResults, resultSet.getQueryResult());
@Test
public void testRunSparqlQuery() throws RepositoryException, IOException {
when(mockRequest.selectVariant(POSSIBLE_SPARQL_RDF_VARIANTS)).thenReturn(mockVariant);
when(mockVariant.getMediaType()).thenReturn(MediaType.valueOf(contentTypeTextTSV));
final InputStream input = new ByteArrayInputStream(testSparql.getBytes());
final Response response = testObj.runSparqlQuery(input, mockRequest, uriInfo);
assertTrue(response.getStatus() == OK.getStatusCode());
assertEquals(ok(new ResultSetStreamingOutput(new JQLResultSet(mockSession,
new HttpIdentifierTranslator(mockSession, FedoraNodes.class, uriInfo),
mockResults), mockVariant.getMediaType())).build().toString(),
response.toString());
}

@Test
public void testRunSparqlQueryWithHTMLForm() throws RepositoryException {
when(mockRequest.selectVariant(POSSIBLE_SPARQL_RDF_VARIANTS)).thenReturn(mockVariant);
when(mockVariant.getMediaType()).thenReturn(MediaType.valueOf(contentTypeTextTSV));
final Response response = testObj.runSparqlQuery(testSparql, mockRequest, uriInfo);
assertTrue(response.getStatus() == OK.getStatusCode());
assertEquals(ok(new ResultSetStreamingOutput(new JQLResultSet(mockSession,
new HttpIdentifierTranslator(mockSession, FedoraNodes.class, uriInfo),
mockResults), mockVariant.getMediaType())).build().toString(),
response.toString());
}
}

0 comments on commit c3c25fe

Please sign in to comment.