-
Notifications
You must be signed in to change notification settings - Fork 14
/
ExplicitDatatypesRunner.java
89 lines (72 loc) · 3.52 KB
/
ExplicitDatatypesRunner.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
package cz.cvut.kbss.jopa.test.runner;
import cz.cvut.kbss.jopa.test.OWLClassM;
import cz.cvut.kbss.jopa.test.OWLClassX;
import cz.cvut.kbss.jopa.test.Vocabulary;
import cz.cvut.kbss.jopa.test.environment.DataAccessor;
import cz.cvut.kbss.jopa.test.environment.PersistenceFactory;
import cz.cvut.kbss.jopa.test.environment.Quad;
import cz.cvut.kbss.jopa.vocabulary.RDF;
import cz.cvut.kbss.jopa.vocabulary.XSD;
import cz.cvut.kbss.ontodriver.model.Literal;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import java.net.URI;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import static org.junit.jupiter.api.Assertions.assertEquals;
public abstract class ExplicitDatatypesRunner extends BaseRunner {
private static final String VALUE = "P1Y";
public ExplicitDatatypesRunner(Logger logger, PersistenceFactory persistenceFactory, DataAccessor dataAccessor) {
super(logger, persistenceFactory, dataAccessor);
}
@Test
public void persistSupportsSavingValueOfAttributeWithExplicitDatatype() {
this.em = getEntityManager("persistSupportsSavingValueOfAttributeWithExplicitDatatype", false);
entityM.setExplicitDatatype(VALUE);
transactional(() -> em.persist(entityM));
verifyValueDatatype(URI.create(entityM.getKey()), Vocabulary.p_m_explicitDatatype, XSD.DURATION);
}
@Test
public void readSupportsValuesWithExplicitDatatype() throws Exception {
this.em = getEntityManager("readSupportsValuesWithExplicitDatatype", false);
persistTestData(Arrays.asList(
new Quad(URI.create(entityM.getKey()), URI.create(RDF.TYPE), URI.create(Vocabulary.C_OWL_CLASS_M)),
new Quad(URI.create(entityM.getKey()), URI.create(Vocabulary.p_m_explicitDatatype), new Literal(VALUE, XSD.DURATION))
), em);
final OWLClassM result = findRequired(OWLClassM.class, entityM.getKey());
assertEquals(VALUE, result.getExplicitDatatype());
}
@Test
public void updatingExplicitDatatypeValuesIsSupported() {
this.em = getEntityManager("updatingExplicitDatatypeValuesIsSupported", true);
entityM.setExplicitDatatype(VALUE);
persist(entityM);
final String newValue = "PT130S";
transactional(() -> {
final OWLClassM toUpdate = findRequired(OWLClassM.class, entityM.getKey());
toUpdate.setExplicitDatatype(newValue);
});
final OWLClassM cachedResult = findRequired(OWLClassM.class, entityM.getKey());
assertEquals(newValue, cachedResult.getExplicitDatatype());
em.getEntityManagerFactory().getCache().evictAll();
em.clear();
final OWLClassM result = findRequired(OWLClassM.class, entityM.getKey());
assertEquals(newValue, result.getExplicitDatatype());
}
@Test
public void pluralAttributesWithExplicitDatatypeAreSupported() {
this.em = getEntityManager("pluralAttributesWithExplicitDatatypeAreSupported", false);
final OWLClassX entity = new OWLClassX();
final Set<String> values = IntStream.range(0, 5)
.mapToObj(i -> LocalTime.of(i + 1, i + 1).format(DateTimeFormatter.ISO_TIME))
.collect(Collectors.toSet());
entity.setExplicitDatatypes(values);
persist(entity);
final OWLClassX result = findRequired(OWLClassX.class, entity.getUri());
assertEquals(values, result.getExplicitDatatypes());
}
}