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.LogicOperator;
import com.silverforge.elasticsearchrawclient.queryDSL.operators.SimpleFlagOperator;
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.util.Locale;
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 SimpleQueryStringQueryTest {
// region Happy path
@Test
public void when_minimal_required_params_added_then_query_is_generated_well()
throws MandatoryParametersAreMissingException {
SimpleQueryStringQuery query = SimpleQueryStringQuery
.builder()
.query("\\\"fried eggs\\\" +(eggplant | potato) -frittata")
.build();
String queryString = query.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"simple_query_string\":{"), is(true));
assertThat(queryString.endsWith("}}"), is(true));
assertThat(queryString.indexOf("\"query\":\"\"fried eggs\" +(eggplant | potato) -frittata\""), greaterThan(0));
}
@Test
public void when_all_params_added_then_query_is_generated_well()
throws MandatoryParametersAreMissingException {
SimpleQueryStringQuery query = SimpleQueryStringQuery
.builder()
.query("\"fried eggs\" +(eggplant | potato) -frittata")
.fields("body^5", "_all")
.default_operator(LogicOperator.AND)
.analyzer("analyzer value")
.flags(SimpleFlagOperator.AND, SimpleFlagOperator.OR, SimpleFlagOperator.FUZZY)
.lowercase_expanded_terms(true)
.analyze_wildcard(false)
.locale(Locale.ENGLISH)
.lenient(true)
.minimum_should_match("20%")
.build();
String queryString = query.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"simple_query_string\":{"), is(true));
assertThat(queryString.endsWith("}}"), is(true));
assertThat(queryString.indexOf("\"query\":\"\"fried eggs\" +(eggplant | potato) -frittata\""), greaterThan(0));
assertThat(queryString.indexOf("\"fields\":[\"body^5\",\"_all\"]"), greaterThan(0));
assertThat(queryString.indexOf("\"default_operator\":\"and\""), greaterThan(0));
assertThat(queryString.indexOf("\"analyzer\":\"analyzer value\""), greaterThan(0));
assertThat(queryString.indexOf("\"flags\":\"AND|OR|FUZZY\""), greaterThan(0));
assertThat(queryString.indexOf("\"lowercase_expanded_terms\":\"true\""), greaterThan(0));
assertThat(queryString.indexOf("\"analyze_wildcard\":\"false\""), greaterThan(0));
assertThat(queryString.indexOf("\"locale\":\"en\""), greaterThan(0));
assertThat(queryString.indexOf("\"lenient\":\"true\""), greaterThan(0));
assertThat(queryString.indexOf("\"minimum_should_match\":\"20%\""), greaterThan(0));
}
// endregion Happy path
// region Sad path
@Test(expected = MandatoryParametersAreMissingException.class)
public void when_no_params_added_then_exception_is_thrown()
throws MandatoryParametersAreMissingException {
SimpleQueryStringQuery query = SimpleQueryStringQuery
.builder()
.build();
}
@Test
public void when_empty_query_added_then_query_is_generated_well()
throws MandatoryParametersAreMissingException {
SimpleQueryStringQuery query = SimpleQueryStringQuery
.builder()
.query("\"\"")
.build();
String queryString = query.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"simple_query_string\":{"), is(true));
assertThat(queryString.endsWith("}}"), is(true));
assertThat(queryString.indexOf("\"query\":\"\""), greaterThan(0));
}
// endregion Sad path
}