package org.synyx.urlaubsverwaltung.web.application;
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.application.domain.Application;
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.workingtime.WorkDaysService;
import org.synyx.urlaubsverwaltung.test.TestDataCreator;
import java.math.BigDecimal;
/**
* @author Aljona Murygina - murygina@synyx.de
*/
public class ApplicationForLeaveTest {
private WorkDaysService calendarService;
@Before
public void setUp() {
calendarService = Mockito.mock(WorkDaysService.class);
}
@Test
public void ensureCreatesCorrectApplicationForLeave() {
Person person = TestDataCreator.createPerson();
Application application = TestDataCreator.createApplication(person, new DateMidnight(2015, 3, 3),
new DateMidnight(2015, 3, 6), DayLength.FULL);
Mockito.when(calendarService.getWorkDays(Mockito.any(DayLength.class), Mockito.any(DateMidnight.class),
Mockito.any(DateMidnight.class), Mockito.any(Person.class)))
.thenReturn(BigDecimal.TEN);
ApplicationForLeave applicationForLeave = new ApplicationForLeave(application, calendarService);
Mockito.verify(calendarService)
.getWorkDays(application.getDayLength(), application.getStartDate(), application.getEndDate(), person);
Assert.assertNotNull("Should not be null", applicationForLeave.getStartDate());
Assert.assertNotNull("Should not be null", applicationForLeave.getEndDate());
Assert.assertNotNull("Should not be null", applicationForLeave.getDayLength());
Assert.assertEquals("Wrong start date", application.getStartDate(), applicationForLeave.getStartDate());
Assert.assertEquals("Wrong end date", application.getEndDate(), applicationForLeave.getEndDate());
Assert.assertEquals("Wrong day length", application.getDayLength(), applicationForLeave.getDayLength());
Assert.assertNotNull("Should not be null", applicationForLeave.getWorkDays());
Assert.assertEquals("Wrong number of work days", BigDecimal.TEN, applicationForLeave.getWorkDays());
}
@Test
public void ensureApplicationForLeaveHasInformationAboutDayOfWeek() {
Person person = TestDataCreator.createPerson();
Application application = TestDataCreator.createApplication(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));
ApplicationForLeave applicationForLeave = new ApplicationForLeave(application, calendarService);
Assert.assertNotNull("Missing day of week for start date", applicationForLeave.getWeekDayOfStartDate());
Assert.assertEquals("Wrong day of week for start date", WeekDay.TUESDAY,
applicationForLeave.getWeekDayOfStartDate());
Assert.assertNotNull("Missing day of week for end date", applicationForLeave.getWeekDayOfEndDate());
Assert.assertEquals("Wrong day of week for end date", WeekDay.FRIDAY,
applicationForLeave.getWeekDayOfEndDate());
}
}