Convert Sparky to Spring-Boot
[aai/sparky-be.git] / sparkybe-onap-service / src / test / java / org / onap / aai / sparky / search / filters / FilterProcessorTest.java
@@ -38,15 +38,21 @@ import javax.json.Json;
 import javax.json.JsonArray;
 import javax.json.JsonObject;
 import javax.json.JsonReader;
+import javax.json.stream.JsonParsingException;
+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.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.DefaultExchange;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
 import org.onap.aai.restclient.enums.RestAuthenticationMode;
+import org.onap.aai.sparky.config.SparkyResourceLoader;
 import org.onap.aai.sparky.dal.ElasticSearchAdapter;
 import org.onap.aai.sparky.dal.rest.RestClientConstructionException;
 import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig;
@@ -61,12 +67,15 @@ import org.onap.aai.sparky.search.filters.config.UiViewListItemConfig;
 import org.onap.aai.sparky.search.filters.entity.DiscoverFiltersRequest;
 import org.onap.aai.sparky.search.filters.entity.ViewConfiguration;
 import org.onap.aai.sparky.search.filters.entity.ViewFilter;
+import org.onap.aai.sparky.util.HttpServletHelper;
 import org.onap.aai.sparky.util.NodeUtils;
+import org.onap.aai.sparky.util.SparkyTestConstants;
 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
 import org.restlet.Request;
 import org.restlet.Response;
 import org.restlet.data.MediaType;
 import org.restlet.data.Status;
