package com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries;
import com.silverforge.elasticsearchrawclient.BuildConfig;
import com.silverforge.elasticsearchrawclient.exceptions.MandatoryParametersAreMissingException;
import com.silverforge.elasticsearchrawclient.model.LikeDoc;
import com.silverforge.elasticsearchrawclient.definition.QueryTest;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.rules.ExpectedException;
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 MoreLikeThisQueryTest {
// region Happy path
@Test
public void when_simple_like_added_then_query_generated_well()
throws MandatoryParametersAreMissingException {
String queryString = MoreLikeThisQuery
.builder()
.fields("apple", "banana", "cherry", "date")
.like("Quick brown fox jumps over the lazy dog.")
.minTermFreq(3)
.maxQueryTerms(6)
.build()
.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"more_like_this\":{"), is(true));
assertThat(queryString.endsWith("}}"), is(true));
assertThat(queryString.indexOf("\"fields\":[\"apple\",\"banana\",\"cherry\",\"date\"]"), greaterThan(0));
assertThat(queryString.indexOf("\"like\":\"Quick brown fox jumps over the lazy dog.\""), greaterThan(0));
assertThat(queryString.indexOf("\"min_term_freq\":\"3\""), greaterThan(0));
assertThat(queryString.indexOf("\"max_query_terms\":\"6\""), greaterThan(0));
}
@Test
public void when_complicated_like_added_then_query_generated_well()
throws MandatoryParametersAreMissingException {
LikeDoc likeDoc1 = LikeDoc
.builder()
.index("zeta")
.type("teta")
.id("ty-87")
.build();
LikeDoc likeDoc2 = LikeDoc
.builder()
.index("jotta")
.type("peta")
.doc("{\"name\":{\"first\":\"Janos Gedeon\", \"last\":\"Murvai-Gaal\"}, \"age\":37}")
.build();
String queryString = MoreLikeThisQuery
.builder()
.fields("apple", "banana", "cherry", "date")
.like(new LikeDoc[] { likeDoc1, likeDoc2 }, new String[] { "Free text 1", "Free text 2" })
.minTermFreq(3.67f)
.maxQueryTerms(6.2134f)
.build()
.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.indexOf("\"fields\":[\"apple\",\"banana\",\"cherry\",\"date\"]"), greaterThan(0));
assertThat(queryString.indexOf("\"min_term_freq\":\"3.67\""), greaterThan(0));
assertThat(queryString.indexOf("\"max_query_terms\":\"6.2134\""), greaterThan(0));
assertThat(queryString.indexOf("\"like\":["), greaterThan(0));
assertThat(queryString.indexOf("\"_index\":\"zeta\""), greaterThan(0));
assertThat(queryString.indexOf("\"_type\":\"teta\""), greaterThan(0));
assertThat(queryString.indexOf("\"_id\":\"ty-87\""), greaterThan(0));
assertThat(queryString.indexOf("\"_index\":\"jotta\""), greaterThan(0));
assertThat(queryString.indexOf("\"_type\":\"peta\""), greaterThan(0));
assertThat(queryString.indexOf("\"doc\":{\"name\":{\"first\":\"Janos Gedeon\", \"last\":\"Murvai-Gaal\"}, \"age\":37}"), greaterThan(0));
assertThat(queryString.indexOf("\"Free text 1\""), greaterThan(0));
assertThat(queryString.indexOf("\"Free text 2\""), greaterThan(0));
}
@Test
public void when_complicated_like_added_without_like_docs_then_query_generated_well()
throws MandatoryParametersAreMissingException {
String queryString = MoreLikeThisQuery
.builder()
.fields("apple", "banana", "cherry", "date")
.like(new String[]{"Free text 1", "Free text 2"})
.minTermFreq(3.67f)
.maxQueryTerms(6.2134f)
.build()
.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.indexOf("\"fields\":[\"apple\",\"banana\",\"cherry\",\"date\"]"), greaterThan(0));
assertThat(queryString.indexOf("\"min_term_freq\":\"3.67\""), greaterThan(0));
assertThat(queryString.indexOf("\"max_query_terms\":\"6.2134\""), greaterThan(0));
assertThat(queryString.indexOf("\"like\":["), greaterThan(0));
assertThat(queryString.indexOf("\"Free text 1\""), greaterThan(0));
assertThat(queryString.indexOf("\"Free text 2\""), greaterThan(0));
assertThat(queryString.indexOf("\"_index\""), is(-1));
assertThat(queryString.indexOf("\"_type\""), is(-1));
assertThat(queryString.indexOf("\"_id\""), is(-1));
assertThat(queryString.indexOf("\"doc\""), is(-1));
}
@Test
public void when_complicated_like_added_without_free_text_then_query_generated_well()
throws MandatoryParametersAreMissingException {
LikeDoc likeDoc1 = LikeDoc
.builder()
.index("zeta")
.type("teta")
.id("ty-87")
.build();
LikeDoc likeDoc2 = LikeDoc
.builder()
.index("jotta")
.type("peta")
.doc("{\"name\":{\"first\":\"Janos Gedeon\", \"last\":\"Murvai-Gaal\"}, \"age\":37}")
.build();
String queryString = MoreLikeThisQuery
.builder()
.fields("apple", "banana", "cherry", "date")
.like(new LikeDoc[] { likeDoc1, likeDoc2 })
.minTermFreq(3.67f)
.maxQueryTerms(6.2134f)
.build()
.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.indexOf("\"fields\":[\"apple\",\"banana\",\"cherry\",\"date\"]"), greaterThan(0));
assertThat(queryString.indexOf("\"min_term_freq\":\"3.67\""), greaterThan(0));
assertThat(queryString.indexOf("\"max_query_terms\":\"6.2134\""), greaterThan(0));
assertThat(queryString.indexOf("\"like\":["), greaterThan(0));
assertThat(queryString.indexOf("\"_index\":\"zeta\""), greaterThan(0));
assertThat(queryString.indexOf("\"_type\":\"teta\""), greaterThan(0));
assertThat(queryString.indexOf("\"_id\":\"ty-87\""), greaterThan(0));
assertThat(queryString.indexOf("\"_index\":\"jotta\""), greaterThan(0));
assertThat(queryString.indexOf("\"_type\":\"peta\""), greaterThan(0));
assertThat(queryString.indexOf("\"doc\":{\"name\":{\"first\":\"Janos Gedeon\", \"last\":\"Murvai-Gaal\"}, \"age\":37}"), greaterThan(0));
assertThat(queryString.indexOf("\"Free text 1\""), is(-1));
assertThat(queryString.indexOf("\"Free text 2\""), is(-1));
}
//endregion
// region Sad path
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test()
public void when_no_params_defined_then_query_throws_exception()
throws MandatoryParametersAreMissingException {
expectedException.expect(MandatoryParametersAreMissingException.class);
expectedException.expectMessage("The following parameters are missing : like");
MoreLikeThisQuery
.builder()
.build()
.getQueryString();
}
@Test()
public void when_only_the_like_param_defined_then_query_generated_well()
throws MandatoryParametersAreMissingException {
String queryString = MoreLikeThisQuery
.builder()
.like("apple")
.build()
.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.indexOf("\"like\":\"apple\""), greaterThan(0));
}
// endregion
}