package com.github.obourgain.elasticsearch.http.handler.search;
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import org.assertj.core.api.Assertions;
import org.elasticsearch.action.count.CountRequest;
import org.elasticsearch.action.support.QuerySourceBuilder;
import org.elasticsearch.common.bytes.BytesReference;
import org.elasticsearch.search.lookup.SourceLookup;
import org.junit.Test;
import com.github.obourgain.elasticsearch.http.AbstractTest;
import com.github.obourgain.elasticsearch.http.response.ElasticsearchHttpException;
import com.github.obourgain.elasticsearch.http.handler.search.count.CountResponse;
import com.github.obourgain.elasticsearch.http.response.entity.Shards;
public class CountActionHandlerTest extends AbstractTest {
@Test
public void should_count() throws IOException, ExecutionException, InterruptedException {
BytesReference source = source().bytes();
Map<String, Object> expected = SourceLookup.sourceAsMap(source);
index(THE_INDEX, THE_TYPE, THE_ID, expected);
refresh();
CountRequest countRequest = new CountRequest(THE_INDEX).types(THE_TYPE).source(new QuerySourceBuilder().setQuery(matchAllQuery()));
CountResponse countResponse = httpClient.count(countRequest).get();
Shards shards = countResponse.getShards();
Assertions.assertThat(shards.getTotal()).isEqualTo(getNumShards(THE_INDEX).numPrimaries);
Assertions.assertThat(shards.getSuccessful()).isEqualTo(getNumShards(THE_INDEX).numPrimaries);
Assertions.assertThat(shards.getFailed()).isEqualTo(0);
}
@Test
public void should_fail_on_invalid_query() throws IOException, ExecutionException, InterruptedException {
CountRequest countRequest = new CountRequest(THE_INDEX).types(THE_TYPE).source("{invalid query}");
try {
httpClient.count(countRequest).get();
fail();
} catch (ExecutionException e) {
Assertions.assertThat(e).hasCauseInstanceOf(ElasticsearchHttpException.class);
Assertions.assertThat(e.getMessage()).contains("status code 400");
Assertions.assertThat(e.getMessage()).contains("Failed to parse");
Assertions.assertThat(e.getMessage()).contains("QueryParsingException");
}
}
}