package com.metservice.kanban.charts.cycletime;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.joda.time.LocalDate;
import org.junit.Test;
import com.metservice.kanban.model.WorkItem;
import com.metservice.kanban.model.WorkItemType;
public class CycleTimeColumnTest {
private static LocalDateFormatter formatter = new LocalDateFormatter();
private static class LocalDateFormatter {
public LocalDate parse(String pattern) throws ParseException {
return LocalDate.fromDateFields(new SimpleDateFormat("yyyy/MM/dd").parse(pattern));
}
}
@Test
public void storesFragments() {
CycleTimeColumn column = new CycleTimeColumn("column");
column.addFragment("fragment1", 1);
column.addFragment("fragment2", 2);
assertThat(column.getName(), is("column"));
assertThat(column.numberOfFragments(), is(2));
assertThat(column.getFragmentName(0), is("fragment1"));
assertThat(column.getFragmentWeight(0), is(1));
assertThat(column.getFragmentName(1), is("fragment2"));
assertThat(column.getFragmentWeight(1), is(2));
}
@Test
public void representsWorkItemAsAColumnInTheChart() throws ParseException {
WorkItemType type = new WorkItemType("backlog", "phase 2", "phase 3");
WorkItem feature = new WorkItem(1, type);
feature.setDateAsString("backlog", "2011-02-07");
feature.setDateAsString("phase 2", "2011-02-10");
feature.setDateAsString("phase 3", "2011-02-12");
CycleTimeColumn column = CycleTimeColumn.buildCycleTimeColumnFromWorkItem(feature);
assertThat(column.getName(), is("1"));
assertThat(column.numberOfFragments(), is(1));
assertThat(column.getFragmentName(0), is("phase 2"));
assertThat(column.getFragmentWeight(0), is(2));
}
@Test
public void skipItemIfWorkItemIsNotComplete() throws ParseException {
// TODO Use TestKanbanBoardBuilder to construct test data instead
WorkItemType type = new WorkItemType("phase 1", "phase 2", "phase 3", "phase 4");
WorkItem workItem = new WorkItem(1, 0, type);
workItem.setDate("phase 1", formatter.parse("2011/02/7"));
workItem.setDate("phase 2", formatter.parse("2011/02/10"));
workItem.setDate("phase 4", formatter.parse("2011/02/12"));
CycleTimeColumn column = CycleTimeColumn.buildCycleTimeColumnFromWorkItem(workItem);
assertThat(column.getName(), is("1"));
assertThat(column.numberOfFragments(), is(1));
assertThat(column.getFragmentName(0), is("phase 2"));
assertThat(column.getFragmentWeight(0), is(2));
}
@Test
public void returnsNullIfWorkItemIsNotComplete() throws ParseException {
// TODO Use TestKanbanBoardBuilder to construct test data instead
WorkItemType type = new WorkItemType("phase1", "phase2", "phase3");
WorkItem workItem = new WorkItem(1, 0, type);
workItem.setDate("phase1", formatter.parse("2011/02/7"));
workItem.setDate("phase2", formatter.parse("2011/02/10"));
assertNull(CycleTimeColumn.dateWhenPhaseWasCompleted(workItem, "phase3"));
}
}