package net.rrm.ehour.ui.common.panel.calendar;
import net.rrm.ehour.timesheet.service.IOverviewTimesheet;
import org.joda.time.DateTimeConstants;
import org.joda.time.LocalDate;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.Arrays;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
public class CalendarWeekFactoryTest {
@Mock
private IOverviewTimesheet overviewTimesheet;
private CalendarWeekFactory factory;
@Before
public void init_subject() {
MockitoAnnotations.initMocks(this);
factory = new CalendarWeekFactory(overviewTimesheet);
}
@Test
public void should_mark_first_and_last_rows() {
List<CalendarWeek> weeks = factory.createWeeks(Calendar.SUNDAY, 1, GregorianCalendar.getInstance());
assertEquals(ElementLocation.FIRST, weeks.get(0).getLocation());
assertEquals(ElementLocation.MIDDLE, weeks.get(1).getLocation());
assertEquals(ElementLocation.LAST, weeks.get(weeks.size() - 1).getLocation());
}
@Test
public void should_create_weeks_for_january_2012() {
List<CalendarWeek> weeks = factory.createWeeks(Calendar.SUNDAY, 1, new GregorianCalendar(2012, Calendar.JANUARY, 1));
CalendarWeek calendarWeek = weeks.get(0);
assertEquals(1, calendarWeek.getWeek());
assertEquals(1, calendarWeek.getWeekStart().get(Calendar.DAY_OF_MONTH));
assertEquals(5, weeks.size());
}
@Test
public void should_create_weeks_for_february_2013() {
GregorianCalendar requestedMonth = new GregorianCalendar(2013, Calendar.FEBRUARY, 1);
LocalDate bookedDay = new LocalDate(2013, DateTimeConstants.FEBRUARY, 3);
when(overviewTimesheet.getBookedDaysMonthOverview(1, requestedMonth)).thenReturn(Arrays.asList(bookedDay));
List<CalendarWeek> weeks = factory.createWeeks(Calendar.MONDAY, 1, requestedMonth);
CalendarWeek calendarWeek = weeks.get(0);
assertEquals(5, calendarWeek.getWeek());
assertEquals(28, calendarWeek.getWeekStart().get(Calendar.DAY_OF_MONTH));
assertEquals(5, weeks.size());
assertEquals(3, calendarWeek.getDay(Calendar.SUNDAY).getMonthDay());
assertTrue(calendarWeek.getDay(Calendar.SUNDAY).isBooked());
}
}