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.TimeZoneOperator; 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 java.text.ParseException; import java.text.SimpleDateFormat; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) @Category(value = QueryTest.class) public class RangeQueryTest { // region Happy path @Test public void when_minimal_required_params_added_then_query_is_generated_well() throws MandatoryParametersAreMissingException { RangeQuery query = RangeQuery .builder() .fieldName("name") .build(); String queryString = query.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.startsWith("{\"range\":{\"name\":"), is(true)); assertThat(queryString.endsWith("}}"), is(true)); assertThat(queryString.indexOf("\"range\":{\"name\":\"\"}"), greaterThan(0)); } @Test public void when_all_field_name_defined_with_value_then_minimum_best_query_generated_well() throws MandatoryParametersAreMissingException { RangeQuery query = RangeQuery .builder() .fieldName("name") .gte(10) .gt(9) .lte(20) .lt(21) .boost(2.0f) .build(); String queryString = query.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.startsWith("{\"range\":{\"name\":"), is(true)); assertThat(queryString.endsWith("}}"), is(true)); assertThat(queryString.indexOf("\"gte\":\"10\""), greaterThan(0)); assertThat(queryString.indexOf("\"gt\":\"9\""), greaterThan(0)); assertThat(queryString.indexOf("\"lte\":\"20\""), greaterThan(0)); assertThat(queryString.indexOf("\"lt\":\"21\""), greaterThan(0)); assertThat(queryString.indexOf("\"boost\":\"2.0\""), greaterThan(0)); } @Test public void when_date_used_for_range_values_then_minimum_best_query_generated_well() throws ParseException, MandatoryParametersAreMissingException { String gte = "2012-01-02"; String gt = "2012-01-01"; String lte = "2012-12-12"; String lt = "2012-12-13"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); RangeQuery query = RangeQuery .builder() .fieldName("name") .gte(sdf.parse(gte),"yyyy-MM-dd") .gt(sdf.parse(gt),"yyyy-MM-dd") .lte(sdf.parse(lte),"yyyy-MM-dd") .lt(sdf.parse(lt),"yyyy-MM-dd") .format("dd/MM/yyyy") .timeZone(TimeZoneOperator.UTC) .boost(2.0f) .build(); String queryString = query.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.startsWith("{\"range\":{\"name\":"), is(true)); assertThat(queryString.endsWith("}}"), is(true)); assertThat(queryString.indexOf("\"gte\":\"2012-01-02\""), greaterThan(0)); assertThat(queryString.indexOf("\"gt\":\"2012-01-01\""), greaterThan(0)); assertThat(queryString.indexOf("\"lte\":\"2012-12-12\""), greaterThan(0)); assertThat(queryString.indexOf("\"lt\":\"2012-12-13\""), greaterThan(0)); assertThat(queryString.indexOf("\"format\":\"dd/MM/yyyy\""), greaterThan(0)); assertThat(queryString.indexOf("\"time_zone\":\"+00:00\""), greaterThan(0)); assertThat(queryString.indexOf("\"boost\":\"2.0\""), greaterThan(0)); } // endregion Happy path // region Sad path @Test(expected = MandatoryParametersAreMissingException.class) public void when_no_params_added_then_exception_is_thrown() throws MandatoryParametersAreMissingException { RangeQuery query = RangeQuery .builder() .build(); } @Test public void when_no_timezone_provided_then_query_is_generated_well() throws ParseException, MandatoryParametersAreMissingException { String gte = "2012-01-02"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); RangeQuery query = RangeQuery .builder() .fieldName("name") .gte(sdf.parse(gte), "yyyy-MM-dd") .format("dd/MM/yyyy") .boost(2.0f) .build(); String queryString = query.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.startsWith("{\"range\":{\"name\":"), is(true)); assertThat(queryString.endsWith("}}"), is(true)); assertThat(queryString.indexOf("\"gte\":\"2012-01-02\""), greaterThan(0)); assertThat(queryString.indexOf("\"format\":\"dd/MM/yyyy\""), greaterThan(0)); assertThat(queryString.indexOf("\"boost\":\"2.0\""), greaterThan(0)); } @Test public void when_no_format_provided_then_query_is_generated_well() throws ParseException, MandatoryParametersAreMissingException { String gte = "2012-01-02"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); RangeQuery query = RangeQuery .builder() .fieldName("name") .gte(sdf.parse(gte), "yyyy-MM-dd") .boost(2) .build(); String queryString = query.getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.startsWith("{\"range\":{\"name\":"), is(true)); assertThat(queryString.endsWith("}}"), is(true)); assertThat(queryString.indexOf("\"gte\":\"2012-01-02\""), greaterThan(0)); assertThat(queryString.indexOf("\"boost\":\"2\""), greaterThan(0)); } // endregion Sad path }