package pl.edu.icm.saos.webapp.analysis.csv;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
import java.util.Locale;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.context.MessageSource;
import pl.edu.icm.saos.common.chart.Chart;
import pl.edu.icm.saos.common.chart.Series;
import pl.edu.icm.saos.common.chart.formatter.PointValueFormatterManager;
import pl.edu.icm.saos.webapp.analysis.request.AnalysisForm;
import pl.edu.icm.saos.webapp.analysis.request.JudgmentSeriesFilter;
import pl.edu.icm.saos.webapp.analysis.request.UiySettings.UiyValueType;
import pl.edu.icm.saos.webapp.analysis.result.ChartCode;
/**
* @author madryk
*/
@RunWith(MockitoJUnitRunner.class)
public class ChartCsvGeneratorTest {
@InjectMocks
private ChartCsvGenerator chartCsvGenerator = new ChartCsvGenerator();
@Mock
private PointValueFormatterManager pointValueFormatterManager;
@Mock
private MessageSource messageSource;
private AnalysisForm analysisForm = new AnalysisForm();
private Chart<Object, Number> chart = new Chart<>();
private Locale locale = Locale.US;
@Before
public void setup() {
JudgmentSeriesFilter seriesFilter1 = new JudgmentSeriesFilter();
seriesFilter1.setPhrase("phrase1");
analysisForm.addSeriesFilter(seriesFilter1);
JudgmentSeriesFilter seriesFilter2 = new JudgmentSeriesFilter();
seriesFilter2.setPhrase("");
analysisForm.addSeriesFilter(seriesFilter2);
Series<Object, Number> series1 = new Series<>();
series1.addPoint("x1", 1);
series1.addPoint("x2", 2);
chart.addSeries(series1);
Series<Object, Number> series2 = new Series<>();
series2.addPoint("x1", 5);
series2.addPoint("x2", 6);
chart.addSeries(series2);
when(pointValueFormatterManager.format("x1")).thenReturn("x1");
when(pointValueFormatterManager.format("x2")).thenReturn("x2");
when(pointValueFormatterManager.format(1)).thenReturn("1");
when(pointValueFormatterManager.format(2)).thenReturn("2");
when(pointValueFormatterManager.format(5)).thenReturn("5");
when(pointValueFormatterManager.format(6)).thenReturn("6");
when(messageSource.getMessage("analysis.chart.csv.columnHeader.xAxis.court", null, locale)).thenReturn("Court");
when(messageSource.getMessage("analysis.chart.csv.columnHeader.xAxis.period", null, locale)).thenReturn("Period");
when(messageSource.getMessage("analysis.chart.csv.columnHeader.series.count", null, locale)).thenReturn("JudgmentCount");
when(messageSource.getMessage("analysis.chart.csv.columnHeader.series.per1000count", null, locale)).thenReturn("JudgmentPer1000Judgments");
when(messageSource.getMessage("analysis.chart.csv.columnHeader.series.percent", null, locale)).thenReturn("JudgmentPercent");
}
//------------------------ TESTS --------------------------
@Test(expected = NullPointerException.class)
public void generateHeader_NULL_CHART_CODE() {
// execute
chartCsvGenerator.generateHeader(null, analysisForm, locale);
}
@Test(expected = NullPointerException.class)
public void generateHeader_NULL_ANALYSIS_FORM() {
// execute
chartCsvGenerator.generateHeader(ChartCode.MAIN_CHART, null, locale);
}
@Test(expected = NullPointerException.class)
public void generateHeader_NULL_LOCALE() {
// execute
chartCsvGenerator.generateHeader(ChartCode.MAIN_CHART, analysisForm, null);
}
@Test
public void generateHeader_MAIN_CHART() {
// execute
String[] header = chartCsvGenerator.generateHeader(ChartCode.MAIN_CHART, analysisForm, locale);
// assert
assertEquals(3, header.length);
assertEquals("Period", header[0]);
assertEquals("JudgmentCount (phrase1)", header[1]);
assertEquals("JudgmentCount", header[2]);
}
@Test
public void generateHeader_CC_COURT_CHART() {
// execute
String[] header = chartCsvGenerator.generateHeader(ChartCode.CC_COURT_CHART, analysisForm, locale);
// assert
assertEquals(3, header.length);
assertEquals("Court", header[0]);
assertEquals("JudgmentCount (phrase1)", header[1]);
assertEquals("JudgmentCount", header[2]);
}
@Test
public void generateHeader_PERCENT() {
// given
analysisForm.getYsettings().setValueType(UiyValueType.PERCENT);
// execute
String[] header = chartCsvGenerator.generateHeader(ChartCode.MAIN_CHART, analysisForm, locale);
// assert
assertEquals(3, header.length);
assertEquals("Period", header[0]);
assertEquals("JudgmentPercent (phrase1)", header[1]);
assertEquals("JudgmentPercent", header[2]);
}
@Test
public void generateHeader_NUMBER_PER_1000() {
// given
analysisForm.getYsettings().setValueType(UiyValueType.NUMBER_PER_1000);
// execute
String[] header = chartCsvGenerator.generateHeader(ChartCode.MAIN_CHART, analysisForm, locale);
// assert
assertEquals(3, header.length);
assertEquals("Period", header[0]);
assertEquals("JudgmentPer1000Judgments (phrase1)", header[1]);
assertEquals("JudgmentPer1000Judgments", header[2]);
}
@Test(expected = NullPointerException.class)
public void generateRow_NULL_CHART() {
// execute
chartCsvGenerator.generateRow(null, 1);
}
@Test(expected = IllegalArgumentException.class)
public void generateRow_NEGATIVE_ROW_NUMBER() {
// execute
chartCsvGenerator.generateRow(chart, -1);
}
@Test(expected = IllegalArgumentException.class)
public void generateRow_TOO_BIG_ROW_NUMBER() {
// execute
chartCsvGenerator.generateRow(chart, 2);
}
@Test
public void generateRow() {
// execute
String[] row = chartCsvGenerator.generateRow(chart, 0);
// assert
assertEquals(3, row.length);
assertEquals("x1", row[0]);
assertEquals("1", row[1]);
assertEquals("5", row[2]);
}
}