package com.silverforge.elasticsearchrawclient.elasticFacade; import android.util.Log; import com.silverforge.elasticsearchrawclient.BuildConfig; import com.silverforge.elasticsearchrawclient.model.ElasticSettings; import com.silverforge.elasticsearchrawclient.queryDSL.operators.LogicOperator; import com.silverforge.elasticsearchrawclient.queryDSL.queries.Query; import com.silverforge.elasticsearchrawclient.queryDSL.queries.innerQueries.MatchQuery; import com.silverforge.elasticsearchrawclient.testModel.SimpleCity; import com.silverforge.webconnector.exceptions.SettingsIsNullException; import com.silverforge.webconnector.model.ConnectorSettings; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricGradleTestRunner; import org.robolectric.annotation.Config; import java.net.URISyntaxException; import java.util.List; import rx.Observable; import rx.observers.TestSubscriber; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; @RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) public class ElasticClientSearchTest extends ElasticClientBaseTest { private static final String TAG = ElasticClientSearchTest.class.getName(); // region Happy path @Test public void searchWithIndexWithTypeTest() { List<SimpleCity> cities = client.search("{\"query\":{\"match_all\": {}}}", SimpleCity.class); assertNotNull(cities); } @Test public void searchWithoutIndexWithoutTypeTest() { ConnectorSettings settings = ConnectorSettings .builder() .baseUrl(ELASTIC_URL) .userName(ELASTIC_APIKEY) .build(); try { ElasticRawClient testClient = new ElasticClient(settings); List<SimpleCity> cities = testClient.search("{\"query\":{\"match_all\": {}}}", SimpleCity.class); assertNotNull(cities); } catch (URISyntaxException | SettingsIsNullException e) { e.printStackTrace(); Log.e(TAG, e.getMessage()); fail(e.getMessage()); } } @Test public void searchWithoutIndexWithTypeTest() { ConnectorSettings settings = ConnectorSettings .builder() .baseUrl(ELASTIC_URL) .userName(ELASTIC_APIKEY) .build(); ElasticSettings elasticSettings = ElasticSettings .builder() .types(new String[]{"city", "testcity"}) .build(); try { ElasticRawClient testClient = new ElasticClient(settings, elasticSettings); List<SimpleCity> cities = testClient.search("{\"query\":{\"match_all\": {}}}", SimpleCity.class); assertNotNull(cities); } catch (URISyntaxException | SettingsIsNullException e) { e.printStackTrace(); Log.e(TAG, e.getMessage()); fail(e.getMessage()); } } @Test public void searchWithIndexWithoutTypeTest() { ConnectorSettings settings = ConnectorSettings .builder() .baseUrl(ELASTIC_URL) .userName(ELASTIC_APIKEY) .build(); ElasticSettings elasticSettings = ElasticSettings .builder() .indices(new String[]{"cities", "testcities"}) .build(); try { ElasticRawClient testClient = new ElasticClient(settings, elasticSettings); List<SimpleCity> cities = testClient.search("{\"query\":{\"match_all\": {}}}", SimpleCity.class); assertNotNull(cities); } catch (URISyntaxException | SettingsIsNullException e) { e.printStackTrace(); Log.e(TAG, e.getMessage()); fail(e.getMessage()); } } @Test public void searchAsyncTest() { Observable<SimpleCity> cityObservable = client .searchAsync("{\"query\":{\"match_all\": {}}}", SimpleCity.class); TestSubscriber<SimpleCity> testSubscriber = new TestSubscriber<>(); cityObservable.subscribe(testSubscriber); testSubscriber.assertNoErrors(); testSubscriber.assertUnsubscribed(); List<SimpleCity> cityList = testSubscriber.getOnNextEvents(); assertThat(cityList, not(nullValue())); assertThat(cityList.size(), greaterThan(0)); } @Test public void when_query_builder_used_then_proper_data_retrieved() { Query query = Query .builder() .from(0) .size(10) .query(MatchQuery .builder() .fieldName("name") .value("Karcag") .build()) .build(); List<SimpleCity> cities = client.search(query, SimpleCity.class); assertThat(cities, notNullValue()); assertThat(cities.size(), is(1)); assertThat(cities.get(0).getName(), is("Karcag")); } @Test public void when_query_builder_used_with_multiple_args_then_proper_data_retrieved() { Query query = Query .builder() .from(0) .size(10) .query(MatchQuery .builder() .fieldName("name") .query("Karcag Budapest") .operator(LogicOperator.OR) .build()) .build(); List<SimpleCity> cities = client.search(query, SimpleCity.class); assertThat(cities, notNullValue()); assertThat(cities.size(), is(2)); } // endregion // region Sad path @Test public void searchEmptyQueryTest() { List<SimpleCity> cities = client.search("{}", SimpleCity.class); assertNotNull(cities); } @Test public void searchNullTest() { List<SimpleCity> cities = client.search((String)null, SimpleCity.class); assertNotNull(cities); } @Test public void searchEmptyTest() { List<SimpleCity> cities = client.search("", SimpleCity.class); assertNotNull(cities); } // endregion }