package org.synyx.urlaubsverwaltung.web.department;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.validation.Errors;
import org.synyx.urlaubsverwaltung.core.application.domain.Application;
import org.synyx.urlaubsverwaltung.core.department.Department;
import org.synyx.urlaubsverwaltung.core.person.Person;
import org.synyx.urlaubsverwaltung.core.person.Role;
import org.synyx.urlaubsverwaltung.test.TestDataCreator;
import java.util.Collections;
import static junit.framework.TestCase.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* @author Daniel Hammann - <hammann@synyx.de>
*/
public class DepartmentValidatorTest {
private DepartmentValidator sut;
private Errors errors = Mockito.mock(Errors.class);
@Before
public void setUp() throws Exception {
sut = new DepartmentValidator();
}
@Test
public void ensureSupportsOnlyDepartmentClass() throws Exception {
assertFalse(sut.supports(null));
assertFalse(sut.supports(Application.class));
assertTrue(sut.supports(Department.class));
}
@Test
public void ensureNameMustNotBeNull() throws Exception {
sut.validate(TestDataCreator.createDepartment(null), errors);
Mockito.verify(errors).rejectValue("name", "error.entry.mandatory");
}
@Test
public void ensureNameMustNotBeEmpty() throws Exception {
Department department = TestDataCreator.createDepartment("");
sut.validate(department, errors);
Mockito.verify(errors).rejectValue("name", "error.entry.mandatory");
}
@Test
public void ensureNameMustNotBeTooLong() throws Exception {
Department department = TestDataCreator.createDepartment(
"AAAAAAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
sut.validate(department, errors);
Mockito.verify(errors).rejectValue("name", "error.entry.tooManyChars");
}
@Test
public void ensureValidNameHasNoValidationError() {
Department department = TestDataCreator.createDepartment("Foobar Department");
sut.validate(department, errors);
Mockito.verifyZeroInteractions(errors);
}
@Test
public void ensureDescriptionMustNotBeTooLong() throws Exception {
Department department = TestDataCreator.createDepartment("Foobar Department");
department.setDescription(
"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut "
+ "labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo"
+ " dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor"
+ " sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod"
+ " tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et"
+ " accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus"
+ " est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed"
+ " diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua."
+ " At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea"
+ " takimata sanctus est Lorem ipsum dolor sit amet igir.");
sut.validate(department, errors);
Mockito.verify(errors).rejectValue("description", "error.entry.tooManyChars");
}
@Test
public void ensureValidDescriptionHasNoValidationError() {
Department department = TestDataCreator.createDepartment("Foobar Department",
"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut");
sut.validate(department, errors);
Mockito.verifyZeroInteractions(errors);
}
@Test
public void ensureSettingNeitherMembersNorDepartmentHeadsHasNoValidationError() {
Department department = TestDataCreator.createDepartment("Admins");
department.setMembers(null);
department.setDepartmentHeads(null);
sut.validate(department, errors);
Mockito.verifyZeroInteractions(errors);
}
@Test
public void ensureCanNotSetAPersonAsDepartmentHeadWithoutSettingAnyMember() {
Person person = TestDataCreator.createPerson();
person.setPermissions(Collections.singletonList(Role.DEPARTMENT_HEAD));
Department department = TestDataCreator.createDepartment("Admins");
department.setDepartmentHeads(Collections.singletonList(person));
department.setMembers(null);
sut.validate(department, errors);
Mockito.verify(errors).rejectValue("departmentHeads", "department.members.error.departmentHeadNotAssigned");
}
@Test
public void ensureCanNotSetAPersonAsDepartmentHeadWithoutSettingThePersonAsMember() {
Person person = TestDataCreator.createPerson("muster");
person.setPermissions(Collections.singletonList(Role.DEPARTMENT_HEAD));
Department department = TestDataCreator.createDepartment("Admins");
department.setDepartmentHeads(Collections.singletonList(person));
department.setMembers(Collections.singletonList(TestDataCreator.createPerson("member")));
sut.validate(department, errors);
Mockito.verify(errors).rejectValue("departmentHeads", "department.members.error.departmentHeadNotAssigned");
}
@Test
public void ensureCanNotSetAPersonWithoutDepartmentHeadRoleAsDepartmentHead() {
Person person = TestDataCreator.createPerson();
person.setPermissions(Collections.singletonList(Role.USER));
Department department = TestDataCreator.createDepartment("Admins");
department.setDepartmentHeads(Collections.singletonList(person));
sut.validate(department, errors);
Mockito.verify(errors).rejectValue("departmentHeads", "department.members.error.departmentHeadHasNoAccess");
}
@Test
public void ensureCanNotSetAPersonAsSecondStageAuthorityWithoutSettingThePersonAsMember() {
Person person = TestDataCreator.createPerson("muster");
person.setPermissions(Collections.singletonList(Role.SECOND_STAGE_AUTHORITY));
Department department = TestDataCreator.createDepartment("Admins");
department.setSecondStageAuthorities(Collections.singletonList(person));
department.setMembers(Collections.singletonList(TestDataCreator.createPerson("member")));
sut.validate(department, errors);
Mockito.verify(errors).rejectValue("secondStageAuthorities", "department.members.error.secondStageNotAssigned");
}
@Test
public void ensureCanNotSetAPersonWithoutSecondStageAuthorityRoleAsDepartmentHead() {
Person person = TestDataCreator.createPerson();
person.setPermissions(Collections.singletonList(Role.USER));
Department department = TestDataCreator.createDepartment("Admins");
department.setSecondStageAuthorities(Collections.singletonList(person));
sut.validate(department, errors);
Mockito.verify(errors).rejectValue("secondStageAuthorities", "department.members.error.secondStageHasNoAccess");
}
}