package com.metservice.kanban.charts.burnup; 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 org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; import com.metservice.kanban.model.WorkItem; import com.metservice.kanban.model.WorkItemType; public class BurnUpDataModelTest { private static final LocalDate PAST = parseIsoDate("2011-01-01"); private static final LocalDate PRESENT = parseIsoDate("2011-01-02"); private static final LocalDate FUTURE = parseIsoDate("2011-01-03"); private BurnUpDataModel model; private WorkItem size1; private WorkItem size2; private WorkItem size4; private WorkItem size8; @Before public void before() { WorkItemType type = new WorkItemType("backlog", "in progress 1", "in progress 2", "completed"); size1 = new WorkItem(1, type); size1.setAverageCaseEstimate(1); size2 = new WorkItem(2, type); size2.setAverageCaseEstimate(2); size4 = new WorkItem(3, type); size4.setAverageCaseEstimate(4); size8 = new WorkItem(4, type); size8.setAverageCaseEstimate(8); model = new BurnUpDataModel(type, asList(size1, size2, size4, size8), PRESENT); } @Test public void backlogSumOnlyIncludesBacklogItems() { advance(size1, "in progress 1", PAST); advance(size2, "backlog", PAST); advance(size2, "in progress 1", FUTURE); advance(size4, "backlog", PAST); assertThat(model.getBacklogSizeOnDate(PRESENT), is(6)); } @Test public void inProgressOnlyIncludesInProgressItems() { advance(size1, "completed", PAST); advance(size2, "in progress 1", PAST); advance(size2, "completed", FUTURE); advance(size4, "in progress 2", PAST); assertThat(model.getInProgressSizeOnDate(PRESENT), is(6)); } @Test public void completedOnlyIncludesCompletedItems() { advance(size1, "completed", PAST); advance(size2, "completed", PAST); advance(size4, "in progress 2", PAST); assertThat(model.getCompletedSizeOnDate(PRESENT), is(3)); } @Test public void phaseChangesMadeOnTheQueryDateAreCounted() { advance(size1, "backlog", PRESENT); advance(size2, "in progress 1", PRESENT); advance(size4, "completed", PRESENT); assertThat(model.getBacklogSizeOnDate(PRESENT), is(1)); assertThat(model.getInProgressSizeOnDate(PRESENT), is(2)); assertThat(model.getCompletedSizeOnDate(PRESENT), is(4)); } private void advance(WorkItem workItem, String phase, LocalDate date) { do { workItem.advance(date); } while (!workItem.getCurrentPhase().equals(phase)); } }