/* * Copyright 2015 herd contributors * * 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 * * http://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.finra.herd.service.functional; import static org.finra.herd.service.functional.ElasticsearchFunctions.BUSINESS_OBJECT_DEFINITION_SORT_FIELD; import static org.finra.herd.service.functional.ElasticsearchFunctions.ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME; import static org.finra.herd.service.functional.ElasticsearchFunctions.ELASTIC_SEARCH_SCROLL_PAGE_SIZE; import static org.finra.herd.service.functional.ElasticsearchFunctions.NAMESPACE_CODE_SORT_FIELD; import static org.finra.herd.service.functional.SearchFilterType.EXCLUSION_SEARCH_FILTER; import static org.finra.herd.service.functional.SearchFilterType.INCLUSION_SEARCH_FILTER; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Predicate; import org.elasticsearch.action.ListenableActionFuture; import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.delete.DeleteRequestBuilder; import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.get.GetRequestBuilder; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.index.IndexRequestBuilder; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.action.search.SearchRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchScrollRequestBuilder; import org.elasticsearch.action.update.UpdateRequestBuilder; import org.elasticsearch.action.update.UpdateResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.aggregations.AggregationBuilder; import org.elasticsearch.search.aggregations.bucket.nested.Nested; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.internal.listeners.CollectCreatedMocks; import org.mockito.internal.progress.MockingProgress; import org.mockito.internal.progress.ThreadSafeMockingProgress; import org.finra.herd.dao.TransportClientFactory; import org.finra.herd.dao.helper.HerdStringHelper; import org.finra.herd.dao.helper.JsonHelper; import org.finra.herd.model.dto.BusinessObjectDefinitionIndexSearchResponseDto; import org.finra.herd.model.dto.ElasticsearchResponseDto; import org.finra.herd.model.jpa.BusinessObjectDefinitionEntity; import org.finra.herd.model.jpa.TagEntity; import org.finra.herd.model.jpa.TagTypeEntity; import org.finra.herd.service.helper.TagDaoHelper; /** * ElasticsearchFunctionsTest */ public class ElasticsearchFunctionsTest { private List<Object> createdMocks; @InjectMocks private ElasticsearchFunctions searchFunctions; @Mock private HerdStringHelper herdStringHelper; @Mock private JsonHelper jsonHelper; @Mock private TransportClientFactory transportClientFactory; @Mock private TagDaoHelper tagDaoHelper; @Before public void before() { MockitoAnnotations.initMocks(this); createdMocks = new LinkedList<>(); final MockingProgress progress = new ThreadSafeMockingProgress(); progress.setListener(new CollectCreatedMocks(createdMocks)); } @Test public void testIndexFunction() { QuadConsumer<String, String, String, String> indexFunction = searchFunctions.getIndexFunction(); assertThat("Function is null.", indexFunction, not(nullValue())); assertThat("Index function not an instance of QuadConsumer.", indexFunction, instanceOf(QuadConsumer.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); IndexRequestBuilder indexRequestBuilder = mock(IndexRequestBuilder.class); @SuppressWarnings("unchecked") ListenableActionFuture<IndexResponse> listenableActionFuture = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareIndex("INDEX_NAME", "DOCUMENT_TYPE", "ID")).thenReturn(indexRequestBuilder); when(indexRequestBuilder.execute()).thenReturn(listenableActionFuture); // Call the method under test indexFunction.accept("INDEX_NAME", "DOCUMENT_TYPE", "ID", "JSON"); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareIndex("INDEX_NAME", "DOCUMENT_TYPE", "ID"); verify(indexRequestBuilder).setSource("JSON"); verify(indexRequestBuilder).execute(); verify(listenableActionFuture).actionGet(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testValidateFunctionIndex() { QuadConsumer<String, String, String, String> validateFunction = searchFunctions.getValidateFunction(); assertThat("Function is null.", validateFunction, not(nullValue())); assertThat("Validate function not an instance of QuadConsumer.", validateFunction, instanceOf(QuadConsumer.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); GetRequestBuilder getRequestBuilder = mock(GetRequestBuilder.class); GetResponse getResponse = mock(GetResponse.class); IndexRequestBuilder indexRequestBuilder = mock(IndexRequestBuilder.class); @SuppressWarnings("unchecked") ListenableActionFuture<GetResponse> listenableActionFutureGetResponse = mock(ListenableActionFuture.class); @SuppressWarnings("unchecked") ListenableActionFuture<IndexResponse> listenableActionFutureIndexResponse = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID")).thenReturn(getRequestBuilder); when(getRequestBuilder.execute()).thenReturn(listenableActionFutureGetResponse); when(listenableActionFutureGetResponse.actionGet()).thenReturn(getResponse); when(getResponse.getSourceAsString()).thenReturn(null); when(transportClient.prepareIndex("INDEX_NAME", "DOCUMENT_TYPE", "ID")).thenReturn(indexRequestBuilder); when(indexRequestBuilder.execute()).thenReturn(listenableActionFutureIndexResponse); // Call the method under test validateFunction.accept("INDEX_NAME", "DOCUMENT_TYPE", "ID", "JSON"); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID"); verify(getRequestBuilder).execute(); verify(listenableActionFutureGetResponse).actionGet(); verify(getResponse).getSourceAsString(); verify(transportClient).prepareIndex("INDEX_NAME", "DOCUMENT_TYPE", "ID"); verify(indexRequestBuilder).setSource("JSON"); verify(indexRequestBuilder).execute(); verify(listenableActionFutureIndexResponse).actionGet(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testValidateFunctionUpdate() { QuadConsumer<String, String, String, String> validateFunction = searchFunctions.getValidateFunction(); assertThat("Function is null.", validateFunction, not(nullValue())); assertThat("Validate function not an instance of QuadConsumer.", validateFunction, instanceOf(QuadConsumer.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); GetRequestBuilder getRequestBuilder = mock(GetRequestBuilder.class); GetResponse getResponse = mock(GetResponse.class); UpdateRequestBuilder updateRequestBuilder = mock(UpdateRequestBuilder.class); @SuppressWarnings("unchecked") ListenableActionFuture<GetResponse> listenableActionFutureGetResponse = mock(ListenableActionFuture.class); @SuppressWarnings("unchecked") ListenableActionFuture<UpdateResponse> listenableActionFutureUpdateResponse = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID")).thenReturn(getRequestBuilder); when(getRequestBuilder.execute()).thenReturn(listenableActionFutureGetResponse); when(listenableActionFutureGetResponse.actionGet()).thenReturn(getResponse); when(getResponse.getSourceAsString()).thenReturn("JSON_UPDATE"); when(transportClient.prepareUpdate("INDEX_NAME", "DOCUMENT_TYPE", "ID")).thenReturn(updateRequestBuilder); when(updateRequestBuilder.execute()).thenReturn(listenableActionFutureUpdateResponse); // Call the method under test validateFunction.accept("INDEX_NAME", "DOCUMENT_TYPE", "ID", "JSON"); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID"); verify(getRequestBuilder).execute(); verify(listenableActionFutureGetResponse).actionGet(); verify(getResponse).getSourceAsString(); verify(transportClient).prepareUpdate("INDEX_NAME", "DOCUMENT_TYPE", "ID"); verify(updateRequestBuilder).execute(); verify(updateRequestBuilder).setDoc("JSON"); verify(listenableActionFutureUpdateResponse).actionGet(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testValidateFunctionNoActionRequiredValidDocument() { QuadConsumer<String, String, String, String> validateFunction = searchFunctions.getValidateFunction(); assertThat("Function is null.", validateFunction, not(nullValue())); assertThat("Validate function not an instance of QuadConsumer.", validateFunction, instanceOf(QuadConsumer.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); GetRequestBuilder getRequestBuilder = mock(GetRequestBuilder.class); GetResponse getResponse = mock(GetResponse.class); @SuppressWarnings("unchecked") ListenableActionFuture<GetResponse> listenableActionFutureGetResponse = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID")).thenReturn(getRequestBuilder); when(getRequestBuilder.execute()).thenReturn(listenableActionFutureGetResponse); when(listenableActionFutureGetResponse.actionGet()).thenReturn(getResponse); when(getResponse.getSourceAsString()).thenReturn("JSON"); // Call the method under test validateFunction.accept("INDEX_NAME", "DOCUMENT_TYPE", "ID", "JSON"); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID"); verify(getRequestBuilder).execute(); verify(listenableActionFutureGetResponse).actionGet(); verify(getResponse).getSourceAsString(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testIsValidFunction() { QuadPredicate<String, String, String, String> isValidFunction = searchFunctions.getIsValidFunction(); assertThat("Function is null.", isValidFunction, not(nullValue())); assertThat("Is valid function not an instance of QuadPredicate.", isValidFunction, instanceOf(QuadPredicate.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); GetRequestBuilder getRequestBuilder = mock(GetRequestBuilder.class); GetResponse getResponse = mock(GetResponse.class); @SuppressWarnings("unchecked") ListenableActionFuture<GetResponse> listenableActionFutureGetResponse = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID")).thenReturn(getRequestBuilder); when(getRequestBuilder.execute()).thenReturn(listenableActionFutureGetResponse); when(listenableActionFutureGetResponse.actionGet()).thenReturn(getResponse); when(getResponse.getSourceAsString()).thenReturn("JSON"); // Call the method under test boolean isValid = isValidFunction.test("INDEX_NAME", "DOCUMENT_TYPE", "ID", "JSON"); assertThat("IsValid is false when it should have been true.", isValid, is(true)); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID"); verify(getRequestBuilder).execute(); verify(listenableActionFutureGetResponse).actionGet(); verify(getResponse).getSourceAsString(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testIsValidFunctionEmpty() { QuadPredicate<String, String, String, String> isValidFunction = searchFunctions.getIsValidFunction(); assertThat("Function is null.", isValidFunction, not(nullValue())); assertThat("Is valid function not an instance of QuadPredicate.", isValidFunction, instanceOf(QuadPredicate.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); GetRequestBuilder getRequestBuilder = mock(GetRequestBuilder.class); GetResponse getResponse = mock(GetResponse.class); @SuppressWarnings("unchecked") ListenableActionFuture<GetResponse> listenableActionFutureGetResponse = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID")).thenReturn(getRequestBuilder); when(getRequestBuilder.execute()).thenReturn(listenableActionFutureGetResponse); when(listenableActionFutureGetResponse.actionGet()).thenReturn(getResponse); when(getResponse.getSourceAsString()).thenReturn(""); // Call the method under test boolean isValid = isValidFunction.test("INDEX_NAME", "DOCUMENT_TYPE", "ID", "JSON"); assertThat("IsValid is true when it should have been false.", isValid, is(false)); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID"); verify(getRequestBuilder).execute(); verify(listenableActionFutureGetResponse).actionGet(); verify(getResponse).getSourceAsString(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testIsValidFunctionNull() { QuadPredicate<String, String, String, String> isValidFunction = searchFunctions.getIsValidFunction(); assertThat("Function is null.", isValidFunction, not(nullValue())); assertThat("Is valid function not an instance of QuadPredicate.", isValidFunction, instanceOf(QuadPredicate.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); GetRequestBuilder getRequestBuilder = mock(GetRequestBuilder.class); GetResponse getResponse = mock(GetResponse.class); @SuppressWarnings("unchecked") ListenableActionFuture<GetResponse> listenableActionFutureGetResponse = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID")).thenReturn(getRequestBuilder); when(getRequestBuilder.execute()).thenReturn(listenableActionFutureGetResponse); when(listenableActionFutureGetResponse.actionGet()).thenReturn(getResponse); when(getResponse.getSourceAsString()).thenReturn(null); // Call the method under test boolean isValid = isValidFunction.test("INDEX_NAME", "DOCUMENT_TYPE", "ID", "JSON"); assertThat("IsValid is true when it should have been false.", isValid, is(false)); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID"); verify(getRequestBuilder).execute(); verify(listenableActionFutureGetResponse).actionGet(); verify(getResponse).getSourceAsString(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testIsValidFunctionNotEqual() { QuadPredicate<String, String, String, String> isValidFunction = searchFunctions.getIsValidFunction(); assertThat("Function is null.", isValidFunction, not(nullValue())); assertThat("Is valid function not an instance of QuadPredicate.", isValidFunction, instanceOf(QuadPredicate.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); GetRequestBuilder getRequestBuilder = mock(GetRequestBuilder.class); GetResponse getResponse = mock(GetResponse.class); @SuppressWarnings("unchecked") ListenableActionFuture<GetResponse> listenableActionFutureGetResponse = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID")).thenReturn(getRequestBuilder); when(getRequestBuilder.execute()).thenReturn(listenableActionFutureGetResponse); when(listenableActionFutureGetResponse.actionGet()).thenReturn(getResponse); when(getResponse.getSourceAsString()).thenReturn("JSON_NOT_EQUAL"); // Call the method under test boolean isValid = isValidFunction.test("INDEX_NAME", "DOCUMENT_TYPE", "ID", "JSON"); assertThat("IsValid is true when it should have been false.", isValid, is(false)); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareGet("INDEX_NAME", "DOCUMENT_TYPE", "ID"); verify(getRequestBuilder).execute(); verify(listenableActionFutureGetResponse).actionGet(); verify(getResponse).getSourceAsString(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testIndexExistsFunction() { Predicate<String> indexExistsFunction = searchFunctions.getIndexExistsFunction(); assertThat("Function is null.", indexExistsFunction, not(nullValue())); assertThat("Index exists function not an instance of Predicate.", indexExistsFunction, instanceOf(Predicate.class)); } @Test public void testDeleteIndexFunction() { Consumer<String> deleteIndexFunction = searchFunctions.getDeleteIndexFunction(); assertThat("Function is null.", deleteIndexFunction, not(nullValue())); assertThat("Delete index function not an instance of Consumer.", deleteIndexFunction, instanceOf(Consumer.class)); } @Test public void testCreateIndexFunction() { QuadConsumer<String, String, String, String> createIndexFunction = searchFunctions.getCreateIndexFunction(); assertThat("Function is null.", createIndexFunction, not(nullValue())); assertThat("Create index function not an instance of QuadConsumer.", createIndexFunction, instanceOf(QuadConsumer.class)); } @Test public void testCreateIndexDocumentsFunction() { TriConsumer<String, String, Map<String, String>> createIndexDocumentsFunction = searchFunctions.getCreateIndexDocumentsFunction(); assertThat("Function is null.", createIndexDocumentsFunction, not(nullValue())); assertThat("Create index documents function is not an instance of TriConsumer.", createIndexDocumentsFunction, instanceOf(TriConsumer.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); BulkRequestBuilder bulkRequestBuilder = mock(BulkRequestBuilder.class); IndexRequestBuilder indexRequestBuilder = mock(IndexRequestBuilder.class); BulkResponse bulkResponse = mock(BulkResponse.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareBulk()).thenReturn(bulkRequestBuilder); when(transportClient.prepareIndex("INDEX_NAME", "DOCUMENT_TYPE", "1")).thenReturn(indexRequestBuilder); when(bulkRequestBuilder.get()).thenReturn(bulkResponse); when(bulkResponse.hasFailures()).thenReturn(false); // Call the method under test Map<String, String> documentMap = new HashMap<>(); documentMap.put("1", "JSON"); createIndexDocumentsFunction.accept("INDEX_NAME", "DOCUMENT_TYPE", documentMap); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareBulk(); verify(transportClient).prepareIndex("INDEX_NAME", "DOCUMENT_TYPE", "1"); verify(bulkRequestBuilder).get(); verify(indexRequestBuilder).setSource("JSON"); verify(bulkRequestBuilder).add(indexRequestBuilder); verify(bulkResponse).hasFailures(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testCreateIndexDocumentsFunctionWithFailures() { TriConsumer<String, String, Map<String, String>> createIndexDocumentsFunction = searchFunctions.getCreateIndexDocumentsFunction(); assertThat("Function is null.", createIndexDocumentsFunction, not(nullValue())); assertThat("Create index documents function is not an instance of TriConsumer.", createIndexDocumentsFunction, instanceOf(TriConsumer.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); BulkRequestBuilder bulkRequestBuilder = mock(BulkRequestBuilder.class); IndexRequestBuilder indexRequestBuilder = mock(IndexRequestBuilder.class); BulkResponse bulkResponse = mock(BulkResponse.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareBulk()).thenReturn(bulkRequestBuilder); when(transportClient.prepareIndex("INDEX_NAME", "DOCUMENT_TYPE", "1")).thenReturn(indexRequestBuilder); when(bulkRequestBuilder.get()).thenReturn(bulkResponse); when(bulkResponse.hasFailures()).thenReturn(true); // Call the method under test Map<String, String> documentMap = new HashMap<>(); documentMap.put("1", "JSON"); createIndexDocumentsFunction.accept("INDEX_NAME", "DOCUMENT_TYPE", documentMap); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareBulk(); verify(transportClient).prepareIndex("INDEX_NAME", "DOCUMENT_TYPE", "1"); verify(bulkRequestBuilder).get(); verify(indexRequestBuilder).setSource("JSON"); verify(bulkRequestBuilder).add(indexRequestBuilder); verify(bulkResponse).hasFailures(); verify(bulkResponse).buildFailureMessage(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testDeleteDocumentByIdFunction() { TriConsumer<String, String, String> deleteDocumentByIdFunction = searchFunctions.getDeleteDocumentByIdFunction(); assertThat("Function is null.", deleteDocumentByIdFunction, not(nullValue())); assertThat("Delete document by id function not an instance of TriConsumer.", deleteDocumentByIdFunction, instanceOf(TriConsumer.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); DeleteRequestBuilder deleteRequestBuilder = mock(DeleteRequestBuilder.class); @SuppressWarnings("unchecked") ListenableActionFuture<DeleteResponse> listenableActionFuture = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareDelete("INDEX_NAME", "DOCUMENT_TYPE", "ID")).thenReturn(deleteRequestBuilder); when(deleteRequestBuilder.execute()).thenReturn(listenableActionFuture); // Call the method under test deleteDocumentByIdFunction.accept("INDEX_NAME", "DOCUMENT_TYPE", "ID"); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareDelete("INDEX_NAME", "DOCUMENT_TYPE", "ID"); verify(deleteRequestBuilder).execute(); verify(listenableActionFuture).actionGet(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testDeleteIndexDocumentsFunction() { TriConsumer<String, String, List<Integer>> deleteIndexDocumentsFunction = searchFunctions.getDeleteIndexDocumentsFunction(); assertThat("Function is null.", deleteIndexDocumentsFunction, not(nullValue())); assertThat("Delete index documents function is not an instance of TriConsumer.", deleteIndexDocumentsFunction, instanceOf(TriConsumer.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); BulkRequestBuilder bulkRequestBuilder = mock(BulkRequestBuilder.class); DeleteRequestBuilder deleteRequestBuilder = mock(DeleteRequestBuilder.class); BulkResponse bulkResponse = mock(BulkResponse.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareBulk()).thenReturn(bulkRequestBuilder); when(transportClient.prepareDelete("INDEX_NAME", "DOCUMENT_TYPE", "1")).thenReturn(deleteRequestBuilder); when(bulkRequestBuilder.get()).thenReturn(bulkResponse); when(bulkResponse.hasFailures()).thenReturn(false); // Call the method under test List<Integer> businessObjectDefinitionIds = new ArrayList<>(); businessObjectDefinitionIds.add(1); deleteIndexDocumentsFunction.accept("INDEX_NAME", "DOCUMENT_TYPE", businessObjectDefinitionIds); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareBulk(); verify(transportClient).prepareDelete("INDEX_NAME", "DOCUMENT_TYPE", "1"); verify(bulkRequestBuilder).add(deleteRequestBuilder); verify(bulkRequestBuilder).get(); verify(bulkResponse).hasFailures(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testDeleteIndexDocumentsFunctionWithFailures() { TriConsumer<String, String, List<Integer>> deleteIndexDocumentsFunction = searchFunctions.getDeleteIndexDocumentsFunction(); assertThat("Function is null.", deleteIndexDocumentsFunction, not(nullValue())); assertThat("Delete index documents function is not an instance of TriConsumer.", deleteIndexDocumentsFunction, instanceOf(TriConsumer.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); BulkRequestBuilder bulkRequestBuilder = mock(BulkRequestBuilder.class); DeleteRequestBuilder deleteRequestBuilder = mock(DeleteRequestBuilder.class); BulkResponse bulkResponse = mock(BulkResponse.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareBulk()).thenReturn(bulkRequestBuilder); when(transportClient.prepareDelete("INDEX_NAME", "DOCUMENT_TYPE", "1")).thenReturn(deleteRequestBuilder); when(bulkRequestBuilder.get()).thenReturn(bulkResponse); when(bulkResponse.hasFailures()).thenReturn(true); // Call the method under test List<Integer> businessObjectDefinitionIds = new ArrayList<>(); businessObjectDefinitionIds.add(1); deleteIndexDocumentsFunction.accept("INDEX_NAME", "DOCUMENT_TYPE", businessObjectDefinitionIds); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareBulk(); verify(transportClient).prepareDelete("INDEX_NAME", "DOCUMENT_TYPE", "1"); verify(bulkRequestBuilder).add(deleteRequestBuilder); verify(bulkRequestBuilder).get(); verify(bulkResponse).hasFailures(); verify(bulkResponse).buildFailureMessage(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testNumberOfTypesInIndexFunction() { BiFunction<String, String, Long> numberOfTypesInIndexFunction = searchFunctions.getNumberOfTypesInIndexFunction(); assertThat("Function is null.", numberOfTypesInIndexFunction, not(nullValue())); assertThat("Number of types in index function not an instance of BiFunction.", numberOfTypesInIndexFunction, instanceOf(BiFunction.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); SearchRequestBuilder searchRequestBuilder = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithTypes = mock(SearchRequestBuilder.class); SearchResponse searchResponse = mock(SearchResponse.class); SearchHits searchHits = mock(SearchHits.class); @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFuture = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareSearch("INDEX_NAME")).thenReturn(searchRequestBuilder); when(searchRequestBuilder.setTypes("DOCUMENT_TYPE")).thenReturn(searchRequestBuilderWithTypes); when(searchRequestBuilderWithTypes.execute()).thenReturn(listenableActionFuture); when(listenableActionFuture.actionGet()).thenReturn(searchResponse); when(searchResponse.getHits()).thenReturn(searchHits); when(searchHits.getTotalHits()).thenReturn(100L); // Call the method under test long numberOfTypesInIndex = numberOfTypesInIndexFunction.apply("INDEX_NAME", "DOCUMENT_TYPE"); assertThat("Number of types in index is incorrect.", numberOfTypesInIndex, is(100L)); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareSearch("INDEX_NAME"); verify(searchRequestBuilder).setTypes("DOCUMENT_TYPE"); verify(searchRequestBuilderWithTypes).execute(); verify(listenableActionFuture).actionGet(); verify(searchResponse).getHits(); verify(searchHits).getTotalHits(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testIdsInIndexFunction() { BiFunction<String, String, List<String>> idsInIndexFunction = searchFunctions.getIdsInIndexFunction(); assertThat("Function is null.", idsInIndexFunction, not(nullValue())); assertThat("Ids in index function not an instance of BiFunction.", idsInIndexFunction, instanceOf(BiFunction.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); SearchRequestBuilder searchRequestBuilder = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithTypes = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithQuery = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithScroll = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSize = mock(SearchRequestBuilder.class); SearchResponse searchResponse = mock(SearchResponse.class); SearchHits searchHits = mock(SearchHits.class); SearchHit searchHit1 = mock(SearchHit.class); SearchHit searchHit2 = mock(SearchHit.class); SearchScrollRequestBuilder searchScrollRequestBuilder = mock(SearchScrollRequestBuilder.class); SearchHit[] searchHitArray = new SearchHit[2]; searchHitArray[0] = searchHit1; searchHitArray[1] = searchHit2; SearchResponse searchResponseScroll = mock(SearchResponse.class); SearchHits searchHitsScroll = mock(SearchHits.class); SearchHit[] searchHitArrayScroll = new SearchHit[0]; @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFuture = mock(ListenableActionFuture.class); @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFutureScroll = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareSearch("INDEX_NAME")).thenReturn(searchRequestBuilder); when(searchRequestBuilder.setTypes("DOCUMENT_TYPE")).thenReturn(searchRequestBuilderWithTypes); when(searchRequestBuilderWithTypes.setQuery(any())).thenReturn(searchRequestBuilderWithQuery); when(searchRequestBuilderWithQuery.setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME))).thenReturn(searchRequestBuilderWithScroll); when(searchRequestBuilderWithScroll.setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE)).thenReturn(searchRequestBuilderWithSize); when(searchRequestBuilder.execute()).thenReturn(listenableActionFuture); when(listenableActionFuture.actionGet()).thenReturn(searchResponse); when(searchResponse.getHits()).thenReturn(searchHits); when(searchHits.hits()).thenReturn(searchHitArray); when(transportClient.prepareSearchScroll(any())).thenReturn(searchScrollRequestBuilder); when(searchScrollRequestBuilder.execute()).thenReturn(listenableActionFutureScroll); when(listenableActionFutureScroll.actionGet()).thenReturn(searchResponseScroll); when(searchResponseScroll.getHits()).thenReturn(searchHitsScroll); when(searchHitsScroll.hits()).thenReturn(searchHitArrayScroll); // Call the method under test List<String> idsInIndex = idsInIndexFunction.apply("INDEX_NAME", "DOCUMENT_TYPE"); assertThat("Ids in index list is null.", idsInIndex, not(nullValue())); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareSearch("INDEX_NAME"); verify(searchRequestBuilder).setTypes("DOCUMENT_TYPE"); verify(searchRequestBuilderWithTypes).setQuery(any()); verify(searchResponse).getScrollId(); verify(searchRequestBuilderWithQuery).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(searchRequestBuilderWithScroll).setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE); verify(searchRequestBuilder).execute(); verify(listenableActionFuture).actionGet(); verify(searchResponse).getHits(); verify(searchHits).hits(); verify(searchHitArray[0]).id(); verify(searchHitArray[1]).id(); verify(transportClient).prepareSearchScroll(any()); verify(searchScrollRequestBuilder).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(searchScrollRequestBuilder).execute(); verify(listenableActionFutureScroll).actionGet(); verify(searchResponseScroll).getHits(); verify(searchHitsScroll).hits(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testFindAllBusinessObjectDefinitionsFunction() throws Exception { TriFunction<String, String, Set<String>, ElasticsearchResponseDto> findAllBusinessObjectDefinitionsFunction = searchFunctions.getFindAllBusinessObjectDefinitionsFunction(); assertThat("Function is null.", findAllBusinessObjectDefinitionsFunction, not(nullValue())); assertThat("Find all business object definitions function not an instance of TriFunction.", findAllBusinessObjectDefinitionsFunction, instanceOf(TriFunction.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); SearchRequestBuilder searchRequestBuilder = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithTypes = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithScroll = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSize = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithAgg = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSource = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSorting = mock(SearchRequestBuilder.class); SearchResponse searchResponse = mock(SearchResponse.class); SearchHits searchHits = mock(SearchHits.class); SearchHit searchHit1 = mock(SearchHit.class); SearchHit searchHit2 = mock(SearchHit.class); SearchScrollRequestBuilder searchScrollRequestBuilder = mock(SearchScrollRequestBuilder.class); SearchHit[] searchHitArray = new SearchHit[2]; searchHitArray[0] = searchHit1; searchHitArray[1] = searchHit2; SearchResponse searchResponseScroll = mock(SearchResponse.class); SearchHits searchHitsScroll = mock(SearchHits.class); SearchHit[] searchHitArrayScroll = new SearchHit[0]; AggregationBuilder aggregationBuilder = mock(AggregationBuilder.class); Nested aggregation = mock(Nested.class); Terms tagTypeCodeTerms = mock(Terms.class); Terms.Bucket tagTypeCodeBucket = mock(Terms.Bucket.class); List<Terms.Bucket> tagTypeCodeBucketList = new ArrayList<>(); tagTypeCodeBucketList.add(tagTypeCodeBucket); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder .fetchSource(new String[] {"DATA_PROVIDER_NAME_SOURCE", "DESCRIPTION_SOURCE", "DISPLAY_NAME_SOURCE", "NAME_SOURCE", "NAMESPACE_CODE_SOURCE"}, null); @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFuture = mock(ListenableActionFuture.class); @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFutureScroll = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareSearch("INDEX_NAME")).thenReturn(searchRequestBuilder); when(searchRequestBuilder.setTypes("DOCUMENT_TYPE")).thenReturn(searchRequestBuilderWithTypes); when(searchRequestBuilderWithTypes.setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME))).thenReturn(searchRequestBuilderWithScroll); when(searchRequestBuilderWithScroll.setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE)).thenReturn(searchRequestBuilderWithSize); when(searchRequestBuilderWithSize.setSource(any())).thenReturn(searchRequestBuilderWithSource); when(searchRequestBuilderWithSource.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilderWithSorting.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilderWithSorting.addAggregation(aggregationBuilder)).thenReturn(searchRequestBuilderWithAgg); when(searchRequestBuilder.execute()).thenReturn(listenableActionFuture); when(listenableActionFuture.actionGet()).thenReturn(searchResponse); when(searchResponse.getHits()).thenReturn(searchHits); when(searchHits.hits()).thenReturn(searchHitArray); when(transportClient.prepareSearchScroll(any())).thenReturn(searchScrollRequestBuilder); when(searchScrollRequestBuilder.execute()).thenReturn(listenableActionFutureScroll); when(listenableActionFutureScroll.actionGet()).thenReturn(searchResponseScroll); when(searchResponseScroll.getHits()).thenReturn(searchHitsScroll); when(searchHitsScroll.hits()).thenReturn(searchHitArrayScroll); when(jsonHelper.unmarshallJsonToObject(any(), any())).thenReturn(new BusinessObjectDefinitionEntity()); // Call the method under test ElasticsearchResponseDto elasticsearchResponseDto = findAllBusinessObjectDefinitionsFunction.apply("INDEX_NAME", "DOCUMENT_TYPE", new HashSet<>()); List<BusinessObjectDefinitionIndexSearchResponseDto> businessObjectDefinitionEntityList = elasticsearchResponseDto.getBusinessObjectDefinitionIndexSearchResponseDtos(); assertThat("Business object definition entity list is null.", businessObjectDefinitionEntityList, not(nullValue())); // Verify the calls to external methods verify(transportClientFactory, times(2)).getTransportClient(); verify(transportClient).prepareSearch("INDEX_NAME"); verify(searchRequestBuilder).setTypes("DOCUMENT_TYPE"); verify(searchRequestBuilderWithTypes).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(searchRequestBuilderWithScroll).setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE); verify(searchRequestBuilderWithSize).setSource(any()); verify(searchRequestBuilderWithSource).addSort(SortBuilders.fieldSort(BUSINESS_OBJECT_DEFINITION_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilderWithSorting).addSort(SortBuilders.fieldSort(NAMESPACE_CODE_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilder).execute(); verify(listenableActionFuture).actionGet(); verify(searchResponse).getHits(); verify(searchHits).hits(); verify(searchResponse).getScrollId(); verify(transportClient).prepareSearchScroll(any()); verify(searchScrollRequestBuilder).execute(); verify(searchScrollRequestBuilder).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(listenableActionFutureScroll).actionGet(); verify(searchResponseScroll).getHits(); verify(searchHitsScroll).hits(); verify(searchHitArray[0]).getSourceAsString(); verify(searchHitArray[1]).getSourceAsString(); verify(jsonHelper, times(2)).unmarshallJsonToObject(any(), any()); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testFindAllBusinessObjectDefinitionsFunctionException() throws Exception { TriFunction<String, String, Set<String>, ElasticsearchResponseDto> findAllBusinessObjectDefinitionsFunction = searchFunctions.getFindAllBusinessObjectDefinitionsFunction(); assertThat("Function is null.", findAllBusinessObjectDefinitionsFunction, not(nullValue())); assertThat("Find all business object definitions function not an instance of TriFunction.", findAllBusinessObjectDefinitionsFunction, instanceOf(TriFunction.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); SearchRequestBuilder searchRequestBuilder = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithTypes = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithScroll = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSize = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSource = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSorting = mock(SearchRequestBuilder.class); SearchResponse searchResponse = mock(SearchResponse.class); SearchHits searchHits = mock(SearchHits.class); SearchHit searchHit1 = mock(SearchHit.class); SearchHit searchHit2 = mock(SearchHit.class); SearchScrollRequestBuilder searchScrollRequestBuilder = mock(SearchScrollRequestBuilder.class); SearchHit[] searchHitArray = new SearchHit[2]; searchHitArray[0] = searchHit1; searchHitArray[1] = searchHit2; SearchResponse searchResponseScroll = mock(SearchResponse.class); SearchHits searchHitsScroll = mock(SearchHits.class); SearchHit[] searchHitArrayScroll = new SearchHit[0]; @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFuture = mock(ListenableActionFuture.class); @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFutureScroll = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareSearch("INDEX_NAME")).thenReturn(searchRequestBuilder); when(searchRequestBuilder.setTypes("DOCUMENT_TYPE")).thenReturn(searchRequestBuilderWithTypes); when(searchRequestBuilderWithTypes.setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME))).thenReturn(searchRequestBuilderWithScroll); when(searchRequestBuilderWithScroll.setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE)).thenReturn(searchRequestBuilderWithSize); when(searchRequestBuilderWithSize.setSource(any())).thenReturn(searchRequestBuilderWithSource); when(searchRequestBuilderWithSource.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilderWithSorting.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilder.execute()).thenReturn(listenableActionFuture); when(listenableActionFuture.actionGet()).thenReturn(searchResponse); when(searchResponse.getHits()).thenReturn(searchHits); when(searchHits.hits()).thenReturn(searchHitArray); when(transportClient.prepareSearchScroll(any())).thenReturn(searchScrollRequestBuilder); when(searchScrollRequestBuilder.execute()).thenReturn(listenableActionFutureScroll); when(listenableActionFutureScroll.actionGet()).thenReturn(searchResponseScroll); when(searchResponseScroll.getHits()).thenReturn(searchHitsScroll); when(searchHitsScroll.hits()).thenReturn(searchHitArrayScroll); when(jsonHelper.unmarshallJsonToObject(any(), any())).thenThrow(new IOException()); // Call the method under test List<BusinessObjectDefinitionIndexSearchResponseDto> businessObjectDefinitionEntityList = findAllBusinessObjectDefinitionsFunction.apply("INDEX_NAME", "DOCUMENT_TYPE", new HashSet<>()) .getBusinessObjectDefinitionIndexSearchResponseDtos(); assertThat("Business object definition entity list is null.", businessObjectDefinitionEntityList, not(nullValue())); // Verify the calls to external methods verify(transportClientFactory, times(2)).getTransportClient(); verify(transportClient).prepareSearch("INDEX_NAME"); verify(searchRequestBuilder).setTypes("DOCUMENT_TYPE"); verify(searchRequestBuilderWithTypes).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(searchRequestBuilderWithScroll).setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE); verify(searchRequestBuilderWithSize).setSource(any()); verify(searchRequestBuilderWithSource).addSort(SortBuilders.fieldSort(BUSINESS_OBJECT_DEFINITION_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilderWithSorting).addSort(SortBuilders.fieldSort(NAMESPACE_CODE_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilder).execute(); verify(listenableActionFuture).actionGet(); verify(searchResponse).getHits(); verify(searchHits).hits(); verify(searchResponse).getScrollId(); verify(transportClient).prepareSearchScroll(any()); verify(searchScrollRequestBuilder).execute(); verify(searchScrollRequestBuilder).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(listenableActionFutureScroll).actionGet(); verify(searchResponseScroll).getHits(); verify(searchHitsScroll).hits(); verify(searchHitArray[0]).getSourceAsString(); verify(searchHitArray[1]).getSourceAsString(); verify(searchHitArray[0]).id(); verify(searchHitArray[1]).id(); verify(jsonHelper, times(2)).unmarshallJsonToObject(any(), any()); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testSearchBusinessObjectDefinitionByTagsFunction() throws Exception { QuadFunction<String, String, List<Map<SearchFilterType, List<TagEntity>>>, Set<String>, ElasticsearchResponseDto> searchBusinessObjectDefinitionsByTagsFunction = searchFunctions.getSearchBusinessObjectDefinitionsByTagsFunction(); assertThat("Function is null.", searchBusinessObjectDefinitionsByTagsFunction, not(nullValue())); assertThat("Search business object definitions by tags function not an instance of QuadFunction.", searchBusinessObjectDefinitionsByTagsFunction, instanceOf(QuadFunction.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); SearchRequestBuilder searchRequestBuilder = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithTypes = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithScroll = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSize = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSource = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSorting = mock(SearchRequestBuilder.class); SearchResponse searchResponse = mock(SearchResponse.class); SearchHits searchHits = mock(SearchHits.class); SearchHit searchHit1 = mock(SearchHit.class); SearchHit searchHit2 = mock(SearchHit.class); SearchScrollRequestBuilder searchScrollRequestBuilder = mock(SearchScrollRequestBuilder.class); SearchHit[] searchHitArray = new SearchHit[2]; searchHitArray[0] = searchHit1; searchHitArray[1] = searchHit2; SearchResponse searchResponseScroll = mock(SearchResponse.class); SearchHits searchHitsScroll = mock(SearchHits.class); SearchHit[] searchHitArrayScroll = new SearchHit[0]; @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFuture = mock(ListenableActionFuture.class); @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFutureScroll = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareSearch("INDEX_NAME")).thenReturn(searchRequestBuilder); when(searchRequestBuilder.setTypes("DOCUMENT_TYPE")).thenReturn(searchRequestBuilderWithTypes); when(searchRequestBuilderWithTypes.setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME))).thenReturn(searchRequestBuilderWithScroll); when(searchRequestBuilderWithScroll.setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE)).thenReturn(searchRequestBuilderWithSize); when(searchRequestBuilderWithSize.setSource(any())).thenReturn(searchRequestBuilderWithSource); when(searchRequestBuilderWithSource.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilderWithSorting.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilder.execute()).thenReturn(listenableActionFuture); when(listenableActionFuture.actionGet()).thenReturn(searchResponse); when(searchResponse.getHits()).thenReturn(searchHits); when(searchHits.hits()).thenReturn(searchHitArray); when(transportClient.prepareSearchScroll(any())).thenReturn(searchScrollRequestBuilder); when(searchScrollRequestBuilder.execute()).thenReturn(listenableActionFutureScroll); when(listenableActionFutureScroll.actionGet()).thenReturn(searchResponseScroll); when(searchResponseScroll.getHits()).thenReturn(searchHitsScroll); when(searchHitsScroll.hits()).thenReturn(searchHitArrayScroll); when(jsonHelper.unmarshallJsonToObject(any(), any())).thenThrow(new IOException()); // Get test tag entity TagEntity tagEntity = new TagEntity(); tagEntity.setTagCode("TAG_CODE"); TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode("TAG_TYPE_CODE"); tagTypeEntity.setDisplayName("DISPLAY_NAME"); tagTypeEntity.setOrderNumber(1); tagEntity.setTagType(tagTypeEntity); List<TagEntity> tagEntities = new ArrayList<>(); tagEntities.add(tagEntity); // List<Map<SearchFilterType, List<TagEntity>>> Map<SearchFilterType, List<TagEntity>> searchFilterTypeListMap = new HashMap<>(); searchFilterTypeListMap.put(INCLUSION_SEARCH_FILTER, tagEntities); List<Map<SearchFilterType, List<TagEntity>>> tagEnLists = Collections.singletonList(searchFilterTypeListMap); // Call the method under test List<BusinessObjectDefinitionIndexSearchResponseDto> businessObjectDefinitionEntityList = searchBusinessObjectDefinitionsByTagsFunction.apply("INDEX_NAME", "DOCUMENT_TYPE", tagEnLists, new HashSet<>()) .getBusinessObjectDefinitionIndexSearchResponseDtos(); assertThat("Business object definition entity list is null.", businessObjectDefinitionEntityList, not(nullValue())); // Verify the calls to external methods verify(transportClientFactory, times(2)).getTransportClient(); verify(transportClient).prepareSearch("INDEX_NAME"); verify(searchRequestBuilder).setTypes("DOCUMENT_TYPE"); verify(searchRequestBuilderWithTypes).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(searchRequestBuilderWithScroll).setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE); verify(searchRequestBuilderWithSize).setSource(any()); verify(searchRequestBuilderWithSource).addSort(SortBuilders.fieldSort(BUSINESS_OBJECT_DEFINITION_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilderWithSorting).addSort(SortBuilders.fieldSort(NAMESPACE_CODE_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilder).execute(); verify(listenableActionFuture).actionGet(); verify(searchResponse).getHits(); verify(searchHits).hits(); verify(searchResponse).getScrollId(); verify(transportClient).prepareSearchScroll(any()); verify(searchScrollRequestBuilder).execute(); verify(searchScrollRequestBuilder).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(listenableActionFutureScroll).actionGet(); verify(searchResponseScroll).getHits(); verify(searchHitsScroll).hits(); verify(searchHitArray[0]).getSourceAsString(); verify(searchHitArray[1]).getSourceAsString(); verify(searchHitArray[0]).id(); verify(searchHitArray[1]).id(); verify(jsonHelper, times(2)).unmarshallJsonToObject(any(), any()); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testSearchBusinessObjectDefinitionByTagsFunctionWithExclusion() throws Exception { QuadFunction<String, String, List<Map<SearchFilterType, List<TagEntity>>>, Set<String>, ElasticsearchResponseDto> searchBusinessObjectDefinitionsByTagsFunction = searchFunctions.getSearchBusinessObjectDefinitionsByTagsFunction(); assertThat("Function is null.", searchBusinessObjectDefinitionsByTagsFunction, not(nullValue())); assertThat("Search business object definitions by tags function not an instance of QuadFunction.", searchBusinessObjectDefinitionsByTagsFunction, instanceOf(QuadFunction.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); SearchRequestBuilder searchRequestBuilder = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithTypes = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithScroll = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSize = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSource = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSorting = mock(SearchRequestBuilder.class); SearchResponse searchResponse = mock(SearchResponse.class); SearchHits searchHits = mock(SearchHits.class); SearchHit searchHit1 = mock(SearchHit.class); SearchHit searchHit2 = mock(SearchHit.class); SearchScrollRequestBuilder searchScrollRequestBuilder = mock(SearchScrollRequestBuilder.class); SearchHit[] searchHitArray = new SearchHit[2]; searchHitArray[0] = searchHit1; searchHitArray[1] = searchHit2; SearchResponse searchResponseScroll = mock(SearchResponse.class); SearchHits searchHitsScroll = mock(SearchHits.class); SearchHit[] searchHitArrayScroll = new SearchHit[0]; @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFuture = mock(ListenableActionFuture.class); @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFutureScroll = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareSearch("INDEX_NAME")).thenReturn(searchRequestBuilder); when(searchRequestBuilder.setTypes("DOCUMENT_TYPE")).thenReturn(searchRequestBuilderWithTypes); when(searchRequestBuilderWithTypes.setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME))).thenReturn(searchRequestBuilderWithScroll); when(searchRequestBuilderWithScroll.setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE)).thenReturn(searchRequestBuilderWithSize); when(searchRequestBuilderWithSize.setSource(any())).thenReturn(searchRequestBuilderWithSource); when(searchRequestBuilderWithSource.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilderWithSorting.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilder.execute()).thenReturn(listenableActionFuture); when(listenableActionFuture.actionGet()).thenReturn(searchResponse); when(searchResponse.getHits()).thenReturn(searchHits); when(searchHits.hits()).thenReturn(searchHitArray); when(transportClient.prepareSearchScroll(any())).thenReturn(searchScrollRequestBuilder); when(searchScrollRequestBuilder.execute()).thenReturn(listenableActionFutureScroll); when(listenableActionFutureScroll.actionGet()).thenReturn(searchResponseScroll); when(searchResponseScroll.getHits()).thenReturn(searchHitsScroll); when(searchHitsScroll.hits()).thenReturn(searchHitArrayScroll); when(jsonHelper.unmarshallJsonToObject(any(), any())).thenThrow(new IOException()); // Get test tag entity TagEntity tagEntity = new TagEntity(); tagEntity.setTagCode("TAG_CODE"); TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode("TAG_TYPE_CODE"); tagTypeEntity.setDisplayName("DISPLAY_NAME"); tagTypeEntity.setOrderNumber(1); tagEntity.setTagType(tagTypeEntity); List<TagEntity> tagEntities = new ArrayList<>(); tagEntities.add(tagEntity); // List<Map<SearchFilterType, List<TagEntity>>> Map<SearchFilterType, List<TagEntity>> searchFilterExclusionTypeListMap = new HashMap<>(); searchFilterExclusionTypeListMap.put(EXCLUSION_SEARCH_FILTER, tagEntities); Map<SearchFilterType, List<TagEntity>> searchFilterInclusionTypeListMap = new HashMap<>(); searchFilterInclusionTypeListMap.put(INCLUSION_SEARCH_FILTER, tagEntities); List<Map<SearchFilterType, List<TagEntity>>> tagEnLists = new ArrayList<>(); tagEnLists.add(searchFilterExclusionTypeListMap); tagEnLists.add(searchFilterInclusionTypeListMap); // Call the method under test List<BusinessObjectDefinitionIndexSearchResponseDto> businessObjectDefinitionEntityList = searchBusinessObjectDefinitionsByTagsFunction.apply("INDEX_NAME", "DOCUMENT_TYPE", tagEnLists, new HashSet<>()) .getBusinessObjectDefinitionIndexSearchResponseDtos(); assertThat("Business object definition entity list is null.", businessObjectDefinitionEntityList, not(nullValue())); // Verify the calls to external methods verify(transportClientFactory, times(2)).getTransportClient(); verify(transportClient).prepareSearch("INDEX_NAME"); verify(searchRequestBuilder).setTypes("DOCUMENT_TYPE"); verify(searchRequestBuilderWithTypes).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(searchRequestBuilderWithScroll).setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE); verify(searchRequestBuilderWithSize).setSource(any()); verify(searchRequestBuilderWithSource).addSort(SortBuilders.fieldSort(BUSINESS_OBJECT_DEFINITION_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilderWithSorting).addSort(SortBuilders.fieldSort(NAMESPACE_CODE_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilder).execute(); verify(listenableActionFuture).actionGet(); verify(searchResponse).getHits(); verify(searchHits).hits(); verify(searchResponse).getScrollId(); verify(transportClient).prepareSearchScroll(any()); verify(searchScrollRequestBuilder).execute(); verify(searchScrollRequestBuilder).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(listenableActionFutureScroll).actionGet(); verify(searchResponseScroll).getHits(); verify(searchHitsScroll).hits(); verify(searchHitArray[0]).getSourceAsString(); verify(searchHitArray[1]).getSourceAsString(); verify(searchHitArray[0]).id(); verify(searchHitArray[1]).id(); verify(jsonHelper, times(2)).unmarshallJsonToObject(any(), any()); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testSearchBusinessObjectDefinitionByTagsFunctionWithExclusionWithNoInclusion() throws Exception { QuadFunction<String, String, List<Map<SearchFilterType, List<TagEntity>>>, Set<String>, ElasticsearchResponseDto> searchBusinessObjectDefinitionsByTagsFunction = searchFunctions.getSearchBusinessObjectDefinitionsByTagsFunction(); assertThat("Function is null.", searchBusinessObjectDefinitionsByTagsFunction, not(nullValue())); assertThat("Search business object definitions by tags function not an instance of QuadFunction.", searchBusinessObjectDefinitionsByTagsFunction, instanceOf(QuadFunction.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); SearchRequestBuilder searchRequestBuilder = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithTypes = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithScroll = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSize = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSource = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSorting = mock(SearchRequestBuilder.class); SearchResponse searchResponse = mock(SearchResponse.class); SearchHits searchHits = mock(SearchHits.class); SearchHit searchHit1 = mock(SearchHit.class); SearchHit searchHit2 = mock(SearchHit.class); SearchScrollRequestBuilder searchScrollRequestBuilder = mock(SearchScrollRequestBuilder.class); SearchHit[] searchHitArray = new SearchHit[2]; searchHitArray[0] = searchHit1; searchHitArray[1] = searchHit2; SearchResponse searchResponseScroll = mock(SearchResponse.class); SearchHits searchHitsScroll = mock(SearchHits.class); SearchHit[] searchHitArrayScroll = new SearchHit[0]; @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFuture = mock(ListenableActionFuture.class); @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFutureScroll = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareSearch("INDEX_NAME")).thenReturn(searchRequestBuilder); when(searchRequestBuilder.setTypes("DOCUMENT_TYPE")).thenReturn(searchRequestBuilderWithTypes); when(searchRequestBuilderWithTypes.setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME))).thenReturn(searchRequestBuilderWithScroll); when(searchRequestBuilderWithScroll.setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE)).thenReturn(searchRequestBuilderWithSize); when(searchRequestBuilderWithSize.setSource(any())).thenReturn(searchRequestBuilderWithSource); when(searchRequestBuilderWithSource.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilderWithSorting.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilder.execute()).thenReturn(listenableActionFuture); when(listenableActionFuture.actionGet()).thenReturn(searchResponse); when(searchResponse.getHits()).thenReturn(searchHits); when(searchHits.hits()).thenReturn(searchHitArray); when(transportClient.prepareSearchScroll(any())).thenReturn(searchScrollRequestBuilder); when(searchScrollRequestBuilder.execute()).thenReturn(listenableActionFutureScroll); when(listenableActionFutureScroll.actionGet()).thenReturn(searchResponseScroll); when(searchResponseScroll.getHits()).thenReturn(searchHitsScroll); when(searchHitsScroll.hits()).thenReturn(searchHitArrayScroll); when(jsonHelper.unmarshallJsonToObject(any(), any())).thenThrow(new IOException()); // Get test tag entity TagEntity tagEntity = new TagEntity(); tagEntity.setTagCode("TAG_CODE"); TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode("TAG_TYPE_CODE"); tagTypeEntity.setDisplayName("DISPLAY_NAME"); tagTypeEntity.setOrderNumber(1); tagEntity.setTagType(tagTypeEntity); List<TagEntity> tagEntities = new ArrayList<>(); tagEntities.add(tagEntity); // List<Map<SearchFilterType, List<TagEntity>>> Map<SearchFilterType, List<TagEntity>> searchFilterExclusionTypeListMap = new HashMap<>(); searchFilterExclusionTypeListMap.put(EXCLUSION_SEARCH_FILTER, tagEntities); List<Map<SearchFilterType, List<TagEntity>>> tagEnLists = new ArrayList<>(); tagEnLists.add(searchFilterExclusionTypeListMap); // Call the method under test List<BusinessObjectDefinitionIndexSearchResponseDto> businessObjectDefinitionEntityList = searchBusinessObjectDefinitionsByTagsFunction.apply("INDEX_NAME", "DOCUMENT_TYPE", tagEnLists, new HashSet<>()) .getBusinessObjectDefinitionIndexSearchResponseDtos(); assertThat("Business object definition entity list is null.", businessObjectDefinitionEntityList, not(nullValue())); // Verify the calls to external methods verify(transportClientFactory, times(2)).getTransportClient(); verify(transportClient).prepareSearch("INDEX_NAME"); verify(searchRequestBuilder).setTypes("DOCUMENT_TYPE"); verify(searchRequestBuilderWithTypes).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(searchRequestBuilderWithScroll).setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE); verify(searchRequestBuilderWithSize).setSource(any()); verify(searchRequestBuilderWithSource).addSort(SortBuilders.fieldSort(BUSINESS_OBJECT_DEFINITION_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilderWithSorting).addSort(SortBuilders.fieldSort(NAMESPACE_CODE_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilder).execute(); verify(listenableActionFuture).actionGet(); verify(searchResponse).getHits(); verify(searchHits).hits(); verify(searchResponse).getScrollId(); verify(transportClient).prepareSearchScroll(any()); verify(searchScrollRequestBuilder).execute(); verify(searchScrollRequestBuilder).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(listenableActionFutureScroll).actionGet(); verify(searchResponseScroll).getHits(); verify(searchHitsScroll).hits(); verify(searchHitArray[0]).getSourceAsString(); verify(searchHitArray[1]).getSourceAsString(); verify(searchHitArray[0]).id(); verify(searchHitArray[1]).id(); verify(jsonHelper, times(2)).unmarshallJsonToObject(any(), any()); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testSearchBusinessObjectDefinitionByTagsFunctionWithNoExclusionWithNoInclusion() throws Exception { QuadFunction<String, String, List<Map<SearchFilterType, List<TagEntity>>>, Set<String>, ElasticsearchResponseDto> searchBusinessObjectDefinitionsByTagsFunction = searchFunctions.getSearchBusinessObjectDefinitionsByTagsFunction(); assertThat("Function is null.", searchBusinessObjectDefinitionsByTagsFunction, not(nullValue())); assertThat("Search business object definitions by tags function not an instance of QuadFunction.", searchBusinessObjectDefinitionsByTagsFunction, instanceOf(QuadFunction.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); SearchRequestBuilder searchRequestBuilder = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithTypes = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithScroll = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSize = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSource = mock(SearchRequestBuilder.class); SearchRequestBuilder searchRequestBuilderWithSorting = mock(SearchRequestBuilder.class); SearchResponse searchResponse = mock(SearchResponse.class); SearchHits searchHits = mock(SearchHits.class); SearchHit searchHit1 = mock(SearchHit.class); SearchHit searchHit2 = mock(SearchHit.class); SearchScrollRequestBuilder searchScrollRequestBuilder = mock(SearchScrollRequestBuilder.class); SearchHit[] searchHitArray = new SearchHit[2]; searchHitArray[0] = searchHit1; searchHitArray[1] = searchHit2; SearchResponse searchResponseScroll = mock(SearchResponse.class); SearchHits searchHitsScroll = mock(SearchHits.class); SearchHit[] searchHitArrayScroll = new SearchHit[0]; @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFuture = mock(ListenableActionFuture.class); @SuppressWarnings("unchecked") ListenableActionFuture<SearchResponse> listenableActionFutureScroll = mock(ListenableActionFuture.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareSearch("INDEX_NAME")).thenReturn(searchRequestBuilder); when(searchRequestBuilder.setTypes("DOCUMENT_TYPE")).thenReturn(searchRequestBuilderWithTypes); when(searchRequestBuilderWithTypes.setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME))).thenReturn(searchRequestBuilderWithScroll); when(searchRequestBuilderWithScroll.setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE)).thenReturn(searchRequestBuilderWithSize); when(searchRequestBuilderWithSize.setSource(any())).thenReturn(searchRequestBuilderWithSource); when(searchRequestBuilderWithSource.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilderWithSorting.addSort(any())).thenReturn(searchRequestBuilderWithSorting); when(searchRequestBuilder.execute()).thenReturn(listenableActionFuture); when(listenableActionFuture.actionGet()).thenReturn(searchResponse); when(searchResponse.getHits()).thenReturn(searchHits); when(searchHits.hits()).thenReturn(searchHitArray); when(transportClient.prepareSearchScroll(any())).thenReturn(searchScrollRequestBuilder); when(searchScrollRequestBuilder.execute()).thenReturn(listenableActionFutureScroll); when(listenableActionFutureScroll.actionGet()).thenReturn(searchResponseScroll); when(searchResponseScroll.getHits()).thenReturn(searchHitsScroll); when(searchHitsScroll.hits()).thenReturn(searchHitArrayScroll); when(jsonHelper.unmarshallJsonToObject(any(), any())).thenThrow(new IOException()); // Get test tag entity TagEntity tagEntity = new TagEntity(); tagEntity.setTagCode("TAG_CODE"); TagTypeEntity tagTypeEntity = new TagTypeEntity(); tagTypeEntity.setCode("TAG_TYPE_CODE"); tagTypeEntity.setDisplayName("DISPLAY_NAME"); tagTypeEntity.setOrderNumber(1); tagEntity.setTagType(tagTypeEntity); List<TagEntity> tagEntities = new ArrayList<>(); tagEntities.add(tagEntity); // List<Map<SearchFilterType, List<TagEntity>>> Map<SearchFilterType, List<TagEntity>> searchFilterExclusionTypeListMap = new HashMap<>(); List<Map<SearchFilterType, List<TagEntity>>> tagEnLists = new ArrayList<>(); tagEnLists.add(searchFilterExclusionTypeListMap); // Call the method under test List<BusinessObjectDefinitionIndexSearchResponseDto> businessObjectDefinitionEntityList = searchBusinessObjectDefinitionsByTagsFunction.apply("INDEX_NAME", "DOCUMENT_TYPE", tagEnLists, new HashSet<>()) .getBusinessObjectDefinitionIndexSearchResponseDtos(); assertThat("Business object definition entity list is null.", businessObjectDefinitionEntityList, not(nullValue())); // Verify the calls to external methods verify(transportClientFactory, times(2)).getTransportClient(); verify(transportClient).prepareSearch("INDEX_NAME"); verify(searchRequestBuilder).setTypes("DOCUMENT_TYPE"); verify(searchRequestBuilderWithTypes).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(searchRequestBuilderWithScroll).setSize(ELASTIC_SEARCH_SCROLL_PAGE_SIZE); verify(searchRequestBuilderWithSize).setSource(any()); verify(searchRequestBuilderWithSource).addSort(SortBuilders.fieldSort(BUSINESS_OBJECT_DEFINITION_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilderWithSorting).addSort(SortBuilders.fieldSort(NAMESPACE_CODE_SORT_FIELD).order(SortOrder.ASC)); verify(searchRequestBuilder).execute(); verify(listenableActionFuture).actionGet(); verify(searchResponse).getHits(); verify(searchHits).hits(); verify(searchResponse).getScrollId(); verify(transportClient).prepareSearchScroll(any()); verify(searchScrollRequestBuilder).execute(); verify(searchScrollRequestBuilder).setScroll(new TimeValue(ELASTIC_SEARCH_SCROLL_KEEP_ALIVE_TIME)); verify(listenableActionFutureScroll).actionGet(); verify(searchResponseScroll).getHits(); verify(searchHitsScroll).hits(); verify(searchHitArray[0]).getSourceAsString(); verify(searchHitArray[1]).getSourceAsString(); verify(searchHitArray[0]).id(); verify(searchHitArray[1]).id(); verify(jsonHelper, times(2)).unmarshallJsonToObject(any(), any()); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testUpdateIndexDocumentsFunction() { TriConsumer<String, String, Map<String, String>> updateIndexDocumentsFunction = searchFunctions.getUpdateIndexDocumentsFunction(); assertThat("Function is null.", updateIndexDocumentsFunction, not(nullValue())); assertThat("Create index documents function is not an instance of TriConsumer.", updateIndexDocumentsFunction, instanceOf(TriConsumer.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); BulkRequestBuilder bulkRequestBuilder = mock(BulkRequestBuilder.class); UpdateRequestBuilder updateRequestBuilder = mock(UpdateRequestBuilder.class); BulkResponse bulkResponse = mock(BulkResponse.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareBulk()).thenReturn(bulkRequestBuilder); when(transportClient.prepareUpdate("INDEX_NAME", "DOCUMENT_TYPE", "1")).thenReturn(updateRequestBuilder); when(bulkRequestBuilder.get()).thenReturn(bulkResponse); when(bulkResponse.hasFailures()).thenReturn(false); // Call the method under test Map<String, String> documentMap = new HashMap<>(); documentMap.put("1", "JSON"); updateIndexDocumentsFunction.accept("INDEX_NAME", "DOCUMENT_TYPE", documentMap); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareBulk(); verify(transportClient).prepareUpdate("INDEX_NAME", "DOCUMENT_TYPE", "1"); verify(updateRequestBuilder).setDoc("JSON"); verify(bulkRequestBuilder).add(updateRequestBuilder); verify(bulkRequestBuilder).get(); verify(bulkResponse).hasFailures(); verifyNoMoreInteractions(createdMocks.toArray()); } @Test public void testUpdateIndexDocumentsFunctionWithFailures() { TriConsumer<String, String, Map<String, String>> updateIndexDocumentsFunction = searchFunctions.getUpdateIndexDocumentsFunction(); assertThat("Function is null.", updateIndexDocumentsFunction, not(nullValue())); assertThat("Create index documents function is not an instance of TriConsumer.", updateIndexDocumentsFunction, instanceOf(TriConsumer.class)); // Build mocks TransportClient transportClient = mock(TransportClient.class); BulkRequestBuilder bulkRequestBuilder = mock(BulkRequestBuilder.class); UpdateRequestBuilder updateRequestBuilder = mock(UpdateRequestBuilder.class); BulkResponse bulkResponse = mock(BulkResponse.class); // Mock the call to external methods when(transportClientFactory.getTransportClient()).thenReturn(transportClient); when(transportClient.prepareBulk()).thenReturn(bulkRequestBuilder); when(transportClient.prepareUpdate("INDEX_NAME", "DOCUMENT_TYPE", "1")).thenReturn(updateRequestBuilder); when(bulkRequestBuilder.get()).thenReturn(bulkResponse); when(bulkResponse.hasFailures()).thenReturn(true); // Call the method under test Map<String, String> documentMap = new HashMap<>(); documentMap.put("1", "JSON"); updateIndexDocumentsFunction.accept("INDEX_NAME", "DOCUMENT_TYPE", documentMap); // Verify the calls to external methods verify(transportClientFactory).getTransportClient(); verify(transportClient).prepareBulk(); verify(transportClient).prepareUpdate("INDEX_NAME", "DOCUMENT_TYPE", "1"); verify(updateRequestBuilder).setDoc("JSON"); verify(bulkRequestBuilder).add(updateRequestBuilder); verify(bulkRequestBuilder).get(); verify(bulkResponse).hasFailures(); verify(bulkResponse).buildFailureMessage(); verifyNoMoreInteractions(createdMocks.toArray()); } }