at.pagu.soldockr.core.QueryParserTest.java Source code

Java tutorial

Introduction

Here is the source code for at.pagu.soldockr.core.QueryParserTest.java

Source

/*
 * Copyright (C) 2012 sol-dock-r authors.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package at.pagu.soldockr.core;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.params.GroupParams;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.data.domain.PageRequest;

import at.pagu.soldockr.ApiUsageException;
import at.pagu.soldockr.core.query.Criteria;
import at.pagu.soldockr.core.query.FacetOptions;
import at.pagu.soldockr.core.query.FacetQuery;
import at.pagu.soldockr.core.query.Query;
import at.pagu.soldockr.core.query.SimpleFacetQuery;
import at.pagu.soldockr.core.query.SimpleField;
import at.pagu.soldockr.core.query.SimpleFilterQuery;
import at.pagu.soldockr.core.query.SimpleQuery;
import at.pagu.soldockr.core.query.SimpleStringCriteria;

/**
 * @author Christoph Strobl
 */
public class QueryParserTest {

    private QueryParser queryParser;

    @Before
    public void setUp() {
        this.queryParser = new QueryParser();
    }

    @Test
    public void testConstructSimpleSolrQuery() {
        Query query = new SimpleQuery(new Criteria("field_1").is("value_1"));
        SolrQuery solrQuery = queryParser.constructSolrQuery(query);
        Assert.assertNotNull(solrQuery);
        assertQueryStringPresent(solrQuery);
        assertPaginationNotPresent(solrQuery);
        assertProjectionNotPresent(solrQuery);
        assertGroupingNotPresent(solrQuery);
        assertFactingNotPresent(solrQuery);
    }

    @Test
    public void testConstructSolrQueryWithPagination() {
        int page = 1;
        int pageSize = 100;
        Query query = new SimpleQuery(new Criteria("field_1").is("value_1"))
                .setPageRequest(new PageRequest(page, pageSize));
        SolrQuery solrQuery = queryParser.constructSolrQuery(query);
        Assert.assertNotNull(solrQuery);
        assertQueryStringPresent(solrQuery);
        assertPaginationPresent(solrQuery, page * pageSize, pageSize);
        assertProjectionNotPresent(solrQuery);
        assertGroupingNotPresent(solrQuery);
        assertFactingNotPresent(solrQuery);
    }

    @Test
    public void testConstructSimpleSolrQueryWithProjection() {
        Query query = new SimpleQuery(new Criteria("field_1").is("value_1")).addProjectionOnField("projection_1")
                .addProjectionOnField(new SimpleField("projection_2"));
        SolrQuery solrQuery = queryParser.constructSolrQuery(query);
        Assert.assertNotNull(solrQuery);
        assertQueryStringPresent(solrQuery);
        assertPaginationNotPresent(solrQuery);
        assertProjectionPresent(solrQuery, "projection_1,projection_2");
        assertGroupingNotPresent(solrQuery);
        assertFactingNotPresent(solrQuery);
    }

    @Test
    public void testConstructSolrQueryWithSingleGroupBy() {
        Query query = new SimpleQuery(new Criteria("field_1").is("value_1")).addGroupByField("group_1");
        SolrQuery solrQuery = queryParser.constructSolrQuery(query);
        Assert.assertNotNull(solrQuery);
        assertQueryStringPresent(solrQuery);
        assertPaginationNotPresent(solrQuery);
        assertProjectionNotPresent(solrQuery);
        assertGroupingPresent(solrQuery, "group_1");
        assertFactingNotPresent(solrQuery);
    }

    @Test(expected = ApiUsageException.class)
    public void testConstructSolrQueryWithMultiGroupBy() {
        Query query = new SimpleQuery(new Criteria("field_1").is("value_1")).addGroupByField("group_1")
                .addGroupByField(new SimpleField("group_2"));
        queryParser.constructSolrQuery(query);
    }

    @Test
    public void testConstructSolrQueryWithSingleFacet() {
        Query query = new SimpleFacetQuery(new Criteria("field_1").is("value_1"))
                .setFacetOptions(new FacetOptions("facet_1"));
        SolrQuery solrQuery = queryParser.constructSolrQuery(query);
        Assert.assertNotNull(solrQuery);
        assertQueryStringPresent(solrQuery);
        assertPaginationNotPresent(solrQuery);
        assertProjectionNotPresent(solrQuery);
        assertGroupingNotPresent(solrQuery);
        assertFactingPresent(solrQuery, "facet_1");
    }

