package com.metservice.kanban.csv; import static com.metservice.kanban.utils.DateUtils.formatIsoDate; import static com.metservice.kanban.utils.DateUtils.parseIsoDate; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsNull.nullValue; import static org.junit.Assert.assertThat; import org.joda.time.LocalDate; import org.junit.Test; public class CsvRowTest { @Test public void canParseCellAsDate() { LocalDate arbitraryDate = parseIsoDate("2011-06-02"); CsvRow row = createSingleCellRow("column", formatIsoDate(arbitraryDate)); assertThat(row.getDate("column"), is(arbitraryDate)); } @Test public void parsesEmptyStringAsNullDate() { CsvRow row = createSingleCellRow("column", ""); assertThat(row.getDate("column"), nullValue()); } @Test public void canParseCellAsInt() { CsvRow row = createSingleCellRow("column", "42"); assertThat(row.getInt("column"), is(42)); } @Test public void canParseCellAsBoolean() { CsvRow row = createSingleCellRow("column", "true"); assertThat(row.getBoolean("column"), is(true)); } @Test public void canReturnCellsAsTheirNaturalStringValue() { CsvRow row = createSingleCellRow("column", "arbitrary string"); assertThat(row.getString("column"), is("arbitrary string")); } private static final CsvRow createSingleCellRow(String columnName, String value) { String[] cell = new String[] {value}; CsvColumnNames columnNames = new CsvColumnNames(new String[] {columnName}); return new CsvRow(columnNames, cell); } @Test public void returnsJustTheCellInTheNamedColumn() { CsvColumnNames columnNames = new CsvColumnNames(new String[] {"A", "B", "C"}); String[] cells = new String[] {"alpha", "bravo", "charlie"}; CsvRow row = new CsvRow(columnNames, cells); assertThat(row.getString("A"), is("alpha")); assertThat(row.getString("C"), is("charlie")); } @Test public void dealWithBooleanTypesAsWell() { CsvColumnNames columnNames = new CsvColumnNames(new String[] {"A", "B"}); String[] cells = new String[] {"true", "false"}; CsvRow row = new CsvRow(columnNames, cells); assertThat(row.getBoolean("A"), is(true)); assertThat(row.getBoolean("B"), is(false)); } @Test public void correctDefaultValueShouldReturnWhenColumnIsNotAvailable() { CsvColumnNames columnNames = new CsvColumnNames(new String[] {"column"}); String[] cells = new String[] {"garbage"}; CsvRow row = new CsvRow(columnNames, cells); assertThat(row.getBoolean("nonexistent"), is(false)); assertThat(row.getString("nonexistent"), is("")); assertThat(row.getDate("nonexistent"), nullValue()); assertThat(row.getInt("nonexistent"), is(0)); } }