Skip to content

Package: UpdateOperationsMultiContextRunner

UpdateOperationsMultiContextRunner

nameinstructionbranchcomplexitylinemethod
UpdateOperationsMultiContextRunner(Logger, PersistenceFactory, DataAccessor)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
lambda$0(Descriptor, Descriptor)
M: 0 C: 13
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
lambda$1(OWLClassC, Descriptor, ObjectPropertyCollectionDescriptor)
M: 0 C: 24
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
lambda$2(ObjectPropertyCollectionDescriptor, OWLClassA)
M: 0 C: 7
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
lambda$3(ObjectPropertyCollectionDescriptor, OWLClassA)
M: 0 C: 7
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
lambda$4(Descriptor, Descriptor)
M: 0 C: 13
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
lambda$5(Descriptor, OWLClassA, Descriptor)
M: 0 C: 18
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
persistCWithLists(OWLClassC, Descriptor, ObjectPropertyCollectionDescriptor)
M: 0 C: 8
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
testUpdateAddToPropertiesInContext()
M: 0 C: 103
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 20
100%
M: 0 C: 1
100%
testUpdateAddToReferencedListInContext()
M: 0 C: 128
100%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 0 C: 24
100%
M: 0 C: 1
100%
testUpdateAddToSimpleListInContext()
M: 0 C: 128
100%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 0 C: 24
100%
M: 0 C: 1
100%
testUpdateDataPropertyInContext()
M: 0 C: 74
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 15
100%
M: 0 C: 1
100%
testUpdateFieldInMappedSuperclassInContext()
M: 0 C: 139
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 27
100%
M: 0 C: 1
100%
testUpdateObjectPropertyInContextWithAssertionInContext()
M: 0 C: 87
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 15
100%
M: 0 C: 1
100%
testUpdateObjectPropertyToDifferentContext()
M: 0 C: 112
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 22
100%
M: 0 C: 1
100%
testUpdatePlainIdentifierObjectPropertyValueInContext()
M: 0 C: 74
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testUpdateRemoveFromReferencedListInContext()
M: 0 C: 132
100%
M: 0 C: 6
100%
M: 0 C: 4
100%
M: 0 C: 28
100%
M: 0 C: 1
100%
testUpdateRemoveFromSimpleListInContext()
M: 0 C: 101
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 18
100%
M: 0 C: 1
100%

Coverage

