package com.metservice.kanban.charts.cycletime; import static com.metservice.kanban.utils.DateUtils.parseConventionalNewZealandDate; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.jfree.data.category.CategoryDataset; import org.junit.Test; import com.metservice.kanban.model.WorkItem; import com.metservice.kanban.model.WorkItemType; public class CycleTimeChartBuilderTest { @Test public void testFilterNoMatches() { WorkItemType type = new WorkItemType("phase1", "phase2"); Collection<WorkItem> workItemList = new ArrayList<WorkItem>(); workItemList.add(new WorkItem(1, type)); workItemList.add(new WorkItem(2, type)); workItemList.add(new WorkItem(3, type)); CycleTimeChartBuilder builder = new CycleTimeChartBuilder(); Collection<WorkItem> result = builder.getCompletedWorkItemsInOrderOfCompletion(workItemList); assertThat(result.size(), is(0)); } @Test public void testFilteringAndOrdering() throws ParseException { List<WorkItem> workItems = buildList(); CycleTimeChartBuilder builder = new CycleTimeChartBuilder(); Collection<WorkItem> result = builder.getCompletedWorkItemsInOrderOfCompletion(workItems); assertThat(result.size(), is(2)); Iterator<WorkItem> iterator = result.iterator(); assertThat(iterator.next().getId(), is(2)); assertThat(iterator.next().getId(), is(1)); } @Test public void createsCorrectDataset() throws IOException, ParseException { CycleTimeChartBuilder builder = new CycleTimeChartBuilder(); Collection<WorkItem> workItems = builder.getCompletedWorkItemsInOrderOfCompletion(buildList()); CategoryDataset dataset = builder.createDataset(workItems); assertThat(getNumberOfDaysInPhase(dataset, "1", "phase2"), is(2)); assertThat(getNumberOfDaysInPhase(dataset, "2", "phase2"), is(3)); } @Test(expected=IllegalArgumentException.class) public void excludedItemsShouldnBeUsed() throws IOException, ParseException { CycleTimeChartBuilder builder = new CycleTimeChartBuilder(); Collection<WorkItem> list = buildList(); for(WorkItem item: list) { if (item.getId() == 2) { item.setExcluded(true); } } Collection<WorkItem> workItems = builder.getCompletedWorkItemsInOrderOfCompletion(list); CategoryDataset dataset = builder.createDataset(workItems); getNumberOfDaysInPhase(dataset, "2", "phase2"); } private int getNumberOfDaysInPhase(CategoryDataset dataset, String id, String phase) { return dataset.getValue(phase, id).intValue(); } private List<WorkItem> buildList() throws ParseException { List<WorkItem> workItems = new ArrayList<WorkItem>(); WorkItemType type = new WorkItemType("phase1", "phase2", "phase3"); WorkItem workItem1 = new WorkItem(1, type); WorkItem workItem2 = new WorkItem(2, type); WorkItem workItem3 = new WorkItem(3, type); workItem1.setDate("phase1", parseConventionalNewZealandDate("13/05/2011")); workItem1.setDate("phase2", parseConventionalNewZealandDate("18/05/2011")); workItem1.setDate("phase3", parseConventionalNewZealandDate("20/05/2011")); workItem2.setDate("phase1", parseConventionalNewZealandDate("12/05/2011")); workItem2.setDate("phase2", parseConventionalNewZealandDate("15/05/2011")); workItem2.setDate("phase3", parseConventionalNewZealandDate("19/05/2011")); workItem3.setDate("phase1", parseConventionalNewZealandDate("11/05/2011")); workItems.add(workItem1); workItems.add(workItem2); workItems.add(workItem3); return workItems; } }