NIHVIVO-3542 Create a unit test for the IndividualController, before refactoring.
This commit is contained in:
parent
ca46511f40
commit
45657d6684
1 changed files with 532 additions and 0 deletions
|
@ -0,0 +1,532 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.webapp.controller.individual;
|
||||
|
||||
import static edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary.FS_ALIAS_URL;
|
||||
import static edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary.FS_DOWNLOAD_LOCATION;
|
||||
import static edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary.FS_FILENAME;
|
||||
import static edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary.FS_MIME_TYPE;
|
||||
import static edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary.OWL_THING;
|
||||
import static edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary.RDF_TYPE;
|
||||
import static edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary.VITRO_PUBLIC;
|
||||
import static junit.framework.Assert.assertEquals;
|
||||
import static junit.framework.Assert.fail;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
|
||||
import javax.servlet.ServletContextEvent;
|
||||
import javax.servlet.ServletException;
|
||||
|
||||
import org.apache.log4j.Level;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import stubs.edu.cornell.mannlib.vitro.webapp.beans.IndividualStub;
|
||||
import stubs.edu.cornell.mannlib.vitro.webapp.beans.SelfEditingConfigurationStub;
|
||||
import stubs.edu.cornell.mannlib.vitro.webapp.config.ConfigurationPropertiesStub;
|
||||
import stubs.edu.cornell.mannlib.vitro.webapp.dao.ApplicationDaoStub;
|
||||
import stubs.edu.cornell.mannlib.vitro.webapp.dao.IndividualDaoStub;
|
||||
import stubs.edu.cornell.mannlib.vitro.webapp.dao.MenuDaoStub;
|
||||
import stubs.edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDaoStub;
|
||||
import stubs.edu.cornell.mannlib.vitro.webapp.dao.OntologyDaoStub;
|
||||
import stubs.edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryStub;
|
||||
import stubs.edu.cornell.mannlib.vitro.webapp.utils.NamespaceMapperStub;
|
||||
import stubs.javax.servlet.ServletConfigStub;
|
||||
import stubs.javax.servlet.ServletContextStub;
|
||||
import stubs.javax.servlet.http.HttpServletRequestStub;
|
||||
import stubs.javax.servlet.http.HttpServletResponseStub;
|
||||
import stubs.javax.servlet.http.HttpSessionStub;
|
||||
|
||||
import com.hp.hpl.jena.ontology.OntModel;
|
||||
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
||||
import com.hp.hpl.jena.rdf.model.Property;
|
||||
import com.hp.hpl.jena.rdf.model.Resource;
|
||||
|
||||
import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.ApplicationBean;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.SelfEditingConfiguration;
|
||||
import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties;
|
||||
import edu.cornell.mannlib.vitro.webapp.config.RevisionInfoBean;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerSetup;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualController;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
||||
|
||||
/**
|
||||
* TODO
|
||||
*/
|
||||
public class IndividualControllerInfoTest extends AbstractTestClass {
|
||||
/** The root of the application */
|
||||
private static final String URL_HOME_PAGE = "http://vivo.mydomain.edu";
|
||||
|
||||
/** The page we're testing. */
|
||||
private static final String URL_INDIVIDUAL_PAGE = URL_HOME_PAGE
|
||||
+ "/individual";
|
||||
|
||||
/** The default namespace is based on this page URL! */
|
||||
private static final String DEFAULT_NAMESPACE = URL_INDIVIDUAL_PAGE + "/";
|
||||
|
||||
/** The ID of the Individual we're trying to find. */
|
||||
private static final String ID_INDIVIDUAL_TEST = "testId";
|
||||
|
||||
/** The ID of an Individual that represents a FileBytestream object. */
|
||||
private static final String ID_FILE_BYTESTREAM = "bytesId";
|
||||
|
||||
/** The ID of an Individual that is the surrogate for ID_FILE_BYTESTREAM. */
|
||||
private static final String ID_FILE_SURROGATE = "fileId";
|
||||
|
||||
/** The URI of the Individual we're trying to find. */
|
||||
private static final String URI_INDIVIDUAL_TEST = DEFAULT_NAMESPACE
|
||||
+ ID_INDIVIDUAL_TEST;
|
||||
|
||||
/** The URI of the Individual that represents a FileBytestream object. */
|
||||
private static final String URI_FILE_BYTESTREAM = DEFAULT_NAMESPACE
|
||||
+ ID_FILE_BYTESTREAM;
|
||||
|
||||
/** The URI of the Individual that represents a FileSurrogate object. */
|
||||
private static final String URI_FILE_SURROGATE = DEFAULT_NAMESPACE
|
||||
+ ID_FILE_SURROGATE;
|
||||
|
||||
/** The name of the file bytestream. */
|
||||
private static final String BYTESTREAM_FILENAME = "imageFilename.jpg";
|
||||
/** The direct location of the file bytestream. */
|
||||
private static final String URL_BYTESTREAM_ALIAS = URL_HOME_PAGE + "/file/"
|
||||
+ ID_FILE_BYTESTREAM + "/" + BYTESTREAM_FILENAME;
|
||||
|
||||
/** The Net ID of the User whose profile we're trying to find. */
|
||||
private static final String NETID_USER_TEST = "joeUser";
|
||||
|
||||
private IndividualStub testIndividual;
|
||||
private IndividualStub bytestreamIndividual;
|
||||
private IndividualStub surrogateIndividual;
|
||||
private edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualController controller;
|
||||
private ServletContextStub ctx;
|
||||
private ServletConfigStub config;
|
||||
private HttpSessionStub session;
|
||||
private HttpServletRequestStub req;
|
||||
private HttpServletResponseStub resp;
|
||||
|
||||
private WebappDaoFactoryStub waDao;
|
||||
private ApplicationDaoStub aDao;
|
||||
private MenuDaoStub menuDao;
|
||||
private IndividualDaoStub iDao;
|
||||
private OntologyDaoStub ontDao;
|
||||
private ObjectPropertyStatementDaoStub opsDao;
|
||||
private ConfigurationPropertiesStub props;
|
||||
private NamespaceMapperStub namespaceMapper;
|
||||
|
||||
private File templatesDir;
|
||||
|
||||
@Before
|
||||
public void setup() throws ServletException, IOException {
|
||||
testIndividual = new IndividualStub(URI_INDIVIDUAL_TEST);
|
||||
|
||||
bytestreamIndividual = new IndividualStub(URI_FILE_BYTESTREAM);
|
||||
bytestreamIndividual.addVclass(VITRO_PUBLIC, "FileByteStream",
|
||||
"Bytestream");
|
||||
bytestreamIndividual.addDataPropertyStatement(FS_ALIAS_URL,
|
||||
URL_BYTESTREAM_ALIAS);
|
||||
|
||||
surrogateIndividual = new IndividualStub(URI_FILE_SURROGATE);
|
||||
surrogateIndividual.addVclass(VITRO_PUBLIC, "File", "Surrogate");
|
||||
surrogateIndividual.addDataPropertyStatement(FS_FILENAME,
|
||||
BYTESTREAM_FILENAME);
|
||||
surrogateIndividual
|
||||
.addDataPropertyStatement(FS_MIME_TYPE, "image/jpeg");
|
||||
surrogateIndividual
|
||||
.addPopulatedObjectPropertyStatement(FS_DOWNLOAD_LOCATION,
|
||||
URI_FILE_BYTESTREAM, bytestreamIndividual);
|
||||
|
||||
ctx = new ServletContextStub();
|
||||
|
||||
setLoggerLevel(ConfigurationProperties.class, Level.WARN);
|
||||
props = new ConfigurationPropertiesStub();
|
||||
props.setBean(ctx);
|
||||
|
||||
config = new ServletConfigStub();
|
||||
config.setServletContext(ctx);
|
||||
|
||||
session = new HttpSessionStub();
|
||||
session.setServletContext(ctx);
|
||||
|
||||
namespaceMapper = new NamespaceMapperStub();
|
||||
namespaceMapper.setPrefixForNamespace("mydomain",
|
||||
"http://vivo.mydomain.edu/individual/");
|
||||
ctx.setAttribute("NamespaceMapper", namespaceMapper);
|
||||
|
||||
SelfEditingConfigurationStub sec = new SelfEditingConfigurationStub();
|
||||
session.setAttribute(SelfEditingConfiguration.class.getName(), sec);
|
||||
sec.addAssociatedIndividual(NETID_USER_TEST, testIndividual);
|
||||
|
||||
controller = new edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualController();
|
||||
controller.init(config);
|
||||
|
||||
req = new HttpServletRequestStub();
|
||||
req.setSession(session);
|
||||
|
||||
resp = new HttpServletResponseStub();
|
||||
|
||||
waDao = new WebappDaoFactoryStub();
|
||||
req.setAttribute("webappDaoFactory", waDao);
|
||||
waDao.setDefaultNamespace(DEFAULT_NAMESPACE);
|
||||
|
||||
ApplicationBean appBean = new ApplicationBean();
|
||||
|
||||
aDao = new ApplicationDaoStub();
|
||||
aDao.setApplicationBean(appBean);
|
||||
waDao.setApplicationDao(aDao);
|
||||
|
||||
menuDao = new MenuDaoStub();
|
||||
waDao.setMenuDao(menuDao);
|
||||
|
||||
iDao = new IndividualDaoStub();
|
||||
waDao.setIndividualDao(iDao);
|
||||
iDao.addIndividual(testIndividual);
|
||||
iDao.addIndividual(bytestreamIndividual);
|
||||
iDao.addIndividual(surrogateIndividual);
|
||||
|
||||
ontDao = new OntologyDaoStub();
|
||||
waDao.setOntologyDao(ontDao);
|
||||
|
||||
opsDao = new ObjectPropertyStatementDaoStub();
|
||||
waDao.setObjectPropertyStatementDao(opsDao);
|
||||
opsDao.addObjectPropertyStatement(URI_FILE_SURROGATE,
|
||||
FS_DOWNLOAD_LOCATION, URI_FILE_BYTESTREAM);
|
||||
|
||||
OntModel ontModel = ModelFactory.createOntologyModel();
|
||||
addObjectProperty(ontModel, URI_INDIVIDUAL_TEST, RDF_TYPE, OWL_THING);
|
||||
addObjectProperty(ontModel, URI_FILE_BYTESTREAM, RDF_TYPE,
|
||||
VitroVocabulary.FS_BYTESTREAM_CLASS);
|
||||
req.setAttribute("jenaOntModel", ontModel);
|
||||
|
||||
templatesDir = createTempDirectory("templates");
|
||||
ctx.setRealPath("/templates/freemarker", templatesDir.getAbsolutePath());
|
||||
createFile(templatesDir, "error-titled.ftl", "Bogus error-titled.ftl");
|
||||
createFile(templatesDir, "individual-help.ftl",
|
||||
"Bogus individual-help.ftl");
|
||||
createFile(templatesDir, "page.ftl", "Bogus page.ftl: ${body}");
|
||||
createFile(templatesDir, "pageSetup.ftl", "Bogus page setup.ftl");
|
||||
createFile(templatesDir, "individual.ftl",
|
||||
"Individual page: ${individual.uri}");
|
||||
|
||||
new FreemarkerSetup().contextInitialized(new ServletContextEvent(ctx));
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setLoggerLevels() {
|
||||
setLoggerLevel(RevisionInfoBean.class, Level.ERROR);
|
||||
setLoggerLevel(FreemarkerSetup.class, Level.WARN);
|
||||
// setLoggerLevel(IndividualController.class, Level.DEBUG);
|
||||
}
|
||||
|
||||
@After
|
||||
public void teardown() {
|
||||
purgeDirectory(templatesDir);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Tests - locate by parameter
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
/** /individual?id=individualLocalName */
|
||||
@Ignore
|
||||
// Doesn't work; won't fix.
|
||||
@Test
|
||||
public void findIndividualByIdParameter() {
|
||||
req.setRequestUrl(url(URL_INDIVIDUAL_PAGE));
|
||||
req.addParameter("id", ID_INDIVIDUAL_TEST);
|
||||
runTheRequest();
|
||||
assertResponseContains("by id parameter", "Individual page: "
|
||||
+ URI_INDIVIDUAL_TEST);
|
||||
}
|
||||
|
||||
/** /individual?entityId=individualLocalName */
|
||||
@Ignore
|
||||
// Doesn't work; won't fix.
|
||||
@Test
|
||||
public void findIndividualByEntityIdParameter() {
|
||||
req.setRequestUrl(url(URL_INDIVIDUAL_PAGE));
|
||||
req.addParameter("entityId", ID_INDIVIDUAL_TEST);
|
||||
runTheRequest();
|
||||
assertResponseContains("by id parameter", "Individual page: "
|
||||
+ URI_INDIVIDUAL_TEST);
|
||||
}
|
||||
|
||||
/** /individual?uri=urlencodedURI */
|
||||
@Test
|
||||
public void findIndividualByUriParameter() {
|
||||
req.setRequestUrl(url(URL_INDIVIDUAL_PAGE));
|
||||
req.addParameter("uri", URI_INDIVIDUAL_TEST);
|
||||
runTheRequest();
|
||||
assertResponseContains("by uri parameter", "Individual page: "
|
||||
+ URI_INDIVIDUAL_TEST);
|
||||
}
|
||||
|
||||
/** /individual?netId=bdc34 */
|
||||
@Test
|
||||
public void findIndividualByNetIdParameter() {
|
||||
req.setRequestUrl(url(URL_INDIVIDUAL_PAGE));
|
||||
req.addParameter("netId", NETID_USER_TEST);
|
||||
runTheRequest();
|
||||
assertResponseContains("by uri parameter", "Individual page: "
|
||||
+ URI_INDIVIDUAL_TEST);
|
||||
}
|
||||
|
||||
/** /individual?netid=bdc34 */
|
||||
@Test
|
||||
public void findIndividualByNetidParameter() {
|
||||
req.setRequestUrl(url(URL_INDIVIDUAL_PAGE));
|
||||
req.addParameter("netid", NETID_USER_TEST);
|
||||
runTheRequest();
|
||||
assertResponseContains("by uri parameter", "Individual page: "
|
||||
+ URI_INDIVIDUAL_TEST);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Tests - miscellaneous
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
/** /display/localname */
|
||||
@Test
|
||||
public void findIndividualByDisplayPath() {
|
||||
req.setRequestUrl(url(URL_HOME_PAGE + "/display/" + ID_INDIVIDUAL_TEST));
|
||||
runTheRequest();
|
||||
assertResponseContains("by uri parameter", "Individual page: "
|
||||
+ URI_INDIVIDUAL_TEST);
|
||||
}
|
||||
|
||||
/** /individual/nsPrefix/localname */
|
||||
@Test
|
||||
public void findByPrefixAndLocalname() {
|
||||
req.setRequestUrl(url(DEFAULT_NAMESPACE + "mydomain/"
|
||||
+ ID_INDIVIDUAL_TEST));
|
||||
runTheRequest();
|
||||
assertResponseContains("by prefix and localname", "Individual page: "
|
||||
+ URI_INDIVIDUAL_TEST);
|
||||
}
|
||||
|
||||
/** /individual/a/b/c fails. */
|
||||
@Test
|
||||
public void unrecognizedPath() {
|
||||
req.setRequestUrl(url(DEFAULT_NAMESPACE + "this/that/theOther"));
|
||||
runTheRequest();
|
||||
assertResponseContains("unrecognized path", "error-titled.ftl");
|
||||
}
|
||||
|
||||
/** /display/localname but no such individual */
|
||||
@Test
|
||||
public void findNoSuchIndividualByDisplayPath() {
|
||||
req.setRequestUrl(url(URL_HOME_PAGE + "/display/" + "bogusID"));
|
||||
req.addParameter("netid", NETID_USER_TEST);
|
||||
runTheRequest();
|
||||
assertResponseContains("by uri parameter", "error-titled.ftl");
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Tests - redirect a FileBytestream
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
@Test
|
||||
public void redirectAFileBytestreamIndividual() {
|
||||
req.setRequestUrl(url(URL_HOME_PAGE + "/display/" + ID_FILE_BYTESTREAM));
|
||||
runTheRequest();
|
||||
assertRedirect("redirect file bytestream", URL_BYTESTREAM_ALIAS);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Tests - redirect from a Linked Data path
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
/** /individual/localname, accept=RDF redirects to /individual/id/id.rdf */
|
||||
@Test
|
||||
public void redirectFromLinkedDataPathAcceptRdf() {
|
||||
req.setRequestUrl(url(DEFAULT_NAMESPACE + ID_INDIVIDUAL_TEST));
|
||||
req.setHeader("accept", VitroHttpServlet.RDFXML_MIMETYPE);
|
||||
runTheRequest();
|
||||
assertRedirect("by linked data path, accept RDF",
|
||||
redirectUrlForRdfStream(ID_INDIVIDUAL_TEST, ".rdf"));
|
||||
}
|
||||
|
||||
/** /individual/localname, accept=RDF redirects to /individual/id/id.rdf */
|
||||
@Test
|
||||
public void redirectFromLinkedDataPathAcceptN3() {
|
||||
req.setRequestUrl(url(DEFAULT_NAMESPACE + ID_INDIVIDUAL_TEST));
|
||||
req.setHeader("accept", VitroHttpServlet.N3_MIMETYPE);
|
||||
runTheRequest();
|
||||
assertRedirect("by linked data path, accept RDF",
|
||||
redirectUrlForRdfStream(ID_INDIVIDUAL_TEST, ".n3"));
|
||||
}
|
||||
|
||||
/** /individual/localname, accept=RDF redirects to /individual/id/id.rdf */
|
||||
@Test
|
||||
public void redirectFromLinkedDataPathAcceptTurtle() {
|
||||
req.setRequestUrl(url(DEFAULT_NAMESPACE + ID_INDIVIDUAL_TEST));
|
||||
req.setHeader("accept", VitroHttpServlet.TTL_MIMETYPE);
|
||||
runTheRequest();
|
||||
assertRedirect("by linked data path, accept RDF",
|
||||
redirectUrlForRdfStream(ID_INDIVIDUAL_TEST, ".ttl"));
|
||||
}
|
||||
|
||||
/** /individual/localname, no accept, redirects to /display/id */
|
||||
@Test
|
||||
public void redirectFromLinkedDataPathNoAccept() {
|
||||
req.setRequestUrl(url(DEFAULT_NAMESPACE + ID_INDIVIDUAL_TEST));
|
||||
runTheRequest();
|
||||
assertRedirect("by linked data path, no accept", "/display/"
|
||||
+ ID_INDIVIDUAL_TEST);
|
||||
}
|
||||
|
||||
/**
|
||||
* If the accept header is set to a recognized value, but not one of the
|
||||
* onese that we like, treat the same as no accept.
|
||||
*/
|
||||
@Test
|
||||
public void redirectFromLinkedDataPathAcceptStrange() {
|
||||
req.setRequestUrl(url(DEFAULT_NAMESPACE + ID_INDIVIDUAL_TEST));
|
||||
req.setHeader("accept", "application/json");
|
||||
runTheRequest();
|
||||
assertRedirect("by linked data path, no accept", "/display/"
|
||||
+ ID_INDIVIDUAL_TEST);
|
||||
}
|
||||
|
||||
/**
|
||||
* If the accept header is set to an unrecognized value, treat the same as
|
||||
* no accept.
|
||||
*/
|
||||
@Test
|
||||
public void redirectFromLinkedDataPathAcceptGarbage() {
|
||||
req.setRequestUrl(url(DEFAULT_NAMESPACE + ID_INDIVIDUAL_TEST));
|
||||
req.setHeader("accept", "a/b/c");
|
||||
runTheRequest();
|
||||
assertRedirect("by linked data path, no accept", "/display/"
|
||||
+ ID_INDIVIDUAL_TEST);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Tests - satisfy requests for RDF formats.
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
@Test
|
||||
public void getRdfByUriAndFormatParameters() {
|
||||
req.setRequestUrl(url(URL_INDIVIDUAL_PAGE));
|
||||
req.addParameter("uri", URI_INDIVIDUAL_TEST);
|
||||
req.addParameter("format", "rdfxml");
|
||||
runTheRequest();
|
||||
assertResponseContains("RDF by uri and format parameters", "<rdf:RDF");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getN3ByUriAndFormatParameters() {
|
||||
req.setRequestUrl(url(URL_INDIVIDUAL_PAGE));
|
||||
req.addParameter("uri", URI_INDIVIDUAL_TEST);
|
||||
req.addParameter("format", "n3");
|
||||
runTheRequest();
|
||||
assertResponseContains("N3 by uri and format parameters",
|
||||
"@prefix vitro:");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTurtleByUriAndFormatParameters() {
|
||||
req.setRequestUrl(url(URL_INDIVIDUAL_PAGE));
|
||||
req.addParameter("uri", URI_INDIVIDUAL_TEST);
|
||||
req.addParameter("format", "ttl");
|
||||
runTheRequest();
|
||||
assertResponseContains("Turtle by uri and format parameters",
|
||||
"@prefix vitro:");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void unrecognizedFormatParameter() {
|
||||
req.setRequestUrl(url(URL_INDIVIDUAL_PAGE));
|
||||
req.addParameter("uri", URI_INDIVIDUAL_TEST);
|
||||
req.addParameter("format", "bogus");
|
||||
runTheRequest();
|
||||
assertResponseContains("unrecognized format means HTML response",
|
||||
"Individual page: " + URI_INDIVIDUAL_TEST);
|
||||
}
|
||||
|
||||
/** http://vivo.cornell.edu/individual/n23/n23.rdf */
|
||||
@Test
|
||||
public void getRdfByStreamRequest() {
|
||||
req.setRequestUrl(absoluteUrlForRdfStream(ID_INDIVIDUAL_TEST, ".rdf"));
|
||||
runTheRequest();
|
||||
assertResponseContains("RDF by RDF stream request", "<rdf:RDF");
|
||||
}
|
||||
|
||||
/** http://vivo.cornell.edu/individual/n23/n23.n3 */
|
||||
@Test
|
||||
public void getN3ByStreamRequest() {
|
||||
req.setRequestUrl(absoluteUrlForRdfStream(ID_INDIVIDUAL_TEST, ".n3"));
|
||||
runTheRequest();
|
||||
assertResponseContains("N3 by RDF stream request", "@prefix vitro:");
|
||||
}
|
||||
|
||||
/** http://vivo.cornell.edu/individual/n23/n23.rdf */
|
||||
@Test
|
||||
public void getTurtleByStreamRequest() {
|
||||
req.setRequestUrl(absoluteUrlForRdfStream(ID_INDIVIDUAL_TEST, ".ttl"));
|
||||
runTheRequest();
|
||||
assertResponseContains("Turtle by RDF stream request", "@prefix vitro:");
|
||||
}
|
||||
|
||||
/** http://vivo.cornell.edu/individual/n23/n23.bogus is an error */
|
||||
@Test
|
||||
public void unrecognizedFormatForRdfStreamRequest() {
|
||||
req.setRequestUrl(absoluteUrlForRdfStream(ID_INDIVIDUAL_TEST, ".bogus"));
|
||||
runTheRequest();
|
||||
assertResponseContains("Unrecognized RDF stream request",
|
||||
"error-titled.ftl");
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Helper methods
|
||||
// ----------------------------------------------------------------------
|
||||
|
||||
private void addObjectProperty(OntModel ontModel, String subjectUri,
|
||||
String propertyUri, String objectUri) {
|
||||
Resource s = ontModel.getResource(subjectUri);
|
||||
Property p = ontModel.getProperty(propertyUri);
|
||||
Resource o = ontModel.getResource(objectUri);
|
||||
ontModel.add(s, p, o);
|
||||
}
|
||||
|
||||
/** /individual/n23/n23.rdf, or the like */
|
||||
private String redirectUrlForRdfStream(String id, String extension) {
|
||||
return "/individual/" + id + "/" + id + extension;
|
||||
}
|
||||
|
||||
/** http://vivo.mydomain.edu/individual/n23/n23.rdf, or the like */
|
||||
private URL absoluteUrlForRdfStream(String id, String extension) {
|
||||
return url(DEFAULT_NAMESPACE + id + "/" + id + extension);
|
||||
}
|
||||
|
||||
private void runTheRequest() {
|
||||
try {
|
||||
controller.doGet(req, resp);
|
||||
} catch (IOException e) {
|
||||
fail("Error while running the controller: " + e.toString());
|
||||
} catch (ServletException e) {
|
||||
fail("Error while running the controller: " + e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
private void assertResponseContains(String message, String outputFragment) {
|
||||
String output = resp.getOutput();
|
||||
if (!output.contains(outputFragment)) {
|
||||
fail(message + ": output did not contain '" + outputFragment
|
||||
+ "': output was '" + output + "'");
|
||||
}
|
||||
}
|
||||
|
||||
private void assertRedirect(String message, String redirectUrl) {
|
||||
if (!resp.containsHeader("Location")) {
|
||||
fail(message + ":, Not redirected - no Location header");
|
||||
}
|
||||
String actual = resp.getHeader("Location");
|
||||
assertEquals(message, redirectUrl, actual);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue