/*
* Copyright 2011 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.artificer.test.server.atom.services;
import org.jboss.resteasy.client.ClientResponse;
import org.jboss.resteasy.plugins.providers.atom.Entry;
import org.jboss.resteasy.plugins.providers.atom.Feed;
import org.junit.Assert;
import org.junit.Test;
import org.artificer.common.MediaType;
import org.artificer.atom.ArtificerAtomUtils;
import org.artificer.client.ClientRequest;
import org.w3._1999._02._22_rdf_syntax_ns_.RDF;
import org.w3._2002._07.owl_.Class;
import org.w3._2002._07.owl_.Ontology;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.net.URL;
import java.util.List;
/**
* Unit test for the ontology rest api.
*
* @author eric.wittmann@redhat.com
*/
public class OntologyResourceTest extends AbstractResourceTest {
@Test
public void testCreate() throws Exception {
ClientRequest request = clientRequest("/s-ramp/ontology");
RDF rdf = loadTestRDF("regional");
request.body(MediaType.APPLICATION_RDF_XML_TYPE, rdf);
ClientResponse<Entry> response = request.post(Entry.class);
Entry entry = response.getEntity();
RDF ontology = ArtificerAtomUtils.unwrap(entry, RDF.class);
Assert.assertNotNull(ontology);
assertEquals(rdf, ontology);
}
/**
* Unit test for: https://issues.jboss.org/browse/SRAMP-256
* @throws Exception
*/
@Test
public void testCreate_SRAMP256() throws Exception {
ClientRequest request = clientRequest("/s-ramp/ontology");
RDF rdf = loadTestRDF("SRAMP-256");
request.body(MediaType.APPLICATION_RDF_XML_TYPE, rdf);
try {
request.post(Entry.class);
Assert.fail("Expected an ontology validation error.");
} catch (Exception e) {
Assert.assertEquals("The ontology ID was invalid: SRAMP 256", e.getMessage());
}
}
@Test
public void testGet() throws Exception {
ClientRequest request = clientRequest("/s-ramp/ontology");
// POST the ontology
RDF rdf = loadTestRDF("regional");
request.body(MediaType.APPLICATION_RDF_XML_TYPE, rdf);
ClientResponse<Entry> response = request.post(Entry.class);
Entry entry = response.getEntity();
String uuid = entry.getId().toString().replace("urn:uuid:", "");
// GET the ontology
request = clientRequest("/s-ramp/ontology/" + uuid);
entry = request.get(Entry.class).getEntity();
RDF ontology = ArtificerAtomUtils.unwrap(entry, RDF.class);
Assert.assertNotNull(ontology);
assertEquals(rdf, ontology);
}
@Test
public void testFeed() throws Exception {
// POST the regional ontology
ClientRequest request = clientRequest("/s-ramp/ontology");
RDF rdf = loadTestRDF("regional");
request.body(MediaType.APPLICATION_RDF_XML_TYPE, rdf);
request.post(Entry.class).getEntity();
// POST the colors ontology
request = clientRequest("/s-ramp/ontology");
rdf = loadTestRDF("colors");
request.body(MediaType.APPLICATION_RDF_XML_TYPE, rdf);
request.post(Entry.class).getEntity();
// GET the ontology feed
request = clientRequest("/s-ramp/ontology");
Feed feed = request.get(Feed.class).getEntity();
Assert.assertNotNull(feed);
Assert.assertEquals(2, feed.getEntries().size());
}
/**
* Asserts that two ontologies are equal.
*
* @param expected
* @param actual
*/
private void assertEquals(RDF expected, RDF actual) {
Assert.assertNotNull(expected);
Assert.assertNotNull(actual);
Ontology expectedOntology = expected.getOntology();
Ontology actualOntology = actual.getOntology();
Assert.assertNotNull(expectedOntology);
Assert.assertNotNull(actualOntology);
String expectedBase = null;
String actualBase = null;
Assert.assertEquals(expectedBase, actualBase);
Assert.assertEquals(expectedOntology.getID(), actualOntology.getID());
Assert.assertEquals(expectedOntology.getLabel(), actualOntology.getLabel());
Assert.assertEquals(expectedOntology.getComment(), actualOntology.getComment());
List<Class> expectedClasses = expected.getClazz();
List<Class> actualClasses = actual.getClazz();
Assert.assertEquals(expectedClasses.size(), actualClasses.size());
for (int idx = 0; idx < expectedClasses.size(); idx++) {
Class expectedClass = expectedClasses.get(idx);
Class actualClass = actualClasses.get(idx);
assertEquals(expectedClass, actualClass);
}
}
/**
* @param expectedClass
* @param actualClass
*/
private void assertEquals(Class expectedClass, Class actualClass) {
Assert.assertNotNull(expectedClass);
Assert.assertNotNull(actualClass);
Assert.assertEquals(expectedClass.getID(), actualClass.getID());
Assert.assertEquals(expectedClass.getLabel(), actualClass.getLabel());
Assert.assertEquals(expectedClass.getComment(), actualClass.getComment());
if (expectedClass.getSubClassOf() == null) {
Assert.assertNull(actualClass.getSubClassOf());
} else {
Assert.assertNotNull(actualClass.getSubClassOf());
Assert.assertEquals(expectedClass.getSubClassOf().getResource(), actualClass.getSubClassOf()
.getResource());
}
}
/**
* Loads an RDF by unmarshaling from a test file.
*
* @param testOwlName
*/
private RDF loadTestRDF(String testOwlName) throws Exception {
URL resourceUrl = getClass().getResource("/ontology-files/" + testOwlName + ".owl.xml");
Assert.assertNotNull(resourceUrl);
JAXBContext jaxbContext = JAXBContext.newInstance(RDF.class);
Unmarshaller unMarshaller = jaxbContext.createUnmarshaller();
return (RDF) unMarshaller.unmarshal(resourceUrl);
}
}