From f8eec954aa74df33b8b32055469842f1a38e3811 Mon Sep 17 00:00:00 2001 From: Martin Ledvinka Date: Mon, 1 Aug 2016 16:32:19 +0200 Subject: [PATCH] Testing JSON-LD deserialization. --- pom.xml | 7 ++ .../JsonLdDeserializationTest.java | 79 +++++++++++++++---- .../jackson/environment/model/User.java | 13 +++ src/test/resources/collectionOfInstances.json | 38 +++++++++ .../resources/objectWithDataProperties.json | 2 +- .../objectWithSingularReference.json | 19 +++-- 6 files changed, 132 insertions(+), 26 deletions(-) create mode 100644 src/test/resources/collectionOfInstances.json diff --git a/pom.xml b/pom.xml index 0f949a2..4026b35 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,7 @@ 1.10.19 1.1.6 2.8.1 + 0.8.3 @@ -43,6 +44,12 @@ 0.0.2 + + com.github.jsonld-java + jsonld-java + ${com.github.jsonld-java.version} + + com.fasterxml.jackson.core diff --git a/src/test/java/cz/cvut/kbss/jsonld/jackson/environment/deserialization/JsonLdDeserializationTest.java b/src/test/java/cz/cvut/kbss/jsonld/jackson/environment/deserialization/JsonLdDeserializationTest.java index 2a3c952..be3b3ca 100644 --- a/src/test/java/cz/cvut/kbss/jsonld/jackson/environment/deserialization/JsonLdDeserializationTest.java +++ b/src/test/java/cz/cvut/kbss/jsonld/jackson/environment/deserialization/JsonLdDeserializationTest.java @@ -1,53 +1,98 @@ package cz.cvut.kbss.jsonld.jackson.environment.deserialization; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import cz.cvut.kbss.jsonld.jackson.JsonLdModule; import cz.cvut.kbss.jsonld.jackson.environment.Environment; import cz.cvut.kbss.jsonld.jackson.environment.model.Employee; +import cz.cvut.kbss.jsonld.jackson.environment.model.Organization; import cz.cvut.kbss.jsonld.jackson.environment.model.User; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import java.net.URI; +import java.util.HashMap; +import java.util.List; +import java.util.Map; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.*; public class JsonLdDeserializationTest { + private static final URI HALSEY_URI = URI + .create("http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#Catherine+Halsey"); + private static final URI LASKY_URI = URI + .create("http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#Thomas+Lasky"); + private static final URI PALMER_URI = URI + .create("http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#Sarah+Palmer"); + + private static final Map USERS = initUsers(); + + private static final URI ORG_URI = URI.create("http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#UNSC"); + private static final String ORG_NAME = "UNSC"; + private static final String[] ORG_BRANDS = {"Spartan-II", "Mjolnir IV"}; + private ObjectMapper objectMapper; + private static Map initUsers() { + final Map map = new HashMap<>(); + map.put(HALSEY_URI, new User(HALSEY_URI, "Catherine", "Halsey", "halsey@unsc.org", true)); + map.put(LASKY_URI, new User(LASKY_URI, "Thomas", "Lasky", "lasky@unsc.org", false)); + map.put(PALMER_URI, new User(PALMER_URI, "Sarah", "Palmer", "palmer@unsc.org", false)); + return map; + } + @Before public void setUp() { this.objectMapper = new ObjectMapper(); objectMapper.registerModule(new JsonLdModule()); } - @Ignore @Test public void testDeserializeInstanceWithDataProperties() throws Exception { final String input = Environment.readData("objectWithDataProperties.json"); - final User expected = new User(); - expected.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#787088083")); - expected.setFirstName("Catherine"); - expected.setLastName("Halsey"); - expected.setUsername("halsey@unsc.org"); - expected.setAdmin(true); final User result = objectMapper.readValue(input, User.class); assertNotNull(result); - assertEquals(expected.getUri(), result.getUri()); - assertEquals(expected.getFirstName(), result.getFirstName()); - assertEquals(expected.getLastName(), result.getLastName()); - assertEquals(expected.getUsername(), result.getUsername()); - assertEquals(expected.getAdmin(), result.getAdmin()); + final User expected = USERS.get(HALSEY_URI); + verifyUserAttributes(expected, result); + } + + private void verifyUserAttributes(User expected, User actual) { + assertEquals(expected.getUri(), actual.getUri()); + assertEquals(expected.getFirstName(), actual.getFirstName()); + assertEquals(expected.getLastName(), actual.getLastName()); + assertEquals(expected.getUsername(), actual.getUsername()); + assertEquals(expected.getAdmin(), actual.getAdmin()); } - @Ignore @Test public void testDeserializeInstanceWithSingularObjectProperty() throws Exception { final String input = Environment.readData("objectWithSingularReference.json"); final Employee result = objectMapper.readValue(input, Employee.class); - // TODO + verifyUserAttributes(USERS.get(HALSEY_URI), result); + assertNotNull(result.getEmployer()); + verifyOrganizationAttributes(result.getEmployer()); + } + + private void verifyOrganizationAttributes(Organization actual) { + assertEquals(ORG_URI, actual.getUri()); + assertEquals(ORG_NAME, actual.getName()); + assertNotNull(actual.getDateCreated()); + for (String b : ORG_BRANDS) { + assertTrue(actual.getBrands().contains(b)); + } + } + + @Test + public void testDeserializeCollectionOfInstances() throws Exception { + final String input = Environment.readData("collectionOfInstances.json"); + final List result = objectMapper.readValue(input, new TypeReference>() { + }); + assertNotNull(result); + assertFalse(result.isEmpty()); + result.forEach(e -> { + final User expected = USERS.get(e.getUri()); + verifyUserAttributes(expected, e); + }); } } diff --git a/src/test/java/cz/cvut/kbss/jsonld/jackson/environment/model/User.java b/src/test/java/cz/cvut/kbss/jsonld/jackson/environment/model/User.java index 7073e86..a1c908d 100644 --- a/src/test/java/cz/cvut/kbss/jsonld/jackson/environment/model/User.java +++ b/src/test/java/cz/cvut/kbss/jsonld/jackson/environment/model/User.java @@ -5,6 +5,8 @@ import cz.cvut.kbss.jopa.model.annotations.OWLDataProperty; import cz.cvut.kbss.jsonld.jackson.environment.Vocabulary; +import java.net.URI; + @OWLClass(iri = Vocabulary.USER) public class User extends Person { @@ -14,6 +16,17 @@ public class User extends Person { @OWLAnnotationProperty(iri = Vocabulary.IS_ADMIN) private Boolean admin; + public User() { + } + + public User(URI uri, String firstName, String lastName, String username, Boolean admin) { + setUri(uri); + setFirstName(firstName); + setLastName(lastName); + this.username = username; + this.admin = admin; + } + public String getUsername() { return username; } diff --git a/src/test/resources/collectionOfInstances.json b/src/test/resources/collectionOfInstances.json new file mode 100644 index 0000000..e6f7dc1 --- /dev/null +++ b/src/test/resources/collectionOfInstances.json @@ -0,0 +1,38 @@ +[ + { + "@id": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#Catherine+Halsey", + "@type": [ + "http://onto.fel.cvut.cz/ontologies/ufo/Person", + "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/Employee", + "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/User" + ], + "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/isAdmin": true, + "http://xmlns.com/foaf/0.1/accountName": "halsey@unsc.org", + "http://xmlns.com/foaf/0.1/firstName": "Catherine", + "http://xmlns.com/foaf/0.1/lastName": "Halsey" + }, + { + "@id": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#Thomas+Lasky", + "@type": [ + "http://onto.fel.cvut.cz/ontologies/ufo/Person", + "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/Employee", + "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/User" + ], + "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/isAdmin": false, + "http://xmlns.com/foaf/0.1/accountName": "lasky@unsc.org", + "http://xmlns.com/foaf/0.1/firstName": "Thomas", + "http://xmlns.com/foaf/0.1/lastName": "Lasky" + }, + { + "@id": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#Sarah+Palmer", + "@type": [ + "http://onto.fel.cvut.cz/ontologies/ufo/Person", + "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/Employee", + "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/User" + ], + "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/isAdmin": false, + "http://xmlns.com/foaf/0.1/accountName": "palmer@unsc.org", + "http://xmlns.com/foaf/0.1/firstName": "Sarah", + "http://xmlns.com/foaf/0.1/lastName": "Palmer" + } +] diff --git a/src/test/resources/objectWithDataProperties.json b/src/test/resources/objectWithDataProperties.json index 92a5515..24c7321 100644 --- a/src/test/resources/objectWithDataProperties.json +++ b/src/test/resources/objectWithDataProperties.json @@ -5,7 +5,7 @@ "accountName": "http://xmlns.com/foaf/0.1/accountName", "isAdmin": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/isAdmin" }, - "@id": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#787088083", + "@id": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#Catherine+Halsey", "@type": [ "http://onto.fel.cvut.cz/ontologies/ufo/Person", "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/User" diff --git a/src/test/resources/objectWithSingularReference.json b/src/test/resources/objectWithSingularReference.json index 0f31b67..9300747 100644 --- a/src/test/resources/objectWithSingularReference.json +++ b/src/test/resources/objectWithSingularReference.json @@ -5,21 +5,24 @@ "accountName": "http://xmlns.com/foaf/0.1/accountName", "isAdmin": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/isAdmin" }, - "@id": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#-697813743", + "@id": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#Catherine+Halsey", "@type": [ "http://onto.fel.cvut.cz/ontologies/ufo/Person", "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/Employee", "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/User" ], - "isAdmin": false, + "isAdmin": true, "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/isMemberOf": { - "@id": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#-82218522", + "@id": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld#UNSC", "@type": "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/Organization", - "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/brand": "Brandy0", + "http://krizik.felk.cvut.cz/ontologies/jaxb-jsonld/brand": [ + "Spartan-II", + "Mjolnir IV" + ], "http://purl.org/dc/terms/created": "Fri Jul 29 14:52:04 CEST 2016", - "http://www.w3.org/2000/01/rdf-schema#label": "Organization291065182" + "http://www.w3.org/2000/01/rdf-schema#label": "UNSC" }, - "accountName": "user647104078", - "firstName": "FirstName647104078", - "lastName": "LastName647104078" + "accountName": "halsey@unsc.org", + "firstName": "Catherine", + "lastName": "Halsey" }