/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.search.facet;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import org.elasticsearch.common.Strings;
import org.junit.Test;
import com.enonic.cms.core.search.facet.model.FacetRange;
import com.enonic.cms.core.search.facet.model.FacetsModel;
import com.enonic.cms.core.search.facet.model.RangeFacetModel;
import com.enonic.cms.core.search.facet.model.TermsFacetModel;
import static org.junit.Assert.*;
public class FacetsXmlCreatorTest
{
@Test
public void testCreateTermsFacetXml_simple()
throws Exception
{
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<facets>\n" +
" <terms name=\"myFacetName\">\n" +
" <count>10</count>\n" +
" <indexes>termsFacetField</indexes>\n" +
" </terms>\n" +
"</facets>";
FacetsModel facets = new FacetsModel();
final TermsFacetModel facet = new TermsFacetModel();
facet.setIndexes( "termsFacetField" );
facet.setName( "myFacetName" );
facet.setCount( 10 );
facets.addFacet( facet );
String xml = createXml( facets );
System.out.println( xml );
assertEquals( Strings.trimTrailingWhitespace( expected ), Strings.trimTrailingWhitespace( xml ) );
}
@Test
public void testCreateTermsFacetXml_multi_field()
throws Exception
{
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<facets>\n" +
" <terms name=\"myFacetName\">\n" +
" <count>10</count>\n" +
" <indexes>field1,field2,field3</indexes>\n" +
" </terms>\n" +
"</facets>\n";
FacetsModel facets = new FacetsModel();
final TermsFacetModel facet = new TermsFacetModel();
facet.setIndexes( "field1,field2,field3" );
facet.setName( "myFacetName" );
facet.setCount( 10 );
facets.addFacet( facet );
final String xml = createXml( facets );
assertEquals( Strings.trimTrailingWhitespace( expected ), Strings.trimTrailingWhitespace( xml ) );
}
@Test
public void testCreateTermsFacetXml_all_fields()
throws Exception
{
String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
"<facets>\n" +
" <terms name=\"myFacetName\">\n" +
" <count>10</count>\n" +
" <all-terms>true</all-terms>\n" +
" <exclude>exclude1,exclude2,exclude3</exclude>\n" +
" <indexes>fields1, fields2, fields3</indexes>\n" +
" <orderby>term</orderby>\n" +
" <regex>regexp</regex>\n" +
" <regex-flags>DOTALL</regex-flags>\n" +
" </terms>\n" +
"</facets>";
FacetsModel facets = new FacetsModel();
final TermsFacetModel facet = new TermsFacetModel();
facet.setIndexes( "fields1, fields2, fields3" );
facet.setExclude( "exclude1,exclude2,exclude3" );
facet.setName( "myFacetName" );
facet.setAllTerms( true );
facet.setOrderby( "term" );
facet.setCount( 10 );
facet.setRegex( "regexp" );
facet.setRegexFlags( "DOTALL" );
facets.addFacet( facet );
final String xml = createXml( facets );
assertEquals( Strings.trimTrailingWhitespace( expected ), Strings.trimTrailingWhitespace( xml ) );
}
@Test
public void testRangeFacetXml()
throws Exception
{
FacetsModel facets = new FacetsModel();
final RangeFacetModel rangeFacet = new RangeFacetModel();
rangeFacet.setName( "myRangeFacet" );
rangeFacet.setIndex( "rangeField" );
rangeFacet.addFacetRange( new FacetRange( null, "49" ) );
rangeFacet.addFacetRange( new FacetRange( "50", "100" ) );
rangeFacet.addFacetRange( new FacetRange( "101", "200" ) );
rangeFacet.addFacetRange( new FacetRange( "201", null ) );
facets.addFacet( rangeFacet );
final String xml = createXml( facets );
}
private String createXml( final FacetsModel facets )
throws JAXBException
{
JAXBContext context = JAXBContext.newInstance( FacetsModel.class );
Marshaller m = context.createMarshaller();
m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
final StringWriter stringWriter = new StringWriter();
m.marshal( facets, stringWriter );
return stringWriter.toString();
}
}