package de.randi2.core.unit.model;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import de.randi2.model.TreatmentArm;
import de.randi2.model.Trial;
import de.randi2.model.TrialSubject;
import de.randi2.testUtility.utility.AbstractDomainTest;
public class TreatmentArmTest extends AbstractDomainTest<TreatmentArm> {
private TreatmentArm validTreatmentArm;
public TreatmentArmTest() {
super(TreatmentArm.class);
}
@Before
public void setUp() {
validTreatmentArm = new TreatmentArm();
validTreatmentArm.setDescription("description");
validTreatmentArm.setName("arm");
validTreatmentArm.setPlannedSubjects(10);
validTreatmentArm.setTrial(factory.getTrial());
}
@Test
public void testDescriptionNotNull() {
validTreatmentArm.setDescription(null);
assertNull(validTreatmentArm.getDescription());
assertInvalid(validTreatmentArm);
}
@Test
public void testDescriptionEmpty() {
validTreatmentArm.setDescription("");
assertEquals("", validTreatmentArm.getDescription());
assertValid(validTreatmentArm);
}
@Test
public void testDescriptionAnyLengt() {
String[] validValues = { stringUtil.getWithLength(8941),
stringUtil.getWithLength(2), stringUtil.getWithLength(10000000) };
for (String s : validValues) {
validTreatmentArm.setDescription(s);
assertEquals(s, validTreatmentArm.getDescription());
assertValid(validTreatmentArm);
}
}
@Test
public void testNameNotNull() {
validTreatmentArm.setName(null);
assertNull(validTreatmentArm.getName());
assertInvalid(validTreatmentArm);
}
@Test
public void testNameNotEmpty() {
validTreatmentArm.setName("");
assertEquals("", validTreatmentArm.getName());
assertInvalid(validTreatmentArm);
}
@Test
public void testNameLongerThan255() {
String[] invalidValues = { stringUtil.getWithLength(256),
stringUtil.getWithLength(650) };
for (String s : invalidValues) {
validTreatmentArm.setName(s);
assertEquals(s, validTreatmentArm.getName());
assertInvalid(validTreatmentArm);
}
}
@Test
public void testNameCorrect() {
String[] validValues = { stringUtil.getWithLength(254),
stringUtil.getWithLength(2), "Name",
stringUtil.getWithLength(132) };
for (String s : validValues) {
validTreatmentArm.setName(s);
assertEquals(s, validTreatmentArm.getName());
assertValid(validTreatmentArm);
}
}
@Test
public void testPlannedSubjectSizeLessThan1() {
int[] invalidValues = { 0, -125, -4694123, Integer.MIN_VALUE };
for (int i : invalidValues) {
validTreatmentArm.setPlannedSubjects(i);
assertEquals(i, validTreatmentArm.getPlannedSubjects());
assertInvalid(validTreatmentArm);
}
}
@Test
public void testPlannedSubjectCorrect() {
int[] validValues = { 1, 123, 15834, Integer.MAX_VALUE, 2147483647 };
for (int i : validValues) {
validTreatmentArm.setPlannedSubjects(i);
assertEquals(i, validTreatmentArm.getPlannedSubjects());
assertValid(validTreatmentArm);
}
}
@Test
public void testSubjectsNull() {
validTreatmentArm.setSubjects(null);
assertValid(validTreatmentArm);
}
@Test
public void testSubjects() {
assertTrue(validTreatmentArm.getSubjects().isEmpty());
assertValid(validTreatmentArm);
TrialSubject subject1 = new TrialSubject();
subject1.setIdentification("id1");
TrialSubject subject2 = new TrialSubject();
subject2.setIdentification("id2");
List<TrialSubject> list = new ArrayList<TrialSubject>();
list.add(subject1);
list.add(subject2);
validTreatmentArm.setSubjects(list);
assertValid(validTreatmentArm);
assertEquals(2, validTreatmentArm.getSubjects().size());
assertTrue(validTreatmentArm.getSubjects().contains(subject1));
assertTrue(validTreatmentArm.getSubjects().contains(subject2));
list = new ArrayList<TrialSubject>();
list.add(new TrialSubject());
validTreatmentArm.setSubjects(list);
assertEquals(list, validTreatmentArm.getSubjects());
}
@Test
public void testSubjectsAdd() {
assertTrue(validTreatmentArm.getSubjects().isEmpty());
assertValid(validTreatmentArm);
TrialSubject subject1 = new TrialSubject();
subject1.setIdentification("id1");
TrialSubject subject2 = new TrialSubject();
subject2.setIdentification("id2");
validTreatmentArm.addSubject(subject1);
assertValid(validTreatmentArm);
validTreatmentArm.addSubject(subject2);
assertValid(validTreatmentArm);
assertEquals(2, validTreatmentArm.getSubjects().size());
assertTrue(validTreatmentArm.getSubjects().contains(subject1));
assertTrue(validTreatmentArm.getSubjects().contains(subject2));
}
@Test
public void testCurrentSubjectAmount() {
for (int i = 1; i <= 100; i++) {
validTreatmentArm.addSubject(new TrialSubject());
assertEquals(i, validTreatmentArm.getCurrentSubjectsAmount());
}
}
@Test
public void testFillLevel() {
validTreatmentArm.setPlannedSubjects(100);
for (int i = 1; i <= 100; i++) {
validTreatmentArm.addSubject(new TrialSubject());
assertEquals(i, validTreatmentArm.getCurrentSubjectsAmount());
DecimalFormat f = new DecimalFormat("#0.00000");
assertEquals(f.format(i), f
.format(validTreatmentArm.getFillLevel()));
}
}
@Test
public void testTrialNotNull(){
validTreatmentArm.setTrial(null);
assertNull(validTreatmentArm.getTrial());
assertInvalid(validTreatmentArm);
}
@Test
public void testTrialCorrect() {
Trial trial = factory.getTrial();
validTreatmentArm.setTrial(trial);
assertEquals(trial, validTreatmentArm.getTrial());
assertValid(validTreatmentArm);
}
@Test
public void testEqualsHashCode() {
TreatmentArm arm1 = new TreatmentArm();
TreatmentArm arm2 = new TreatmentArm();
assertTrue(arm1.equals(arm2));
assertEquals(arm1.hashCode(), arm2.hashCode());
arm1.setId(12);
arm2.setId(12);
assertTrue(arm1.equals(arm2));
assertEquals(arm1.hashCode(), arm2.hashCode());
arm1.setName("name");
arm2.setName("name");
assertTrue(arm1.equals(arm2));
assertEquals(arm1.hashCode(), arm2.hashCode());
arm1.setDescription("name");
arm2.setDescription("name");
assertTrue(arm1.equals(arm2));
assertEquals(arm1.hashCode(), arm2.hashCode());
arm1.setPlannedSubjects(10);
arm2.setPlannedSubjects(10);
assertTrue(arm1.equals(arm2));
assertEquals(arm1.hashCode(), arm2.hashCode());
arm1.setId(12);
arm2.setId(13);
assertFalse(arm1.equals(arm2));
arm2.setId(12);
assertTrue(arm1.equals(arm2));
arm1.setName("name");
arm2.setName("name1");
assertFalse(arm1.equals(arm2));
arm2.setName("name");
assertTrue(arm1.equals(arm2));
assertEquals(arm1.hashCode(), arm2.hashCode());
arm1.setDescription("name");
arm2.setDescription("name1");
assertFalse(arm1.equals(arm2));
arm2.setDescription("name");
assertTrue(arm1.equals(arm2));
assertEquals(arm1.hashCode(), arm2.hashCode());
arm1.setPlannedSubjects(10);
arm2.setPlannedSubjects(11);
assertFalse(arm1.equals(arm2));
arm2.setPlannedSubjects(10);
assertTrue(arm1.equals(arm2));
assertEquals(arm1.hashCode(), arm2.hashCode());
arm1.setVersion(256);
assertTrue(arm1.equals(arm2));
assertEquals(arm1.hashCode(), arm2.hashCode());
assertFalse(arm1.equals(null));
assertFalse(arm1.equals(new Trial()));
}
@Test
public void testGetRequieredFields() {
Map<String, Boolean> map = (new TreatmentArm()).getRequiredFields();
for (String key : map.keySet()) {
if (key.equals("name")) {
assertTrue(map.get(key));
} else if (key.equals("description")) {
assertTrue(map.get(key));
} else if (key.equals("plannedSubjects")) {
assertFalse(map.get(key));
} else if (key.equals("trial")) {
assertTrue(map.get(key));
} else if (key.equals("subjects")) {
assertFalse(map.get(key));
} else if (key.equals("serialVersionUID")) {
assertFalse(map.get(key));
} else if (key.equals("$VRc")) {
assertFalse(map.get(key));
} else
fail(key + " not checked");
}
}
@Test
public void testToString() {
assertNotNull(validTreatmentArm.toString());
}
@Test
public void testUiName() {
validTreatmentArm.setName("valid name");
assertEquals("valid name", validTreatmentArm.getUIName());
}
}