package org.synyx.urlaubsverwaltung.web.sicknote;
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.period.WeekDay;
import org.synyx.urlaubsverwaltung.core.person.Person;
import org.synyx.urlaubsverwaltung.core.sicknote.SickNote;
import org.synyx.urlaubsverwaltung.core.workingtime.WorkDaysService;
import org.synyx.urlaubsverwaltung.test.TestDataCreator;
import java.math.BigDecimal;
/**
* @author Aljona Murygina - murygina@synyx.de
*/
public class ExtendedSickNoteTest {
private WorkDaysService calendarService;
@Before
public void setUp() {
calendarService = Mockito.mock(WorkDaysService.class);
}
@Test
public void ensureCreatesCorrectExtendedSickNote() {
Person person = TestDataCreator.createPerson();
SickNote sickNote = TestDataCreator.createSickNote(person, new DateMidnight(2015, 3, 3),
new DateMidnight(2015, 3, 6), DayLength.MORNING);
Mockito.when(calendarService.getWorkDays(Mockito.any(DayLength.class), Mockito.any(DateMidnight.class),
Mockito.any(DateMidnight.class), Mockito.any(Person.class)))
.thenReturn(BigDecimal.TEN);
ExtendedSickNote extendedSickNote = new ExtendedSickNote(sickNote, calendarService);
Mockito.verify(calendarService)
.getWorkDays(sickNote.getDayLength(), sickNote.getStartDate(), sickNote.getEndDate(), person);
Assert.assertNotNull("Should not be null", extendedSickNote.getDayLength());
Assert.assertNotNull("Should not be null", extendedSickNote.getStartDate());
Assert.assertNotNull("Should not be null", extendedSickNote.getEndDate());
Assert.assertNotNull("Should not be null", extendedSickNote.getSickNoteType());
Assert.assertEquals("Wrong day length", sickNote.getDayLength(), extendedSickNote.getDayLength());
Assert.assertEquals("Wrong start date", sickNote.getStartDate(), extendedSickNote.getStartDate());
Assert.assertEquals("Wrong end date", sickNote.getEndDate(), extendedSickNote.getEndDate());
Assert.assertEquals("Wrong type", sickNote.getSickNoteType(), extendedSickNote.getSickNoteType());
Assert.assertNotNull("Should not be null", extendedSickNote.getWorkDays());
Assert.assertEquals("Wrong number of work days", BigDecimal.TEN, extendedSickNote.getWorkDays());
}
@Test
public void ensureExtendedSickNoteHasInformationAboutDayOfWeek() {
Person person = TestDataCreator.createPerson();
SickNote sickNote = TestDataCreator.createSickNote(person, new DateMidnight(2016, 3, 1),
new DateMidnight(2016, 3, 4), DayLength.FULL);
Mockito.when(calendarService.getWorkDays(Mockito.any(DayLength.class), Mockito.any(DateMidnight.class),
Mockito.any(DateMidnight.class), Mockito.any(Person.class)))
.thenReturn(BigDecimal.valueOf(4));
ExtendedSickNote extendedSickNote = new ExtendedSickNote(sickNote, calendarService);
Assert.assertNotNull("Missing day of week for start date", extendedSickNote.getWeekDayOfStartDate());
Assert.assertEquals("Wrong day of week for start date", WeekDay.TUESDAY,
extendedSickNote.getWeekDayOfStartDate());
Assert.assertNotNull("Missing day of week for end date", extendedSickNote.getWeekDayOfEndDate());
Assert.assertEquals("Wrong day of week for end date", WeekDay.FRIDAY, extendedSickNote.getWeekDayOfEndDate());
}
}