+import org.springframework.core.io.DefaultResourceLoader;
 
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.JsonMappingException;
@@ -75,14 +84,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 public class FilterProcessorTest {
 
   private FilterProcessor filterProcessor;
-  private Exchange mockExchange;
-  private Message mockRequestMessage;
-  private Message mockResponseMessage;
-  private Request mockRestletRequest;
-  private Response mockRestletResponse;
   private FilteredSearchHelper filteredSearchHelper;
   private ObjectMapper mapper;
   private RestEndpointConfig restEndpointConfig; 
+  
+  private Exchange exchange;
+  private CamelContext camelContext;
+  private Message  mockRequestMessage;
+
 
   protected UiViewListItemConfig generateViewConfig(ViewConfiguration viewConfig) {
 
@@ -163,13 +172,15 @@ public class FilterProcessorTest {
 
   @Before
   public void init()throws RestClientConstructionException {
-    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);
 
-//TODO-> edit the following:FilteredSearchHelper & FilterProcessor  to pass in the correct parameters 
+    //TODO-> edit the following:FilteredSearchHelper & FilterProcessor  to pass in the correct parameters 
     restEndpointConfig = new RestEndpointConfig();
     restEndpointConfig.setRestAuthenticationMode(RestAuthenticationMode.SSL_BASIC);
     filteredSearchHelper = new FilteredSearchHelper(new FiltersConfig(), 
@@ -186,40 +197,44 @@ public class FilterProcessorTest {
     assertNull(filterProcessor.getFilteredSearchHelper());
   }
 
-  private void verifyResponseAndNumFiltersForBadRequest(Status expectedStatus, int numExpectedFilters)
+  private void verifyResponseAndNumFiltersForBadRequest(Exchange exchange, Status expectedStatus, int numExpectedFilters)
       throws JsonParseException, JsonMappingException, IOException {
     
-    ArgumentCaptor<Status> responseCodeCaptor = ArgumentCaptor.forClass(Status.class);
-    Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
-    assertEquals(expectedStatus, 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());
-
-    ArgumentCaptor<Response> responseObject = ArgumentCaptor.forClass(Response.class);
-    Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(responseObject.capture());
-    assertEquals(MediaType.APPLICATION_JSON, payloadMediaType.getValue());
+    assertEquals(expectedStatus.getCode(), exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
+    
+    String entityPayload = exchange.getOut().getBody(String.class); 
+    assertNotNull(entityPayload);
 
-    JsonReader jsonReader = Json.createReader(new StringReader(entityPayload.getValue()));
+    JsonReader jsonReader = Json.createReader(new StringReader(entityPayload));
     JsonObject responsePayload = jsonReader.readObject();
     
     JsonObject filters = responsePayload.getJsonObject("filters");
     assertEquals(0, filters.size());
   }
 
-  private void initializeMocks(String requestPayload) {
+  private void initializeMocks(String requestPayload) throws IOException {
+    
+    HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+    if ( requestPayload != null) {
+      HttpServletHelper.setRequestPayload(request, "application/json", requestPayload);
+    }
     
-    Mockito.when(mockRequestMessage.getBody(String.class)).thenReturn(requestPayload);
+    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);
 
-    Mockito.when(mockExchange.getIn()).thenReturn(mockRequestMessage);
-    Mockito.when(mockExchange.getOut()).thenReturn(mockResponseMessage);
+    SparkyResourceLoader resourceLoader = new SparkyResourceLoader();
+    resourceLoader.setResourceLoader(new DefaultResourceLoader());
 
-    Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_REQUEST, Request.class))
-      .thenReturn(mockRestletRequest);
-    Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_RESPONSE, Response.class))
-      .thenReturn(mockRestletResponse);
+    filterProcessor.setFilteredSearchHelper(filteredSearchHelper);
+    
+    FiltersConfig filtersConfig = new FiltersConfig();
+    filtersConfig.initializeFiltersDetailsConfig(resourceLoader.getResourceAsFile(SparkyTestConstants.FILTERS_JSON_FILE, false));
+    filtersConfig.initializeFiltersForViewsConfig(resourceLoader.getResourceAsFile(SparkyTestConstants.VIEWS_JSON_FILE, false));
+   
+    filteredSearchHelper.setFiltersConfig(filtersConfig);
+    
   }
 
 
@@ -233,22 +248,14 @@ public class FilterProcessorTest {
     initializeMocks(NodeUtils.convertObjectToJson(vnfSearchrequest, false));
 
     // Test call against 'vnfSearch'
-    filterProcessor.getFiltersWithValues(mockExchange);
-
-    ArgumentCaptor<Status> vnfResponseCodeCaptor = ArgumentCaptor.forClass(Status.class);
-    Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(vnfResponseCodeCaptor.capture());
-    assertEquals(Status.SUCCESS_OK, vnfResponseCodeCaptor.getValue());
+    filterProcessor.getFiltersWithValues(exchange);
 
-    ArgumentCaptor<String> vnfEntityPayload = ArgumentCaptor.forClass(String.class);
-    ArgumentCaptor<MediaType> vnfPayloadMediaType = ArgumentCaptor.forClass(MediaType.class);
-    Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(vnfEntityPayload.capture(), vnfPayloadMediaType.capture());
-    assertNotNull(vnfEntityPayload.getValue());
-
-    ArgumentCaptor<Response> vnfResponseObject = ArgumentCaptor.forClass(Response.class);
-    Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(vnfResponseObject.capture());
-    assertEquals(MediaType.APPLICATION_JSON, vnfPayloadMediaType.getValue());
+    assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
     
-    JsonReader vnfJsonReader = Json.createReader(new StringReader(vnfEntityPayload.getValue()));
+    String entityPayload = exchange.getOut().getBody(String.class); 
+    assertNotNull(entityPayload);
+
+    JsonReader vnfJsonReader = Json.createReader(new StringReader(entityPayload));
     JsonObject vnfResponsePayload = vnfJsonReader.readObject();
 
     JsonObject vnfFilters = vnfResponsePayload.getJsonObject("filters");
@@ -275,22 +282,14 @@ public class FilterProcessorTest {
     initializeMocks(NodeUtils.convertObjectToJson(dataIntegrityRequest, false));
     
     // Test call against 'dataIntegrity'
-    filterProcessor.getFiltersWithValues(mockExchange);
+    filterProcessor.getFiltersWithValues(exchange);
     
-    ArgumentCaptor<Status> dIResponseCodeCaptor = ArgumentCaptor.forClass(Status.class);
-    Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(dIResponseCodeCaptor.capture());
-    assertEquals(Status.SUCCESS_OK, dIResponseCodeCaptor.getValue());
-
-    ArgumentCaptor<String> dIEntityPayload = ArgumentCaptor.forClass(String.class);
-    ArgumentCaptor<MediaType> dIPayloadMediaType = ArgumentCaptor.forClass(MediaType.class);
-    Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(dIEntityPayload.capture(), dIPayloadMediaType.capture());
-    assertNotNull(dIEntityPayload.getValue());
-
-    ArgumentCaptor<Response> dIResponseObject = ArgumentCaptor.forClass(Response.class);
-    Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(dIResponseObject.capture());
-    assertEquals(MediaType.APPLICATION_JSON, dIPayloadMediaType.getValue());
+    assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
     
-    JsonReader dIJsonReader = Json.createReader(new StringReader(dIEntityPayload.getValue()));
+    entityPayload = exchange.getOut().getBody(String.class); 
+    assertNotNull(entityPayload);
+    
+    JsonReader dIJsonReader = Json.createReader(new StringReader(entityPayload));
     JsonObject dIResponsePayload = dIJsonReader.readObject();
     
     JsonObject dIFilters = dIResponsePayload.getJsonObject("filters");
@@ -321,9 +320,9 @@ public class FilterProcessorTest {
     initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
 
     // Method under test
-    filterProcessor.getFiltersWithValues(mockExchange);
+    filterProcessor.getFiltersWithValues(exchange);
 
-    verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
+    verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
   }
 
   @Test
@@ -335,9 +334,9 @@ public class FilterProcessorTest {
     initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
 
     // Method under test
-    filterProcessor.getFiltersWithValues(mockExchange);
+    filterProcessor.getFiltersWithValues(exchange);
 
-    verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
+    verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
   }
 
   @Test
@@ -346,9 +345,9 @@ public class FilterProcessorTest {
     initializeMocks(null);
 
     // Method under test
-    filterProcessor.getFiltersWithValues(mockExchange);
+    filterProcessor.getFiltersWithValues(exchange);
 
-    verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
+    verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
   }
 
   @Test
@@ -357,19 +356,19 @@ public class FilterProcessorTest {
     initializeMocks("");
 
     // Method under test
-    filterProcessor.getFiltersWithValues(mockExchange);
+    filterProcessor.getFiltersWithValues(exchange);
 
-    verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
+    verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
   }
 
-  @Test
+  @Test(expected=JsonParsingException.class)
   public void testGetFiltersWithValues_requestPayloadCausesException() throws IOException {
     
     initializeMocks("{");
 
     // Method under test
-    filterProcessor.getFiltersWithValues(mockExchange);
+    filterProcessor.getFiltersWithValues(exchange);
 
-    verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
+    verifyResponseAndNumFiltersForBadRequest(exchange, Status.SERVER_ERROR_INTERNAL, 0);
   }
 }