package pl.edu.icm.saos.webapp.analysis.generator; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; import java.util.List; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import pl.edu.icm.saos.common.chart.Chart; import pl.edu.icm.saos.common.chart.Series; import pl.edu.icm.saos.search.analysis.ChartService; import pl.edu.icm.saos.search.analysis.request.JudgmentSeriesCriteria; import pl.edu.icm.saos.search.analysis.request.XSettings; import pl.edu.icm.saos.search.analysis.request.YSettings; import pl.edu.icm.saos.webapp.analysis.request.AnalysisForm; import pl.edu.icm.saos.webapp.analysis.request.JudgmentGlobalFilter; import pl.edu.icm.saos.webapp.analysis.request.JudgmentSeriesFilter; import pl.edu.icm.saos.webapp.analysis.request.UiySettings; import pl.edu.icm.saos.webapp.analysis.request.converter.JudgmentSeriesFilterConverter; import pl.edu.icm.saos.webapp.analysis.request.converter.UiySettingsConverter; import pl.edu.icm.saos.webapp.analysis.request.converter.XSettingsGenerator; import pl.edu.icm.saos.webapp.analysis.request.converter.XSettingsGeneratorManager; import pl.edu.icm.saos.webapp.analysis.result.ChartCode; import com.google.common.collect.Lists; /** * @author Ɓukasz Dumiszewski */ public class ChartGeneratorTest { @InjectMocks private ChartGenerator chartGenerator = new ChartGenerator(); @Mock private ChartService analysisService; @Mock private JudgmentSeriesFilterConverter judgmentSeriesFilterConverter; @Mock private XSettingsGeneratorManager xsettingsGeneratorManager; @Mock private UiySettingsConverter uiySettingsConverter; @Before public void before() { initMocks(this); } //------------------------ TESTS -------------------------- @Test(expected = NullPointerException.class) public void generateChart_NullAnalysisForm() { // execute chartGenerator.generateChart(ChartCode.MAIN_CHART, null); } @Test(expected = NullPointerException.class) public void generateChart_NullChartCode() { // execute chartGenerator.generateChart(null, mock(AnalysisForm.class)); } @Test(expected = IllegalArgumentException.class) public void generateChart_ChartCodeNotGeneratedChart() { // execute chartGenerator.generateChart(ChartCode.AGGREGATED_MAIN_CHART, mock(AnalysisForm.class)); } @Test(expected = IllegalArgumentException.class) public void generateChart_cannotGenerate() { ChartCode chartCode = ChartCode.MAIN_CHART; AnalysisForm analysisForm = createAnalysisForm(mock(JudgmentGlobalFilter.class), Lists.newArrayList(), mock(UiySettings.class)); XSettingsGenerator xsettingsGenerator = mock(XSettingsGenerator.class); when(xsettingsGeneratorManager.getXSettingsGenerator(chartCode)).thenReturn(xsettingsGenerator); when(xsettingsGenerator.canGenerateXSettings(analysisForm.getGlobalFilter())).thenReturn(false); // execute chartGenerator.generateChart(chartCode, analysisForm); } @Test public void generateChart() { // given JudgmentSeriesFilter filter1 = new JudgmentSeriesFilter(); filter1.setPhrase("ABC"); JudgmentSeriesFilter filter2 = new JudgmentSeriesFilter(); filter1.setPhrase("DEF"); List<JudgmentSeriesFilter> filters = Lists.newArrayList(filter1, filter2); JudgmentGlobalFilter globalFilter = mock(JudgmentGlobalFilter.class); UiySettings uiYSettings = new UiySettings(); AnalysisForm analysisForm = createAnalysisForm(globalFilter, filters, uiYSettings); JudgmentSeriesCriteria criteria1 = new JudgmentSeriesCriteria(); criteria1.setPhrase("ABC"); JudgmentSeriesCriteria criteria2 = new JudgmentSeriesCriteria(); criteria2.setPhrase("DEF"); List<JudgmentSeriesCriteria> criteriaList = Lists.newArrayList(criteria1, criteria2); XSettings xsettings = new XSettings(); YSettings ysettings = new YSettings(); Chart<Object, Number> chart = createChart(); ChartCode chartCode = ChartCode.MAIN_CHART; XSettingsGenerator xsettingsGenerator = mock(XSettingsGenerator.class); when(judgmentSeriesFilterConverter.convertList(globalFilter, filters)).thenReturn(criteriaList); when(xsettingsGeneratorManager.getXSettingsGenerator(chartCode)).thenReturn(xsettingsGenerator); when(xsettingsGenerator.generateXSettings(analysisForm.getGlobalFilter())).thenReturn(xsettings); when(xsettingsGenerator.canGenerateXSettings(analysisForm.getGlobalFilter())).thenReturn(true); when(uiySettingsConverter.convert(uiYSettings)).thenReturn(ysettings); when(analysisService.generateChart(criteriaList, xsettings, ysettings)).thenReturn(chart); // execute Chart<Object, Number> generatedChart = chartGenerator.generateChart(chartCode, analysisForm); // assert assertTrue(chart == generatedChart); verify(judgmentSeriesFilterConverter).convertList(globalFilter, filters); verify(xsettingsGeneratorManager, times(2)).getXSettingsGenerator(chartCode); verify(xsettingsGenerator).generateXSettings(globalFilter); verify(xsettingsGenerator).canGenerateXSettings(globalFilter); verify(uiySettingsConverter).convert(uiYSettings); verify(analysisService).generateChart(criteriaList, xsettings, ysettings); } //------------------------ PRIVATE -------------------------- private Chart<Object, Number> createChart() { Chart<Object, Number> chart = new Chart<>(); Series<Object, Number> series1 = new Series<>(); series1.addPoint("XYZ", 123); chart.addSeries(series1); return chart; } private AnalysisForm createAnalysisForm(JudgmentGlobalFilter globalFilter, List<JudgmentSeriesFilter> filters, UiySettings uiYSettings) { AnalysisForm analysisForm = new AnalysisForm(); analysisForm.setGlobalFilter(globalFilter); analysisForm.setSeriesFilters(filters); analysisForm.setYsettings(uiYSettings); return analysisForm; } }