From 65f89f9480d8b6324a14145b4c42304c62c4f122 Mon Sep 17 00:00:00 2001 From: Peter-Josef Meisch Date: Fri, 24 Apr 2020 18:00:29 +0200 Subject: [PATCH] DATAES-803 - Move count request setup from reactive template to reactive client. Original PR: #439 --- .../DefaultReactiveElasticsearchClient.java | 3 + .../core/ReactiveElasticsearchTemplate.java | 2 - ...efaultReactiveElasticsearchClientTest.java | 82 +++++++++++++++++++ 3 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 src/test/java/org/springframework/data/elasticsearch/client/reactive/DefaultReactiveElasticsearchClientTest.java diff --git a/src/main/java/org/springframework/data/elasticsearch/client/reactive/DefaultReactiveElasticsearchClient.java b/src/main/java/org/springframework/data/elasticsearch/client/reactive/DefaultReactiveElasticsearchClient.java index 76d4561c6..bd3389735 100644 --- a/src/main/java/org/springframework/data/elasticsearch/client/reactive/DefaultReactiveElasticsearchClient.java +++ b/src/main/java/org/springframework/data/elasticsearch/client/reactive/DefaultReactiveElasticsearchClient.java @@ -386,6 +386,9 @@ public class DefaultReactiveElasticsearchClient implements ReactiveElasticsearch */ @Override public Mono count(HttpHeaders headers, SearchRequest searchRequest) { + searchRequest.source().trackTotalHits(true); + searchRequest.source().size(0); + searchRequest.source().fetchSource(false); return sendRequest(searchRequest, requestCreator.search(), SearchResponse.class, headers) // .map(SearchResponse::getHits) // .map(searchHits -> searchHits.getTotalHits().value) // diff --git a/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplate.java b/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplate.java index 8d5e859f7..83ec43dc7 100644 --- a/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplate.java +++ b/src/main/java/org/springframework/data/elasticsearch/core/ReactiveElasticsearchTemplate.java @@ -643,8 +643,6 @@ public class ReactiveElasticsearchTemplate implements ReactiveElasticsearchOpera SearchRequest request = requestFactory.searchRequest(query, entityType, index); request = prepareSearchRequest(request); - request.source().size(0); - request.source().trackTotalHits(true); return doCount(request); }); } diff --git a/src/test/java/org/springframework/data/elasticsearch/client/reactive/DefaultReactiveElasticsearchClientTest.java b/src/test/java/org/springframework/data/elasticsearch/client/reactive/DefaultReactiveElasticsearchClientTest.java new file mode 100644 index 000000000..7e7000bd1 --- /dev/null +++ b/src/test/java/org/springframework/data/elasticsearch/client/reactive/DefaultReactiveElasticsearchClientTest.java @@ -0,0 +1,82 @@ +/* + * Copyright 2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.elasticsearch.client.reactive; + +import static org.assertj.core.api.Assertions.*; +import static org.elasticsearch.search.internal.SearchContext.*; +import static org.mockito.Mockito.*; + +import org.elasticsearch.search.fetch.subphase.FetchSourceContext; +import reactor.core.publisher.Mono; + +import java.util.function.Function; + +import org.elasticsearch.action.search.SearchRequest; +import org.elasticsearch.client.Request; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.search.builder.SearchSourceBuilder; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.web.reactive.function.client.ClientResponse; +import reactor.test.StepVerifier; + +/** + * @author Peter-Josef Meisch + */ +@ExtendWith(MockitoExtension.class) +class DefaultReactiveElasticsearchClientTest { + + @Mock private HostProvider hostProvider; + + @Mock private Function searchRequestConverter; + + private DefaultReactiveElasticsearchClient client; + + @BeforeEach + void setUp() { + client = new DefaultReactiveElasticsearchClient(hostProvider, new RequestCreator() { + @Override + public Function search() { + return searchRequestConverter; + } + }) { + @Override + public Mono execute(ReactiveElasticsearchClientCallback callback) { + return Mono.empty(); + } + }; + } + + @Test + void shouldSetAppropriateRequestParametersOnCount() { + + SearchRequest searchRequest = new SearchRequest("someindex") // + .source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery())); + + client.count(searchRequest).as(StepVerifier::create).verifyComplete(); + + ArgumentCaptor captor = ArgumentCaptor.forClass(SearchRequest.class); + verify(searchRequestConverter).apply(captor.capture()); + SearchSourceBuilder source = captor.getValue().source(); + assertThat(source.size()).isEqualTo(0); + assertThat(source.trackTotalHitsUpTo()).isEqualTo(TRACK_TOTAL_HITS_ACCURATE); + assertThat(source.fetchSource()).isEqualTo(FetchSourceContext.DO_NOT_FETCH_SOURCE); + } +}