Skip to content

Commit

Permalink
[Enhancement kbss-cvut#283] Add integration tests for dynamic attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
luxbe committed Nov 21, 2024
1 parent 531c6d8 commit fbd60ba
Show file tree
Hide file tree
Showing 6 changed files with 168 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* JOPA
* Copyright (C) 2024 Czech Technical University in Prague
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3.0 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
*/
package cz.cvut.kbss.jopa.test;

import cz.cvut.kbss.jopa.model.annotations.Id;
import cz.cvut.kbss.jopa.model.annotations.OWLClass;
import cz.cvut.kbss.jopa.model.annotations.OWLDataProperty;

import java.net.URI;

@OWLClass(iri = Vocabulary.C_OWL_CLASS_Z)
public class OWLClassAA implements HasUri {

@Id
private URI uri;

@OWLDataProperty(iri = Vocabulary.P_AA_DYNAMIC_ATTRIBUTE, simpleLiteral = true)
private Object dynamicProperty;

@Override
public URI getUri() {
return uri;
}

public void setUri(URI uri) {
this.uri = uri;
}

public Object getDynamicProperty() {
return dynamicProperty;
}

public void setDynamicProperty(Object dynamicProperty) {
this.dynamicProperty = dynamicProperty;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,8 @@ public class Vocabulary {
public static final String P_Y_SINGULAR_MULTILINGUAL_ATTRIBUTE = ATTRIBUTE_IRI_BASE + "ySingularMultilingual";
public static final String P_Y_PLURAL_MULTILINGUAL_ATTRIBUTE = ATTRIBUTE_IRI_BASE + "yPluralMultilingual";

public static final String P_AA_DYNAMIC_ATTRIBUTE = ATTRIBUTE_IRI_BASE + "aaDynamicAttribute";

public static final String P_HAS_H = ATTRIBUTE_IRI_BASE + "hasH";

private Vocabulary() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,25 @@
import cz.cvut.kbss.jopa.model.EntityManager;
import cz.cvut.kbss.jopa.model.descriptors.Descriptor;
import cz.cvut.kbss.jopa.model.metamodel.FieldSpecification;
import cz.cvut.kbss.jopa.test.*;
import cz.cvut.kbss.jopa.test.OWLClassA;
import cz.cvut.kbss.jopa.test.OWLClassAA;
import cz.cvut.kbss.jopa.test.OWLClassB;
import cz.cvut.kbss.jopa.test.OWLClassC;
import cz.cvut.kbss.jopa.test.OWLClassD;
import cz.cvut.kbss.jopa.test.OWLClassE;
import cz.cvut.kbss.jopa.test.OWLClassG;
import cz.cvut.kbss.jopa.test.OWLClassH;
import cz.cvut.kbss.jopa.test.OWLClassI;
import cz.cvut.kbss.jopa.test.OWLClassM;
import cz.cvut.kbss.jopa.test.OWLClassN;
import cz.cvut.kbss.jopa.test.OWLClassP;
import cz.cvut.kbss.jopa.test.OWLClassQ;
import cz.cvut.kbss.jopa.test.OWLClassWithQueryAttr;
import cz.cvut.kbss.jopa.test.OWLClassWithQueryAttr2;
import cz.cvut.kbss.jopa.test.OWLClassWithQueryAttr3;
import cz.cvut.kbss.jopa.test.OWLClassWithQueryAttr4;
import cz.cvut.kbss.jopa.test.OWLClassWithQueryAttr5;
import cz.cvut.kbss.jopa.test.OWLClassWithQueryAttr6;
import cz.cvut.kbss.jopa.test.environment.DataAccessor;
import cz.cvut.kbss.jopa.test.environment.PersistenceFactory;
import cz.cvut.kbss.jopa.test.environment.Quad;
Expand All @@ -29,9 +47,15 @@
import org.slf4j.Logger;

import java.net.URI;
import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;


public abstract class BaseRunner {
Expand Down Expand Up @@ -67,6 +91,8 @@ public abstract class BaseRunner {
protected OWLClassWithQueryAttr4 entityWithQueryAttr4;
protected OWLClassWithQueryAttr5 entityWithQueryAttr5;
protected OWLClassWithQueryAttr6 entityWithQueryAttr6;
// Dynamic attributes
protected OWLClassAA entityAA;

protected final DataAccessor dataAccessor;
protected final PersistenceFactory persistenceFactory;
Expand Down Expand Up @@ -147,6 +173,8 @@ private void init() {
entityWithQueryAttr5.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityWithQueryAttr5"));
this.entityWithQueryAttr6 = new OWLClassWithQueryAttr6();
entityWithQueryAttr6.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityWithQueryAttr6"));
this.entityAA = new OWLClassAA();
this.entityAA.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityAA"));
}

@AfterEach
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
Expand Down Expand Up @@ -683,4 +684,37 @@ void persistSupportsAnnotationPropertyValueMappedToSimpleLiteral() throws Except
new Quad(URI.create(entityM.getKey()), URI.create(Vocabulary.p_m_simpleLiteral),
entityM.getSimpleLiteral(), (String) null)), em);
}

@Test
void persistSupportsDynamicPropertyIntegerValueMappedToSimpleLiteral() throws Exception {
this.em = getEntityManager("persistSupportsDynamicPropertyValueMappedToSimpleLiteral", false);
entityAA.setDynamicProperty(1234);
persist(entityAA);

verifyStatementsPresent(List.of(
new Quad(entityAA.getUri(), URI.create(Vocabulary.P_AA_DYNAMIC_ATTRIBUTE),
entityAA.getDynamicProperty(), (String) null)), em);
}

@Test
void persistSupportsDynamicPropertyStringValueMappedToSimpleLiteral() throws Exception {
this.em = getEntityManager("persistSupportsDynamicPropertyValueMappedToSimpleLiteral", false);
entityAA.setDynamicProperty("Hello, world!");
persist(entityAA);

verifyStatementsPresent(List.of(
new Quad(entityAA.getUri(), URI.create(Vocabulary.P_AA_DYNAMIC_ATTRIBUTE),
entityAA.getDynamicProperty(), (String) null)), em);
}

@Test
void persistSupportsDynamicPropertyDateValueMappedToSimpleLiteral() throws Exception {
this.em = getEntityManager("persistSupportsDynamicPropertyValueMappedToSimpleLiteral", false);
entityAA.setDynamicProperty(new Date());
persist(entityAA);

verifyStatementsPresent(List.of(
new Quad(entityAA.getUri(), URI.create(Vocabulary.P_AA_DYNAMIC_ATTRIBUTE),
entityAA.getDynamicProperty(), (String) null)), em);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import cz.cvut.kbss.jopa.model.query.TypedQuery;
import cz.cvut.kbss.jopa.proxy.lazy.LazyLoadingProxy;
import cz.cvut.kbss.jopa.test.OWLClassA;
import cz.cvut.kbss.jopa.test.OWLClassAA;
import cz.cvut.kbss.jopa.test.OWLClassB;
import cz.cvut.kbss.jopa.test.OWLClassC;
import cz.cvut.kbss.jopa.test.OWLClassD;
Expand Down Expand Up @@ -610,4 +611,34 @@ void lazilyLoadedAttributeIsNullWhenThereIsNoReferenceToLoad() {
final OWLClassI result = findRequired(OWLClassI.class, entityI.getUri());
assertNull(result.getOwlClassA());
}

@Test
public void retrieveDynamicStringAttribute() {
this.em = getEntityManager("retrieveDynamicAttribute", false);
entityAA.setDynamicProperty("Hello, world!");
transactional(() -> em.persist(entityAA));

final OWLClassAA result = findRequired(OWLClassAA.class, entityAA.getUri());
assertEquals("Hello, world!", result.getDynamicProperty());
}

@Test
public void retrieveDynamicIntAttribute() {
this.em = getEntityManager("retrieveDynamicAttribute", false);
entityAA.setDynamicProperty(1234);
transactional(() -> em.persist(entityAA));

final OWLClassAA result = findRequired(OWLClassAA.class, entityAA.getUri());
assertEquals(1234, result.getDynamicProperty());
}

@Test
public void retrieveDynamicDoubleAttribute() {
this.em = getEntityManager("retrieveDynamicAttribute", false);
entityAA.setDynamicProperty(Double.parseDouble("1234.6970"));
transactional(() -> em.persist(entityAA));

final OWLClassAA result = findRequired(OWLClassAA.class, entityAA.getUri());
assertEquals(1234.697D, result.getDynamicProperty());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import cz.cvut.kbss.jopa.oom.exception.UnpersistedChangeException;
import cz.cvut.kbss.jopa.proxy.lazy.LazyLoadingProxy;
import cz.cvut.kbss.jopa.test.OWLClassA;
import cz.cvut.kbss.jopa.test.OWLClassAA;
import cz.cvut.kbss.jopa.test.OWLClassB;
import cz.cvut.kbss.jopa.test.OWLClassD;
import cz.cvut.kbss.jopa.test.OWLClassE;
Expand Down Expand Up @@ -1171,4 +1172,22 @@ public void concurrentTransactionsLeaveDataInConsistentState() {
final OWLClassA result = em.find(OWLClassA.class, entityA.getUri());
assertEquals(a2String, result.getStringAttribute());
}

@Test
public void updateDynamicAttribute() {
this.em = getEntityManager("updateDynamicAttribute", false);
entityAA.setDynamicProperty("Hello, world!");
persist(entityAA);

Object propertyBeforeUpdate = findRequired(OWLClassAA.class, entityAA.getUri()).getDynamicProperty();
assertEquals(propertyBeforeUpdate, "Hello, world!");

em.getTransaction().begin();
entityAA.setDynamicProperty(1234L);
em.merge(entityAA);
em.getTransaction().commit();

Object propertyAfterUpdate = findRequired(OWLClassAA.class, entityAA.getUri()).getDynamicProperty();
assertEquals(1234L, propertyAfterUpdate);
}
}

0 comments on commit fbd60ba

Please sign in to comment.