package org.infinispan.query.queries.faceting;
import static org.testng.AssertJUnit.assertEquals;
import java.util.List;
import org.apache.lucene.search.Query;
import org.hibernate.search.query.dsl.QueryBuilder;
import org.hibernate.search.query.facet.Facet;
import org.hibernate.search.query.facet.FacetingRequest;
import org.infinispan.configuration.cache.ConfigurationBuilder;
import org.infinispan.configuration.cache.Index;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.query.CacheQuery;
import org.infinispan.query.Search;
import org.infinispan.query.SearchManager;
import org.infinispan.test.SingleCacheManagerTest;
import org.infinispan.test.fwk.TestCacheManagerFactory;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
/**
* @author Sanne Grinovero <sanne@hibernate.org> (C) 2011 Red Hat Inc.
* @author Hardy Ferentschik
*/
@Test(groups = {"functional", "smoke"}, testName = "query.queries.faceting.SimpleFacetingTest")
public class SimpleFacetingTest extends SingleCacheManagerTest {
private static final String indexFieldName = "cubicCapacity";
private static final String facetName = "ccs";
private SearchManager qf;
protected EmbeddedCacheManager createCacheManager() throws Exception {
ConfigurationBuilder cfg = getDefaultStandaloneCacheConfig(true);
cfg
.indexing()
.index(Index.ALL)
.addIndexedEntity(Car.class)
.addProperty("default.directory_provider", "ram")
.addProperty("lucene_version", "LUCENE_CURRENT");
return TestCacheManagerFactory.createCacheManager(cfg);
}
@BeforeClass
public void prepareSearchFactory() throws Exception {
qf = Search.getSearchManager(cache);
cache.put("195 Inter", new Car("Ferrari 195 Inter", "Rosso corsa", 2341));
cache.put("212 Inter", new Car("Ferrari 212 Inter", "black", 4000));
cache.put("500_Superfast", new Car("Ferrari 500_Superfast", "Rosso corsa", 4000));
//test for duplication:
cache.put("500_Superfast", new Car("Ferrari 500_Superfast", "Rosso corsa", 4000));
}
@AfterMethod
public void cleanupData() {
cache.clear();
}
public void testFaceting() throws Exception {
QueryBuilder queryBuilder = qf.buildQueryBuilderForClass(Car.class).get();
FacetingRequest request = queryBuilder.facet()
.name(facetName)
.onField(indexFieldName)
.discrete()
.createFacetingRequest();
Query luceneQuery = queryBuilder.all().createQuery();
CacheQuery<?> query = qf.getQuery(luceneQuery);
query.getFacetManager().enableFaceting(request);
List<Facet> facetList = query.getFacetManager().getFacets(facetName);
assertEquals("Wrong number of facets", 2, facetList.size());
assertEquals("4000", facetList.get(0).getValue());
assertEquals(2, facetList.get(0).getCount());
assertEquals(indexFieldName, facetList.get(0).getFieldName());
assertEquals("2341", facetList.get(1).getValue());
assertEquals(1, facetList.get(1).getCount());
assertEquals(indexFieldName, facetList.get(1).getFieldName());
}
}