package de.randi2.core.integration.modelDatabase;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import org.junit.Test;
import org.springframework.transaction.annotation.Transactional;
import de.randi2.model.SubjectProperty;
import de.randi2.model.criteria.DateCriterion;
import de.randi2.model.criteria.DichotomousCriterion;
import de.randi2.model.criteria.FreeTextCriterion;
import de.randi2.model.criteria.OrdinalCriterion;
import de.randi2.testUtility.utility.AbstractDomainDatabaseTest;
import de.randi2.unsorted.ConstraintViolatedException;
@SuppressWarnings("unchecked")
public class SubjectPropertyDatabaseTest extends AbstractDomainDatabaseTest<SubjectProperty>{
public SubjectPropertyDatabaseTest() {
super(SubjectProperty.class);
}
@Test
@Transactional
public void testDatabaseIntegrationSubjectDichotomousCriterion() {
DichotomousCriterion criterion = new DichotomousCriterion();
criterion.setOption1("1");
criterion.setOption2("2");
entityManager.persist(criterion);
assertTrue(criterion.getId() > 0);
criterion = entityManager.find(
DichotomousCriterion.class, criterion.getId());
SubjectProperty<String> subjectString = new SubjectProperty<String>(
criterion);
try {
subjectString.setValue(criterion.getOption1());
assertEquals(criterion.getOption1(), subjectString.getValue());
} catch (ConstraintViolatedException e) {
fail("Constraint violated: " + e.getMessage());
}
entityManager.persist(subjectString);
assertTrue(subjectString.getId() > 0);
SubjectProperty<String> dbSubjectProperty = (SubjectProperty<String>) entityManager
.find(SubjectProperty.class, subjectString.getId());
assertEquals(subjectString, dbSubjectProperty);
assertEquals(subjectString.getCriterion(), dbSubjectProperty
.getCriterion());
}
@Test
@Transactional
public void testDatabaseIntegrationSubjectOrdinalCriterion() {
OrdinalCriterion criterion = new OrdinalCriterion();
List<String> elements = new ArrayList<String>();
elements.add("Value1");
elements.add("Value2");
elements.add("Value3");
criterion.setElements(elements);
entityManager.persist(criterion);
assertTrue(criterion.getId() > 0);
criterion = entityManager.find(
OrdinalCriterion.class, criterion.getId());
SubjectProperty<String> subjectString = new SubjectProperty<String>(
criterion);
try {
subjectString.setValue(criterion.getElements().get(0));
assertEquals(criterion.getElements().get(0), subjectString
.getValue());
} catch (ConstraintViolatedException e) {
fail("Constraint violated: " + e.getMessage());
}
entityManager.persist(subjectString);
assertTrue(subjectString.getId() > 0);
SubjectProperty<String> dbSubjectProperty = entityManager
.find(SubjectProperty.class, subjectString.getId());
assertEquals(subjectString, dbSubjectProperty);
assertEquals(subjectString.getCriterion(), dbSubjectProperty
.getCriterion());
}
@Test
@Transactional
public void testDatabaseIntegrationSubjectDateCriterion() {
DateCriterion criterion = new DateCriterion();
criterion.setName("dsagdsagsd");
entityManager.persist(criterion);
assertTrue(criterion.getId() > 0);
criterion = entityManager.find(DateCriterion.class,
criterion.getId());
SubjectProperty<GregorianCalendar> subject = new SubjectProperty<GregorianCalendar>(
criterion);
try {
subject.setValue(new GregorianCalendar());
} catch (ConstraintViolatedException e) {
fail("Constraint violated: " + e.getMessage());
}
entityManager.persist(subject);
assertTrue(subject.getId() > 0);
SubjectProperty<String> dbSubjectProperty = entityManager
.find(SubjectProperty.class, subject.getId());
assertEquals(subject, dbSubjectProperty);
assertEquals(subject.getCriterion(), dbSubjectProperty.getCriterion());
}
@Test
@Transactional
public void testDatabaseIntegrationSubjectFreeTextCriterion() {
FreeTextCriterion criterion = new FreeTextCriterion();
criterion.setName("dsagdsagsd");
entityManager.persist(criterion);
assertTrue(criterion.getId() > 0);
criterion = entityManager.find(
FreeTextCriterion.class, criterion.getId());
SubjectProperty<String> subject = new SubjectProperty<String>(criterion);
try {
subject.setValue("test");
} catch (ConstraintViolatedException e) {
fail("Constraint violated: " + e.getMessage());
}
entityManager.persist(subject);
assertTrue(subject.getId() > 0);
SubjectProperty<String> dbSubjectProperty = (SubjectProperty<String>) entityManager
.find(SubjectProperty.class, subject.getId());
assertEquals(subject, dbSubjectProperty);
assertEquals("test", dbSubjectProperty.getValue());
assertEquals(subject.getCriterion(), dbSubjectProperty.getCriterion());
}
}