package pl.edu.icm.saos.search.analysis.solr.result;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.joda.time.LocalDate;
import org.junit.Before;
import org.junit.Test;
import pl.edu.icm.saos.common.chart.value.DayPeriod;
import pl.edu.icm.saos.common.chart.value.SimpleLocalDate;
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.XSettings;
/**
* @author Ćukasz Dumiszewski
*/
public class FacetDayPeriodValueConverterTest {
private FacetDayPeriodValueConverter converter = new FacetDayPeriodValueConverter();
private XDateRangeUtils xDateRangeUtils = mock(XDateRangeUtils.class);
private XSettings xsettings = mock(XSettings.class);
@Before
public void before() {
converter.setXdateRangeUtils(xDateRangeUtils);
}
//------------------------ TESTS --------------------------
@Test(expected = NullPointerException.class)
public void handles_Null() {
// execute
converter.handles(null);
}
@Test
public void handles_FALSE_NULL_DATE_RANGE() {
// given
when(xDateRangeUtils.getDateRange(xsettings)).thenReturn(null);
// execute & assert
assertFalse(converter.handles(xsettings));
}
@Test
public void handles_TRUE_DAY() {
// given
XDateRange dateRange = new XDateRange(new LocalDate(2011, 11, 11), new LocalDate(2011, 12, 12), new Period(3, PeriodUnit.DAY));
when(xDateRangeUtils.getDateRange(xsettings)).thenReturn(dateRange);
// execute & assert
assertTrue(converter.handles(xsettings));
}
@Test
public void handles_TRUE_MONTH() {
// given
XDateRange dateRange = new XDateRange(new LocalDate(2011, 11, 11), new LocalDate(2011, 12, 12), new Period(3, PeriodUnit.MONTH));
when(xDateRangeUtils.getDateRange(xsettings)).thenReturn(dateRange);
// execute & assert
assertTrue(converter.handles(xsettings));
}
@Test
public void handles_TRUE_YEAR() {
// given
XDateRange dateRange = new XDateRange(new LocalDate(2011, 11, 11), new LocalDate(2015, 12, 12), new Period(3, PeriodUnit.YEAR));
when(xDateRangeUtils.getDateRange(xsettings)).thenReturn(dateRange);
// execute & assert
assertTrue(converter.handles(xsettings));
}
@Test
public void handles_FALSE_MONTH() {
// given
XDateRange dateRange = new XDateRange(new LocalDate(2011, 11, 1), new LocalDate(2012, 12, 12), new Period(3, PeriodUnit.MONTH));
when(xDateRangeUtils.getDateRange(xsettings)).thenReturn(dateRange);
// execute & assert
assertFalse(converter.handles(xsettings));
}
@Test
public void handles_FALSE_YEAR() {
// given
XDateRange dateRange = new XDateRange(new LocalDate(2011, 1, 1), new LocalDate(2012, 12, 12), new Period(1, PeriodUnit.YEAR));
when(xDateRangeUtils.getDateRange(xsettings)).thenReturn(dateRange);
// execute & assert
assertFalse(converter.handles(xsettings));
}
@Test(expected = NullPointerException.class)
public void convert_NullValue() {
// execute
converter.convert(null, mock(XSettings.class));
}
@Test(expected = NullPointerException.class)
public void convert_XSettings() {
// execute
converter.convert("XYZ", null);
}
@Test
public void convert() {
// given
String value = "2010-12-07T00:00:00Z";
XDateRange range = mock(XDateRange.class);
Period period = new Period(1, PeriodUnit.MONTH);
when(range.getGap()).thenReturn(period);
LocalDate startDate = new LocalDate(2010, 12, 7);
LocalDate endDate = new LocalDate(2011, 1, 6);
when(xDateRangeUtils.getDateRange(xsettings)).thenReturn(range);
when(xDateRangeUtils.generateEndDate(startDate, period)).thenReturn(endDate);
// execute
assertEquals(new DayPeriod(new SimpleLocalDate(2010, 12, 7), new SimpleLocalDate(2011, 1, 6)), converter.convert(value, xsettings));
}
}