import java.util.ArrayList;
import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
-import org.apache.camel.component.restlet.RestletConstants;
-import org.json.JSONArray;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.DefaultExchange;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;
-import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import org.onap.aai.sparky.common.search.CommonSearchSuggestion;
import org.onap.aai.sparky.search.api.SearchProvider;
import org.onap.aai.sparky.search.entity.QuerySearchEntity;
import org.onap.aai.sparky.search.entity.SearchSuggestion;
import org.onap.aai.sparky.search.registry.SearchProviderRegistry;
-import org.restlet.Request;
-import org.restlet.Response;
-import org.restlet.data.ClientInfo;
-import org.restlet.data.MediaType;
-import org.restlet.data.Status;
+import org.onap.aai.sparky.util.HttpServletHelper;
-import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
private SearchServiceAdapter mockSearchAdapter;
private UnifiedSearchProcessor unifiedSearchProcessor;
- private Exchange mockExchange;
private Message mockRequestMessage;
- private Message mockResponseMessage;
- private Request mockRestletRequest;
- private Response mockRestletResponse;
- private ClientInfo requestClientInfo;
private ObjectMapper mapper;
+ private Exchange exchange;
+ private CamelContext camelContext;
+
@Before
public void init() {
-
- requestClientInfo = new ClientInfo();
- mockExchange = Mockito.mock(Exchange.class);
+ camelContext = new DefaultCamelContext();
+ exchange = new DefaultExchange(camelContext);
+
mockRequestMessage = Mockito.mock(Message.class);
- mockResponseMessage = Mockito.mock(Message.class);
- mockRestletRequest = Mockito.mock(Request.class);
- mockRestletResponse = Mockito.mock(Response.class);
+ exchange.setIn(mockRequestMessage);
unifiedSearchProcessor = new UnifiedSearchProcessor();
unifiedSearchProcessor.setUseOrderedSearchProviderKeys(true);
private void initializeSearchMocks(String requestPayload) {
- Mockito.when(mockRestletRequest.getClientInfo()).thenReturn(requestClientInfo);
-
- Mockito.when(mockRequestMessage.getBody(String.class)).thenReturn(requestPayload);
- Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_REQUEST, Request.class))
- .thenReturn(mockRestletRequest);
-
- Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_RESPONSE, Response.class))
- .thenReturn(mockRestletResponse);
+ HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+ HttpServletHelper.setRequestPayload(request, "application/json", requestPayload);
- Mockito.when(mockExchange.getIn()).thenReturn(mockRequestMessage);
- Mockito.when(mockExchange.getOut()).thenReturn(mockResponseMessage);
+ Mockito.when(request.getRequestURI()).thenReturn("fakeUri");
+ Mockito.when(request.getLocalPort()).thenReturn(8001);
+ Mockito.when(mockRequestMessage.getBody(Mockito.eq(HttpServletRequest.class))).thenReturn(request);
+ Mockito.when(mockRequestMessage.getBody(Mockito.eq(String.class))).thenReturn(requestPayload);
}
unifiedSearchProcessor.setSearchProviderRegistry(searchProviderRegistry);
// method under test
- unifiedSearchProcessor.search(mockExchange);
-
- ArgumentCaptor<Status> responseCodeCaptor = ArgumentCaptor.forClass(Status.class);
- Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
- assertEquals(Status.SUCCESS_OK, responseCodeCaptor.getValue());
-
- ArgumentCaptor<String> entityPayload = ArgumentCaptor.forClass(String.class);
- ArgumentCaptor<MediaType> payloadMediaType = ArgumentCaptor.forClass(MediaType.class);
- Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(entityPayload.capture(),
- payloadMediaType.capture());
- assertNotNull(entityPayload.getValue());
+ unifiedSearchProcessor.search(exchange);
+
+ assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
- ArgumentCaptor<Response> responseObject = ArgumentCaptor.forClass(Response.class);
- Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(responseObject.capture());
- assertEquals(MediaType.APPLICATION_JSON, payloadMediaType.getValue());
+ String entityPayload = exchange.getOut().getBody(String.class);
+ assertNotNull(entityPayload);
- SearchResponse searchResponse = mapper.readValue(entityPayload.getValue(), SearchResponse.class);
+ MockSearchResponse searchResponse = mapper.readValue(entityPayload, MockSearchResponse.class);
assertEquals(0, searchResponse.getTotalFound());
assertEquals(0, searchResponse.getSuggestions().size());
searchProviderRegistry.addSearchProvider(gamma);
unifiedSearchProcessor.setSearchProviderRegistry(searchProviderRegistry);
-
-
+
// method under test
- unifiedSearchProcessor.search(mockExchange);
+ unifiedSearchProcessor.search(exchange);
- ArgumentCaptor<Status> responseCodeCaptor = ArgumentCaptor.forClass(Status.class);
- Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
- assertEquals(Status.SUCCESS_OK, responseCodeCaptor.getValue());
+ assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
- ArgumentCaptor<String> entityPayload = ArgumentCaptor.forClass(String.class);
- ArgumentCaptor<MediaType> payloadMediaType = ArgumentCaptor.forClass(MediaType.class);
- Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(entityPayload.capture(),
- payloadMediaType.capture());
- assertNotNull(entityPayload.getValue());
+ String entityPayload = exchange.getOut().getBody(String.class);
+ assertNotNull(entityPayload);
- ArgumentCaptor<Response> responseObject = ArgumentCaptor.forClass(Response.class);
- Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(responseObject.capture());
- assertEquals(MediaType.APPLICATION_JSON, payloadMediaType.getValue());
-
/*
* With a null view name, an empty filter set should be returned - there should be 0 filters
*/
-
- SearchResponse searchResponse = mapper.readValue(entityPayload.getValue(), SearchResponse.class);
+
+ SearchResponse searchResponse = mapper.readValue(entityPayload, SearchResponse.class);
assertEquals(0, searchResponse.getTotalFound());
assertEquals(0, searchResponse.getSuggestions().size());
}
}
- private int countSuggestions(String suggestionPrefix, MockSearchResponse response) {
+ private int countSuggestions(String suggestionPrefix, SearchResponse response) {
int totalFound = 0;
}
+ private int countSuggestions(String suggestionPrefix, MockSearchResponse response) {
+
+ int totalFound = 0;
+
+ for ( SearchSuggestion suggestion : response.getSuggestions()) {
+
+ if ( suggestion.getText() != null && suggestion.getText().startsWith(suggestionPrefix)) {
+ totalFound++;
+ }
+ }
+
+ return totalFound;
+
+ }
+
+
@Test
public void testSearch_search_when_ThreeSearchProviders_5suggestions_each() throws IOException {
unifiedSearchProcessor.setSearchProviderRegistry(searchProviderRegistry);
// method under test
- unifiedSearchProcessor.search(mockExchange);
+ unifiedSearchProcessor.search(exchange);
- ArgumentCaptor<Status> responseCodeCaptor = ArgumentCaptor.forClass(Status.class);
- Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
- assertEquals(Status.SUCCESS_OK, responseCodeCaptor.getValue());
+ assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
- ArgumentCaptor<String> entityPayload = ArgumentCaptor.forClass(String.class);
- ArgumentCaptor<MediaType> payloadMediaType = ArgumentCaptor.forClass(MediaType.class);
- Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(entityPayload.capture(),
- payloadMediaType.capture());
- assertNotNull(entityPayload.getValue());
+ String entityPayload = exchange.getOut().getBody(String.class);
+ assertNotNull(entityPayload);
- ArgumentCaptor<Response> responseObject = ArgumentCaptor.forClass(Response.class);
- Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(responseObject.capture());
- assertEquals(MediaType.APPLICATION_JSON, payloadMediaType.getValue());
-
- MockSearchResponse searchResponse = mapper.readValue(entityPayload.getValue(), MockSearchResponse.class);
+ MockSearchResponse searchResponse = mapper.readValue(entityPayload, MockSearchResponse.class);
assertEquals(10, searchResponse.getTotalFound());
assertEquals(10, searchResponse.getSuggestions().size());
addSuggestions(99,"gamma",gamma);
// method under test
- unifiedSearchProcessor.search(mockExchange);
+ unifiedSearchProcessor.search(exchange);
+
+ assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
- ArgumentCaptor<Status> responseCodeCaptor = ArgumentCaptor.forClass(Status.class);
- Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
- assertEquals(Status.SUCCESS_OK, responseCodeCaptor.getValue());
+ String entityPayload = exchange.getOut().getBody(String.class);
+ assertNotNull(entityPayload);
- ArgumentCaptor<String> entityPayload = ArgumentCaptor.forClass(String.class);
- ArgumentCaptor<MediaType> payloadMediaType = ArgumentCaptor.forClass(MediaType.class);
- Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(entityPayload.capture(),
- payloadMediaType.capture());
- assertNotNull(entityPayload.getValue());
-
- ArgumentCaptor<Response> responseObject = ArgumentCaptor.forClass(Response.class);
- Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(responseObject.capture());
- assertEquals(MediaType.APPLICATION_JSON, payloadMediaType.getValue());
-
- MockSearchResponse searchResponse = mapper.readValue(entityPayload.getValue(), MockSearchResponse.class);
+ MockSearchResponse searchResponse = mapper.readValue(entityPayload, MockSearchResponse.class);
assertEquals(13, searchResponse.getTotalFound());
assertEquals(13, searchResponse.getSuggestions().size());
addSuggestions(0,"gamma",gamma);
// method under test
- unifiedSearchProcessor.search(mockExchange);
-
- ArgumentCaptor<Status> responseCodeCaptor = ArgumentCaptor.forClass(Status.class);
- Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
- assertEquals(Status.SUCCESS_OK, responseCodeCaptor.getValue());
+ unifiedSearchProcessor.search(exchange);
+
+ assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
- ArgumentCaptor<String> entityPayload = ArgumentCaptor.forClass(String.class);
- ArgumentCaptor<MediaType> payloadMediaType = ArgumentCaptor.forClass(MediaType.class);
- Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(entityPayload.capture(),
- payloadMediaType.capture());
- assertNotNull(entityPayload.getValue());
+ String entityPayload = exchange.getOut().getBody(String.class);
+ assertNotNull(entityPayload);
- ArgumentCaptor<Response> responseObject = ArgumentCaptor.forClass(Response.class);
- Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(responseObject.capture());
- assertEquals(MediaType.APPLICATION_JSON, payloadMediaType.getValue());
-
- MockSearchResponse searchResponse = mapper.readValue(entityPayload.getValue(), MockSearchResponse.class);
+ MockSearchResponse searchResponse = mapper.readValue(entityPayload, MockSearchResponse.class);
assertEquals(5, searchResponse.getTotalFound());
assertEquals(5, searchResponse.getSuggestions().size());