package org.synyx.urlaubsverwaltung.web.statistics; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.synyx.urlaubsverwaltung.core.application.domain.VacationCategory; import org.synyx.urlaubsverwaltung.core.application.domain.VacationType; import org.synyx.urlaubsverwaltung.core.application.service.VacationTypeService; import org.synyx.urlaubsverwaltung.core.person.Person; import org.synyx.urlaubsverwaltung.test.TestDataCreator; import java.math.BigDecimal; import java.util.List; /** * Unit test for {@link org.synyx.urlaubsverwaltung.web.statistics.ApplicationForLeaveStatistics}. * * @author Aljona Murygina - murygina@synyx.de */ public class ApplicationForLeaveStatisticsTest { // Initialization -------------------------------------------------------------------------------------------------- private VacationTypeService vacationTypeService; private List<VacationType> vacationTypes; @Before public void setUp() { vacationTypeService = Mockito.mock(VacationTypeService.class); vacationTypes = TestDataCreator.createVacationTypes(); Mockito.when(vacationTypeService.getVacationTypes()).thenReturn(vacationTypes); } @Test(expected = IllegalArgumentException.class) public void ensureThrowsIfInitializedWithNull() { new ApplicationForLeaveStatistics(null, null); } @Test public void ensureHasDefaultValues() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); Assert.assertNotNull("Person should not be null", statistics.getPerson()); Assert.assertNotNull("Total waiting vacation days should not be null", statistics.getTotalWaitingVacationDays()); Assert.assertNotNull("Total allowed vacation days should not be null", statistics.getTotalAllowedVacationDays()); Assert.assertNotNull("Left vacation days should not be null", statistics.getLeftVacationDays()); Assert.assertNotNull("Left overtime should not be null", statistics.getLeftOvertime()); Assert.assertNotNull("Waiting vacation days per type should not be null", statistics.getWaitingVacationDays()); Assert.assertNotNull("Allowed vacation days per type should not be null", statistics.getAllowedVacationDays()); // Total Assert.assertEquals("Total waiting vacation days should have default value", BigDecimal.ZERO, statistics.getTotalWaitingVacationDays()); Assert.assertEquals("Total allowed vacation days should have default value", BigDecimal.ZERO, statistics.getTotalAllowedVacationDays()); // Left Assert.assertEquals("Left vacation days should have default value", BigDecimal.ZERO, statistics.getLeftVacationDays()); Assert.assertEquals("Left overtime should have default value", BigDecimal.ZERO, statistics.getLeftOvertime()); // Per vacation type Assert.assertEquals("Wrong number of elements", TestDataCreator.createVacationTypes().size(), statistics.getWaitingVacationDays().size()); Assert.assertEquals("Wrong number of elements", TestDataCreator.createVacationTypes().size(), statistics.getAllowedVacationDays().size()); for (VacationType type : TestDataCreator.createVacationTypes()) { Assert.assertEquals("Waiting vacation days for " + type.getCategory() + " should be zero", BigDecimal.ZERO, statistics.getWaitingVacationDays().get(type)); Assert.assertEquals("Allowed vacation days for " + type.getCategory() + " should be zero", BigDecimal.ZERO, statistics.getAllowedVacationDays().get(type)); } } // Total left vacation days ---------------------------------------------------------------------------------------- @Test public void ensureCanSetTotalLeftVacationDays() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.setLeftVacationDays(BigDecimal.ONE); Assert.assertEquals("Wrong number of days", BigDecimal.ONE, statistics.getLeftVacationDays()); } @Test(expected = IllegalArgumentException.class) public void ensureThrowsIfSettingTotalLeftVacationDaysToNull() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.setLeftVacationDays(null); } // Adding vacation days -------------------------------------------------------------------------------------------- @Test(expected = IllegalArgumentException.class) public void ensureThrowsIfAddingWaitingVacationDaysWithNullVacationType() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.addWaitingVacationDays(null, BigDecimal.ONE); } @Test(expected = IllegalArgumentException.class) public void ensureThrowsIfAddingWaitingVacationDaysWithNullDays() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.addWaitingVacationDays(TestDataCreator.createVacationType(VacationCategory.HOLIDAY), null); } @Test(expected = IllegalArgumentException.class) public void ensureThrowsIfAddingAllowedVacationDaysWithNullVacationType() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.addAllowedVacationDays(null, BigDecimal.ONE); } @Test(expected = IllegalArgumentException.class) public void ensureThrowsIfAddingAllowedVacationDaysWithNullDays() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.addAllowedVacationDays(TestDataCreator.createVacationType(VacationCategory.HOLIDAY), null); } @Test public void ensureCanAddWaitingVacationDays() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.addWaitingVacationDays(vacationTypes.get(0), BigDecimal.ONE); statistics.addWaitingVacationDays(vacationTypes.get(0), BigDecimal.ONE); statistics.addWaitingVacationDays(vacationTypes.get(1), BigDecimal.ONE); Assert.assertEquals("Wrong number of days", new BigDecimal("2"), statistics.getWaitingVacationDays().get(vacationTypes.get(0))); Assert.assertEquals("Wrong number of days", BigDecimal.ONE, statistics.getWaitingVacationDays().get(vacationTypes.get(1))); Assert.assertEquals("Wrong number of days", BigDecimal.ZERO, statistics.getWaitingVacationDays().get(vacationTypes.get(2))); Assert.assertEquals("Wrong number of days", BigDecimal.ZERO, statistics.getWaitingVacationDays().get(vacationTypes.get(3))); } @Test public void ensureCanAddAllowedVacationDays() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.addAllowedVacationDays(vacationTypes.get(2), BigDecimal.ONE); statistics.addAllowedVacationDays(vacationTypes.get(2), BigDecimal.ONE); statistics.addAllowedVacationDays(vacationTypes.get(3), BigDecimal.ONE); Assert.assertEquals("Wrong number of days", BigDecimal.ZERO, statistics.getAllowedVacationDays().get(vacationTypes.get(0))); Assert.assertEquals("Wrong number of days", BigDecimal.ZERO, statistics.getAllowedVacationDays().get(vacationTypes.get(1))); Assert.assertEquals("Wrong number of days", new BigDecimal("2"), statistics.getAllowedVacationDays().get(vacationTypes.get(2))); Assert.assertEquals("Wrong number of days", BigDecimal.ONE, statistics.getAllowedVacationDays().get(vacationTypes.get(3))); } // Total waiting vacation days ------------------------------------------------------------------------------------- @Test public void ensureCanCalculateTotalWaitingVacationDays() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.addWaitingVacationDays(vacationTypes.get(0), BigDecimal.ONE); statistics.addWaitingVacationDays(vacationTypes.get(0), BigDecimal.ONE); statistics.addWaitingVacationDays(vacationTypes.get(0), BigDecimal.ONE); statistics.addWaitingVacationDays(vacationTypes.get(1), BigDecimal.ONE); statistics.addWaitingVacationDays(vacationTypes.get(1), BigDecimal.ONE); statistics.addWaitingVacationDays(vacationTypes.get(2), BigDecimal.ONE); statistics.addWaitingVacationDays(vacationTypes.get(3), BigDecimal.TEN); Assert.assertEquals("Wrong total waiting vacation days", new BigDecimal("16"), statistics.getTotalWaitingVacationDays()); } // Total allowed vacation days ------------------------------------------------------------------------------------- @Test public void ensureCanCalculateTotalAllowedVacationDays() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.addAllowedVacationDays(vacationTypes.get(0), BigDecimal.ONE); statistics.addAllowedVacationDays(vacationTypes.get(0), BigDecimal.ONE); statistics.addAllowedVacationDays(vacationTypes.get(0), BigDecimal.ONE); statistics.addAllowedVacationDays(vacationTypes.get(1), BigDecimal.ONE); statistics.addAllowedVacationDays(vacationTypes.get(1), BigDecimal.ONE); statistics.addAllowedVacationDays(vacationTypes.get(2), BigDecimal.ONE); statistics.addAllowedVacationDays(vacationTypes.get(3), BigDecimal.TEN); Assert.assertEquals("Wrong total allowed vacation days", new BigDecimal("16"), statistics.getTotalAllowedVacationDays()); } // Total left overtime --------------------------------------------------------------------------------------------- @Test public void ensureCanSetTotalLeftOvertime() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.setLeftOvertime(BigDecimal.ONE); Assert.assertEquals("Wrong number of hours", BigDecimal.ONE, statistics.getLeftOvertime()); } @Test(expected = IllegalArgumentException.class) public void ensureThrowsIfSettingTotalLeftOvertimeToNull() { Person person = Mockito.mock(Person.class); ApplicationForLeaveStatistics statistics = new ApplicationForLeaveStatistics(person, vacationTypeService); statistics.setLeftOvertime(null); } }