package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries; import com.silverforge.elasticsearchrawclient.BuildConfig; import com.silverforge.elasticsearchrawclient.exceptions.MandatoryParametersAreMissingException; import com.silverforge.elasticsearchrawclient.model.GeoPoint; import com.silverforge.elasticsearchrawclient.definition.QueryTest; import com.silverforge.elasticsearchrawclient.queryDSL.operators.DistanceTypeOperator; import com.silverforge.elasticsearchrawclient.queryDSL.operators.OptimizeBboxOperator; 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 GeoDistanceRangeQueryTest { // region Happy path @Test public void when_all_parameters_added_then_query_generated_well() throws MandatoryParametersAreMissingException { String queryString = GeoDistanceRangeQuery .builder() .fieldName("home.location") .locationGeohash("uo3543u4iy5i34uy534iuy") .from("200km") .to("400km") .distanceType(DistanceTypeOperator.ARC) .optimizeBbox(OptimizeBboxOperator.MEMORY) .queryName("apple") .coerce(true) .ignoreMalformed(false) .gt("300km") .lt("500km") .build() .getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.startsWith("{\"geo_distance_range\":{"), is(true)); assertThat(queryString.endsWith("}"), is(true)); assertThat(queryString.indexOf("\"home.location\":\"uo3543u4iy5i34uy534iuy\""), greaterThan(0)); assertThat(queryString.indexOf("\"from\":\"200km\""), greaterThan(0)); assertThat(queryString.indexOf("\"to\":\"400km\""), greaterThan(0)); assertThat(queryString.indexOf("\"distance_type\":\"arc\""), greaterThan(0)); assertThat(queryString.indexOf("\"optimize_bbox\":\"memory\""), greaterThan(0)); assertThat(queryString.indexOf("\"_name\":\"apple\""), greaterThan(0)); assertThat(queryString.indexOf("\"coerce\":\"true\""), greaterThan(0)); assertThat(queryString.indexOf("\"ignore_malformed\":\"false\""), greaterThan(0)); assertThat(queryString.indexOf("\"gt\":\"300km\""), greaterThan(0)); assertThat(queryString.indexOf("\"lt\":\"500km\""), greaterThan(0)); } @Test public void when_minimal_parameters_added_then_query_generated_well() throws MandatoryParametersAreMissingException { String queryString = GeoDistanceRangeQuery .builder() .fieldName("home.location") .location(GeoPoint.builder().longitude(23.456456456).latitude(56.324234324).build()) .build() .getQueryString(); assertThat(queryString, notNullValue()); assertThat(queryString, not("")); assertThat(queryString.startsWith("{\"geo_distance_range\":{"), is(true)); assertThat(queryString.endsWith("}"), is(true)); assertThat(queryString.indexOf("\"home.location\":[23.456456456,56.324234324]"), greaterThan(0)); } // endregion // region Sad path @Test(expected = MandatoryParametersAreMissingException.class) public void when_no_parameters_added_then_exception_thrown() throws MandatoryParametersAreMissingException { GeoDistanceRangeQuery .builder() .build(); } @Test(expected = MandatoryParametersAreMissingException.class) public void when_no_field_name_added_then_exception_thrown() throws MandatoryParametersAreMissingException { GeoDistanceRangeQuery .builder() .locationGeohash("werhuw274234234") .build(); } @Test(expected = MandatoryParametersAreMissingException.class) public void when_no_geo_added_then_exception_thrown() throws MandatoryParametersAreMissingException { GeoDistanceRangeQuery .builder() .fieldName("home.location") .build(); } // endregion }