Cleaning code
[aai/sparky-be.git] / 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
31 import java.io.IOException;
32 import java.io.StringReader;
33 import java.util.ArrayList;
34 import java.util.List;
35
36 import javax.json.Json;
37 import javax.json.JsonArray;
38 import javax.json.JsonObject;
39 import javax.json.JsonReader;
40
41 import org.apache.camel.Exchange;
42 import org.apache.camel.Message;
43 import org.apache.camel.component.restlet.RestletConstants;
44 import org.junit.Before;
45 import org.junit.Test;
46 import org.mockito.ArgumentCaptor;
47 import org.mockito.Mockito;
48 import org.onap.aai.sparky.search.filters.FilterProcessor;
49 import org.onap.aai.sparky.search.filters.FilteredSearchHelper;
50 import org.onap.aai.sparky.search.filters.config.UiFilterConfig;
51 import org.onap.aai.sparky.search.filters.config.UiFilterListItemConfig;
52 import org.onap.aai.sparky.search.filters.config.UiFilterOptionsValuesConfig;
53 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
54 import org.onap.aai.sparky.search.filters.config.FiltersConfig;
55 import org.onap.aai.sparky.search.filters.config.UiViewListItemConfig;
56 import org.onap.aai.sparky.search.filters.entity.DiscoverFiltersRequest;
57 import org.onap.aai.sparky.search.filters.entity.ViewConfiguration;
58 import org.onap.aai.sparky.search.filters.entity.ViewFilter;
59 import org.onap.aai.sparky.util.NodeUtils;
60 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
61 import org.restlet.Request;
62 import org.restlet.Response;
63 import org.restlet.data.MediaType;
64 import org.restlet.data.Status;
65
66 import com.fasterxml.jackson.core.JsonParseException;
67 import com.fasterxml.jackson.databind.JsonMappingException;
68 import com.fasterxml.jackson.databind.ObjectMapper;
69
70 public class FilterProcessorTest {
71
72   private FilterProcessor filterProcessor;
73   private Exchange mockExchange;
74   private Message mockRequestMessage;
75   private Message mockResponseMessage;
76   private Request mockRestletRequest;
77   private Response mockRestletResponse;
78   private FilteredSearchHelper filteredSearchHelper;
79   private ObjectMapper mapper;
80
81   protected UiViewListItemConfig generateViewConfig(ViewConfiguration viewConfig) {
82
83     UiViewListItemConfig uiViewConfig = new UiViewListItemConfig(viewConfig.getViewName(), null);
84
85     List<UiFilterListItemConfig> filters = new ArrayList<UiFilterListItemConfig>();
86
87     for (ViewFilter viewFilter : viewConfig.getViewFilters()) {
88       filters.add(new UiFilterListItemConfig(viewFilter.getId(), viewFilter.getDefaultValue()));
89     }
90
91     uiViewConfig.setListOfFilters(filters);
92
93     return uiViewConfig;
94   }
95
96   protected FiltersConfig generateDefaultViewsFilterConfig() {
97
98     FiltersForViewsConfig uiViewsConfig = new FiltersForViewsConfig();
99     FiltersConfig viewFilterConfig = FiltersConfig.getInstance();
100
101     List<UiViewListItemConfig> views = new ArrayList<UiViewListItemConfig>();
102     
103     // Default filter value to use below
104     UiFilterOptionsValuesConfig defaultValue = new UiFilterOptionsValuesConfig("Today", "Last 0 hours");
105     
106     // VNF View - 4 Filters
107     ViewConfiguration vnfViewConfig = new ViewConfiguration("vnfSearch");
108     vnfViewConfig.addViewFilter(new ViewFilter("1", null));
109     vnfViewConfig.addViewFilter(new ViewFilter("2", null));
110     vnfViewConfig.addViewFilter(new ViewFilter("7", null));
111     vnfViewConfig.addViewFilter(new ViewFilter("8", null));
112     views.add(generateViewConfig(vnfViewConfig));
113     
114     // View and Inspect (Schema) - 0 Filters
115     ViewConfiguration viewInspectConfig = new ViewConfiguration("viewInspect");
116     views.add(generateViewConfig(viewInspectConfig));
117
118     // Data Integrity - 4 Filters
119     ViewConfiguration dataIntegrityConfig = new ViewConfiguration("dataIntegrity");
120     dataIntegrityConfig.addViewFilter(new ViewFilter("3", null));
121     dataIntegrityConfig.addViewFilter(new ViewFilter("4", null));
122     dataIntegrityConfig.addViewFilter(new ViewFilter("5", defaultValue));
123     dataIntegrityConfig.addViewFilter(new ViewFilter("6", null));
124     views.add(generateViewConfig(dataIntegrityConfig));
125     
126     uiViewsConfig.setViews(views);
127
128     viewFilterConfig.setViewsConfig(uiViewsConfig);
129     
130     List<UiFilterOptionsValuesConfig> optionsValues = new ArrayList<UiFilterOptionsValuesConfig>();
131     optionsValues.add(new UiFilterOptionsValuesConfig("Today", "Last 0 hours"));
132     optionsValues.add(new UiFilterOptionsValuesConfig("Since Yesterday", "Last 24 hours"));
133     optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Week", "Last 7 days"));
134     optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Month", "Last 30 days"));
135     optionsValues.add(new UiFilterOptionsValuesConfig("Custom Range", "Custom Range"));
136
137     
138     
139     FiltersDetailsConfig uiFiltersConfig = new FiltersDetailsConfig();
140
141     List<UiFilterConfig> uiFilterConfig = new ArrayList<UiFilterConfig>();
142     uiFilterConfig.add(new UiFilterConfig("1", "filterName1", "Display Name 1", "dropDown", "false", "Any 1", null, "options", null, null));
143     uiFilterConfig.add(new UiFilterConfig("2", "filterName2", "Display Name 2", "dropDown", "false", "Any 2", null, "options", null, null));
144     uiFilterConfig.add(new UiFilterConfig("3", "filterName3", "Display Name 3", "dropDown", "false", "Any 3", null, "options", null, null));
145     uiFilterConfig.add(new UiFilterConfig("4", "filterName4", "Display Name 4", "dropDown", "false", "Any 4", null, "options", null, null));
146     uiFilterConfig.add(new UiFilterConfig("5", "filterName5", "Display Name 5", "date",     "false", "Any 5", defaultValue, "dynamicOptions", optionsValues, null));
147     uiFilterConfig.add(new UiFilterConfig("6", "filterName6", "Display Name 6", "dropDown", "false", "Any 6", null, "options", null, null));
148     uiFilterConfig.add(new UiFilterConfig("7", "filterName7", "Display Name 7", "dropDown", "false", "Any 7", null, "options", null, null));
149     uiFilterConfig.add(new UiFilterConfig("8", "filterName8", "Display Name 8", "dropDown", "false", "Any 8", null, "options", null, null));
150
151     uiFiltersConfig.setFilters(uiFilterConfig);
152
153     viewFilterConfig.setFiltersConfig(uiFiltersConfig);
154
155     return viewFilterConfig;
156   }
157
158   @Before
159   public void init() {
160     mockExchange = Mockito.mock(Exchange.class);
161     mockRequestMessage = Mockito.mock(Message.class);
162     mockResponseMessage = Mockito.mock(Message.class);
163     mockRestletRequest = Mockito.mock(Request.class);
164     mockRestletResponse = Mockito.mock(Response.class);
165
166 TODO-> edit the following:FilteredSearchHelper & FilterProcessor  to pass in the correct parameters 
167
168     filteredSearchHelper = new FilteredSearchHelper(generateDefaultViewsFilterConfig());
169     filterProcessor = new FilterProcessor(filteredSearchHelper);
170
171     mapper = new ObjectMapper();
172   }
173
174
175   @Test
176   public void validateDefaultConstructor() {
177     assertNotNull(filterProcessor.getMapper());
178     assertNotNull(filterProcessor.getFilteredSearchHelper());
179   }
180
181   private void verifyResponseAndNumFiltersForBadRequest(Status expectedStatus, int numExpectedFilters)
182       throws JsonParseException, JsonMappingException, IOException {
183     
184     ArgumentCaptor<Status> responseCodeCaptor = ArgumentCaptor.forClass(Status.class);
185     Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
186     assertEquals(expectedStatus, responseCodeCaptor.getValue());
187
188     ArgumentCaptor<String> entityPayload = ArgumentCaptor.forClass(String.class);
189     ArgumentCaptor<MediaType> payloadMediaType = ArgumentCaptor.forClass(MediaType.class);
190     Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(entityPayload.capture(), payloadMediaType.capture());
191     assertNotNull(entityPayload.getValue());
192
193     ArgumentCaptor<Response> responseObject = ArgumentCaptor.forClass(Response.class);
194     Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(responseObject.capture());
195     assertEquals(MediaType.APPLICATION_JSON, payloadMediaType.getValue());
196
197     JsonReader jsonReader = Json.createReader(new StringReader(entityPayload.getValue()));
198     JsonObject responsePayload = jsonReader.readObject();
199     
200     JsonObject filters = responsePayload.getJsonObject("filters");
201     assertEquals(0, filters.size());
202   }
203
204   private void initializeMocks(String requestPayload) {
205     
206     Mockito.when(mockRequestMessage.getBody(String.class)).thenReturn(requestPayload);
207
208     Mockito.when(mockExchange.getIn()).thenReturn(mockRequestMessage);
209     Mockito.when(mockExchange.getOut()).thenReturn(mockResponseMessage);
210
211     Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_REQUEST, Request.class))
212       .thenReturn(mockRestletRequest);
213     Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_RESPONSE, Response.class))
214       .thenReturn(mockRestletResponse);
215   }
216
217
218   @Test
219   public void testGetFiltersWithValues_success_path() throws IOException {
220     
221     // Initialize for call against 'vnfSearch'
222     DiscoverFiltersRequest vnfSearchrequest = new DiscoverFiltersRequest();
223     vnfSearchrequest.setViewName("vnfSearch");
224
225     initializeMocks(NodeUtils.convertObjectToJson(vnfSearchrequest, false));
226
227     // Test call against 'vnfSearch'
228     filterProcessor.getFiltersWithValues(mockExchange);
229
230     ArgumentCaptor<Status> vnfResponseCodeCaptor = ArgumentCaptor.forClass(Status.class);
231     Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(vnfResponseCodeCaptor.capture());
232     assertEquals(Status.SUCCESS_OK, vnfResponseCodeCaptor.getValue());
233
234     ArgumentCaptor<String> vnfEntityPayload = ArgumentCaptor.forClass(String.class);
235     ArgumentCaptor<MediaType> vnfPayloadMediaType = ArgumentCaptor.forClass(MediaType.class);
236     Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(vnfEntityPayload.capture(), vnfPayloadMediaType.capture());
237     assertNotNull(vnfEntityPayload.getValue());
238
239     ArgumentCaptor<Response> vnfResponseObject = ArgumentCaptor.forClass(Response.class);
240     Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(vnfResponseObject.capture());
241     assertEquals(MediaType.APPLICATION_JSON, vnfPayloadMediaType.getValue());
242     
243     JsonReader vnfJsonReader = Json.createReader(new StringReader(vnfEntityPayload.getValue()));
244     JsonObject vnfResponsePayload = vnfJsonReader.readObject();
245
246     JsonObject vnfFilters = vnfResponsePayload.getJsonObject("filters");
247     assertNotNull(vnfFilters);
248     assertEquals(4, vnfFilters.size());
249     
250     JsonObject filterOne = vnfFilters.getJsonObject("1");
251     assertNotNull(filterOne);
252     assertEquals("Display Name 1", filterOne.getString("label"));
253     
254     JsonObject filterEight = vnfFilters.getJsonObject("8");
255     assertNotNull(filterEight);
256     JsonObject eightInnerControl = filterEight.getJsonObject("controls").getJsonObject("filterName8");
257     assertEquals(4, eightInnerControl.size());
258     assertEquals("dropDown", eightInnerControl.getString("type"));
259     assertEquals("false", eightInnerControl.getString("multiSelect"));
260     assertEquals("Any 8", eightInnerControl.getString("watermark"));
261     assertEquals(0, eightInnerControl.getJsonArray("options").size());
262     
263     // Initialize for call against 'dataIntegrity'
264     DiscoverFiltersRequest dataIntegrityRequest = new DiscoverFiltersRequest();
265     dataIntegrityRequest.setViewName("dataIntegrity");
266
267     initializeMocks(NodeUtils.convertObjectToJson(dataIntegrityRequest, false));
268     
269     // Test call against 'dataIntegrity'
270     filterProcessor.getFiltersWithValues(mockExchange);
271     
272     ArgumentCaptor<Status> dIResponseCodeCaptor = ArgumentCaptor.forClass(Status.class);
273     Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(dIResponseCodeCaptor.capture());
274     assertEquals(Status.SUCCESS_OK, dIResponseCodeCaptor.getValue());
275
276     ArgumentCaptor<String> dIEntityPayload = ArgumentCaptor.forClass(String.class);
277     ArgumentCaptor<MediaType> dIPayloadMediaType = ArgumentCaptor.forClass(MediaType.class);
278     Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(dIEntityPayload.capture(), dIPayloadMediaType.capture());
279     assertNotNull(dIEntityPayload.getValue());
280
281     ArgumentCaptor<Response> dIResponseObject = ArgumentCaptor.forClass(Response.class);
282     Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(dIResponseObject.capture());
283     assertEquals(MediaType.APPLICATION_JSON, dIPayloadMediaType.getValue());
284     
285     JsonReader dIJsonReader = Json.createReader(new StringReader(dIEntityPayload.getValue()));
286     JsonObject dIResponsePayload = dIJsonReader.readObject();
287     
288     JsonObject dIFilters = dIResponsePayload.getJsonObject("filters");
289     assertNotNull(dIFilters);
290     assertEquals(4, dIFilters.size());
291     
292     JsonObject filterFour = dIFilters.getJsonObject("4");
293     assertNotNull(filterFour);
294     assertEquals("Display Name 4", filterFour.getString("label"));
295     
296     JsonObject filterFive = dIFilters.getJsonObject("5");
297     assertNotNull(filterFive);
298     JsonObject fiveInnerControl = filterFive.getJsonObject("controls").getJsonObject("filterName5");
299     assertEquals(5, fiveInnerControl.size());
300     assertEquals("date", fiveInnerControl.getString("type"));
301     assertEquals("false", fiveInnerControl.getString("multiSelect"));
302     assertEquals("Any 5", fiveInnerControl.getString("watermark"));
303     JsonArray dynamicOptions = fiveInnerControl.getJsonArray("dynamicOptions");
304     assertEquals(5, dynamicOptions.size());
305     JsonObject today = dynamicOptions.getJsonObject(0);
306     assertEquals("Today", today.getString("decode"));
307   }
308
309   @Test
310   public void testGetFiltersWithValues_viewNameNull() throws IOException {
311     
312     DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
313     initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
314
315     // Method under test
316     filterProcessor.getFiltersWithValues(mockExchange);
317
318     verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
319   }
320
321   @Test
322   public void testGetFiltersWithValues_viewNameEmptyString() throws IOException {
323     
324     DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
325     discoverFiltersRequest.setViewName("");
326
327     initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
328
329     // Method under test
330     filterProcessor.getFiltersWithValues(mockExchange);
331
332     verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
333   }
334
335   @Test
336   public void testGetFiltersWithValues_requestPayloadIsNull() throws IOException {
337     
338     initializeMocks(null);
339
340     // Method under test
341     filterProcessor.getFiltersWithValues(mockExchange);
342
343     verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
344   }
345
346   @Test
347   public void testGetFiltersWithValues_requestPayloadIsEmptyString() throws IOException {
348     
349     initializeMocks("");
350
351     // Method under test
352     filterProcessor.getFiltersWithValues(mockExchange);
353
354     verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
355   }
356
357   @Test
358   public void testGetFiltersWithValues_requestPayloadCausesException() throws IOException {
359     
360     initializeMocks("{");
361
362     // Method under test
363     filterProcessor.getFiltersWithValues(mockExchange);
364
365     verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
366   }
367 }*/