package de.randi2.core.unit.model; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.fail; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import org.junit.Test; import org.springframework.transaction.annotation.Transactional; import de.randi2.model.SubjectProperty; import de.randi2.model.TreatmentArm; import de.randi2.model.criteria.FreeTextCriterion; import de.randi2.model.criteria.OrdinalCriterion; import de.randi2.model.criteria.constraints.OrdinalConstraint; import de.randi2.testUtility.utility.AbstractDomainTest; import de.randi2.unsorted.ConstraintViolatedException; @SuppressWarnings("unchecked") public class SubjectPropertyTest extends AbstractDomainTest<SubjectProperty> { public SubjectPropertyTest(){ super(SubjectProperty.class); } @Test @Transactional public void testGetRequieredFields() { OrdinalCriterion criterion = new OrdinalCriterion(); List<String> elements = new ArrayList<String>(); elements.add("Value1"); elements.add("Value2"); elements.add("Value3"); criterion.setElements(elements); SubjectProperty<String> subjectString = new SubjectProperty<String>( criterion); Map<String, Boolean> map = subjectString.getRequiredFields(); for (String key : map.keySet()) { assertFalse(map.get(key)); } } @Test public void testCriterion() { OrdinalCriterion criterion = new OrdinalCriterion(); List<String> elements = new ArrayList<String>(); elements.add("Value1"); elements.add("Value2"); elements.add("Value3"); criterion.setElements(elements); SubjectProperty<String> subjectString = new SubjectProperty<String>( criterion); assertEquals(criterion, subjectString.getCriterion()); FreeTextCriterion criterion1 = new FreeTextCriterion(); subjectString = new SubjectProperty<String>( criterion1); criterion1.setName("dsagdsagsd"); assertEquals(criterion1, subjectString.getCriterion()); } @Test public void testValue() { OrdinalCriterion criterion = new OrdinalCriterion(); List<String> elements = new ArrayList<String>(); elements.add("Value1"); elements.add("Value2"); elements.add("Value3"); criterion.setElements(elements); SubjectProperty<String> subjectString = new SubjectProperty<String>( criterion); try { subjectString.setValue("Value1"); } catch (ConstraintViolatedException e) { fail(e.getMessage()); } assertEquals("Value1", subjectString.getValue()); try { subjectString.setValue("ValueXYZ"); fail("no exception"); } catch (ConstraintViolatedException e) { } } @Test public void testStratum() { OrdinalCriterion criterion = new OrdinalCriterion(); List<String> elements = new ArrayList<String>(); elements.add("Value1"); elements.add("Value2"); elements.add("Value3"); criterion.setElements(elements); OrdinalConstraint constraint1 = null; OrdinalConstraint constraint2 = null; try { constraint1 = new OrdinalConstraint(Arrays .asList(new String[] { "Value1" })); constraint1.setId(123); constraint2 = new OrdinalConstraint(Arrays .asList(new String[] { "Value2" })); constraint2.setId(345); } catch (ConstraintViolatedException e1) { fail(); } criterion.addStrata(constraint1); criterion.addStrata(constraint2); SubjectProperty<String> subjectString = new SubjectProperty<String>( criterion); try { subjectString.getStratum(); fail(); } catch (ConstraintViolatedException e) { assertNotNull(e); } try { subjectString.setValue("Value1"); assertEquals(123, subjectString.getStratum()); } catch (ConstraintViolatedException e) { fail(); } try { subjectString.setValue("Value2"); assertEquals(345, subjectString.getStratum()); } catch (ConstraintViolatedException e) { fail(); } } @Test public void testEqualsHashCode() { FreeTextCriterion criterion1 = new FreeTextCriterion(); criterion1.setName("dsagdsagsd"); SubjectProperty<String> subject1 = new SubjectProperty<String>( criterion1); FreeTextCriterion criterion2 = new FreeTextCriterion(); criterion2.setName("dsagdsagsd2"); SubjectProperty<String> subject2 = new SubjectProperty<String>( criterion1); SubjectProperty<String> subject3 = new SubjectProperty<String>( criterion2); subject1.setId(0); subject2.setId(0); subject3.setId(0); subject1.setVersion(0); subject2.setVersion(0); subject3.setVersion(0); assertEquals(subject1, subject2); assertEquals(subject1.hashCode(), subject2.hashCode()); subject1.setId(1); assertFalse(subject1.equals(subject2)); subject1.setId(0); assertEquals(subject1, subject2); assertEquals(subject1.hashCode(), subject2.hashCode()); subject1.setVersion(1); assertFalse(subject1.equals(subject2)); subject1.setVersion(0); assertEquals(subject1, subject2); assertEquals(subject1.hashCode(), subject2.hashCode()); try { subject1.setValue("test"); assertFalse(subject1.equals(subject2)); subject2.setValue("test"); assertEquals(subject1, subject2); assertEquals(subject1.hashCode(), subject2.hashCode()); } catch (ConstraintViolatedException e) { fail(); } assertFalse(subject1.equals(subject3)); assertFalse(subject1.equals(null)); assertFalse(subject1.equals(new TreatmentArm())); } }