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 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.HashMap;
import java.util.Map;
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;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@Category(value = QueryTest.class)
public class TemplateQueryTest {
// region Happy path
@Test
public void when_minimal_required_params_added_then_query_is_generated_well() throws MandatoryParametersAreMissingException {
MatchQuery matchQuery = mock(MatchQuery.class);
when(matchQuery.getQueryString()).thenReturn("{\"match\":{\"_all\":\"Karcag\"}}");
TemplateQuery query = TemplateQuery
.builder()
.inline(matchQuery)
.build();
String queryString = query.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"template\":{"), is(true));
assertThat(queryString.endsWith("}}"), is(true));
assertThat(queryString.indexOf("\"template\":{\"inline\":{"), greaterThan(0));
assertThat(queryString.indexOf("\"inline\":{\"match\":{\"_all\":\"Karcag\"}}"), greaterThan(0));
}
@Test
public void when_all_params_added_then_query_is_generated_well() throws MandatoryParametersAreMissingException {
MatchQuery matchQuery = mock(MatchQuery.class);
when(matchQuery.getQueryString()).thenReturn("{\"match\":{\"_all\":\"Karcag\"}}");
Map<String, String> params = new HashMap<>();
params.put("param1","param");
params.put("param2","param");
TemplateQuery query = TemplateQuery
.builder()
.inline(matchQuery)
.params(params)
.build();
String queryString = query.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"template\":{"), is(true));
assertThat(queryString.endsWith("}}"), is(true));
assertThat(queryString.indexOf("\"template\":{\"inline\":{"), greaterThan(0));
assertThat(queryString.indexOf("\"inline\":{\"match\":{\"_all\":\"Karcag\"}}"), greaterThan(0));
assertThat(queryString.indexOf("\"params\":{\"param1\":\"param\",\"param2\":\"param\"}"), greaterThan(0));
}
@Test
public void when_template_id_added_then_query_is_generated_well() throws MandatoryParametersAreMissingException {
Map<String, String> params = new HashMap<>();
params.put("param1","param");
params.put("param2", "param");
TemplateQuery query = TemplateQuery
.builder()
.params(params)
.id("id")
.build();
String queryString = query.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"template\":{"), is(true));
assertThat(queryString.endsWith("}}"), is(true));
assertThat(queryString.indexOf("\"template\":{"), greaterThan(0));
assertThat(queryString.indexOf("\"id\":\"id\""), greaterThan(0));
assertThat(queryString.indexOf("\"params\":{\"param1\":\"param\",\"param2\":\"param\"}"), greaterThan(0));
}
@Test
public void when_file_added_then_query_is_generated_well() throws MandatoryParametersAreMissingException {
TemplateQuery query = TemplateQuery
.builder()
.file("file")
.build();
String queryString = query.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"template\":{"), is(true));
assertThat(queryString.endsWith("}}"), is(true));
assertThat(queryString.indexOf("\"template\":{"), greaterThan(0));
assertThat(queryString.indexOf("\"file\":\"file\""), greaterThan(0));
}
@Test
public void when_text_inline_added_then_query_is_generated_well() throws MandatoryParametersAreMissingException {
TemplateQuery query = TemplateQuery
.builder()
.inline("{\"match\":{\"_all\":\"Karcag\"}}")
.build();
String queryString = query.getQueryString();
assertThat(queryString, notNullValue());
assertThat(queryString, not(""));
assertThat(queryString.startsWith("{\"template\":{"), is(true));
assertThat(queryString.endsWith("}}"), is(true));
assertThat(queryString.indexOf("\"template\":{\"inline\":{"), greaterThan(0));
assertThat(queryString.indexOf("\"inline\":{\"match\":{\"_all\":\"Karcag\"}}"), greaterThan(0));
}
// endregion Happy path
// region Sad path
@Test(expected = MandatoryParametersAreMissingException.class)
public void when_no_query_added_then_exception_is_thrown() throws MandatoryParametersAreMissingException {
Map<String, String> params = new HashMap<>();
params.put("param1","param");
params.put("param2", "param");
TemplateQuery query = TemplateQuery
.builder()
.params(params)
.build();
}
// endregion Sad path
}