2 * ============LICENSE_START===================================================
3 * SPARKY (AAI UI service)
4 * ============================================================================
5 * Copyright © 2017 AT&T Intellectual Property.
6 * Copyright © 2017 Amdocs
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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=====================================================
22 * ECOMP and OpenECOMP are trademarks
23 * and service marks of AT&T Intellectual Property.
26 package org.onap.aai.sparky.search.filters;
28 import static org.junit.Assert.assertEquals;
29 import static org.junit.Assert.assertNotNull;
31 import java.io.IOException;
32 import java.io.StringReader;
33 import java.util.ArrayList;
34 import java.util.List;
36 import javax.json.Json;
37 import javax.json.JsonArray;
38 import javax.json.JsonObject;
39 import javax.json.JsonReader;
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;
66 import com.fasterxml.jackson.core.JsonParseException;
67 import com.fasterxml.jackson.databind.JsonMappingException;
68 import com.fasterxml.jackson.databind.ObjectMapper;
70 public class FilterProcessorTest {
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;
81 protected UiViewListItemConfig generateViewConfig(ViewConfiguration viewConfig) {
83 UiViewListItemConfig uiViewConfig = new UiViewListItemConfig(viewConfig.getViewName(), null);
85 List<UiFilterListItemConfig> filters = new ArrayList<UiFilterListItemConfig>();
87 for (ViewFilter viewFilter : viewConfig.getViewFilters()) {
88 filters.add(new UiFilterListItemConfig(viewFilter.getId(), viewFilter.getDefaultValue()));
91 uiViewConfig.setListOfFilters(filters);
96 protected FiltersConfig generateDefaultViewsFilterConfig() {
98 FiltersForViewsConfig uiViewsConfig = new FiltersForViewsConfig();
99 FiltersConfig viewFilterConfig = FiltersConfig.getInstance();
101 List<UiViewListItemConfig> views = new ArrayList<UiViewListItemConfig>();
103 // Default filter value to use below
104 UiFilterOptionsValuesConfig defaultValue =
105 new UiFilterOptionsValuesConfig("Today", "Last 0 hours");
107 // VNF View - 4 Filters
108 ViewConfiguration vnfViewConfig = new ViewConfiguration("vnfSearch");
109 vnfViewConfig.addViewFilter(new ViewFilter("1", null));
110 vnfViewConfig.addViewFilter(new ViewFilter("2", null));
111 vnfViewConfig.addViewFilter(new ViewFilter("7", null));
112 vnfViewConfig.addViewFilter(new ViewFilter("8", null));
113 views.add(generateViewConfig(vnfViewConfig));
115 // View and Inspect (Schema) - 0 Filters
116 ViewConfiguration viewInspectConfig = new ViewConfiguration("viewInspect");
117 views.add(generateViewConfig(viewInspectConfig));
119 // Data Integrity - 4 Filters
120 ViewConfiguration dataIntegrityConfig = new ViewConfiguration("dataIntegrity");
121 dataIntegrityConfig.addViewFilter(new ViewFilter("3", null));
122 dataIntegrityConfig.addViewFilter(new ViewFilter("4", null));
123 dataIntegrityConfig.addViewFilter(new ViewFilter("5", defaultValue));
124 dataIntegrityConfig.addViewFilter(new ViewFilter("6", null));
125 views.add(generateViewConfig(dataIntegrityConfig));
127 uiViewsConfig.setViews(views);
129 viewFilterConfig.setViewsConfig(uiViewsConfig);
131 List<UiFilterOptionsValuesConfig> optionsValues = new ArrayList<UiFilterOptionsValuesConfig>();
132 optionsValues.add(new UiFilterOptionsValuesConfig("Today", "Last 0 hours"));
133 optionsValues.add(new UiFilterOptionsValuesConfig("Since Yesterday", "Last 24 hours"));
134 optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Week", "Last 7 days"));
135 optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Month", "Last 30 days"));
136 optionsValues.add(new UiFilterOptionsValuesConfig("Custom Range", "Custom Range"));
140 FiltersDetailsConfig uiFiltersConfig = new FiltersDetailsConfig();
142 List<UiFilterConfig> uiFilterConfig = new ArrayList<UiFilterConfig>();
143 uiFilterConfig.add(new UiFilterConfig("1", "filterName1", "Display Name 1", "dropDown", "false",
144 "Any 1", null, "options", null, null));
145 uiFilterConfig.add(new UiFilterConfig("2", "filterName2", "Display Name 2", "dropDown", "false",
146 "Any 2", null, "options", null, null));
147 uiFilterConfig.add(new UiFilterConfig("3", "filterName3", "Display Name 3", "dropDown", "false",
148 "Any 3", null, "options", null, null));
149 uiFilterConfig.add(new UiFilterConfig("4", "filterName4", "Display Name 4", "dropDown", "false",
150 "Any 4", null, "options", null, null));
151 uiFilterConfig.add(new UiFilterConfig("5", "filterName5", "Display Name 5", "date", "false",
152 "Any 5", defaultValue, "dynamicOptions", optionsValues, null));
153 uiFilterConfig.add(new UiFilterConfig("6", "filterName6", "Display Name 6", "dropDown", "false",
154 "Any 6", null, "options", null, null));
155 uiFilterConfig.add(new UiFilterConfig("7", "filterName7", "Display Name 7", "dropDown", "false",
156 "Any 7", null, "options", null, null));
157 uiFilterConfig.add(new UiFilterConfig("8", "filterName8", "Display Name 8", "dropDown", "false",
158 "Any 8", null, "options", null, null));
160 uiFiltersConfig.setFilters(uiFilterConfig);
162 viewFilterConfig.setFiltersConfig(uiFiltersConfig);
164 return viewFilterConfig;
169 mockExchange = Mockito.mock(Exchange.class);
170 mockRequestMessage = Mockito.mock(Message.class);
171 mockResponseMessage = Mockito.mock(Message.class);
172 mockRestletRequest = Mockito.mock(Request.class);
173 mockRestletResponse = Mockito.mock(Response.class);
175 filteredSearchHelper = new FilteredSearchHelper(generateDefaultViewsFilterConfig());
176 filterProcessor = new FilterProcessor(filteredSearchHelper);
178 mapper = new ObjectMapper();
183 public void validateDefaultConstructor() {
184 assertNotNull(filterProcessor.getMapper());
185 assertNotNull(filterProcessor.getFilteredSearchHelper());
188 private void verifyResponseAndNumFiltersForBadRequest(Status expectedStatus,
189 int numExpectedFilters) throws JsonParseException, JsonMappingException, IOException {
191 ArgumentCaptor<Status> responseCodeCaptor = ArgumentCaptor.forClass(Status.class);
192 Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
193 assertEquals(expectedStatus, responseCodeCaptor.getValue());
195 ArgumentCaptor<String> entityPayload = ArgumentCaptor.forClass(String.class);
196 ArgumentCaptor<MediaType> payloadMediaType = ArgumentCaptor.forClass(MediaType.class);
197 Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(entityPayload.capture(),
198 payloadMediaType.capture());
199 assertNotNull(entityPayload.getValue());
201 ArgumentCaptor<Response> responseObject = ArgumentCaptor.forClass(Response.class);
202 Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(responseObject.capture());
203 assertEquals(MediaType.APPLICATION_JSON, payloadMediaType.getValue());
205 JsonReader jsonReader = Json.createReader(new StringReader(entityPayload.getValue()));
206 JsonObject responsePayload = jsonReader.readObject();
208 JsonObject filters = responsePayload.getJsonObject("filters");
209 assertEquals(0, filters.size());
212 private void initializeMocks(String requestPayload) {
214 Mockito.when(mockRequestMessage.getBody(String.class)).thenReturn(requestPayload);
216 Mockito.when(mockExchange.getIn()).thenReturn(mockRequestMessage);
217 Mockito.when(mockExchange.getOut()).thenReturn(mockResponseMessage);
219 Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_REQUEST, Request.class))
220 .thenReturn(mockRestletRequest);
221 Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_RESPONSE, Response.class))
222 .thenReturn(mockRestletResponse);
227 public void testGetFiltersWithValues_success_path() throws IOException {
229 // Initialize for call against 'vnfSearch'
230 DiscoverFiltersRequest vnfSearchrequest = new DiscoverFiltersRequest();
231 vnfSearchrequest.setViewName("vnfSearch");
233 initializeMocks(NodeUtils.convertObjectToJson(vnfSearchrequest, false));
235 // Test call against 'vnfSearch'
236 filterProcessor.getFiltersWithValues(mockExchange);
238 ArgumentCaptor<Status> vnfResponseCodeCaptor = ArgumentCaptor.forClass(Status.class);
239 Mockito.verify(mockRestletResponse, Mockito.atLeast(1))
240 .setStatus(vnfResponseCodeCaptor.capture());
241 assertEquals(Status.SUCCESS_OK, vnfResponseCodeCaptor.getValue());
243 ArgumentCaptor<String> vnfEntityPayload = ArgumentCaptor.forClass(String.class);
244 ArgumentCaptor<MediaType> vnfPayloadMediaType = ArgumentCaptor.forClass(MediaType.class);
245 Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(vnfEntityPayload.capture(),
246 vnfPayloadMediaType.capture());
247 assertNotNull(vnfEntityPayload.getValue());
249 ArgumentCaptor<Response> vnfResponseObject = ArgumentCaptor.forClass(Response.class);
250 Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(vnfResponseObject.capture());
251 assertEquals(MediaType.APPLICATION_JSON, vnfPayloadMediaType.getValue());
253 JsonReader vnfJsonReader = Json.createReader(new StringReader(vnfEntityPayload.getValue()));
254 JsonObject vnfResponsePayload = vnfJsonReader.readObject();
256 JsonObject vnfFilters = vnfResponsePayload.getJsonObject("filters");
257 assertNotNull(vnfFilters);
258 assertEquals(4, vnfFilters.size());
260 JsonObject filterOne = vnfFilters.getJsonObject("1");
261 assertNotNull(filterOne);
262 assertEquals("Display Name 1", filterOne.getString("label"));
264 JsonObject filterEight = vnfFilters.getJsonObject("8");
265 assertNotNull(filterEight);
266 JsonObject eightInnerControl =
267 filterEight.getJsonObject("controls").getJsonObject("filterName8");
268 assertEquals(4, eightInnerControl.size());
269 assertEquals("dropDown", eightInnerControl.getString("type"));
270 assertEquals("false", eightInnerControl.getString("multiSelect"));
271 assertEquals("Any 8", eightInnerControl.getString("watermark"));
272 assertEquals(0, eightInnerControl.getJsonArray("options").size());
274 // Initialize for call against 'dataIntegrity'
275 DiscoverFiltersRequest dataIntegrityRequest = new DiscoverFiltersRequest();
276 dataIntegrityRequest.setViewName("dataIntegrity");
278 initializeMocks(NodeUtils.convertObjectToJson(dataIntegrityRequest, false));
280 // Test call against 'dataIntegrity'
281 filterProcessor.getFiltersWithValues(mockExchange);
283 ArgumentCaptor<Status> dIResponseCodeCaptor = ArgumentCaptor.forClass(Status.class);
284 Mockito.verify(mockRestletResponse, Mockito.atLeast(1))
285 .setStatus(dIResponseCodeCaptor.capture());
286 assertEquals(Status.SUCCESS_OK, dIResponseCodeCaptor.getValue());
288 ArgumentCaptor<String> dIEntityPayload = ArgumentCaptor.forClass(String.class);
289 ArgumentCaptor<MediaType> dIPayloadMediaType = ArgumentCaptor.forClass(MediaType.class);
290 Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(dIEntityPayload.capture(),
291 dIPayloadMediaType.capture());
292 assertNotNull(dIEntityPayload.getValue());
294 ArgumentCaptor<Response> dIResponseObject = ArgumentCaptor.forClass(Response.class);
295 Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(dIResponseObject.capture());
296 assertEquals(MediaType.APPLICATION_JSON, dIPayloadMediaType.getValue());
298 JsonReader dIJsonReader = Json.createReader(new StringReader(dIEntityPayload.getValue()));
299 JsonObject dIResponsePayload = dIJsonReader.readObject();
301 JsonObject dIFilters = dIResponsePayload.getJsonObject("filters");
302 assertNotNull(dIFilters);
303 assertEquals(4, dIFilters.size());
305 JsonObject filterFour = dIFilters.getJsonObject("4");
306 assertNotNull(filterFour);
307 assertEquals("Display Name 4", filterFour.getString("label"));
309 JsonObject filterFive = dIFilters.getJsonObject("5");
310 assertNotNull(filterFive);
311 JsonObject fiveInnerControl = filterFive.getJsonObject("controls").getJsonObject("filterName5");
312 assertEquals(5, fiveInnerControl.size());
313 assertEquals("date", fiveInnerControl.getString("type"));
314 assertEquals("false", fiveInnerControl.getString("multiSelect"));
315 assertEquals("Any 5", fiveInnerControl.getString("watermark"));
316 JsonArray dynamicOptions = fiveInnerControl.getJsonArray("dynamicOptions");
317 assertEquals(5, dynamicOptions.size());
318 JsonObject today = dynamicOptions.getJsonObject(0);
319 assertEquals("Today", today.getString("decode"));
323 public void testGetFiltersWithValues_viewNameNull() throws IOException {
325 DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
326 initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
329 filterProcessor.getFiltersWithValues(mockExchange);
331 verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
335 public void testGetFiltersWithValues_viewNameEmptyString() throws IOException {
337 DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
338 discoverFiltersRequest.setViewName("");
340 initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
343 filterProcessor.getFiltersWithValues(mockExchange);
345 verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
349 public void testGetFiltersWithValues_requestPayloadIsNull() throws IOException {
351 initializeMocks(null);
354 filterProcessor.getFiltersWithValues(mockExchange);
356 verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
360 public void testGetFiltersWithValues_requestPayloadIsEmptyString() throws IOException {
365 filterProcessor.getFiltersWithValues(mockExchange);
367 verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
371 public void testGetFiltersWithValues_requestPayloadCausesException() throws IOException {
373 initializeMocks("{");
376 filterProcessor.getFiltersWithValues(mockExchange);
378 verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);