1: /**
2: * Copyright (C) 2020 Czech Technical University in Prague
3: *
4: * This program is free software: you can redistribute it and/or modify it under
5: * the terms of the GNU General Public License as published by the Free Software
6: * Foundation, either version 3 of the License, or (at your option) any
7: * later version.
8: *
9: * This program is distributed in the hope that it will be useful, but WITHOUT
10: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12: * details. You should have received a copy of the GNU General Public License
13: * along with this program. If not, see <http://www.gnu.org/licenses/>.
14: */
15: package cz.cvut.kbss.jopa.test.runner;
16:
17: import cz.cvut.kbss.jopa.model.descriptors.Descriptor;
18: import cz.cvut.kbss.jopa.model.descriptors.EntityDescriptor;
19: import cz.cvut.kbss.jopa.model.descriptors.ObjectPropertyCollectionDescriptor;
20: import cz.cvut.kbss.jopa.test.*;
21: import cz.cvut.kbss.jopa.test.environment.DataAccessor;
22: import cz.cvut.kbss.jopa.test.environment.Generators;
23: import cz.cvut.kbss.jopa.test.environment.PersistenceFactory;
24: import cz.cvut.kbss.jopa.test.environment.TestEnvironmentUtils;
25: import org.junit.jupiter.api.Test;
26: import org.slf4j.Logger;
27:
28: import java.net.URI;
29: import java.util.ArrayList;
30: import java.util.Collections;
31: import java.util.Iterator;
32: import java.util.List;
33:
34: import static org.junit.jupiter.api.Assertions.*;
35:
36:
37: public abstract class UpdateOperationsMultiContextRunner extends BaseRunner {
38:
39: public UpdateOperationsMultiContextRunner(Logger logger, PersistenceFactory persistenceFactory,
40: DataAccessor dataAccessor) {
41: super(logger, persistenceFactory, dataAccessor);
42: }
43:
44: @Test
45: void testUpdateDataPropertyInContext() throws Exception {
46: this.em = getEntityManager("MultiUpdateDataPropertyInContext", false);
47: final Descriptor aDescriptor = new EntityDescriptor(CONTEXT_ONE);
48: aDescriptor.addAttributeContext(OWLClassA.class.getDeclaredField("stringAttribute"), CONTEXT_TWO);
49: em.getTransaction().begin();
50: em.persist(entityA, aDescriptor);
51: em.getTransaction().commit();
52:
53: em.getTransaction().begin();
54: final OWLClassA a = findRequired(OWLClassA.class, entityA.getUri(), aDescriptor);
55: final String newAttValue = "newStringAttributeValue";
56: a.setStringAttribute(newAttValue);
57: em.getTransaction().commit();
58:
59: final OWLClassA resA = findRequired(OWLClassA.class, entityA.getUri(), aDescriptor);
60: assertEquals(newAttValue, resA.getStringAttribute());
61: assertEquals(entityA.getTypes(), resA.getTypes());
62: }
63:
64: @Test
65: void testUpdateObjectPropertyToDifferentContext() throws Exception {
66: this.em = getEntityManager("MultiUpdateObjectPropertyToDifferent", false);
67: final Descriptor dDescriptor = new EntityDescriptor();
68: final Descriptor aDescriptor = new EntityDescriptor(CONTEXT_ONE);
69: dDescriptor.addAttributeDescriptor(OWLClassD.getOwlClassAField(), aDescriptor);
70: transactional(() -> {
71: em.persist(entityD, dDescriptor);
72: em.persist(entityA, aDescriptor);
73: });
74:
75: final OWLClassD d = findRequired(OWLClassD.class, entityD.getUri(), dDescriptor);
76: assertNotNull(d.getOwlClassA());
77: em.getTransaction().begin();
78: final OWLClassA newA = new OWLClassA();
79: newA.setUri(URI.create("http://krizik.felk.cvut.cz/jopa/ontologies/newEntityA"));
80: newA.setStringAttribute("newAStringAttribute");
81: final Descriptor newADescriptor = new EntityDescriptor(CONTEXT_TWO);
82: em.persist(newA, newADescriptor);
83: dDescriptor.addAttributeDescriptor(OWLClassD.getOwlClassAField(), newADescriptor);
84: d.setOwlClassA(newA);
85: em.getTransaction().commit();
86:
87: final OWLClassD resD = findRequired(OWLClassD.class, entityD.getUri(), dDescriptor);
88: assertEquals(newA.getUri(), resD.getOwlClassA().getUri());
89: assertEquals(newA.getStringAttribute(), resD.getOwlClassA().getStringAttribute());
90: final OWLClassA resA = findRequired(OWLClassA.class, entityA.getUri(), aDescriptor);
91: assertEquals(entityA.getStringAttribute(), resA.getStringAttribute());
92: }
93:
94: @Test
95: void testUpdateAddToPropertiesInContext() throws Exception {
96: this.em = getEntityManager("MultiUpdateAddToPropertiesInContext", false);
97: entityB.setProperties(Generators.createProperties());
98: final Descriptor bDescriptor = new EntityDescriptor(CONTEXT_ONE);
99: bDescriptor.addAttributeContext(OWLClassB.class.getDeclaredField("properties"), CONTEXT_TWO);
100: em.getTransaction().begin();
101: em.persist(entityB, bDescriptor);
102: em.getTransaction().commit();
103:
104: em.getTransaction().begin();
105: final OWLClassB b = findRequired(OWLClassB.class, entityB.getUri(), bDescriptor);
106: final String newKey = "http://krizik.felk.cvut.cz/jopa/ontologies/properties/newPropertyKey";
107: final String newValue = "http://krizik.felk.cvut.cz/jopa/ontologies/newPropertyValue";
108: final String newPropertyValue = "http://krizik.felk.cvut.cz/jopa/ontologies/NewValueOfAnOldProperty";
109: final String propertyToChange = b.getProperties().keySet().iterator().next();
110: b.getProperties().put(newKey, Collections.singleton(newValue));
111: b.getProperties().get(propertyToChange).add(newPropertyValue);
112: em.getTransaction().commit();
113:
114: final OWLClassB res = findRequired(OWLClassB.class, entityB.getUri(), bDescriptor);
115: assertEquals(entityB.getStringAttribute(), res.getStringAttribute());
116: assertTrue(TestEnvironmentUtils.arePropertiesEqual(b.getProperties(), res.getProperties()));
117: }
118:
119: @Test
120: void testUpdateAddToSimpleListInContext() throws Exception {
121: this.em = getEntityManager("MultiUpdateAddToSimpleListInContext", false);
122: entityC.setSimpleList(Generators.createSimpleList(15));
123: final Descriptor cDescriptor = new EntityDescriptor(CONTEXT_ONE);
124: final ObjectPropertyCollectionDescriptor lstDescriptor = new ObjectPropertyCollectionDescriptor(CONTEXT_TWO,
125: OWLClassC.getSimpleListField());
126: cDescriptor.addAttributeDescriptor(OWLClassC.getSimpleListField(), lstDescriptor);
127: persistCWithLists(entityC, cDescriptor, lstDescriptor);
128:
129: em.getTransaction().begin();
130: final OWLClassC c = findRequired(OWLClassC.class, entityC.getUri(), cDescriptor);
131: assertEquals(entityC.getSimpleList().size(), c.getSimpleList().size());
132: c.getSimpleList().add(entityA);
133: em.persist(entityA, lstDescriptor);
134: em.getTransaction().commit();
135:
136: final OWLClassC resC = findRequired(OWLClassC.class, entityC.getUri(), cDescriptor);
137: assertEquals(entityC.getSimpleList().size() + 1, resC.getSimpleList().size());
138: boolean found = false;
139:• for (OWLClassA a : resC.getSimpleList()) {
140:• if (a.getUri().equals(entityA.getUri())) {
141: assertEquals(entityA.getStringAttribute(), a.getStringAttribute());
142: assertEquals(entityA.getTypes(), a.getTypes());
143: found = true;
144: break;
145: }
146: }
147: assertTrue(found);
148: }
149:
150: private void persistCWithLists(OWLClassC instance, Descriptor cDescriptor,
151: ObjectPropertyCollectionDescriptor listDescriptor) {
152: transactional(() -> {
153: em.persist(instance, cDescriptor);
154:• if (instance.getSimpleList() != null) {
155: instance.getSimpleList().forEach(a -> em.persist(a, listDescriptor.getElementDescriptor()));
156: }
157:• if (instance.getReferencedList() != null) {
158: instance.getReferencedList().forEach(a -> em.persist(a, listDescriptor.getElementDescriptor()));
159: }
160: });
161: }
162:
163: @Test
164: void testUpdateAddToReferencedListInContext() throws Exception {
165: this.em = getEntityManager("MultiUpdateAddToReferencedListInContext", false);
166: entityC.setReferencedList(Generators.createReferencedList(10));
167: final Descriptor cDescriptor = new EntityDescriptor(CONTEXT_ONE);
168: final ObjectPropertyCollectionDescriptor lstDescriptor = new ObjectPropertyCollectionDescriptor(CONTEXT_TWO,
169: OWLClassC.getReferencedListField());
170: cDescriptor.addAttributeDescriptor(OWLClassC.getReferencedListField(), lstDescriptor);
171: persistCWithLists(entityC, cDescriptor, lstDescriptor);
172:
173: em.getTransaction().begin();
174: final OWLClassC c = findRequired(OWLClassC.class, entityC.getUri(), cDescriptor);
175: assertEquals(entityC.getReferencedList().size(), c.getReferencedList().size());
176: c.getReferencedList().add(entityA);
177: em.persist(entityA, lstDescriptor);
178: em.getTransaction().commit();
179:
180: final OWLClassC resC = findRequired(OWLClassC.class, entityC.getUri(), cDescriptor);
181: assertEquals(entityC.getReferencedList().size() + 1, resC.getReferencedList().size());
182: boolean found = false;
183:• for (OWLClassA a : resC.getReferencedList()) {
184:• if (a.getUri().equals(entityA.getUri())) {
185: assertEquals(entityA.getStringAttribute(), a.getStringAttribute());
186: assertEquals(entityA.getTypes(), a.getTypes());
187: found = true;
188: break;
189: }
190: }
191: assertTrue(found);
192: }
193:
194: @Test
195: void testUpdateRemoveFromSimpleListInContext() throws Exception {
196: this.em = getEntityManager("MultiUpdateRemoveFromSimpleListInContext", false);
197: entityC.setSimpleList(Generators.createSimpleList(15));
198: final Descriptor cDescriptor = new EntityDescriptor(CONTEXT_ONE);
199: final ObjectPropertyCollectionDescriptor lstDescriptor = new ObjectPropertyCollectionDescriptor(CONTEXT_TWO,
200: OWLClassC.getSimpleListField());
201: cDescriptor.addAttributeDescriptor(OWLClassC.getSimpleListField(), lstDescriptor);
202: persistCWithLists(entityC, cDescriptor, lstDescriptor);
203:
204: em.getTransaction().begin();
205: final OWLClassC c = findRequired(OWLClassC.class, entityC.getUri(), cDescriptor);
206: assertEquals(entityC.getSimpleList().size(), c.getSimpleList().size());
207: final OWLClassA a = c.getSimpleList().get(0);
208: c.getSimpleList().remove(0);
209: em.remove(a);
210: em.getTransaction().commit();
211:
212: final OWLClassC resC = findRequired(OWLClassC.class, entityC.getUri(), cDescriptor);
213: assertEquals(entityC.getSimpleList().size() - 1, resC.getSimpleList().size());
214: assertNull(em.find(OWLClassA.class, a.getUri(), lstDescriptor));
215: }
216:
217: @Test
218: void testUpdateRemoveFromReferencedListInContext() throws Exception {
219: this.em = getEntityManager("MultiUpdateRemoveFromReferencedListInContext", false);
220: entityC.setReferencedList(Generators.createReferencedList(10));
221: final Descriptor cDescriptor = new EntityDescriptor(CONTEXT_ONE);
222: final ObjectPropertyCollectionDescriptor lstDescriptor = new ObjectPropertyCollectionDescriptor(CONTEXT_TWO,
223: OWLClassC.getReferencedListField());
224: cDescriptor.addAttributeDescriptor(OWLClassC.getReferencedListField(), lstDescriptor);
225: persistCWithLists(entityC, cDescriptor, lstDescriptor);
226:
227: em.getTransaction().begin();
228: final OWLClassC c = findRequired(OWLClassC.class, entityC.getUri(), cDescriptor);
229: assertEquals(entityC.getReferencedList().size(), c.getReferencedList().size());
230: final List<OWLClassA> removed = new ArrayList<>();
231: int i = 0;
232: final Iterator<OWLClassA> it = c.getReferencedList().iterator();
233:• while (it.hasNext()) {
234: i++;
235: final OWLClassA a = it.next();
236:• if (i % 2 == 1) {
237: continue;
238: }
239: removed.add(a);
240: it.remove();
241: }
242: em.getTransaction().commit();
243:
244: final OWLClassC resC = findRequired(OWLClassC.class, entityC.getUri(), cDescriptor);
245: assertEquals(entityC.getReferencedList().size() - removed.size(), resC.getReferencedList()
246: .size());
247:• for (OWLClassA a : removed) {
248: final OWLClassA resA = em.find(OWLClassA.class, a.getUri(), lstDescriptor);
249: assertNotNull(resA);
250: }
251: }
252:
253: @Test
254: void testUpdatePlainIdentifierObjectPropertyValueInContext() {
255: final Descriptor pDescriptor = new EntityDescriptor(CONTEXT_ONE);
256: entityP.setIndividualUri(URI.create("http://krizik.felk.cvut.cz/originalIndividual"));
257: this.em = getEntityManager("UpdatePlainIdentifierObjectPropertyValueInContext", true);
258: em.getTransaction().begin();
259: em.persist(entityP, pDescriptor);
260: em.getTransaction().commit();
261:
262: final OWLClassP toUpdate = findRequired(OWLClassP.class, entityP.getUri());
263: em.detach(toUpdate);
264: final URI newUri = URI.create("http://krizik.felk.cvut.cz/newIndividual");
265: toUpdate.setIndividualUri(newUri);
266: em.getTransaction().begin();
267: em.merge(toUpdate);
268: em.getTransaction().commit();
269:
270: final OWLClassP res = findRequired(OWLClassP.class, entityP.getUri());
271: assertEquals(newUri, res.getIndividualUri());
272: }
273:
274: @Test
275: void testUpdateFieldInMappedSuperclassInContext() throws Exception {
276: final Descriptor qDescriptor = new EntityDescriptor(CONTEXT_ONE);
277: final Descriptor aDescriptor = new EntityDescriptor(CONTEXT_TWO);
278: qDescriptor.addAttributeDescriptor(OWLClassQ.getOWlClassAField(), aDescriptor);
279: this.em = getEntityManager("UpdateFieldInMappedSuperclassInContext", true);
280: em.getTransaction().begin();
281: em.persist(entityQ, qDescriptor);
282: em.persist(entityA, aDescriptor);
283: em.getTransaction().commit();
284:
285: entityQ.setStringAttribute("newStringAttribute");
286: entityQ.setParentString("newParentStringAttribute");
287: entityQ.setLabel("newLabel");
288: final OWLClassA newA = new OWLClassA(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityA2"));
289: newA.setStringAttribute("newAString");
290: entityQ.setOwlClassA(newA);
291: em.getTransaction().begin();
292: em.merge(entityQ, qDescriptor);
293: em.persist(newA, aDescriptor);
294: em.getTransaction().commit();
295:
296: final OWLClassQ res = findRequired(OWLClassQ.class, entityQ.getUri(), qDescriptor);
297: assertEquals(entityQ.getStringAttribute(), res.getStringAttribute());
298: assertEquals(entityQ.getParentString(), res.getParentString());
299: assertEquals(entityQ.getLabel(), res.getLabel());
300: assertNotNull(res.getOwlClassA());
301: assertEquals(newA.getUri(), res.getOwlClassA().getUri());
302: assertNotNull(em.find(OWLClassA.class, newA.getUri()));
303: assertNotNull(em.find(OWLClassA.class, entityA.getUri(), aDescriptor));
304: }
305:
306: @Test
307: void testUpdateObjectPropertyInContextWithAssertionInContext() throws Exception {
308: final Descriptor dDescriptor = new EntityDescriptor(CONTEXT_ONE, false);
309: final Descriptor aDescriptor = new EntityDescriptor(CONTEXT_TWO);
310: dDescriptor.addAttributeDescriptor(OWLClassD.getOwlClassAField(), aDescriptor);
311: this.em = getEntityManager("testUpdateObjectPropertyInContextWithAssertionInContext", true);
312: transactional(() -> {
313: em.persist(entityA, aDescriptor);
314: em.persist(entityD, dDescriptor);
315: });
316:
317: final OWLClassA newA = new OWLClassA(Generators.generateUri());
318: newA.setStringAttribute("newString");
319: transactional(() -> {
320: final OWLClassD d = findRequired(OWLClassD.class, entityD.getUri(), dDescriptor);
321: d.setOwlClassA(newA);
322: em.persist(newA, aDescriptor);
323: });
324:
325: assertTrue(em.createNativeQuery("ASK { GRAPH ?g { ?s ?p ?o. }}", Boolean.class).setParameter("g", CONTEXT_TWO)
326: .setParameter("s", entityD.getUri()).setParameter("p", URI.create(Vocabulary.P_HAS_OWL_CLASS_A))
327: .setParameter("o", newA.getUri()).getSingleResult());
328: final OWLClassD result = findRequired(OWLClassD.class, entityD.getUri(), dDescriptor);
329: assertNotNull(result.getOwlClassA());
330: assertEquals(newA.getUri(), result.getOwlClassA().getUri());
331: }
332: }