package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries; import com.silverforge.elasticsearchrawclient.BuildConfig; import com.silverforge.elasticsearchrawclient.definition.QueryTest; import com.silverforge.elasticsearchrawclient.queryDSL.operators.AnalyzerOperator; import com.silverforge.elasticsearchrawclient.queryDSL.operators.FuzzinessOperator; import com.silverforge.elasticsearchrawclient.queryDSL.operators.FuzzyRewriteOperator; import com.silverforge.elasticsearchrawclient.queryDSL.operators.LogicOperator; import com.silverforge.elasticsearchrawclient.queryDSL.operators.PhraseTypeOperator; import com.silverforge.elasticsearchrawclient.queryDSL.operators.ZeroTermsQueryOperator; 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 MatchQueryTest { // region Happy path @Test public void when_String_value_added_with_field_name_then_query_generated_well() { MatchQuery matchQuery = MatchQuery .builder() .fieldName("name") .value("Karcag") .build(); String queryString = matchQuery.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString, is("{\"match\":{\"name\":\"Karcag\"}}")); } @Test public void when_String_value_added_with_all_field_name_then_query_generated_well() { MatchQuery matchQuery = MatchQuery .builder() .allFields() .value("Karcag") .build(); String queryString = matchQuery.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString, is("{\"match\":{\"_all\":\"Karcag\"}}")); } @Test public void when_all_query_parameters_added_then_query_generated_well() { MatchQuery matchQuery = MatchQuery .builder() .fieldName("name") .query("Karcag Budapest") .analyzer(AnalyzerOperator.STANDARD) .fuzziness(FuzzinessOperator._0) .fuzzyRewrite(FuzzyRewriteOperator.TOP_TERMS_BOOST_N, (byte)3) .lenient(false) .operator(LogicOperator.AND) .minimumShouldMatchPercentage(12) .maxExpansions(2) .prefixLength(1) .type(PhraseTypeOperator.PHRASE) .zeroTermsQuery(ZeroTermsQueryOperator.NONE) .build(); String queryString = matchQuery.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.indexOf("{\"match\":{\"name\":{"), is(0)); assertThat(queryString.indexOf("\"query\":\"Karcag Budapest\""), greaterThan(0)); assertThat(queryString.indexOf("\"analyzer\":\"standard\""), greaterThan(0)); assertThat(queryString.indexOf("\"fuzziness\":\"0\""), greaterThan(0)); assertThat(queryString.indexOf("\"fuzzy_rewrite\":\"top_terms_boost_3\""), greaterThan(0)); assertThat(queryString.indexOf("\"lenient\":\"false\""), greaterThan(0)); assertThat(queryString.indexOf("\"operator\":\"and\""), greaterThan(0)); assertThat(queryString.indexOf("\"minimum_should_match\":\"12%\""), greaterThan(0)); assertThat(queryString.indexOf("\"max_expansions\":\"2\""), greaterThan(0)); assertThat(queryString.indexOf("\"prefix_length\":\"1\""), greaterThan(0)); assertThat(queryString.indexOf("\"type\":\"phrase\""), greaterThan(0)); assertThat(queryString.indexOf("\"zero_terms_query\":\"none\""), greaterThan(0)); assertThat(queryString.indexOf("\",\""), greaterThan(0)); assertThat(queryString.indexOf("\"\""), is(-1)); assertThat(queryString.indexOf("}}}"), greaterThan(0)); } @Test public void when_fuzziness_defined_manually_then_query_generated_well() { MatchQuery matchQuery = MatchQuery .builder() .fieldName("name") .query("Kar") .fuzziness("5") .type(PhraseTypeOperator.PHRASE_PREFIX) .build(); String queryString = matchQuery.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.indexOf("{\"match\":{\"name\":{"), is(0)); assertThat(queryString.indexOf("\"query\":\"Kar\""), greaterThan(0)); assertThat(queryString.indexOf("\"fuzziness\":\"5\""), greaterThan(0)); assertThat(queryString.indexOf("\"type\":\"phrase_prefix\""), greaterThan(0)); assertThat(queryString.indexOf("\",\""), greaterThan(0)); assertThat(queryString.indexOf("\"\""), is(-1)); assertThat(queryString.indexOf("}}}"), greaterThan(0)); } // endregion // region Sad path @Test public void when_no_fields_defined_then_query_generated_well() { MatchQuery matchQuery = MatchQuery .builder() .value("Karcag") .build(); String queryString = matchQuery.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString, is("{\"match\":{\"_all\":\"Karcag\"}}")); } @Test public void when_nothing_is_defined_then_most_generic_query_generated() { MatchQuery matchQuery = MatchQuery .builder() .build(); String queryString = matchQuery.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString, is("{\"match\":{\"_all\":\"\"}}")); } @Test public void when_null_parameters_set_then_most_generic_query_generated() { MatchQuery matchQuery = MatchQuery .builder() .fieldName(null) .value(null) .build(); String queryString = matchQuery.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString, is("{\"match\":{\"_all\":\"\"}}")); } // endregion }