package no.niths.domain.school;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.util.Date;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import no.niths.domain.school.Course;
import no.niths.domain.school.Student;
import org.junit.BeforeClass;
import org.junit.Test;
public class StudentTest {
private static final Long ID = 1L;
private static final String FIRST_NAME = "John";
private static final String LAST_NAME = "Doe";
private static final char GENDER = 'M';
private static final Integer GRADE = 1;
private static final String EMAIL = "john@doe.com";
private static final String PHONE_NUMBER = "12345678";
private static final String DESCRIPTION = "Student at NITH";
private static final Date DATE = new Date();
private static Validator validator;
@BeforeClass
public static void setUp() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
@Test
public void testShouldGenerateNewStudent() {
Student student = new Student(FIRST_NAME, LAST_NAME, EMAIL,
PHONE_NUMBER);
student.setGender(GENDER);
student.setGrade(GRADE);
student.setDescription(DESCRIPTION);
student.setBirthday(DATE);
assertThat(FIRST_NAME, is(equalTo(student.getFirstName())));
assertThat(LAST_NAME, is(equalTo(student.getLastName())));
assertThat(GENDER, is(equalTo(student.getGender())));
assertThat(GRADE, is(equalTo(student.getGrade())));
assertThat(EMAIL, is(equalTo(student.getEmail())));
assertThat(PHONE_NUMBER, is(equalTo(student.getTelephoneNumber())));
assertThat(DESCRIPTION, is(equalTo(student.getDescription())));
assertThat(DATE, is(equalTo(student.getBirthday())));
assertThat(false, is(equalTo(student.isEmpty())));
}
@Test
public void testTwoEqualStudents() {
Student student = new Student(ID, FIRST_NAME, LAST_NAME);
student.setGender(GENDER);
student.setGrade(GRADE);
student.setEmail(EMAIL);
student.setTelephoneNumber(PHONE_NUMBER);
student.setDescription(DESCRIPTION);
Student equalStudent = student;
assertThat(true, is(equalTo(student.equals(equalStudent))));
}
@Test
public void testTwoStudentsWhichIsNotEqual() {
Student student = new Student(ID, FIRST_NAME, LAST_NAME);
student.setGender(GENDER);
student.setGrade(GRADE);
student.setEmail(EMAIL);
student.setTelephoneNumber(PHONE_NUMBER);
student.setDescription(DESCRIPTION);
Student notEqualStudent = new Student(FIRST_NAME, LAST_NAME, GENDER,
GRADE, EMAIL, PHONE_NUMBER, DESCRIPTION);
assertThat(false, is(equalTo(student.equals(notEqualStudent))));
}
@Test
public void testEqualsBetweenNotEqualObjects() {
Student student = new Student(ID, FIRST_NAME, LAST_NAME);
student.setGender(GENDER);
student.setGrade(GRADE);
student.setEmail(EMAIL);
student.setTelephoneNumber(PHONE_NUMBER);
student.setDescription(DESCRIPTION);
Course course = new Course();
assertThat(false, is(equalTo(student.equals(course))));
}
@Test
public void testEmptyStudentObject() {
Student student = new Student();
assertThat(true, is(equalTo(student.isEmpty())));
}
@Test
public void testValidationOfCorectStudentValues() {
Student student = new Student(FIRST_NAME, LAST_NAME, GENDER, GRADE,
EMAIL, PHONE_NUMBER, DESCRIPTION);
Set<ConstraintViolation<Student>> constraintViolations = validator
.validate(student);
assertThat(0, is(equalTo(constraintViolations.size())));
}
@Test
public void testValidationOfIncorectStudentValues() {
Student student = new Student(FIRST_NAME, LAST_NAME, 'K', 5, EMAIL,
PHONE_NUMBER, DESCRIPTION);
Set<ConstraintViolation<Student>> constraintViolations = validator
.validate(student);
constraintViolations = validator.validate(student);
assertThat(2, is(equalTo(constraintViolations.size())));
}
}