/**
* =============================================================================
*
* ORCID (R) Open Source
* http://orcid.org
*
* Copyright (c) 2012-2014 ORCID, Inc.
* Licensed under an MIT-Style License (MIT)
* http://orcid.org/open-source-license
*
* This copyright and license information (including a link to the full license)
* shall be included in its entirety in all copies or substantial portion of
* the software.
*
* =============================================================================
*/
package org.orcid.core.utils;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.orcid.utils.solr.entities.SolrConstants;
public class SolrQueryBuilderTest {
@Test
public void testQueryStringPopulation() {
SolrQueryBuilder solrQueryBuilder = new SolrQueryBuilder("query = ");
solrQueryBuilder.appendFieldValuePair("abc", "xyz");
assertEquals("query = abc:xyz", solrQueryBuilder.retrieveQuery());
// check that blank fields don't corrupt the query
solrQueryBuilder.appendORCondition("field1", "");
assertEquals("query = abc:xyz", solrQueryBuilder.retrieveQuery());
solrQueryBuilder.appendORCondition("field1", "field1");
assertEquals("query = abc:xyz OR field1:field1", solrQueryBuilder.retrieveQuery());
solrQueryBuilder.openNestedANDOperation();
// check that blank fields don't get populated the query - can't second
// guess the user though so we're left with open brackets
solrQueryBuilder.appendFieldValuePair("", "1234");
assertEquals("query = abc:xyz OR field1:field1 AND (", solrQueryBuilder.retrieveQuery());
solrQueryBuilder.appendFieldValuePair("orcid", "1234");
solrQueryBuilder.appendORCondition("familyName", "Simpson");
solrQueryBuilder.closeNestedANDOperation();
assertEquals("query = abc:xyz OR field1:field1 AND (orcid:1234 OR familyName:Simpson)", solrQueryBuilder.retrieveQuery());
}
@Test
public void testNotQuery() {
SolrQueryBuilder solrQueryBuilder = new SolrQueryBuilder();
solrQueryBuilder.appendFieldValuePair(SolrConstants.GIVEN_NAMES, "Will");
List<String> orcidsToExclude = new ArrayList<String>();
orcidsToExclude.add("1877-5816-0747-5659");
orcidsToExclude.add("6181-9093-3346-6284");
solrQueryBuilder.appendNOTCondition(SolrConstants.ORCID, orcidsToExclude);
assertEquals("given-names:Will -orcid:(1877\\-5816\\-0747\\-5659 6181\\-9093\\-3346\\-6284)", solrQueryBuilder.retrieveQuery());
}
@Test
public void testEDisMaxNameQuery() {
SolrQueryBuilder solrQueryBuilder = new SolrQueryBuilder();
List<SolrFieldWeight> fields = new ArrayList<SolrFieldWeight>();
fields.add(new SolrFieldWeight(SolrConstants.FAMILY_NAME, 1.0f));
fields.add(new SolrFieldWeight(SolrConstants.GIVEN_NAMES, 2.0f));
solrQueryBuilder.appendEDisMaxQuery(fields);
solrQueryBuilder.appendValue("Will");
List<String> orcidsToExclude = new ArrayList<String>();
orcidsToExclude.add("1877-5816-0747-5659");
orcidsToExclude.add("6181-9093-3346-6284");
solrQueryBuilder.appendNOTCondition(SolrConstants.ORCID, orcidsToExclude);
assertEquals("{!edismax qf='family-name^1.0 given-names^2.0'}Will -orcid:(1877\\-5816\\-0747\\-5659 6181\\-9093\\-3346\\-6284)", solrQueryBuilder.retrieveQuery());
}
}