package de.randi2.core.unit.model; import static junit.framework.Assert.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Before; import org.junit.Test; import de.randi2.model.Login; import de.randi2.model.SubjectProperty; import de.randi2.model.TreatmentArm; import de.randi2.model.TrialSite; import de.randi2.model.TrialSubject; import de.randi2.model.criteria.DichotomousCriterion; import de.randi2.model.criteria.OrdinalCriterion; import de.randi2.model.criteria.constraints.DichotomousConstraint; import de.randi2.model.criteria.constraints.OrdinalConstraint; import de.randi2.testUtility.utility.AbstractDomainTest; import de.randi2.unsorted.ConstraintViolatedException; public class TrialSubjectTest extends AbstractDomainTest<TrialSubject> { public TrialSubjectTest() { super(TrialSubject.class); } private TrialSubject validSubject; @Before public void setUp(){ validSubject = new TrialSubject(); validSubject.setRandNumber("randN"); validSubject.setArm(new TreatmentArm()); validSubject.setIdentification("identification"); } private static final long serialVersionUID = 4476774735316414165L; private long id = 0; private long getNextId() { return id++; } private DichotomousCriterion dCriterion1 = null; private SubjectProperty<String> getEmptyDichotomProperty1() { if (dCriterion1 == null) { dCriterion1 = new DichotomousCriterion(); dCriterion1.setId(getNextId()); dCriterion1.setName("dichotom Crit 1"); dCriterion1.setOption1("option1"); dCriterion1.setOption2("option2"); try { List<String> value = new ArrayList<String>(); value.add(dCriterion1.getOption1()); DichotomousConstraint co = new DichotomousConstraint(value); co.setId(getNextId()); dCriterion1.addStrata(co); value.clear(); value.add(dCriterion1.getOption2()); co = new DichotomousConstraint(value); co.setId(getNextId()); dCriterion1.addStrata(co); } catch (ConstraintViolatedException e) { fail(e.getMessage()); } } return new SubjectProperty<String>(dCriterion1); } private DichotomousCriterion dCriterion2 = null; private SubjectProperty<String> getEmptyDichotomProperty2() { if (dCriterion2 == null) { dCriterion2 = new DichotomousCriterion(); dCriterion2.setId(getNextId()); dCriterion2.setName("dichotom Crit 2"); dCriterion2.setOption1("option1"); dCriterion2.setOption2("option2"); try { List<String> value = new ArrayList<String>(); value.add(dCriterion2.getOption1()); DichotomousConstraint co = new DichotomousConstraint(value); co.setId(getNextId()); dCriterion2.addStrata(co); value.clear(); value.add(dCriterion2.getOption2()); co = new DichotomousConstraint(value); co.setId(getNextId()); dCriterion2.addStrata(co); } catch (ConstraintViolatedException e) { fail(e.getMessage()); } } return new SubjectProperty<String>(dCriterion2); } private DichotomousCriterion dCriterion3 = null; private SubjectProperty<String> getEmptyDichotomProperty3() { if (dCriterion3 == null) { dCriterion3 = new DichotomousCriterion(); dCriterion3.setId(getNextId()); dCriterion3.setName("dichotom Crit 3"); dCriterion3.setOption1("option1"); dCriterion3.setOption2("option2"); try { List<String> value = new ArrayList<String>(); value.add(dCriterion3.getOption1()); DichotomousConstraint co = new DichotomousConstraint(value); co.setId(getNextId()); dCriterion3.addStrata(co); value.clear(); value.add(dCriterion3.getOption2()); co = new DichotomousConstraint(value); co.setId(getNextId()); dCriterion3.addStrata(co); } catch (ConstraintViolatedException e) { fail(e.getMessage()); } } return new SubjectProperty<String>(dCriterion3); } private OrdinalCriterion oCriterion1 = null; private SubjectProperty<String> getEmptyOrdinalProperty1() { if (oCriterion1 == null) { oCriterion1 = new OrdinalCriterion(); oCriterion1.setId(getNextId()); List<String> elements = new ArrayList<String>(); elements.add("option1"); elements.add("option2"); elements.add("option3"); elements.add("option4"); elements.add("option5"); elements.add("option6"); oCriterion1.setElements(elements); try { List<String> value = new ArrayList<String>(); value.add("option1"); OrdinalConstraint co = new OrdinalConstraint(value); co.setId(getNextId()); oCriterion1.addStrata(co); value.clear(); value.add("option2"); co = new OrdinalConstraint(value); co.setId(getNextId()); oCriterion1.addStrata(co); value.clear(); value.add("option3"); co = new OrdinalConstraint(value); co.setId(getNextId()); oCriterion1.addStrata(co); value.clear(); value.add("option4"); co = new OrdinalConstraint(value); co.setId(getNextId()); oCriterion1.addStrata(co); value.clear(); value.add("option5"); co = new OrdinalConstraint(value); co.setId(getNextId()); oCriterion1.addStrata(co); value.clear(); value.add("option6"); co = new OrdinalConstraint(value); co.setId(getNextId()); oCriterion1.addStrata(co); } catch (ConstraintViolatedException e) { fail(e.getMessage()); } } return new SubjectProperty<String>(oCriterion1); } @Test public void testGetStratum1() { // every entry grouped the members of one group List<List<TrialSubject>> subjects = new ArrayList<List<TrialSubject>>(); for (int j = 1; j <= 2; j++) { for (int k = 1; k <= 2; k++) { for (int l = 1; l <= 2; l++) { List<TrialSubject> subjectsGroup = new ArrayList<TrialSubject>(); // generate objects with same group for (int i = 0; i < 3; i++) { TrialSubject subject = new TrialSubject(); Set<SubjectProperty<?>> properties = new HashSet<SubjectProperty<?>>(); SubjectProperty<String> p1 = getEmptyDichotomProperty1(); properties.add(p1); SubjectProperty<String> p2 = getEmptyDichotomProperty2(); properties.add(p2); SubjectProperty<String> p3 = getEmptyDichotomProperty3(); properties.add(p3); try { p1.setValue("option" + j); p2.setValue("option" + k); p3.setValue("option" + l); } catch (ConstraintViolatedException e) { fail(e.getMessage()); } subject.setProperties(properties); subjectsGroup.add(subject); } subjects.add(subjectsGroup); } } } assertEquals(8, subjects.size()); testStratification(subjects); } @Test public void testGetStratum2() { // every entry grouped the members of one group List<List<TrialSubject>> subjects = new ArrayList<List<TrialSubject>>(); for (int j = 1; j <= 2; j++) { for (int k = 1; k <= 2; k++) { for (int l = 1; l <= 2; l++) { for (int m = 1; m <= 6; m++) { List<TrialSubject> subjectsGroup = new ArrayList<TrialSubject>(); // generate objects with same group for (int i = 0; i < 3; i++) { TrialSubject subject = new TrialSubject(); Set<SubjectProperty<?>> properties = new HashSet<SubjectProperty<?>>(); SubjectProperty<String> p1 = getEmptyDichotomProperty1(); properties.add(p1); SubjectProperty<String> p2 = getEmptyDichotomProperty2(); properties.add(p2); SubjectProperty<String> p3 = getEmptyDichotomProperty3(); properties.add(p3); SubjectProperty<String> p4 = getEmptyOrdinalProperty1(); properties.add(p4); try { p1.setValue("option" + j); p2.setValue("option" + k); p3.setValue("option" + l); p4.setValue("option" + m); } catch (ConstraintViolatedException e) { fail(e.getMessage()); } subject.setProperties(properties); subjectsGroup.add(subject); } subjects.add(subjectsGroup); } } } } assertEquals(48, subjects.size()); testStratification(subjects); } private void testStratification(List<List<TrialSubject>> subjects) { for (int i = 0; i < subjects.size(); i++) { List<TrialSubject> subs = subjects.get(i); // Test getStratum in one group for (int k = 0; k < subs.size() - 1; k++) { for (int l = k + 1; l < subs.size(); l++) { assertEquals(subs.get(k).getStratum(), subs.get(l) .getStratum()); } } for (int j = i + 1; j < subs.size(); j++) { assertFalse(subjects.get(i).get(0).getStratum().equals( subjects.get(j).get(0).getStratum())); } } } @Test public void testGetRequieredFields(){ Map<String, Boolean> map = (new TrialSubject()).getRequiredFields(); for(String key : map.keySet()){ if(key.equals("identification")) {assertTrue(map.get(key));} else if(key.equals("randNumber")) {assertTrue(map.get(key));} else if(key.equals("counter")) {assertFalse(map.get(key));} else if(key.equals("trialSite")) {assertFalse(map.get(key));} else if(key.equals("arm")) {assertTrue(map.get(key));} else if(key.equals("properties")) {assertFalse(map.get(key)); } else if(key.equals("investigator")) {assertFalse(map.get(key));} else if(key.equals("serialVersionUID")) {assertFalse(map.get(key));} else if(key.equals("$VRc")) {assertFalse(map.get(key));} else if(key.equals("responseProperty")) {assertFalse(map.get(key));} else fail(key + " not checked"); } } @Test public void testEqualsHashCode(){ TrialSubject trialSubject1 = new TrialSubject(); TrialSubject trialSubject2 = new TrialSubject(); trialSubject1.setId(0); trialSubject2.setId(0); trialSubject1.setVersion(0); trialSubject2.setVersion(0); assertEquals(trialSubject1, trialSubject2); assertEquals(trialSubject1.hashCode(), trialSubject2.hashCode()); trialSubject1.setId(1); assertFalse(trialSubject1.equals(trialSubject2)); trialSubject1.setId(0); assertEquals(trialSubject1, trialSubject2); assertEquals(trialSubject1.hashCode(), trialSubject2.hashCode()); trialSubject1.setVersion(1); assertFalse(trialSubject1.equals(trialSubject2)); trialSubject1.setVersion(0); assertEquals(trialSubject1, trialSubject2); assertEquals(trialSubject1.hashCode(), trialSubject2.hashCode()); trialSubject1.setIdentification("test"); assertFalse(trialSubject1.equals(trialSubject2)); trialSubject2.setIdentification("test"); assertEquals(trialSubject1, trialSubject2); assertEquals(trialSubject1.hashCode(), trialSubject2.hashCode()); assertFalse(trialSubject1.equals(null)); assertFalse(trialSubject1.equals(new TreatmentArm())); } @Test public void testArmNotNull(){ validSubject.setArm(null); assertEquals(null, validSubject.getArm()); assertInvalid(validSubject); } @Test public void testArmCorrect(){ TreatmentArm arm = new TreatmentArm(); arm.setId(123); validSubject.setArm(arm); assertEquals(arm, validSubject.getArm()); assertValid(validSubject); } @Test public void testCounter(){ TrialSubject subject = new TrialSubject(); subject.setCounter(123456); assertEquals(123456, subject.getCounter()); } @Test public void testIdentificationNotNull(){ validSubject.setIdentification(null); assertEquals(null, validSubject.getIdentification()); assertInvalid(validSubject); } @Test public void testIdentificationNotEmpty(){ validSubject.setIdentification(""); assertEquals("", validSubject.getIdentification()); assertInvalid(validSubject); } @Test public void testIdentificationNotLongerThan255(){ String[] invalidValues = { stringUtil.getWithLength(256), stringUtil.getWithLength(650) }; for (String s : invalidValues) { validSubject.setIdentification(s); assertEquals(s, validSubject.getIdentification()); assertInvalid(validSubject); } } @Test public void testIdentificationCorrect(){ String[] validValues = { stringUtil.getWithLength(255), stringUtil.getWithLength(23), "123456" }; for (String s : validValues) { validSubject.setIdentification(s); assertEquals(s, validSubject.getIdentification()); assertValid(validSubject); } } @Test public void testPropertiesNull(){ validSubject.setProperties(null); assertEquals(null, validSubject.getProperties()); assertValid(validSubject); } @Test public void testPropertiesCorrect(){ Set<SubjectProperty<?>> properties = new HashSet<SubjectProperty<?>>(); validSubject.setProperties(properties); assertEquals(properties, validSubject.getProperties()); assertValid(validSubject); } @Test public void testInvestigatorNull(){ validSubject.setInvestigator(null); assertEquals(null, validSubject.getInvestigator()); assertValid(validSubject); } @Test public void testInvestigatorCorrect(){ Login login = new Login(); validSubject.setInvestigator(login); assertEquals(login, validSubject.getInvestigator()); assertValid(validSubject); } @Test public void testRandNumberNotNull(){ validSubject.setRandNumber(null); assertEquals(null, validSubject.getRandNumber()); assertInvalid(validSubject); } @Test public void testRandNumbernNotEmpty(){ validSubject.setRandNumber(""); assertEquals("", validSubject.getRandNumber()); assertInvalid(validSubject); } @Test public void testRandNumberNotLongerThan255(){ String[] invalidValues = { stringUtil.getWithLength(256), stringUtil.getWithLength(650) }; for (String s : invalidValues) { validSubject.setRandNumber(s); assertEquals(s, validSubject.getRandNumber()); assertInvalid(validSubject); } } @Test public void testRandNumberCorrect(){ String[] validValues = { stringUtil.getWithLength(255), stringUtil.getWithLength(23), "123456" }; for (String s : validValues) { validSubject.setRandNumber(s); assertEquals(s, validSubject.getRandNumber()); assertValid(validSubject); } } @Test public void testTrialSiteNull(){ validSubject.setTrialSite(null); assertEquals(null, validSubject.getTrialSite()); assertValid(validSubject); } @Test public void testTrialSiteCorrect(){ TrialSite site = new TrialSite(); site.setId(123456); validSubject.setTrialSite(site); assertEquals(site, validSubject.getTrialSite()); assertValid(validSubject); } @Test public void testUiName(){ TrialSubject subject = new TrialSubject(); subject.setIdentification("123456"); assertEquals("123456", subject.getUIName()); } @Test public void testToString(){ TrialSubject subject = new TrialSubject(); assertNotNull(subject.toString()); } @Test public void testGetPropertiesUIString() { // every entry grouped the members of one group List<TrialSubject> subjects = new ArrayList<TrialSubject>(); for (int j = 1; j <= 2; j++) { for (int k = 1; k <= 2; k++) { for (int l = 1; l <= 2; l++) { // generate objects with same group TrialSubject subject = new TrialSubject(); Set<SubjectProperty<?>> properties = new HashSet<SubjectProperty<?>>(); SubjectProperty<String> p1 = getEmptyDichotomProperty1(); properties.add(p1); SubjectProperty<String> p2 = getEmptyDichotomProperty2(); properties.add(p2); SubjectProperty<String> p3 = getEmptyDichotomProperty3(); properties.add(p3); try { p1.setValue("option" + j); p2.setValue("option" + k); p3.setValue("option" + l); } catch (ConstraintViolatedException e) { fail(e.getMessage()); } subject.setProperties(properties); subjects.add(subject); } } } assertEquals(8, subjects.size()); assertEquals("dichotom Crit 1: option1|dichotom Crit 2: option1|dichotom Crit 3: option1|", subjects.get(0).getPropertiesUIString()); assertEquals("dichotom Crit 1: option1|dichotom Crit 2: option1|dichotom Crit 3: option2|", subjects.get(1).getPropertiesUIString()); assertEquals("dichotom Crit 1: option1|dichotom Crit 2: option2|dichotom Crit 3: option1|", subjects.get(2).getPropertiesUIString()); assertEquals("dichotom Crit 1: option1|dichotom Crit 2: option2|dichotom Crit 3: option2|", subjects.get(3).getPropertiesUIString()); assertEquals("dichotom Crit 1: option2|dichotom Crit 2: option1|dichotom Crit 3: option1|", subjects.get(4).getPropertiesUIString()); assertEquals("dichotom Crit 1: option2|dichotom Crit 2: option1|dichotom Crit 3: option2|", subjects.get(5).getPropertiesUIString()); assertEquals("dichotom Crit 1: option2|dichotom Crit 2: option2|dichotom Crit 3: option1|", subjects.get(6).getPropertiesUIString()); assertEquals("dichotom Crit 1: option2|dichotom Crit 2: option2|dichotom Crit 3: option2|", subjects.get(7).getPropertiesUIString()); } @Test public void testResponsePropertyNull(){ validSubject.setResponseProperty(null); assertEquals(null, validSubject.getResponseProperty()); assertValid(validSubject); } @Test public void testResponsePropertyCorrect(){ SubjectProperty<String> responseProperty = new SubjectProperty<String>(new DichotomousCriterion()); validSubject.setResponseProperty(responseProperty); assertEquals(responseProperty, validSubject.getResponseProperty()); assertValid(validSubject); } }