package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries; import com.silverforge.elasticsearchrawclient.BuildConfig; import com.silverforge.elasticsearchrawclient.definition.QueryTest; import com.silverforge.elasticsearchrawclient.queryDSL.operators.FuzzinessOperator; 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.junit.Assert.*; import static org.hamcrest.Matchers.*; @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) @Category(value = QueryTest.class) public class FuzzyQueryTest { // region Happy path @Test public void when_all_field_name_defined_with_value_then_minimum_best_query_generated_well() { FuzzyQuery query = FuzzyQuery .builder() .allFields() .value("Karcag") .build(); String queryString = query.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString, is("{\"fuzzy\":{\"_all\":\"Karcag\"}}")); } @Test public void when_custom_fields_defined_with_value_then_minimum_best_query_generated_well() { FuzzyQuery query = FuzzyQuery .builder() .fieldName("name") .value("Karcag") .build(); String queryString = query.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString, is("{\"fuzzy\":{\"name\":\"Karcag\"}}")); } @Test public void when_all_possible_fields_defined_with_value_then_minimum_best_query_generated_well() { FuzzyQuery query = FuzzyQuery .builder() .fieldName("name") .value("Karcag") .boost(2.8f) .fuzziness(FuzzinessOperator._1) .prefixLength(3) .maxExpansions(4) .build(); String queryString = query.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.startsWith("{\"fuzzy\":{\"name\":"), is(true)); assertThat(queryString.indexOf("\"value\":\"Karcag\""), greaterThan(0)); assertThat(queryString.indexOf("\"boost\":\"2.8\""), greaterThan(0)); assertThat(queryString.indexOf("\"fuzziness\":\"1\""), greaterThan(0)); assertThat(queryString.indexOf("\"prefix_length\":\"3\""), greaterThan(0)); assertThat(queryString.indexOf("\"max_expansions\":\"4\""), greaterThan(0)); } // endregion // region Sad path @Test public void when_no_fields_defined_then_query_generated_well() { FuzzyQuery matchQuery = FuzzyQuery .builder() .value("Karcag") .build(); String queryString = matchQuery.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString, is("{\"fuzzy\":{\"_all\":\"Karcag\"}}")); } @Test public void when_nothing_is_defined_then_most_generic_query_generated() { FuzzyQuery matchQuery = FuzzyQuery .builder() .build(); String queryString = matchQuery.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString, is("{\"fuzzy\":{\"_all\":\"\"}}")); } @Test public void when_null_parameters_set_then_most_generic_query_generated() { FuzzyQuery matchQuery = FuzzyQuery .builder() .fieldName(null) .value(null) .build(); String queryString = matchQuery.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString, is("{\"fuzzy\":{\"_all\":\"\"}}")); } // endregion }