package pl.edu.icm.saos.search.analysis.solr.request; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import org.apache.solr.client.solrj.SolrQuery; import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; import pl.edu.icm.saos.search.analysis.request.Period; import pl.edu.icm.saos.search.analysis.request.Period.PeriodUnit; import pl.edu.icm.saos.search.analysis.request.XDateRange; import pl.edu.icm.saos.search.analysis.request.XField; import pl.edu.icm.saos.search.analysis.request.XSettings; import pl.edu.icm.saos.search.analysis.solr.XFieldNameMapper; import pl.edu.icm.saos.search.search.service.FieldFacetToQueryApplier; import pl.edu.icm.saos.search.search.service.RangeFacetToQueryApplier; /** * @author madryk */ public class XSettingsToQueryApplierTest { private XSettingsToQueryApplier xSettingsFacetQueryApplier = new XSettingsToQueryApplier(); private XFieldNameMapper xFieldNameMapper = mock(XFieldNameMapper.class); private XRangeConverterManager xRangeConverterManager = mock(XRangeConverterManager.class); private RangeFacetToQueryApplier rangeFacetToQueryApplier = mock(RangeFacetToQueryApplier.class); private FieldFacetToQueryApplier fieldFacetToQueryApplier = mock(FieldFacetToQueryApplier.class); private XRangeConverter xRangeConverter = mock(XRangeConverter.class); @Before public void setUp() { xSettingsFacetQueryApplier.setxFieldNameMapper(xFieldNameMapper); xSettingsFacetQueryApplier.setxRangeConverterManager(xRangeConverterManager); xSettingsFacetQueryApplier.setRangeFacetToQueryApplier(rangeFacetToQueryApplier); xSettingsFacetQueryApplier.setFieldFacetToQueryApplier(fieldFacetToQueryApplier); when(xRangeConverter.convertStart(any())).thenReturn("startParam"); when(xRangeConverter.convertEnd(any())).thenReturn("endParam"); when(xRangeConverter.convertGap(any())).thenReturn("gapParam"); when(xFieldNameMapper.mapXField(XField.JUDGMENT_DATE)).thenReturn("judgmentDate"); when(xRangeConverterManager.getXRangeConverter(XDateRange.class)).thenReturn(xRangeConverter); } //------------------------ TESTS -------------------------- @Test public void applyXSettingsToQuery_WITH_XRANGE() { // given XSettings xSettings = new XSettings(); xSettings.setField(XField.JUDGMENT_DATE); xSettings.setFieldValuePrefix("valuePrefix"); XDateRange xDateRange = new XDateRange(new LocalDate(), new LocalDate(), new Period(1, PeriodUnit.MONTH)); xSettings.setRange(xDateRange); SolrQuery query = new SolrQuery(); // execute xSettingsFacetQueryApplier.applyXSettingsToQuery(query, xSettings); // assert verify(xFieldNameMapper).mapXField(XField.JUDGMENT_DATE); verify(xRangeConverterManager).getXRangeConverter(XDateRange.class); verify(xRangeConverter).convertStart(xDateRange); verify(xRangeConverter).convertEnd(xDateRange); verify(xRangeConverter).convertGap(xDateRange); verify(rangeFacetToQueryApplier).applyRangeFacet(query, "judgmentDate", "startParam", "endParam", "gapParam"); verifyNoMoreInteractions(xFieldNameMapper, xRangeConverterManager, xRangeConverter, rangeFacetToQueryApplier); verifyZeroInteractions(fieldFacetToQueryApplier); } @Test public void applyXSettingsToQuery_WITHOUT_XRANGE() { // given XSettings xSettings = new XSettings(); xSettings.setField(XField.JUDGMENT_DATE); xSettings.setFieldValuePrefix("valuePrefix"); SolrQuery query = new SolrQuery(); // execute xSettingsFacetQueryApplier.applyXSettingsToQuery(query, xSettings); // assert verify(xFieldNameMapper).mapXField(XField.JUDGMENT_DATE); verify(fieldFacetToQueryApplier).applyFieldFacet(query, "judgmentDate", "valuePrefix"); verifyNoMoreInteractions(xFieldNameMapper, fieldFacetToQueryApplier); verifyZeroInteractions(xRangeConverterManager, xRangeConverter, rangeFacetToQueryApplier); } @Test(expected = NullPointerException.class) public void applyXSettingsToQuery_NULL_XSETTINGS() { // execute xSettingsFacetQueryApplier.applyXSettingsToQuery(new SolrQuery(), null); } @Test(expected = NullPointerException.class) public void applyXSettingsToQuery_NULL_QUERY() { // execute xSettingsFacetQueryApplier.applyXSettingsToQuery(null, new XSettings()); } }