package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries;
import com.silverforge.elasticsearchrawclient.BuildConfig;
import com.silverforge.elasticsearchrawclient.definition.QueryTest;
import com.silverforge.elasticsearchrawclient.queryDSL.operators.LogicOperator;
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.junit.Assert.*;
import static org.hamcrest.Matchers.*;
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@Category(value = QueryTest.class)
public class CommonTermsQueryTest {
// region Happy path
@Test
public void when_minimal_query_parameters_added_then_query_generated_well() {
CommonTermsQuery query = CommonTermsQuery
.builder()
.field("oregapam")
.query("alma barack citrom")
.build();
String queryString = query.getQueryString();
System.out.println(queryString);
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString, is("{\"common\":{\"oregapam\":{\"query\":\"alma barack citrom\"}}}"));
}
@Test
public void when_minimumShouldMatch_defined_then_lowFreq_and_highFreq_parameters_are_ignored() {
CommonTermsQuery query = CommonTermsQuery
.builder()
.field("oregapam")
.query("alma barack citrom")
.minimumShouldMatch(4)
.lowFreq(3)
.highFreq(6)
.build();
String queryString = query.getQueryString();
System.out.println(queryString);
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"common\":{\"oregapam\":{"), is(true));
assertThat(queryString.endsWith("}}}"), is(true));
assertThat(queryString.indexOf("\"query\":\"alma barack citrom\""), greaterThan(0));
assertThat(queryString.indexOf("\"minimum_should_match\":\"4\""), greaterThan(0));
assertThat(queryString.indexOf("\"low_freq\""), is(-1));
assertThat(queryString.indexOf("\"high_freq\""), is(-1));
}
@Test
public void when_low_freq_and_high_freq_defined_then_minimum_should_match_is_the_group() {
CommonTermsQuery query = CommonTermsQuery
.builder()
.field("oregapam")
.query("alma barack citrom")
.lowFreq(3)
.highFreq(6)
.build();
String queryString = query.getQueryString();
System.out.println(queryString);
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"common\":{\"oregapam\":{"), is(true));
assertThat(queryString.endsWith("}}}"), is(true));
assertThat(queryString.indexOf("\"query\":\"alma barack citrom\""), greaterThan(0));
assertThat(queryString.indexOf("\"minimum_should_match\":{"), greaterThan(0));
assertThat(queryString.indexOf("\"low_freq\":\"3\""), greaterThan(0));
assertThat(queryString.indexOf("\"high_freq\":\"6\""), greaterThan(0));
}
@Test
public void when_only_low_freq_is_defined_then_minimum_should_match_is_the_group() {
CommonTermsQuery query = CommonTermsQuery
.builder()
.field("oregapam")
.query("alma barack citrom")
.lowFreq(3)
.build();
String queryString = query.getQueryString();
System.out.println(queryString);
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"common\":{\"oregapam\":{"), is(true));
assertThat(queryString.endsWith("}}}"), is(true));
assertThat(queryString.indexOf("\"query\":\"alma barack citrom\""), greaterThan(0));
assertThat(queryString.indexOf("\"minimum_should_match\":{\"low_freq\":\"3\""), greaterThan(0));
}
@Test
public void when_only_high_freq_is_defined_then_minimum_should_match_is_the_group() {
CommonTermsQuery query = CommonTermsQuery
.builder()
.field("oregapam")
.query("alma barack citrom")
.highFreq(23)
.build();
String queryString = query.getQueryString();
System.out.println(queryString);
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"common\":{\"oregapam\":{"), is(true));
assertThat(queryString.endsWith("}}}"), is(true));
assertThat(queryString.indexOf("\"query\":\"alma barack citrom\""), greaterThan(0));
assertThat(queryString.indexOf("\"minimum_should_match\":{\"high_freq\":\"23\""), greaterThan(0));
}
@Test
public void when_all_param_is_defined_then_query_generated_well() {
CommonTermsQuery query = CommonTermsQuery
.builder()
.field("oregapam")
.query("alma barack citrom")
.highFreqCombination("3<50%")
.lowFreq(72)
.highFreqOperator(LogicOperator.OR)
.lowFreqOperator(LogicOperator.AND)
.cutoffFrequency(ZeroToOneRangeOperator._0_2)
.build();
String queryString = query.getQueryString();
System.out.println(queryString);
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"common\":{\"oregapam\":{"), is(true));
assertThat(queryString.endsWith("}}}"), is(true));
assertThat(queryString.indexOf("\"query\":\"alma barack citrom\""), greaterThan(0));
assertThat(queryString.indexOf("\"minimum_should_match\":{"), greaterThan(0));
assertThat(queryString.indexOf("\"high_freq\":\"3<50%\""), greaterThan(0));
assertThat(queryString.indexOf("\"low_freq\":\"72\""), greaterThan(0));
assertThat(queryString.indexOf("\"low_freq_operator\":\"and\""), greaterThan(0));
assertThat(queryString.indexOf("\"high_freq_operator\":\"or\""), greaterThan(0));
assertThat(queryString.indexOf("\"cutoff_frequency\":\"0.2\""), greaterThan(0));
}
// endregion
//region Sad path
@Test
public void when_field_is_not_defined_then_all_fields_generated() {
CommonTermsQuery query = CommonTermsQuery
.builder()
.build();
String queryString = query.getQueryString();
System.out.println(queryString);
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"common\":{\"_all\":{"), is(true));
assertThat(queryString.endsWith("}}}"), is(true));
}
@Test
public void when_query_is_not_defined_then_all_fields_generated() {
CommonTermsQuery query = CommonTermsQuery
.builder()
.query(null)
.build();
String queryString = query.getQueryString();
System.out.println(queryString);
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"common\":{\"_all\":{"), is(true));
assertThat(queryString.endsWith("}}}"), is(true));
assertThat(queryString.indexOf("\"query\":\"\""), greaterThan(0));
}
// endregion
}