ES to SDS conversion
[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.JsonObject;
39 import javax.json.JsonReader;
40 import javax.json.stream.JsonParsingException;
41 import javax.servlet.http.HttpServletRequest;
42
43 import org.apache.camel.CamelContext;
44 import org.apache.camel.Exchange;
45 import org.apache.camel.Message;
46 import org.apache.camel.impl.DefaultCamelContext;
47 import org.apache.camel.impl.DefaultExchange;
48 import org.junit.Before;
49 import org.junit.Test;
50 import org.mockito.Mockito;
51 import org.onap.aai.restclient.enums.RestAuthenticationMode;
52 import org.onap.aai.sparky.config.SparkyResourceLoader;
53 import org.onap.aai.sparky.dal.rest.RestClientConstructionException;
54 import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig;
55 import org.onap.aai.sparky.search.SearchServiceAdapter;
56 import org.onap.aai.sparky.search.filters.config.FiltersConfig;
57 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
58 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
59 import org.onap.aai.sparky.search.filters.config.UiFilterConfig;
60 import org.onap.aai.sparky.search.filters.config.UiFilterListItemConfig;
61 import org.onap.aai.sparky.search.filters.config.UiFilterOptionsValuesConfig;
62 import org.onap.aai.sparky.search.filters.config.UiViewListItemConfig;
63 import org.onap.aai.sparky.search.filters.entity.DiscoverFiltersRequest;
64 import org.onap.aai.sparky.search.filters.entity.ViewConfiguration;
65 import org.onap.aai.sparky.search.filters.entity.ViewFilter;
66 import org.onap.aai.sparky.util.HttpServletHelper;
67 import org.onap.aai.sparky.util.NodeUtils;
68 import org.onap.aai.sparky.util.SparkyTestConstants;
69 import org.restlet.data.Status;
70 import org.springframework.core.io.DefaultResourceLoader;
71
72 import com.fasterxml.jackson.core.JsonParseException;
73 import com.fasterxml.jackson.databind.JsonMappingException;
74 import com.fasterxml.jackson.databind.ObjectMapper;
75
76 public class FilterProcessorTest {
77
78   private FilterProcessor filterProcessor;
79   private FilteredSearchHelper filteredSearchHelper;
80   private ObjectMapper mapper;
81   private RestEndpointConfig restEndpointConfig; 
82   
83   private Exchange exchange;
84   private CamelContext camelContext;
85   private Message  mockRequestMessage;
86
87
88   protected UiViewListItemConfig generateViewConfig(ViewConfiguration viewConfig) {
89
90     UiViewListItemConfig uiViewConfig = new UiViewListItemConfig(viewConfig.getViewName(), null);
91
92     List<UiFilterListItemConfig> filters = new ArrayList<UiFilterListItemConfig>();
93
94     for (ViewFilter viewFilter : viewConfig.getViewFilters()) {
95       filters.add(new UiFilterListItemConfig(viewFilter.getId(), viewFilter.getDefaultValue()));
96     }
97
98     uiViewConfig.setListOfFilters(filters);
99
100     return uiViewConfig;
101   }
102
103   protected FiltersConfig generateDefaultViewsFilterConfig() {
104
105     FiltersForViewsConfig uiViewsConfig = new FiltersForViewsConfig();
106     FiltersConfig viewFilterConfig = new FiltersConfig();
107
108     List<UiViewListItemConfig> views = new ArrayList<UiViewListItemConfig>();
109     
110     // Default filter value to use below
111     UiFilterOptionsValuesConfig defaultValue = new UiFilterOptionsValuesConfig("Today", "Last 0 hours");
112     
113     // VNF View - 4 Filters
114     ViewConfiguration vnfViewConfig = new ViewConfiguration("vnfSearch");
115     vnfViewConfig.addViewFilter(new ViewFilter("1", null));
116     vnfViewConfig.addViewFilter(new ViewFilter("2", null));
117     vnfViewConfig.addViewFilter(new ViewFilter("7", null));
118     vnfViewConfig.addViewFilter(new ViewFilter("8", null));
119     views.add(generateViewConfig(vnfViewConfig));
120     
121     // View and Inspect (Schema) - 0 Filters
122     ViewConfiguration viewInspectConfig = new ViewConfiguration("viewInspect");
123     views.add(generateViewConfig(viewInspectConfig));
124
125     uiViewsConfig.setViews(views);
126
127     viewFilterConfig.setViewsConfig(uiViewsConfig);
128     
129     List<UiFilterOptionsValuesConfig> optionsValues = new ArrayList<UiFilterOptionsValuesConfig>();
130     optionsValues.add(new UiFilterOptionsValuesConfig("Today", "Last 0 hours"));
131     optionsValues.add(new UiFilterOptionsValuesConfig("Since Yesterday", "Last 24 hours"));
132     optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Week", "Last 7 days"));
133     optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Month", "Last 30 days"));
134     optionsValues.add(new UiFilterOptionsValuesConfig("Custom Range", "Custom Range"));
135
136     
137     
138     FiltersDetailsConfig uiFiltersConfig = new FiltersDetailsConfig();
139
140     List<UiFilterConfig> uiFilterConfig = new ArrayList<UiFilterConfig>();
141     uiFilterConfig.add(new UiFilterConfig("1", "filterName1", "Display Name 1", "dropDown", "false", "Any 1", null, "options", null, null));
142     uiFilterConfig.add(new UiFilterConfig("2", "filterName2", "Display Name 2", "dropDown", "false", "Any 2", null, "options", null, null));
143     uiFilterConfig.add(new UiFilterConfig("5", "filterName5", "Display Name 5", "date",     "false", "Any 5", defaultValue, "dynamicOptions", optionsValues, null));
144     uiFilterConfig.add(new UiFilterConfig("7", "filterName7", "Display Name 7", "dropDown", "false", "Any 7", null, "options", null, null));
145     uiFilterConfig.add(new UiFilterConfig("8", "filterName8", "Display Name 8", "dropDown", "false", "Any 8", null, "options", null, null));
146
147     uiFiltersConfig.setFilters(uiFilterConfig);
148
149     viewFilterConfig.setFiltersConfig(uiFiltersConfig);
150
151     return viewFilterConfig;
152   }
153
154   @Before
155   public void init() throws Exception {
156     
157     camelContext = new DefaultCamelContext();
158     exchange = new DefaultExchange(camelContext);
159   
160     mockRequestMessage = Mockito.mock(Message.class);
161     
162     exchange.setIn(mockRequestMessage);
163
164     //TODO-> edit the following:FilteredSearchHelper & FilterProcessor  to pass in the correct parameters 
165     restEndpointConfig = new RestEndpointConfig();
166     restEndpointConfig.setRestAuthenticationMode(RestAuthenticationMode.SSL_BASIC);
167     
168     SparkyResourceLoader resourceLoader = new SparkyResourceLoader();
169     resourceLoader.setResourceLoader(new DefaultResourceLoader());
170     FiltersConfig filtersConfig = new FiltersConfig(SparkyTestConstants.FILTERS_JSON_FILE, SparkyTestConstants.VIEWS_JSON_FILE, resourceLoader);
171     
172     filteredSearchHelper = new FilteredSearchHelper(filtersConfig, new SearchServiceAdapter(restEndpointConfig, "1.0"));
173     filterProcessor = new FilterProcessor();
174
175     mapper = new ObjectMapper();
176   }
177
178
179   @Test
180   public void validateDefaultConstructor() {
181     assertNotNull(filterProcessor.getMapper());
182     assertNull(filterProcessor.getFilteredSearchHelper());
183   }
184
185   private void verifyResponseAndNumFiltersForBadRequest(Exchange exchange, Status expectedStatus, int numExpectedFilters)
186       throws JsonParseException, JsonMappingException, IOException {
187     
188     assertEquals(expectedStatus.getCode(), exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
189     
190     String entityPayload = exchange.getOut().getBody(String.class); 
191     assertNotNull(entityPayload);
192
193     JsonReader jsonReader = Json.createReader(new StringReader(entityPayload));
194     JsonObject responsePayload = jsonReader.readObject();
195     
196     JsonObject filters = responsePayload.getJsonObject("filters");
197     assertEquals(0, filters.size());
198   }
199
200   private void initializeMocks(String requestPayload) throws IOException {
201     
202     HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
203     if ( requestPayload != null) {
204       HttpServletHelper.setRequestPayload(request, "application/json", requestPayload);
205     }
206     
207     Mockito.when(request.getRequestURI()).thenReturn("fakeUri");
208     Mockito.when(request.getLocalPort()).thenReturn(8001);
209     Mockito.when(mockRequestMessage.getBody(Mockito.eq(HttpServletRequest.class))).thenReturn(request);
210     Mockito.when(mockRequestMessage.getBody(Mockito.eq(String.class))).thenReturn(requestPayload);
211
212     SparkyResourceLoader resourceLoader = new SparkyResourceLoader();
213     resourceLoader.setResourceLoader(new DefaultResourceLoader());
214
215     FiltersConfig filtersConfig = new FiltersConfig(SparkyTestConstants.FILTERS_JSON_FILE, SparkyTestConstants.VIEWS_JSON_FILE, resourceLoader);
216     filteredSearchHelper.setFiltersConfig(filtersConfig);
217     filterProcessor.setFilteredSearchHelper(filteredSearchHelper);
218   }
219
220
221   @Test
222   public void testGetFiltersWithValues_success_path() throws IOException {
223     
224     // Initialize for call against 'vnfSearch'
225     DiscoverFiltersRequest vnfSearchrequest = new DiscoverFiltersRequest();
226     vnfSearchrequest.setViewName("vnfSearch");
227
228     initializeMocks(NodeUtils.convertObjectToJson(vnfSearchrequest, false));
229
230     // Test call against 'vnfSearch'
231     filterProcessor.getFiltersWithValues(exchange);
232
233     assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
234     
235     String entityPayload = exchange.getOut().getBody(String.class); 
236     assertNotNull(entityPayload);
237
238     JsonReader vnfJsonReader = Json.createReader(new StringReader(entityPayload));
239     JsonObject vnfResponsePayload = vnfJsonReader.readObject();
240
241     JsonObject vnfFilters = vnfResponsePayload.getJsonObject("filters");
242     assertNotNull(vnfFilters);
243     assertEquals(4, vnfFilters.size());
244   }
245
246   @Test
247   public void testGetFiltersWithValues_viewNameNull() throws IOException {
248     
249     DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
250     initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
251
252     // Method under test
253     filterProcessor.getFiltersWithValues(exchange);
254
255     verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
256   }
257
258   @Test
259   public void testGetFiltersWithValues_viewNameEmptyString() throws IOException {
260     
261     DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
262     discoverFiltersRequest.setViewName("");
263
264     initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
265
266     // Method under test
267     filterProcessor.getFiltersWithValues(exchange);
268
269     verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
270   }
271
272   @Test
273   public void testGetFiltersWithValues_requestPayloadIsNull() throws IOException {
274     
275     initializeMocks(null);
276
277     // Method under test
278     filterProcessor.getFiltersWithValues(exchange);
279
280     verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
281   }
282
283   @Test
284   public void testGetFiltersWithValues_requestPayloadIsEmptyString() throws IOException {
285     
286     initializeMocks("");
287
288     // Method under test
289     filterProcessor.getFiltersWithValues(exchange);
290
291     verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0);
292   }
293
294   @Test(expected=JsonParsingException.class)
295   public void testGetFiltersWithValues_requestPayloadCausesException() throws IOException {
296     
297     initializeMocks("{");
298
299     // Method under test
300     filterProcessor.getFiltersWithValues(exchange);
301
302     verifyResponseAndNumFiltersForBadRequest(exchange, Status.SERVER_ERROR_INTERNAL, 0);
303   }
304 }