/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.itest.search;
import org.junit.Test;
import com.google.common.collect.Lists;
import com.enonic.cms.core.content.ContentKey;
import com.enonic.cms.core.content.category.CategoryKey;
import com.enonic.cms.core.content.contenttype.ContentTypeKey;
import com.enonic.cms.core.search.query.AggregatedQuery;
import com.enonic.cms.core.search.query.AggregatedResult;
import com.enonic.cms.core.search.query.ContentDocument;
import static junit.framework.Assert.assertEquals;
public class ContentIndexServiceImpl_aggregatedQueryTest
extends ContentIndexServiceTestBase
{
@Test
public void plain_query()
{
indexDocuments();
AggregatedQuery query = new AggregatedQuery( "data/person/age" );
AggregatedResult result = contentIndexService.query( query );
assertEquals( 4, result.getCount() );
assertEquals( 10.0, result.getMinValue() );
assertEquals( 40.0, result.getMaxValue() );
assertEquals( 100.0, result.getSumValue() );
assertEquals( 25.0, result.getAverageValue() );
}
@Test
public void query_with_categoryFilter()
{
indexDocuments();
AggregatedQuery query = new AggregatedQuery( "data/person/age" );
query.setCategoryFilter( Lists.newArrayList( new CategoryKey( 1 ) ) );
AggregatedResult result = contentIndexService.query( query );
assertEquals( 2, result.getCount() );
assertEquals( 10.0, result.getMinValue() );
assertEquals( 20.0, result.getMaxValue() );
assertEquals( 30.0, result.getSumValue() );
assertEquals( 15.0, result.getAverageValue() );
}
@Test
public void query_with_contentTypeFilter()
{
indexDocuments();
AggregatedQuery query = new AggregatedQuery( "data/person/age" );
query.setContentTypeFilter( Lists.newArrayList( new ContentTypeKey( 1 ) ) );
AggregatedResult result = contentIndexService.query( query );
assertEquals( 2, result.getCount() );
assertEquals( 10.0, result.getMinValue() );
assertEquals( 30.0, result.getMaxValue() );
assertEquals( 40.0, result.getSumValue() );
assertEquals( 20.0, result.getAverageValue() );
}
@Test
public void query_with_all_filters()
{
indexDocuments();
AggregatedQuery query = new AggregatedQuery( "data/person/age" );
query.setCategoryFilter( Lists.newArrayList( new CategoryKey( 1 ) ) );
query.setContentTypeFilter( Lists.newArrayList( new ContentTypeKey( 1 ) ) );
AggregatedResult result = contentIndexService.query( query );
assertEquals( 1, result.getCount() );
assertEquals( 10.0, result.getMinValue() );
assertEquals( 10.0, result.getMaxValue() );
assertEquals( 10.0, result.getSumValue() );
assertEquals( 10.0, result.getAverageValue() );
}
private void indexDocuments()
{
ContentDocument doc1 =
createContentDocument( new ContentKey( 1 ), new CategoryKey( 1 ), new ContentTypeKey( 1 ), 2, "title1", null );
doc1.addUserDefinedField( "data/person/age", "10" );
ContentDocument doc2 =
createContentDocument( new ContentKey( 2 ), new CategoryKey( 1 ), new ContentTypeKey( 2 ), 2, "title2", null );
doc2.addUserDefinedField( "data/person/age", "20" );
ContentDocument doc3 =
createContentDocument( new ContentKey( 3 ), new CategoryKey( 2 ), new ContentTypeKey( 1 ), 2, "title3", null );
doc3.addUserDefinedField( "data/person/age", "30" );
ContentDocument doc4 =
createContentDocument( new ContentKey( 4 ), new CategoryKey( 2 ), new ContentTypeKey( 2 ), 2, "title4", null );
doc4.addUserDefinedField( "data/person/age", "40" );
contentIndexService.index( doc1 );
contentIndexService.index( doc2 );
contentIndexService.index( doc3 );
contentIndexService.index( doc4 );
flushIndex();
}
}