package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries; import com.silverforge.elasticsearchrawclient.BuildConfig; import com.silverforge.elasticsearchrawclient.exceptions.MandatoryParametersAreMissingException; import com.silverforge.elasticsearchrawclient.definition.QueryTest; import com.silverforge.elasticsearchrawclient.queryDSL.operators.LogicOperator; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.annotation.Config; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertThat; @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) @Category(value = QueryTest.class) public class QueryStringQueryTest { // region Happy path @Test public void when_default_field_and_query_parameters_added_then_query_generated_well() throws MandatoryParametersAreMissingException { String queryString = QueryStringQuery .builder() .defaultField("myField") .query("apple OR banana") .build() .getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.startsWith("{\"query_string\":{"), is(true)); assertThat(queryString.endsWith("}}"), is(true)); assertThat(queryString.indexOf("\"default_field\":\"myField\""), greaterThan(0)); assertThat(queryString.indexOf("\"query\":\"apple OR banana\""), greaterThan(0)); } @Test public void when_complicated_query_parameters_defined_then_query_generated_well() throws MandatoryParametersAreMissingException { String queryString = QueryStringQuery .builder() .fields("myName", "yourName", "herName") .query("apple OR banana") .fuzziness("4") .fuzzyMaxExpansions(5) .fuzzyPrefixLength(3.4f) .allowLeadingWildcard(false) .analyzer("myCustomAnalyzer") .analyzeWildcard(true) .autoGeneratePhraseQueries(false) .boost(5.123f) .defaultOperator(LogicOperator.AND) .enablePositionIncrements(false) .lenient(true) .locale("HU") .lowercaseExpandedTerms(true) .maxDeterminizedStates(6) .minimumShouldMatchCombination("3>56%") .phraseSlop(5.1f) .timeZone("-08:45") .useDisMax(true) .build() .getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.startsWith("{\"query_string\":{"), is(true)); assertThat(queryString.endsWith("}}"), is(true)); assertThat(queryString.indexOf("\"fields\":[\"myName\",\"yourName\",\"herName\"]"), greaterThan(0)); assertThat(queryString.indexOf("\"query\":\"apple OR banana\""), greaterThan(0)); assertThat(queryString.indexOf("\"fuzziness\":\"4\""), greaterThan(0)); assertThat(queryString.indexOf("\"fuzzy_max_expansions\":\"5\""), greaterThan(0)); assertThat(queryString.indexOf("\"fuzzy_prefix_length\":\"3.4\""), greaterThan(0)); assertThat(queryString.indexOf("\"allow_leading_wildcard\":\"false\""), greaterThan(0)); assertThat(queryString.indexOf("\"analyzer\":\"myCustomAnalyzer\""), greaterThan(0)); assertThat(queryString.indexOf("\"analyze_wildcard\":\"true\""), greaterThan(0)); assertThat(queryString.indexOf("\"auto_generate_phrase_queries\":\"false\""), greaterThan(0)); assertThat(queryString.indexOf("\"boost\":\"5.123\""), greaterThan(0)); assertThat(queryString.indexOf("\"default_operator\":\"and\""), greaterThan(0)); assertThat(queryString.indexOf("\"enable_position_increments\":\"false\""), greaterThan(0)); assertThat(queryString.indexOf("\"lenient\":\"true\""), greaterThan(0)); assertThat(queryString.indexOf("\"locale\":\"HU\""), greaterThan(0)); assertThat(queryString.indexOf("\"lowercase_expanded_terms\":\"true\""), greaterThan(0)); assertThat(queryString.indexOf("\"max_determinized_states\":\"6\""), greaterThan(0)); assertThat(queryString.indexOf("\"minimum_should_match\":\"3>56%\""), greaterThan(0)); assertThat(queryString.indexOf("\"phrase_slop\":\"5.1\""), greaterThan(0)); assertThat(queryString.indexOf("\"time_zone\":\"-08:45\""), greaterThan(0)); assertThat(queryString.indexOf("\"use_dis_max\":\"true\""), greaterThan(0)); } // endregion // region Sad path @Test(expected = MandatoryParametersAreMissingException.class) public void when_no_parameters_added_then_exception_thrown() throws MandatoryParametersAreMissingException { QueryStringQuery .builder() .build(); } @Test(expected = MandatoryParametersAreMissingException.class) public void when_no_field_param_added_then_exception_thrown() throws MandatoryParametersAreMissingException { QueryStringQuery .builder() .query("apple") .build(); } @Test(expected = MandatoryParametersAreMissingException.class) public void when_no_query_param_added_then_exception_thrown() throws MandatoryParametersAreMissingException { QueryStringQuery .builder() .defaultField("apple") .build(); } // endregion }