package org.synyx.urlaubsverwaltung.web.statistics; import org.joda.time.DateMidnight; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.synyx.urlaubsverwaltung.core.period.DayLength; import org.synyx.urlaubsverwaltung.core.person.Person; import org.synyx.urlaubsverwaltung.core.sicknote.SickNote; import org.synyx.urlaubsverwaltung.core.sicknote.SickNoteCategory; import org.synyx.urlaubsverwaltung.core.sicknote.SickNoteStatus; import org.synyx.urlaubsverwaltung.core.sicknote.SickNoteType; import org.synyx.urlaubsverwaltung.core.workingtime.WorkDaysService; import java.math.BigDecimal; import java.util.Arrays; import java.util.List; /** * @author Aljona Murygina - murygina@synyx.de */ public class SickDaysOverviewTest { private WorkDaysService calendarService; @Before public void setUp() { calendarService = Mockito.mock(WorkDaysService.class); } @Test public void ensureGeneratesCorrectSickDaysOverview() { SickNoteType sickNoteType = new SickNoteType(); sickNoteType.setCategory(SickNoteCategory.SICK_NOTE); sickNoteType.setDisplayName("Krankmeldung"); SickNoteType sickNoteTypeChild = new SickNoteType(); sickNoteTypeChild.setCategory(SickNoteCategory.SICK_NOTE_CHILD); sickNoteTypeChild.setDisplayName("Kind-Krankmeldung"); SickNote sickNoteWithoutAUB = new SickNote(); sickNoteWithoutAUB.setSickNoteType(sickNoteType); sickNoteWithoutAUB.setStatus(SickNoteStatus.ACTIVE); sickNoteWithoutAUB.setStartDate(new DateMidnight(2014, 10, 13)); sickNoteWithoutAUB.setEndDate(new DateMidnight(2014, 10, 13)); SickNote sickNoteWithAUB = new SickNote(); sickNoteWithAUB.setSickNoteType(sickNoteType); sickNoteWithAUB.setStatus(SickNoteStatus.ACTIVE); sickNoteWithAUB.setStartDate(new DateMidnight(2014, 10, 14)); sickNoteWithAUB.setEndDate(new DateMidnight(2014, 10, 14)); sickNoteWithAUB.setAubStartDate(new DateMidnight(2014, 10, 14)); sickNoteWithAUB.setAubEndDate(new DateMidnight(2014, 10, 14)); SickNote childSickNoteWithoutAUB = new SickNote(); childSickNoteWithoutAUB.setSickNoteType(sickNoteTypeChild); childSickNoteWithoutAUB.setStatus(SickNoteStatus.ACTIVE); childSickNoteWithoutAUB.setStartDate(new DateMidnight(2014, 10, 15)); childSickNoteWithoutAUB.setEndDate(new DateMidnight(2014, 10, 15)); SickNote childSickNoteWithAUB = new SickNote(); childSickNoteWithAUB.setSickNoteType(sickNoteTypeChild); childSickNoteWithAUB.setStatus(SickNoteStatus.ACTIVE); childSickNoteWithAUB.setStartDate(new DateMidnight(2014, 10, 16)); childSickNoteWithAUB.setEndDate(new DateMidnight(2014, 10, 16)); childSickNoteWithAUB.setAubStartDate(new DateMidnight(2014, 10, 16)); childSickNoteWithAUB.setAubEndDate(new DateMidnight(2014, 10, 16)); SickNote inactiveSickNote = new SickNote(); inactiveSickNote.setSickNoteType(sickNoteTypeChild); inactiveSickNote.setStatus(SickNoteStatus.CANCELLED); inactiveSickNote.setStartDate(new DateMidnight(2014, 10, 17)); inactiveSickNote.setEndDate(new DateMidnight(2014, 10, 17)); SickNote inactiveChildSickNote = new SickNote(); inactiveChildSickNote.setSickNoteType(sickNoteTypeChild); inactiveChildSickNote.setStatus(SickNoteStatus.CANCELLED); inactiveChildSickNote.setStartDate(new DateMidnight(2014, 10, 18)); inactiveChildSickNote.setEndDate(new DateMidnight(2014, 10, 18)); List<SickNote> sickNotes = Arrays.asList(sickNoteWithoutAUB, sickNoteWithAUB, childSickNoteWithoutAUB, childSickNoteWithAUB, inactiveSickNote, inactiveChildSickNote); // just return 1 day for each sick note Mockito.when(calendarService.getWorkDays(Mockito.any(DayLength.class), Mockito.any(DateMidnight.class), Mockito.any(DateMidnight.class), Mockito.any(Person.class))) .thenReturn(BigDecimal.ONE); SickDaysOverview sickDaysOverview = new SickDaysOverview(sickNotes, calendarService); SickDays sickDays = sickDaysOverview.getSickDays(); Assert.assertNotNull("Should not be null", sickDays.getDays()); Assert.assertEquals("Wrong number of sick days without AUB", new BigDecimal("2"), sickDays.getDays().get("TOTAL")); Assert.assertEquals("Wrong number of sick days with AUB", BigDecimal.ONE, sickDays.getDays().get("WITH_AUB")); SickDays childSickDays = sickDaysOverview.getChildSickDays(); Assert.assertNotNull("Should not be null", childSickDays.getDays()); Assert.assertEquals("Wrong number of child sick days without AUB", new BigDecimal("2"), childSickDays.getDays().get("TOTAL")); Assert.assertEquals("Wrong number of child sick days with AUB", BigDecimal.ONE, childSickDays.getDays().get("WITH_AUB")); } }