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.MultiMatchTypeOperator;
import com.silverforge.elasticsearchrawclient.queryDSL.operators.ZeroToOneRangeOperator;
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 MultiMatchQueryTest {
// region Happy path
@Test
public void when_fields_value_added_then_fields_generated_well()
throws MandatoryParametersAreMissingException {
MultiMatchQuery query = MultiMatchQuery
.builder()
.fields("name", "population")
.query("12")
.build();
String queryString = query.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.indexOf("{\"multi_match\":{"), is(0));
assertThat(queryString.indexOf("\"query\":\"12\""), greaterThan(0));
assertThat(queryString.indexOf("\"fields\":[\"name\",\"population\"]"), greaterThan(0));
assertThat(queryString.indexOf("}}"), greaterThan(0));
}
@Test
public void when_all_fields_value_added_then_fields_generated_well()
throws MandatoryParametersAreMissingException {
MultiMatchQuery query = MultiMatchQuery
.builder()
.fields("name", "population")
.query("Karcag Budapest")
.tieBreaker(ZeroToOneRangeOperator._0_3)
.useDisMax(true)
.type(MultiMatchTypeOperator.BEST_FIELDS)
.minimumShouldMatch(3)
.build();
String queryString = query.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.indexOf("{\"multi_match\":{"), is(0));
assertThat(queryString.indexOf("\"query\":\"Karcag Budapest\""), greaterThan(0));
assertThat(queryString.indexOf("\"fields\":[\"name\",\"population\"]"), greaterThan(0));
assertThat(queryString.indexOf("\"tie_breaker\":\"0.3\""), greaterThan(0));
assertThat(queryString.indexOf("\"use_dis_max\":\"true\""), greaterThan(0));
assertThat(queryString.indexOf("\"type\":\"best_fields\""), greaterThan(0));
assertThat(queryString.indexOf("\"minimum_should_match\":\"3\""), greaterThan(0));
assertThat(queryString.indexOf("\",\""), greaterThan(0));
assertThat(queryString.indexOf("\"\""), is(-1));
assertThat(queryString.indexOf("}}"), greaterThan(0));
}
// endregion
// region Sad path
@Test(expected = MandatoryParametersAreMissingException.class)
public void when_no_parameters_defined_then_query_throws_exception()
throws MandatoryParametersAreMissingException {
MultiMatchQuery
.builder()
.build();
}
@Test(expected = MandatoryParametersAreMissingException.class)
public void when_no_fields_defined_then_query_throws_exception()
throws MandatoryParametersAreMissingException {
MultiMatchQuery
.builder()
.query("blah")
.build();
}
@Test(expected = MandatoryParametersAreMissingException.class)
public void when_no_query_defined_then_query_throws_exception()
throws MandatoryParametersAreMissingException {
MultiMatchQuery
.builder()
.fields("apple", "plum")
.build();
}
//
}