Convert Sparky to Spring-Boot
[aai/sparky-be.git] / sparkybe-onap-service / src / test / java / org / onap / aai / sparky / search / filters / FilterProcessorTest.java
1 /**
2  * ============LICENSE_START===================================================
3  * SPARKY (AAI UI service)
4  * ============================================================================
5  * Copyright © 2017 AT&T Intellectual Property.
6  * Copyright © 2017 Amdocs
7  * All rights reserved.
8  * ============================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=====================================================
21  *
22  * ECOMP and OpenECOMP are trademarks
23  * and service marks of AT&T Intellectual Property.
24  */
25
26 package org.onap.aai.sparky.search.filters;
27
28 import static org.junit.Assert.assertEquals;
29 import static org.junit.Assert.assertNotNull;
30 import static org.junit.Assert.assertNull;
31
32 import java.io.IOException;
33 import java.io.StringReader;
34 import java.util.ArrayList;
35 import java.util.List;
36
37 import javax.json.Json;
38 import javax.json.JsonArray;
39 import javax.json.JsonObject;
40 import javax.json.JsonReader;
41 import javax.json.stream.JsonParsingException;
42 import javax.servlet.http.HttpServletRequest;
43
44 import org.apache.camel.CamelContext;
45 import org.apache.camel.Exchange;
46 import org.apache.camel.Message;
47 import org.apache.camel.component.restlet.RestletConstants;
48 import org.apache.camel.impl.DefaultCamelContext;
49 import org.apache.camel.impl.DefaultExchange;
50 import org.junit.Before;
51 import org.junit.Test;
52 import org.mockito.ArgumentCaptor;
53 import org.mockito.Mockito;
54 import org.onap.aai.restclient.enums.RestAuthenticationMode;
55 import org.onap.aai.sparky.config.SparkyResourceLoader;
56 import org.onap.aai.sparky.dal.ElasticSearchAdapter;
57 import org.onap.aai.sparky.dal.rest.RestClientConstructionException;
58 import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig;
59 import org.onap.aai.sparky.search.filters.FilterProcessor;
60 import org.onap.aai.sparky.search.filters.FilteredSearchHelper;
61 import org.onap.aai.sparky.search.filters.config.UiFilterConfig;
62 import org.onap.aai.sparky.search.filters.config.UiFilterListItemConfig;
63 import org.onap.aai.sparky.search.filters.config.UiFilterOptionsValuesConfig;
64 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
65 import org.onap.aai.sparky.search.filters.config.FiltersConfig;
66 import org.onap.aai.sparky.search.filters.config.UiViewListItemConfig;
67 import org.onap.aai.sparky.search.filters.entity.DiscoverFiltersRequest;
68 import org.onap.aai.sparky.search.filters.entity.ViewConfiguration;
69 import org.onap.aai.sparky.search.filters.entity.ViewFilter;
70 import org.onap.aai.sparky.util.HttpServletHelper;
71 import org.onap.aai.sparky.util.NodeUtils;
72 import org.onap.aai.sparky.util.SparkyTestConstants;
73 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
74 import org.restlet.Request;
75 import org.restlet.Response;
76 import org.restlet.data.MediaType;
77 import org.restlet.data.Status;
78 import org.springframework.core.io.DefaultResourceLoader;
79
80 import com.fasterxml.jackson.core.JsonParseException;
81 import com.fasterxml.jackson.databind.JsonMappingException;
82 import com.fasterxml.jackson.databind.ObjectMapper;
83
84 public class FilterProcessorTest {
85
86   private FilterProcessor filterProcessor;
87   private FilteredSearchHelper filteredSearchHelper;
88   private ObjectMapper mapper;
89   private RestEndpointConfig restEndpointConfig; 
90   
91   private Exchange exchange;
92   private CamelContext camelContext;
93   private Message  mockRequestMessage;
94
95
96   protected UiViewListItemConfig generateViewConfig(ViewConfiguration viewConfig) {
97
98     UiViewListItemConfig uiViewConfig = new UiViewListItemConfig(viewConfig.getViewName(), null);
99
100     List<UiFilterListItemConfig> filters = new ArrayList<UiFilterListItemConfig>();
101
102     for (ViewFilter viewFilter : viewConfig.getViewFilters()) {
103       filters.add(new UiFilterListItemConfig(viewFilter.getId(), viewFilter.getDefaultValue()));
104     }
105
106     uiViewConfig.setListOfFilters(filters);
107
108     return uiViewConfig;
109   }
110
111   protected FiltersConfig generateDefaultViewsFilterConfig() {
112
113     FiltersForViewsConfig uiViewsConfig = new FiltersForViewsConfig();
114     FiltersConfig viewFilterConfig = new FiltersConfig();
115
116     List<UiViewListItemConfig> views = new ArrayList<UiViewListItemConfig>();
117     
118     // Default filter value to use below
119     UiFilterOptionsValuesConfig defaultValue = new UiFilterOptionsValuesConfig("Today", "Last 0 hours");
120     
121     // VNF View - 4 Filters
122     ViewConfiguration vnfViewConfig = new ViewConfiguration("vnfSearch");
123     vnfViewConfig.addViewFilter(new ViewFilter("1", null));
124     vnfViewConfig.addViewFilter(new ViewFilter("2", null));
125     vnfViewConfig.addViewFilter(new ViewFilter("7", null));
126     vnfViewConfig.addViewFilter(new ViewFilter("8", null));
127     views.add(generateViewConfig(vnfViewConfig));
128     
129     // View and Inspect (Schema) - 0 Filters
130     ViewConfiguration viewInspectConfig = new ViewConfiguration("viewInspect");
131     views.add(generateViewConfig(viewInspectConfig));
132
133     // Data Integrity - 4 Filters
134     ViewConfiguration dataIntegrityConfig = new ViewConfiguration("dataIntegrity");
135     dataIntegrityConfig.addViewFilter(new ViewFilter("3", null));
136     dataIntegrityConfig.addViewFilter(new ViewFilter("4", null));
137     dataIntegrityConfig.addViewFilter(new ViewFilter("5", defaultValue));
138     dataIntegrityConfig.addViewFilter(new ViewFilter("6", null));
139     views.add(generateViewConfig(dataIntegrityConfig));
140     
141     uiViewsConfig.setViews(views);
142
143     viewFilterConfig.setViewsConfig(uiViewsConfig);
144     
145     List<UiFilterOptionsValuesConfig> optionsValues = new ArrayList<UiFilterOptionsValuesConfig>();
146     optionsValues.add(new UiFilterOptionsValuesConfig("Today", "Last 0 hours"));
147     optionsValues.add(new UiFilterOptionsValuesConfig("Since Yesterday", "Last 24 hours"));
148     optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Week", "Last 7 days"));
149     optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Month", "Last 30 days"));
150     optionsValues.add(new UiFilterOptionsValuesConfig("Custom Range", "Custom Range"));
151
152     
153     
154     FiltersDetailsConfig uiFiltersConfig = new FiltersDetailsConfig();
155
156     List<UiFilterConfig> uiFilterConfig = new ArrayList<UiFilterConfig>();
157     uiFilterConfig.add(new UiFilterConfig("1", "filterName1", "Display Name 1", "dropDown", "false", "Any 1", null, "options", null, null));
158     uiFilterConfig.add(new UiFilterConfig("2", "filterName2", "Display Name 2", "dropDown", "false", "Any 2", null, "options", null, null));
159     uiFilterConfig.add(new UiFilterConfig("3", "filterName3", "Display Name 3", "dropDown", "false", "Any 3", null, "options", null, null));
160     uiFilterConfig.add(new UiFilterConfig("4", "filterName4", "Display Name 4", "dropDown", "false", "Any 4", null, "options", null, null));
161     uiFilterConfig.add(new UiFilterConfig("5", "filterName5", "Display Name 5", "date",     "false", "Any 5", defaultValue, "dynamicOptions", optionsValues, null));
162     uiFilterConfig.add(new UiFilterConfig("6", "filterName6", "Display Name 6", "dropDown", "false", "Any 6", null, "options", null, null));
163     uiFilterConfig.add(new UiFilterConfig("7", "filterName7", "Display Name 7", "dropDown", "false", "Any 7", null, "options", null, null));
164     uiFilterConfig.add(new UiFilterConfig("8", "filterName8", "Display Name 8", "dropDown", "false", "Any 8", null, "options", null, null));
165
166     uiFiltersConfig.setFilters(uiFilterConfig);
167
168     viewFilterConfig.setFiltersConfig(uiFiltersConfig);
169
170     return viewFilterConfig;
171   }
172
173   @Before
174   public void init()throws RestClientConstructionException {
175     
176     camelContext = new DefaultCamelContext();
177     exchange = new DefaultExchange(camelContext);
178   
179     mockRequestMessage = Mockito.mock(Message.class);
180     
181     exchange.setIn(mockRequestMessage);
182
183     //TODO-> edit the following:FilteredSearchHelper & FilterProcessor  to pass in the correct parameters 
184     restEndpointConfig = new RestEndpointConfig();
185     restEndpointConfig.setRestAuthenticationMode(RestAuthenticationMode.SSL_BASIC);
186     filteredSearchHelper = new FilteredSearchHelper(new FiltersConfig(), 
187                 new FilterElasticSearchAdapter(new ElasticSearchAdapter(restEndpointConfig)));
188     filterProcessor = new FilterProcessor();
189
190     mapper = new ObjectMapper();
191   }
192
193
194   @Test
195   public void validateDefaultConstructor() {
196     assertNotNull(filterProcessor.getMapper());
197     assertNull(filterProcessor.getFilteredSearchHelper());
198   }
199
200   private void verifyResponseAndNumFiltersForBadRequest(Exchange exchange, Status expectedStatus, int numExpectedFilters)
201       throws JsonParseException, JsonMappingException, IOException {
202     
203     assertEquals(expectedStatus.getCode(), exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
204     
205     String entityPayload = exchange.getOut().getBody(String.class); 
206     assertNotNull(entityPayload);
207
208     JsonReader jsonReader = Json.createReader(new StringReader(entityPayload));
209     JsonObject responsePayload = jsonReader.readObject();
210     
211     JsonObject filters = responsePayload.getJsonObject("filters");
212     assertEquals(0, filters.size());
213   }
214
215   private void initializeMocks(String requestPayload) throws IOException {
216     
217     HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
218     if ( requestPayload != null) {
219       HttpServletHelper.setRequestPayload(request, "application/json", requestPayload);
220     }
221     
222     Mockito.when(request.getRequestURI()).thenReturn("fakeUri");
223     Mockito.when(request.getLocalPort()).thenReturn(8001);
224     Mockito.when(mockRequestMessage.getBody(Mockito.eq(HttpServletRequest.class))).thenReturn(request);
225     Mockito.when(mockRequestMessage.getBody(Mockito.eq(String.class))).thenReturn(requestPayload);
226
227     SparkyResourceLoader resourceLoader = new SparkyResourceLoader();
228     resourceLoader.setResourceLoader(new DefaultResourceLoader());
229
230     filterProcessor.setFilteredSearchHelper(filteredSearchHelper);
231     
232     FiltersConfig filtersConfig = new FiltersConfig();
233     filtersConfig.initializeFiltersDetailsConfig(resourceLoader.getResourceAsFile(SparkyTestConstants.FILTERS_JSON_FILE, false));
234     filtersConfig.initializeFiltersForViewsConfig(resourceLoader.getResourceAsFile(SparkyTestConstants.VIEWS_JSON_FILE, false));
235    
236     filteredSearchHelper.setFiltersConfig(filtersConfig);
237     
238   }
239
240
241   @Test
242   public void testGetFiltersWithValues_success_path() throws IOException {
243     
244     // Initialize for call against 'vnfSearch'
245     DiscoverFiltersRequest vnfSearchrequest = new DiscoverFiltersRequest();
246     vnfSearchrequest.setViewName("vnfSearch");
247
248     initializeMocks(NodeUtils.convertObjectToJson(vnfSearchrequest, false));
249
250     // Test call against 'vnfSearch'
251     filterProcessor.getFiltersWithValues(exchange);
252
253     assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
254     
255     String entityPayload = exchange.getOut().getBody(String.class); 
256     assertNotNull(entityPayload);
257
258     JsonReader vnfJsonReader = Json.createReader(new StringReader(entityPayload));
259     JsonObject vnfResponsePayload = vnfJsonReader.readObject();
260
261     JsonObject vnfFilters = vnfResponsePayload.getJsonObject("filters");
262     assertNotNull(vnfFilters);
263     assertEquals(0, vnfFilters.size());
264     
265     //JsonObject filterOne = vnfFilters.getJsonObject("1");
266     //assertNotNull(filterOne);
267    //assertEquals("Display Name 1", filterOne.getString("label"));
268     
269     JsonObject filterEight = vnfFilters.getJsonObject("8");
270     //assertNotNull(filterEight);
271    // JsonObject eightInnerControl = filterEight.getJsonObject("controls").getJsonObject("filterName8");
272    // assertEquals(4, eightInnerControl.size());
273     //assertEquals("dropDown", eightInnerControl.getString("type"));
274     //assertEquals("false", eightInnerControl.getString("multiSelect"));
275     //assertEquals("Any 8", eightInnerControl.getString("watermark"));
276     //assertEquals(0, eightInnerControl.getJsonArray("options").size());
277     
278     // Initialize for call against 'dataIntegrity'
279     DiscoverFiltersRequest dataIntegrityRequest = new DiscoverFiltersRequest();
280     dataIntegrityRequest.setViewName("dataIntegrity");
281
282     initializeMocks(NodeUtils.convertObjectToJson(dataIntegrityRequest, false));
283     
284     // Test call against 'dataIntegrity'
285     filterProcessor.getFiltersWithValues(exchange);
286     
287     assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
288     
289     entityPayload = exchange.getOut().getBody(String.class); 
290     assertNotNull(entityPayload);
291     
292     JsonReader dIJsonReader = Json.createReader(new StringReader(entityPayload));
293     JsonObject dIResponsePayload = dIJsonReader.readObject();
294     
295     JsonObject dIFilters = dIResponsePayload.getJsonObject("filters");
296     assertNotNull(dIFilters);
297  //   assertEquals(4, dIFilters.size());
298     
299     //JsonObject filterFour = dIFilters.getJsonObject("4");
300    //// assertNotNull(filterFour);
301    // assertEquals("Display Name 4", filterFour.getString("label"));
302     
303     JsonObject filterFive = dIFilters.getJsonObject("5");
304     //assertNotNull(filterFive);
305     //JsonObject fiveInnerControl = filterFive.getJsonObject("controls").getJsonObject("filterName5");
306     //assertEquals(5, fiveInnerControl.size());
307     //assertEquals("date", fiveInnerControl.getString("type"));
308    // assertEquals("false", fiveInnerControl.getString("multiSelect"));
309     //assertEquals("Any 5", fiveInnerControl.getString("watermark"));
310    // JsonArray dynamicOptions = fiveInnerControl.getJsonArray("dynamicOptions");
311     //assertEquals(5, dynamicOptions.size());
312     //JsonObject today = dynamicOptions.getJsonObject(0);
313     //assertEquals("Today", today.getString("decode"));
314   }
315
316   @Test
317   public void testGetFiltersWithValues_viewNameNull() throws IOException {
318     
319     DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
320     initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
321
322     // Method under test
323     filterProcessor.getFiltersWithValues(exchange);
324
325     verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
326   }
327
328   @Test
329   public void testGetFiltersWithValues_viewNameEmptyString() throws IOException {
330     
331     DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
332     discoverFiltersRequest.setViewName("");
333
334     initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
335
336     // Method under test
337     filterProcessor.getFiltersWithValues(exchange);
338
339     verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
340   }
341
342   @Test
343   public void testGetFiltersWithValues_requestPayloadIsNull() throws IOException {
344     
345     initializeMocks(null);
346
347     // Method under test
348     filterProcessor.getFiltersWithValues(exchange);
349
350     verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
351   }
352
353   @Test
354   public void testGetFiltersWithValues_requestPayloadIsEmptyString() throws IOException {
355     
356     initializeMocks("");
357
358     // Method under test
359     filterProcessor.getFiltersWithValues(exchange);
360
361     verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
362   }
363
364   @Test(expected=JsonParsingException.class)
365   public void testGetFiltersWithValues_requestPayloadCausesException() throws IOException {
366     
367     initializeMocks("{");
368
369     // Method under test
370     filterProcessor.getFiltersWithValues(exchange);
371
372     verifyResponseAndNumFiltersForBadRequest(exchange, Status.SERVER_ERROR_INTERNAL, 0);
373   }
374 }