-
Notifications
You must be signed in to change notification settings - Fork 2
/
ContextBuildingJsonLdSerializerTest.java
123 lines (113 loc) · 6.6 KB
/
ContextBuildingJsonLdSerializerTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package cz.cvut.kbss.jsonld.serialization;
import com.github.jsonldjava.utils.JsonUtils;
import cz.cvut.kbss.jopa.vocabulary.RDFS;
import cz.cvut.kbss.jopa.vocabulary.XSD;
import cz.cvut.kbss.jsonld.JsonLd;
import cz.cvut.kbss.jsonld.environment.Generator;
import cz.cvut.kbss.jsonld.environment.Vocabulary;
import cz.cvut.kbss.jsonld.environment.model.Employee;
import cz.cvut.kbss.jsonld.environment.model.Organization;
import cz.cvut.kbss.jsonld.environment.model.Person;
import cz.cvut.kbss.jsonld.environment.model.User;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasItems;
import static org.hamcrest.Matchers.hasKey;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
class ContextBuildingJsonLdSerializerTest extends JsonLdSerializerTestBase {
@BeforeEach
void setUp() {
this.sut = new ContextBuildingJsonLdSerializer(jsonWriter);
}
@Test
void jsonLdContextContainsCorrectAttributeToPropertyMapping() throws Exception {
final User user = Generator.generateUser();
sut.serialize(user);
final Object result = JsonUtils.fromString(jsonWriter.getResult());
assertInstanceOf(Map.class, result);
final Map<String, Object> jsonMap = (Map<String, Object>) result;
assertThat(jsonMap, hasKey(JsonLd.CONTEXT));
assertInstanceOf(Map.class, jsonMap.get(JsonLd.CONTEXT));
final Map<String, String> context = (Map<String, String>) jsonMap.get(JsonLd.CONTEXT);
assertEquals(Vocabulary.FIRST_NAME, context.get(User.getFirstNameField().getName()));
assertEquals(Vocabulary.LAST_NAME, context.get(User.getLastNameField().getName()));
assertEquals(Vocabulary.USERNAME, context.get(User.getUsernameField().getName()));
assertEquals(Vocabulary.IS_ADMIN, context.get(User.class.getDeclaredField("admin").getName()));
}
@Test
void serializeWithContextUsesFieldNamesAsJsonLdAttributeNames() throws Exception {
final User user = Generator.generateUser();
sut.serialize(user);
final Object result = JsonUtils.fromString(jsonWriter.getResult());
assertInstanceOf(Map.class, result);
final Map<String, Object> jsonMap = (Map<String, Object>) result;
assertEquals(user.getFirstName(), jsonMap.get(User.getFirstNameField().getName()));
assertEquals(user.getLastName(), jsonMap.get(User.getLastNameField().getName()));
assertEquals(user.getUsername(), jsonMap.get(User.getUsernameField().getName()));
assertEquals(user.getAdmin(), jsonMap.get(User.class.getDeclaredField("admin").getName()));
}
@Test
void serializeWithContextSupportsTypesAndIdMapping() throws Exception {
final User user = Generator.generateUser();
user.setTypes(Collections.singleton(Generator.generateUri().toString()));
sut.serialize(user);
final Object result = JsonUtils.fromString(jsonWriter.getResult());
assertInstanceOf(Map.class, result);
final Map<String, Object> jsonMap = (Map<String, Object>) result;
assertThat(jsonMap, hasKey(JsonLd.CONTEXT));
assertInstanceOf(Map.class, jsonMap.get(JsonLd.CONTEXT));
final Map<String, String> context = (Map<String, String>) jsonMap.get(JsonLd.CONTEXT);
assertEquals(JsonLd.ID, context.get(Person.class.getDeclaredField("uri").getName()));
assertEquals(JsonLd.TYPE, context.get(User.class.getDeclaredField("types").getName()));
}
@Test
void serializeWithContextBuildsContextForObjectProperty() throws Exception {
final Employee employee = Generator.generateEmployee();
sut.serialize(employee);
final Object result = JsonUtils.fromString(jsonWriter.getResult());
assertInstanceOf(Map.class, result);
final Map<String, Object> jsonMap = (Map<String, Object>) result;
assertThat(jsonMap, hasKey(JsonLd.CONTEXT));
assertInstanceOf(Map.class, jsonMap.get(JsonLd.CONTEXT));
final Map<String, String> context = (Map<String, String>) jsonMap.get(JsonLd.CONTEXT);
assertEquals(Vocabulary.IS_MEMBER_OF, context.get(Employee.getEmployerField().getName()));
assertEquals(Vocabulary.DATE_CREATED,
context.get(Organization.class.getDeclaredField("dateCreated").getName()));
assertEquals(RDFS.LABEL, context.get(Organization.class.getDeclaredField("name").getName()));
assertEquals(Vocabulary.BRAND, context.get(Organization.class.getDeclaredField("brands").getName()));
assertEquals(Vocabulary.DATE_CREATED,
context.get(Organization.class.getDeclaredField("dateCreated").getName()));
}
@Test
void serializeWithContextUsesReferencedEntityFieldNamesAsAttributeNames() throws Exception {
final Employee employee = Generator.generateEmployee();
sut.serialize(employee);
final Object result = JsonUtils.fromString(jsonWriter.getResult());
assertInstanceOf(Map.class, result);
final Map<String, Object> jsonMap = (Map<String, Object>) result;
assertInstanceOf(Map.class, jsonMap.get(Employee.getEmployerField().getName()));
final Map<String, Object> orgMap = (Map<String, Object>) jsonMap.get(Employee.getEmployerField().getName());
assertEquals(employee.getEmployer().getName(),
orgMap.get(Organization.class.getDeclaredField("name").getName()));
assertInstanceOf(Map.class, orgMap.get(Organization.class.getDeclaredField("dateCreated").getName()));
final Map<String, String> dateMap = new HashMap<>();
dateMap.put(JsonLd.VALUE,
DateTimeFormatter.ISO_DATE_TIME.format(employee.getEmployer().getDateCreated().toInstant().atOffset(
ZoneOffset.UTC)));
dateMap.put(JsonLd.TYPE, XSD.DATETIME);
assertEquals(dateMap, orgMap.get(Organization.class.getDeclaredField("dateCreated").getName()));
assertInstanceOf(Collection.class, orgMap.get(Organization.class.getDeclaredField("brands").getName()));
final Collection<String> jsonBrands =
(Collection<String>) orgMap.get(Organization.class.getDeclaredField("brands").getName());
assertEquals(employee.getEmployer().getBrands().size(), jsonBrands.size());
assertThat(jsonBrands, hasItems(employee.getEmployer().getBrands().toArray(new String[]{})));
}
}