package de.randi2.core.unit.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import de.randi2.model.Login;
import de.randi2.model.Person;
import de.randi2.model.TreatmentArm;
import de.randi2.model.enumerations.Gender;
import de.randi2.model.exceptions.ValidationException;
import de.randi2.testUtility.utility.AbstractDomainTest;
public class PersonTest extends AbstractDomainTest<Person> {
private Person validPerson;
public PersonTest() {
super(Person.class);
}
@Before
public void setUp() {
validPerson = super.factory.getPerson();
validPerson.setLogin(factory.getLogin());
validPerson.getLogin().setPerson(validPerson);
}
@Test(expected = ValidationException.class)
public void testValidation() {
validPerson.checkValue("surname", stringUtil.getWithLength(400));
validPerson.checkValue("eMail", stringUtil.getWithLength(100));
}
@Test
public void testConstructor() {
Person p = new Person();
assertEquals("", p.getFirstname());
assertEquals("", p.getSurname());
assertEquals("", p.getTitle());
// TODO
// assertNull(p.getGender());
assertEquals("", p.getEmail());
assertEquals("", p.getPhone());
assertEquals("", p.getMobile());
assertEquals("", p.getFax());
assertNull(p.getAssistant());
assertNull(p.getLogin());
// assertEquals(0, p.getRoles().size());
}
@Test
public void testTitleNull(){
validPerson.setTitle(null);
assertEquals(null, validPerson.getTitle());
assertValid(validPerson);
}
@Test
public void testTitleEmpty(){
validPerson.setTitle("");
assertEquals("", validPerson.getTitle());
assertValid(validPerson);
}
@Test
public void testTitleNotLongerThan20(){
assertEquals(20, Person.MAX_TITLE_LENGTH);
validPerson.setTitle(stringUtil.getWithLength(Person.MAX_TITLE_LENGTH+1) );
assertInvalid(validPerson);
}
@Test
public void testTitleCorrectValue(){
String[] validValues= {"A","Abcsdafasd", "Title" , stringUtil.getWithLength(Person.MAX_TITLE_LENGTH) };
for(String s :validValues){
validPerson.setTitle(s);
assertEquals(s, validPerson.getTitle());
assertValid(validPerson);
}
}
@Test
public void testPhoneNotNull(){
validPerson.setPhone(null);
assertInvalid(validPerson);
}
@Test
public void testPhoneNotEmpty(){
validPerson.setPhone("");
assertInvalid(validPerson);
}
@Test
public void testPhoneCorrect(){
String[] validPhoneNumber = { "01234/45678", "+49 123456 789123",
"(123456)67890", "123456789"};
for(String s : validPhoneNumber){
validPerson.setPhone(s);
assertValid(validPerson);
}
}
@Test
public void testPhoneIncorrect(){
String[] invalidPhoneNumber = { "abc1234/09707", "12345d56789", "abasd" };
for(String s : invalidPhoneNumber){
validPerson.setPhone(s);
assertInvalid(validPerson);
}
}
@Test
public void testMobileNull(){
validPerson.setMobile(null);
assertValid(validPerson);
}
@Test
public void testMoblieEmpty(){
validPerson.setMobile("");
assertValid(validPerson);
}
@Test
public void testMobileCorrect(){
String[] validPhoneNumber = { "01234/45678", "+49 123456 789123",
"(123456)67890", "123456789", "", null };
for(String s : validPhoneNumber){
validPerson.setMobile(s);
assertValid(validPerson);
}
}
@Test
public void testMobileIncorrect(){
String[] invalidPhoneNumber = { "abc1234/09707", "12345d56789", "abasd" };
for(String s : invalidPhoneNumber){
validPerson.setMobile(s);
assertInvalid(validPerson);
}
}
@Test
public void testFaxNull(){
validPerson.setFax(null);
assertValid(validPerson);
}
@Test
public void testFaxEmpty(){
validPerson.setFax("");
assertValid(validPerson);
}
@Test
public void testFaxCorrect(){
String[] validPhoneNumber = { "01234/45678", "+49 123456 789123",
"(123456)67890", "123456789", "", null };
for(String s : validPhoneNumber){
validPerson.setFax(s);
assertValid(validPerson);
}
}
@Test
public void testFaxIncorrect(){
String[] invalidPhoneNumber = { "abc1234/09707", "12345d56789", "abasd" };
for(String s : invalidPhoneNumber){
validPerson.setFax(s);
assertInvalid(validPerson);
}
}
@Test
public void testEMailNotNull() {
validPerson.setEmail(null);
assertInvalid(validPerson);
}
@Test
public void testEMailNotEmpty() {
validPerson.setEmail("");
assertInvalid(validPerson);
}
@Test
public void testEMailCorrectValues() {
String[] validEMails = {"abc@def.de", "h@alo.com", "info@2wikipedia.org", "mue5ller@gmx.net", "max-muster@raf.uk", "xyz@test.info"};
for (String s: validEMails){
validPerson.setEmail(s);
assertValid(validPerson);
}
}
@Test
public void testEMailIncorrectValues(){
String[] invalidEmails = new String[] { "without at","toomuch@@", "@test.org", "ab..c@de-dg.com",
"without@domain" , "abc@def.abcde"};
for (String s : invalidEmails) {
validPerson.setEmail(s);
assertInvalid(validPerson);
}
}
@Test
public void testSurnameNotNull(){
validPerson.setSurname(null);
assertEquals(null, validPerson.getSurname());
assertInvalid(validPerson);
}
@Test
public void testSurnameNotEmpty(){
validPerson.setSurname("");
assertEquals("", validPerson.getSurname());
assertInvalid(validPerson);
}
@Test
public void testSurnameNotLongerThan50(){
assertEquals(50, Person.MAX_NAME_LENGTH);
validPerson.setSurname(stringUtil.getWithLength(Person.MAX_NAME_LENGTH+1) );
assertInvalid(validPerson);
}
@Test
public void testSurnameCorrectValue(){
String[] validValues= {"A","Abcsdafasd", "Name" , stringUtil.getWithLength(Person.MAX_NAME_LENGTH) };
for(String s :validValues){
validPerson.setSurname(s);
assertEquals(s, validPerson.getSurname());
assertValid(validPerson);
}
}
@Test
public void testFirstnameNotNull(){
validPerson.setFirstname(null);
assertEquals(null, validPerson.getFirstname());
assertInvalid(validPerson);
}
@Test
public void testFirstnameNotEmpty(){
validPerson.setFirstname("");
assertEquals("", validPerson.getFirstname());
assertInvalid(validPerson);
}
@Test
public void testFirstnameNotLongerThan50(){
assertEquals(50, Person.MAX_NAME_LENGTH);
validPerson.setFirstname(stringUtil.getWithLength(Person.MAX_NAME_LENGTH+1) );
assertInvalid(validPerson);
}
@Test
public void testFirstnameCorrectValue(){
String[] validValues= {"A","Abcsdafasd", "Name" , stringUtil.getWithLength(Person.MAX_NAME_LENGTH) };
for(String s :validValues){
validPerson.setFirstname(s);
assertEquals(s, validPerson.getFirstname());
assertValid(validPerson);
}
}
@Test
public void testSexNotNull() {
validPerson.setSex(null);
assertEquals(null, validPerson.getSex());
assertInvalid(validPerson);
}
@Test
public void testSexCorrectValue() {
validPerson.setSex(Gender.MALE);
assertEquals(Gender.MALE, validPerson.getSex());
assertValid(validPerson);
validPerson.setSex(Gender.FEMALE);
assertEquals(Gender.FEMALE, validPerson.getSex());
assertValid(validPerson);
}
@Test
public void testLoginNull() {
validPerson.setLogin(null);
assertValid(validPerson);
}
@Test
public void testLoginCorrectValue() {
Login login = factory.getLogin();
validPerson.setLogin(login);
assertEquals(login, validPerson.getLogin());
assertValid(validPerson);
}
@Test
public void testAssistantIsNull() {
validPerson.setAssistant(null);
assertEquals(null, validPerson.getAssistant());
assertValid(validPerson);
}
@Test
public void testAssistantWithoutLogin() {
Person assistant = factory.getPerson();
assistant.setLogin(null);
validPerson.setAssistant(assistant);
assertEquals(assistant, validPerson.getAssistant());
assertValid(validPerson);
}
@Test
public void testAssistantWithLogin() {
Person assistant = factory.getPerson();
assistant.setLogin(factory.getLogin());
validPerson.setAssistant(assistant);
assertEquals(assistant, validPerson.getAssistant());
assertInvalid(validPerson);
}
@Test
public void testGetRequieredFields(){
Map<String, Boolean> map = validPerson.getRequiredFields();
for(String key : map.keySet()){
if(key.equals("surname")) {assertTrue(map.get(key));}
else if(key.equals("firstname")) {assertTrue(map.get(key));}
else if(key.equals("title")) {assertFalse(map.get(key));}
else if(key.equals("sex")) {assertTrue(map.get(key));}
else if(key.equals("email")) {assertTrue(map.get(key));}
else if(key.equals("phone")) {assertTrue(map.get(key)); }
else if(key.equals("mobile")) {assertFalse(map.get(key));}
else if(key.equals("fax")) {assertFalse(map.get(key));}
else if(key.equals("assistant")) {assertFalse(map.get(key)); }
else if(key.equals("trialSite")) {assertFalse(map.get(key)); }
else if(key.equals("login")) {assertFalse(map.get(key)); }
else if(key.equals("MAX_TITLE_LENGTH")) {assertFalse(map.get(key));}
else if(key.equals("MAX_NAME_LENGTH")) {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 testUiName(){
validPerson.setSurname("surname");
validPerson.setFirstname("firstname");
assertEquals("surname, firstname", validPerson.getUIName());
}
@Test
public void testToString(){
assertNotNull(validPerson.toString());
}
@Test
public void testEqualsHashCode(){
Person person1 = new Person();
Person person2 = new Person();
person1.setId(0);
person2.setId(0);
person1.setVersion(0);
person2.setVersion(0);
assertEquals(person1, person2);
assertEquals(person1.hashCode(), person2.hashCode());
person1.setId(1);
assertFalse(person1.equals(person2));
person1.setId(0);
assertEquals(person1, person2);
assertEquals(person1.hashCode(), person2.hashCode());
person1.setVersion(1);
assertFalse(person1.equals(person2));
person1.setVersion(0);
assertEquals(person1, person2);
assertEquals(person1.hashCode(), person2.hashCode());
person1.setSurname("test");
assertFalse(person1.equals(person2));
person2.setSurname("test");
assertEquals(person1, person2);
assertEquals(person1.hashCode(), person2.hashCode());
person1.setFirstname("test");
assertFalse(person1.equals(person2));
person2.setFirstname("test");
assertEquals(person1, person2);
assertEquals(person1.hashCode(), person2.hashCode());
person1.setSex(Gender.FEMALE);
person2.setSex(Gender.MALE);
assertFalse(person1.equals(person2));
person2.setSex(Gender.FEMALE);
assertEquals(person1, person2);
assertEquals(person1.hashCode(), person2.hashCode());
assertFalse(person1.equals(null));
assertFalse(person1.equals(new TreatmentArm()));
}
}