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 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 GeoPolygonQueryTest {
// region Happy path
@Test
public void when_all_parameters_defined_then_query_generated_well()
throws MandatoryParametersAreMissingException {
GeoPoint geoPoint1 = GeoPoint.builder().longitude(12.123456).latitude(23.23456789).build();
GeoPoint geoPoint2 = GeoPoint.builder().longitude(34.34567890).latitude(45.4567).build();
GeoPoint geoPoint3 = GeoPoint.builder().longitude(56.567).latitude(67.67890123).build();
String queryString = GeoPolygonQuery
.builder()
.fieldName("location")
.points(geoPoint1, geoPoint2, geoPoint3)
.queryName("MyWonderfulQuery")
.coerce(false)
.build()
.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"geo_polygon\":{"), is(true));
assertThat(queryString.endsWith("}}"), is(true));
assertThat(queryString.indexOf("\"location\":{"), greaterThan(0));
assertThat(queryString.indexOf("[12.123456,23.23456789]"), greaterThan(0));
assertThat(queryString.indexOf("[34.3456789,45.4567]"), greaterThan(0));
assertThat(queryString.indexOf("[56.567,67.67890123]"), greaterThan(0));
assertThat(queryString.indexOf("\"_name\":\"MyWonderfulQuery\""), greaterThan(0));
assertThat(queryString.indexOf("\"coerce\":\"false\""), greaterThan(0));
}
@Test
public void when_minimal_parameters_defined_then_query_generated_well()
throws MandatoryParametersAreMissingException {
GeoPoint geoPoint1 = GeoPoint.builder().longitude(12.123456).latitude(23.23456789).build();
GeoPoint geoPoint2 = GeoPoint.builder().longitude(34.34567890).latitude(45.4567).build();
GeoPoint geoPoint3 = GeoPoint.builder().longitude(56.567).latitude(67.67890123).build();
String queryString = GeoPolygonQuery
.builder()
.fieldName("location")
.points(geoPoint1, geoPoint2, geoPoint3)
.build()
.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"geo_polygon\":{\"location\":{"), is(true));
assertThat(queryString.endsWith("}}}"), is(true));
assertThat(queryString.indexOf("[12.123456,23.23456789]"), greaterThan(0));
assertThat(queryString.indexOf("[34.3456789,45.4567]"), greaterThan(0));
assertThat(queryString.indexOf("[56.567,67.67890123]"), greaterThan(0));
}
// endregion
//region Sad path
@Test(expected = MandatoryParametersAreMissingException.class)
public void when_no_parameters_defined_then_exception_thrown()
throws MandatoryParametersAreMissingException {
GeoPolygonQuery
.builder()
.build();
}
@Test(expected = MandatoryParametersAreMissingException.class)
public void when_only_field_name_parameter_defined_then_exception_thrown()
throws MandatoryParametersAreMissingException {
GeoPolygonQuery
.builder()
.fieldName("a")
.build();
}
@Test(expected = MandatoryParametersAreMissingException.class)
public void when_only_points_parameter_defined_then_exception_thrown()
throws MandatoryParametersAreMissingException {
GeoPolygonQuery
.builder()
.points("bhj4giy3giu435ui")
.build();
}
// endregion
}