package com.metservice.kanban.charts;
import static com.metservice.kanban.utils.DateUtils.parseIsoDate;
import static java.util.Arrays.asList;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import java.util.Collections;
import java.util.List;
import org.hamcrest.collection.IsCollectionWithSize;
import org.joda.time.LocalDate;
import org.junit.Test;
import com.metservice.kanban.model.WorkItem;
import com.metservice.kanban.model.WorkItemType;
public class ChartUtilsTest {
private final WorkItemType TWO_PHASES = new WorkItemType("phase 1", "phase 2");
@Test
public void canReturnWorkingDaysForEmptyWorkItemsList() {
List<LocalDate> dates = ChartUtils.getWorkingDaysForWorkItems(Collections.<WorkItem> emptyList(), null,
parseIsoDate("2011-06-13"));
assertThat(dates, IsCollectionWithSize.hasSize(1));
assertThat(dates.get(0), is(parseIsoDate("2011-06-13")));
}
@Test
public void canReturnWorkingDaysForWorkItems() {
WorkItem workItem = new WorkItem(1, new WorkItemType("phase"));
workItem.setDateAsString("phase", "2011-06-10");
List<LocalDate> dates = ChartUtils.getWorkingDaysForWorkItems(asList(workItem), null, parseIsoDate("2011-06-13"));
assertThat(dates.get(0), is(parseIsoDate("2011-06-10")));
assertThat(dates.get(1), is(parseIsoDate("2011-06-13")));
}
@Test
public void canCalculateTheFirstDateForACollectionOfWorkItems() {
WorkItem workItem1 = new WorkItem(1, TWO_PHASES);
workItem1.setDateAsString("phase 1", "2011-06-02");
workItem1.setDateAsString("phase 2", "2011-06-03");
WorkItem workItem2 = new WorkItem(2, TWO_PHASES);
workItem2.setDateAsString("phase 1", "2011-06-01");
workItem2.setDateAsString("phase 2", "2011-06-03");
LocalDate date = ChartUtils.getFirstDate(asList(workItem1, workItem2));
assertThat(date, is(parseIsoDate("2011-06-01")));
}
@Test
public void knowsTheWorkingDaysWithinAnInterval() {
List<LocalDate> dates = ChartUtils.getWorkingDays(parseIsoDate("2011-05-30"), parseIsoDate("2011-06-02"));
assertThat(dates.get(0), is(parseIsoDate("2011-05-30")));
assertThat(dates.get(1), is(parseIsoDate("2011-05-31")));
assertThat(dates.get(2), is(parseIsoDate("2011-06-01")));
assertThat(dates.get(3), is(parseIsoDate("2011-06-02")));
}
@Test
public void excludesWeekendsAndPublicHolidaysFromWorkingDays() {
List<LocalDate> dates = ChartUtils.getWorkingDays(parseIsoDate("2011-06-03"), parseIsoDate("2011-06-07"));
assertThat(dates.get(0), is(parseIsoDate("2011-06-03")));
assertThat(dates.get(1), is(parseIsoDate("2011-06-07")));
}
@Test
public void excludesFirstAndLastDatesOfWorkingDayRangesIfTheyFallOnWeekends() {
List<LocalDate> dates = ChartUtils.getWorkingDays(parseIsoDate("2011-06-12"), parseIsoDate("2011-06-18"));
assertThat(dates.get(0), is(parseIsoDate("2011-06-13")));
assertThat(dates.get(dates.size() - 1), is(parseIsoDate("2011-06-17")));
}
@Test
public void knowsTheNextWorkingDay() {
LocalDate nextWorkingDay = ChartUtils.nextWorkingDayAfter(parseIsoDate("2011-06-03"));
assertThat(nextWorkingDay, is(parseIsoDate("2011-06-07")));
}
}