    @Test
    public void testConstructSolrQueryWithMultipleFacet() {
        FacetQuery query = new SimpleFacetQuery(new Criteria("field_1").is("value_1"))
                .setFacetOptions(new FacetOptions("facet_1", "facet_2"));
        SolrQuery solrQuery = queryParser.constructSolrQuery(query);
        Assert.assertNotNull(solrQuery);
        assertQueryStringPresent(solrQuery);
        assertPaginationNotPresent(solrQuery);
        assertProjectionNotPresent(solrQuery);
        assertGroupingNotPresent(solrQuery);
        assertFactingPresent(solrQuery, "facet_1", "facet_2");
    }

    @Test
    public void testConstructSolrQueryWithFacetSort() {
        FacetQuery query = new SimpleFacetQuery(new Criteria("field_1").is("value_1"))
                .setFacetOptions(new FacetOptions("facet_1").setFacetSort(FacetOptions.FacetSort.INDEX));
        SolrQuery solrQuery = queryParser.constructSolrQuery(query);
        Assert.assertEquals("index", solrQuery.getFacetSortString());

        query.getFacetOptions().setFacetSort(FacetOptions.FacetSort.COUNT);
        solrQuery = queryParser.constructSolrQuery(query);
        Assert.assertEquals("count", solrQuery.getFacetSortString());
    }

    @Test
    public void testWithFilterQuery() {
        Query query = new SimpleQuery(new Criteria("field_1").is("value_1"))
                .addFilterQuery(new SimpleFilterQuery(new Criteria("filter_field").is("filter_value")));
        SolrQuery solrQuery = queryParser.constructSolrQuery(query);

        String[] filterQueries = solrQuery.getFilterQueries();
        Assert.assertEquals(1, filterQueries.length);
        Assert.assertEquals("filter_field:filter_value", filterQueries[0]);
    }

    @Test
    public void testWithEmptyFilterQuery() {
        Query query = new SimpleQuery(new Criteria("field_1").is("value_1")).addFilterQuery(new SimpleQuery());
        SolrQuery solrQuery = queryParser.constructSolrQuery(query);

        Assert.assertNull(solrQuery.getFilterQueries());
    }

    @Test
    public void testWithSimpleStringCriteria() {
        SimpleStringCriteria criteria = new SimpleStringCriteria("field_1:value_1");
        Query query = new SimpleQuery(criteria);
        SolrQuery solrQuery = queryParser.constructSolrQuery(query);
        Assert.assertNotNull(solrQuery);
        assertQueryStringPresent(solrQuery);
        assertPaginationNotPresent(solrQuery);
        assertProjectionNotPresent(solrQuery);
        assertGroupingNotPresent(solrQuery);
        assertFactingNotPresent(solrQuery);

        Assert.assertEquals(criteria.getQueryString(), solrQuery.getQuery());

    }

    private void assertFactingPresent(SolrQuery solrQuery, String... expected) {
        Assert.assertArrayEquals(expected, solrQuery.getFacetFields());
    }

    private void assertFactingNotPresent(SolrQuery solrQuery) {
        Assert.assertNull(solrQuery.get(FacetParams.FACET_FIELD));
    }

    private void assertQueryStringPresent(SolrQuery solrQuery) {
        Assert.assertNotNull(solrQuery.get(CommonParams.Q));
    }

    private void assertProjectionNotPresent(SolrQuery solrQuery) {
        Assert.assertNull(solrQuery.getFields());
    }

    private void assertProjectionPresent(SolrQuery solrQuery, String expected) {
        Assert.assertNotNull(solrQuery.get(CommonParams.FL));
        Assert.assertEquals(expected, solrQuery.get(CommonParams.FL));
    }

    private void assertPaginationNotPresent(SolrQuery solrQuery) {
        Assert.assertNull(solrQuery.getStart());
        Assert.assertNull(solrQuery.getRows());
    }

    private void assertPaginationPresent(SolrQuery solrQuery, int start, int rows) {
        Assert.assertEquals(Integer.valueOf(start), solrQuery.getStart());
        Assert.assertEquals(Integer.valueOf(rows), solrQuery.getRows());
    }

    private void assertGroupingNotPresent(SolrQuery solrQuery) {
        Assert.assertNull(solrQuery.get(GroupParams.GROUP));
        Assert.assertNull(solrQuery.get(GroupParams.GROUP_FIELD));
        Assert.assertNull(solrQuery.get(GroupParams.GROUP_MAIN));
    }

    private void assertGroupingPresent(SolrQuery solrQuery, String expected) {
        Assert.assertNotNull(solrQuery.get(GroupParams.GROUP));
        Assert.assertNotNull(solrQuery.get(GroupParams.GROUP_FIELD));
        Assert.assertNotNull(solrQuery.get(GroupParams.GROUP_MAIN));
        Assert.assertEquals(expected, solrQuery.get(GroupParams.GROUP_FIELD));
    }

}