/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search.facet.model;
import org.junit.Test;
import com.enonic.cms.core.search.facet.FacetQueryException;
import static org.junit.Assert.*;
public class FacetModelFactoryTest_rangeFacetTest
{
private FacetsModelFactory facetsModelFactory = new FacetsModelFactory();
@Test
public void plain_xml()
throws Exception
{
String xml = "<facets>\n" +
" <ranges name=\"myRangeFacet\">\n" +
" <range to=\"4\"/>\n" +
" <index>rangeField</index>\n" +
" </ranges>\n" +
"</facets>\n";
final FacetsModel facetsModel = facetsModelFactory.buildFromXml( xml );
assertAndGetRangeFacetModel( facetsModel );
}
@Test
public void testBuildRangeFacetModel_numericRanges()
throws Exception
{
String xml = "<facets>\n" +
" <ranges name=\"myRangeFacet\">\n" +
" <range to=\"45\"/>\n" +
" <range from=\"50\" to=\"100\"/>\n" +
" <range from=\"100\" to=\"200\"/>\n" +
" <range from=\"200\" />\n" +
" <index>rangeField</index>\n" +
" </ranges>\n" +
"</facets>\n";
final FacetsModel facetsModel = facetsModelFactory.buildFromXml( xml );
RangeFacetModel rangeFacetModel = assertAndGetRangeFacetModel( facetsModel );
rangeFacetModel.validate();
assertEquals( "myRangeFacet", rangeFacetModel.getName() );
for ( final FacetRange facetRange : rangeFacetModel.getRanges() )
{
assertTrue( facetRange.getFromRangeValue() == null || facetRange.getFromRangeValue() instanceof FacetRangeNumericValue );
assertTrue( facetRange.getToRangeValue() == null || facetRange.getToRangeValue() instanceof FacetRangeNumericValue );
}
}
@Test(expected = FacetQueryException.class)
public void testBuildRangeFacetModel_illegal_range_value()
throws Exception
{
String xml = "<facets>\n" +
" <ranges name=\"myRangeFacet\">\n" +
" <range to=\"xx\"/>\n" +
" <range from=\"50\" to=\"100\"/>\n" +
" <range from=\"100\" to=\"200\"/>\n" +
" <range from=\"200\" />\n" +
" <index>rangeField</index>\n" +
" </ranges>\n" +
"</facets>\n";
final FacetsModel facetsModel = facetsModelFactory.buildFromXml( xml );
assertAndGetRangeFacetModel( facetsModel );
}
@Test
public void testBuildRangeFacetModel_mixedDateAndNumbers()
throws Exception
{
String xml = "<facets>\n" +
" <ranges name=\"myRangeFacet\">\n" +
" <range to=\"2001-01-01\"/>\n" +
" <range from=\"50\" to=\"100\"/>\n" +
" <range from=\"100\" to=\"200\"/>\n" +
" <range from=\"200\" />\n" +
" <index>rangeField</index>\n" +
" </ranges>\n" +
"</facets>\n";
final FacetsModel facetsModel = facetsModelFactory.buildFromXml( xml );
RangeFacetModel rangeFacetModel = assertAndGetRangeFacetModel( facetsModel );
assertExceptionContainingString( rangeFacetModel, "All range-values" );
}
@Test
public void testBuildRangeFacetModel_startAndEndIsNull()
throws Exception
{
String xml = "<facets>\n" +
" <ranges name=\"myRangeFacet\">\n" +
" <range/>\n" +
" <range from=\"50\" to=\"100\"/>\n" +
" <range from=\"100\" to=\"200\"/>\n" +
" <range from=\"200\" />\n" +
" <index>rangeField</index>\n" +
" </ranges>\n" +
"</facets>\n";
final FacetsModel facetsModel = facetsModelFactory.buildFromXml( xml );
RangeFacetModel rangeFacetModel = assertAndGetRangeFacetModel( facetsModel );
assertExceptionContainingString( rangeFacetModel, "range values empty" );
}
private void assertExceptionContainingString( final RangeFacetModel rangeFacetModel, final String containsString )
{
boolean exceptionThrowed = false;
try
{
rangeFacetModel.validate();
}
catch ( Exception e )
{
exceptionThrowed = true;
assertTrue( "Message " + e.getMessage(), e.getMessage().contains( containsString ) );
}
assertTrue( exceptionThrowed );
}
private RangeFacetModel assertAndGetRangeFacetModel( final FacetsModel facetsModel )
{
assertNotNull( facetsModel.getFacetModels() );
assertEquals( 1, facetsModel.getFacetModels().size() );
final FacetModel facetModel = facetsModel.iterator().next();
assertTrue( facetModel instanceof RangeFacetModel );
return (RangeFacetModel) facetModel;
}
}