2 * ============LICENSE_START=================================================== SPARKY (AAI UI
3 * service) ============================================================================ Copyright ©
4 * 2017 AT&T Intellectual Property. Copyright © 2017 Amdocs All rights reserved.
5 * ============================================================================ Licensed under the
6 * Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software distributed under the License
12 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing permissions and limitations under
14 * the License. ============LICENSE_END=====================================================
16 * ECOMP and OpenECOMP are trademarks and service marks of AT&T Intellectual Property.
19 package org.onap.aai.sparky.search.filters;
21 import static org.junit.Assert.assertEquals;
22 import static org.junit.Assert.assertNotNull;
24 import java.io.IOException;
25 import java.io.StringReader;
26 import java.util.ArrayList;
27 import java.util.List;
29 import javax.json.Json;
30 import javax.json.JsonArray;
31 import javax.json.JsonObject;
32 import javax.json.JsonReader;
34 import org.apache.camel.Exchange;
35 import org.apache.camel.Message;
36 import org.apache.camel.component.restlet.RestletConstants;
37 import org.junit.Before;
38 import org.junit.Test;
39 import org.mockito.ArgumentCaptor;
40 import org.mockito.Mockito;
41 import org.onap.aai.sparky.search.filters.FilterProcessor;
42 import org.onap.aai.sparky.search.filters.FilteredSearchHelper;
43 import org.onap.aai.sparky.search.filters.config.UiFilterConfig;
44 import org.onap.aai.sparky.search.filters.config.UiFilterListItemConfig;
45 import org.onap.aai.sparky.search.filters.config.UiFilterOptionsValuesConfig;
46 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
47 import org.onap.aai.sparky.search.filters.config.FiltersConfig;
48 import org.onap.aai.sparky.search.filters.config.UiViewListItemConfig;
49 import org.onap.aai.sparky.search.filters.entity.DiscoverFiltersRequest;
50 import org.onap.aai.sparky.search.filters.entity.ViewConfiguration;
51 import org.onap.aai.sparky.search.filters.entity.ViewFilter;
52 import org.onap.aai.sparky.util.NodeUtils;
53 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
54 import org.restlet.Request;
55 import org.restlet.Response;
56 import org.restlet.data.MediaType;
57 import org.restlet.data.Status;
59 import com.fasterxml.jackson.core.JsonParseException;
60 import com.fasterxml.jackson.databind.JsonMappingException;
61 import com.fasterxml.jackson.databind.ObjectMapper;
63 public class FilterProcessorTest {
65 private FilterProcessor filterProcessor;
66 private Exchange mockExchange;
67 private Message mockRequestMessage;
68 private Message mockResponseMessage;
69 private Request mockRestletRequest;
70 private Response mockRestletResponse;
71 private FilteredSearchHelper filteredSearchHelper;
72 private ObjectMapper mapper;
74 protected UiViewListItemConfig generateViewConfig(ViewConfiguration viewConfig) {
76 UiViewListItemConfig uiViewConfig = new UiViewListItemConfig(viewConfig.getViewName(), null);
78 List<UiFilterListItemConfig> filters = new ArrayList<UiFilterListItemConfig>();
80 for (ViewFilter viewFilter : viewConfig.getViewFilters()) {
81 filters.add(new UiFilterListItemConfig(viewFilter.getId(), viewFilter.getDefaultValue()));
84 uiViewConfig.setListOfFilters(filters);
89 protected FiltersConfig generateDefaultViewsFilterConfig() {
91 FiltersForViewsConfig uiViewsConfig = new FiltersForViewsConfig();
92 FiltersConfig viewFilterConfig = FiltersConfig.getInstance();
94 List<UiViewListItemConfig> views = new ArrayList<UiViewListItemConfig>();
96 // Default filter value to use below
97 UiFilterOptionsValuesConfig defaultValue =
98 new UiFilterOptionsValuesConfig("Today", "Last 0 hours");
100 // VNF View - 4 Filters
101 ViewConfiguration vnfViewConfig = new ViewConfiguration("vnfSearch");
102 vnfViewConfig.addViewFilter(new ViewFilter("1", null));
103 vnfViewConfig.addViewFilter(new ViewFilter("2", null));
104 vnfViewConfig.addViewFilter(new ViewFilter("7", null));
105 vnfViewConfig.addViewFilter(new ViewFilter("8", null));
106 views.add(generateViewConfig(vnfViewConfig));
108 // View and Inspect (Schema) - 0 Filters
109 ViewConfiguration viewInspectConfig = new ViewConfiguration("viewInspect");
110 views.add(generateViewConfig(viewInspectConfig));
112 // Data Integrity - 4 Filters
113 ViewConfiguration dataIntegrityConfig = new ViewConfiguration("dataIntegrity");
114 dataIntegrityConfig.addViewFilter(new ViewFilter("3", null));
115 dataIntegrityConfig.addViewFilter(new ViewFilter("4", null));
116 dataIntegrityConfig.addViewFilter(new ViewFilter("5", defaultValue));
117 dataIntegrityConfig.addViewFilter(new ViewFilter("6", null));
118 views.add(generateViewConfig(dataIntegrityConfig));
120 uiViewsConfig.setViews(views);
122 viewFilterConfig.setViewsConfig(uiViewsConfig);
124 List<UiFilterOptionsValuesConfig> optionsValues = new ArrayList<UiFilterOptionsValuesConfig>();
125 optionsValues.add(new UiFilterOptionsValuesConfig("Today", "Last 0 hours"));
126 optionsValues.add(new UiFilterOptionsValuesConfig("Since Yesterday", "Last 24 hours"));
127 optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Week", "Last 7 days"));
128 optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Month", "Last 30 days"));
129 optionsValues.add(new UiFilterOptionsValuesConfig("Custom Range", "Custom Range"));
133 FiltersDetailsConfig uiFiltersConfig = new FiltersDetailsConfig();
135 List<UiFilterConfig> uiFilterConfig = new ArrayList<UiFilterConfig>();
136 uiFilterConfig.add(new UiFilterConfig("1", "filterName1", "Display Name 1", "dropDown", "false",
137 "Any 1", null, "options", null, null));
138 uiFilterConfig.add(new UiFilterConfig("2", "filterName2", "Display Name 2", "dropDown", "false",
139 "Any 2", null, "options", null, null));
140 uiFilterConfig.add(new UiFilterConfig("3", "filterName3", "Display Name 3", "dropDown", "false",
141 "Any 3", null, "options", null, null));
142 uiFilterConfig.add(new UiFilterConfig("4", "filterName4", "Display Name 4", "dropDown", "false",
143 "Any 4", null, "options", null, null));
144 uiFilterConfig.add(new UiFilterConfig("5", "filterName5", "Display Name 5", "date", "false",
145 "Any 5", defaultValue, "dynamicOptions", optionsValues, null));
146 uiFilterConfig.add(new UiFilterConfig("6", "filterName6", "Display Name 6", "dropDown", "false",
147 "Any 6", null, "options", null, null));
148 uiFilterConfig.add(new UiFilterConfig("7", "filterName7", "Display Name 7", "dropDown", "false",
149 "Any 7", null, "options", null, null));
150 uiFilterConfig.add(new UiFilterConfig("8", "filterName8", "Display Name 8", "dropDown", "false",
151 "Any 8", null, "options", null, null));
153 uiFiltersConfig.setFilters(uiFilterConfig);
155 viewFilterConfig.setFiltersConfig(uiFiltersConfig);
157 return viewFilterConfig;
162 mockExchange = Mockito.mock(Exchange.class);
163 mockRequestMessage = Mockito.mock(Message.class);
164 mockResponseMessage = Mockito.mock(Message.class);
165 mockRestletRequest = Mockito.mock(Request.class);
166 mockRestletResponse = Mockito.mock(Response.class);
168 filteredSearchHelper = new FilteredSearchHelper(generateDefaultViewsFilterConfig());
169 filterProcessor = new FilterProcessor(filteredSearchHelper);
171 mapper = new ObjectMapper();
176 public void validateDefaultConstructor() {
177 assertNotNull(filterProcessor.getMapper());
178 assertNotNull(filterProcessor.getFilteredSearchHelper());
181 private void verifyResponseAndNumFiltersForBadRequest(Status expectedStatus,
182 int numExpectedFilters) throws JsonParseException, JsonMappingException, IOException {
184 ArgumentCaptor<Status> responseCodeCaptor = ArgumentCaptor.forClass(Status.class);
185 Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture());
186 assertEquals(expectedStatus, responseCodeCaptor.getValue());
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(),
191 payloadMediaType.capture());
192 assertNotNull(entityPayload.getValue());
194 ArgumentCaptor<Response> responseObject = ArgumentCaptor.forClass(Response.class);
195 Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(responseObject.capture());
196 assertEquals(MediaType.APPLICATION_JSON, payloadMediaType.getValue());
198 JsonReader jsonReader = Json.createReader(new StringReader(entityPayload.getValue()));
199 JsonObject responsePayload = jsonReader.readObject();
201 JsonObject filters = responsePayload.getJsonObject("filters");
202 assertEquals(0, filters.size());
205 private void initializeMocks(String requestPayload) {
207 Mockito.when(mockRequestMessage.getBody(String.class)).thenReturn(requestPayload);
209 Mockito.when(mockExchange.getIn()).thenReturn(mockRequestMessage);
210 Mockito.when(mockExchange.getOut()).thenReturn(mockResponseMessage);
212 Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_REQUEST, Request.class))
213 .thenReturn(mockRestletRequest);
214 Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_RESPONSE, Response.class))
215 .thenReturn(mockRestletResponse);
220 public void testGetFiltersWithValues_success_path() throws IOException {
222 // Initialize for call against 'vnfSearch'
223 DiscoverFiltersRequest vnfSearchrequest = new DiscoverFiltersRequest();
224 vnfSearchrequest.setViewName("vnfSearch");
226 initializeMocks(NodeUtils.convertObjectToJson(vnfSearchrequest, false));
228 // Test call against 'vnfSearch'
229 filterProcessor.getFiltersWithValues(mockExchange);
231 ArgumentCaptor<Status> vnfResponseCodeCaptor = ArgumentCaptor.forClass(Status.class);
232 Mockito.verify(mockRestletResponse, Mockito.atLeast(1))
233 .setStatus(vnfResponseCodeCaptor.capture());
234 assertEquals(Status.SUCCESS_OK, vnfResponseCodeCaptor.getValue());
236 ArgumentCaptor<String> vnfEntityPayload = ArgumentCaptor.forClass(String.class);
237 ArgumentCaptor<MediaType> vnfPayloadMediaType = ArgumentCaptor.forClass(MediaType.class);
238 Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(vnfEntityPayload.capture(),
239 vnfPayloadMediaType.capture());
240 assertNotNull(vnfEntityPayload.getValue());
242 ArgumentCaptor<Response> vnfResponseObject = ArgumentCaptor.forClass(Response.class);
243 Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(vnfResponseObject.capture());
244 assertEquals(MediaType.APPLICATION_JSON, vnfPayloadMediaType.getValue());
246 JsonReader vnfJsonReader = Json.createReader(new StringReader(vnfEntityPayload.getValue()));
247 JsonObject vnfResponsePayload = vnfJsonReader.readObject();
249 JsonObject vnfFilters = vnfResponsePayload.getJsonObject("filters");
250 assertNotNull(vnfFilters);
251 assertEquals(4, vnfFilters.size());
253 JsonObject filterOne = vnfFilters.getJsonObject("1");
254 assertNotNull(filterOne);
255 assertEquals("Display Name 1", filterOne.getString("label"));
257 JsonObject filterEight = vnfFilters.getJsonObject("8");
258 assertNotNull(filterEight);
259 JsonObject eightInnerControl =
260 filterEight.getJsonObject("controls").getJsonObject("filterName8");
261 assertEquals(4, eightInnerControl.size());
262 assertEquals("dropDown", eightInnerControl.getString("type"));
263 assertEquals("false", eightInnerControl.getString("multiSelect"));
264 assertEquals("Any 8", eightInnerControl.getString("watermark"));
265 assertEquals(0, eightInnerControl.getJsonArray("options").size());
267 // Initialize for call against 'dataIntegrity'
268 DiscoverFiltersRequest dataIntegrityRequest = new DiscoverFiltersRequest();
269 dataIntegrityRequest.setViewName("dataIntegrity");
271 initializeMocks(NodeUtils.convertObjectToJson(dataIntegrityRequest, false));
273 // Test call against 'dataIntegrity'
274 filterProcessor.getFiltersWithValues(mockExchange);
276 ArgumentCaptor<Status> dIResponseCodeCaptor = ArgumentCaptor.forClass(Status.class);
277 Mockito.verify(mockRestletResponse, Mockito.atLeast(1))
278 .setStatus(dIResponseCodeCaptor.capture());
279 assertEquals(Status.SUCCESS_OK, dIResponseCodeCaptor.getValue());
281 ArgumentCaptor<String> dIEntityPayload = ArgumentCaptor.forClass(String.class);
282 ArgumentCaptor<MediaType> dIPayloadMediaType = ArgumentCaptor.forClass(MediaType.class);
283 Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(dIEntityPayload.capture(),
284 dIPayloadMediaType.capture());
285 assertNotNull(dIEntityPayload.getValue());
287 ArgumentCaptor<Response> dIResponseObject = ArgumentCaptor.forClass(Response.class);
288 Mockito.verify(mockResponseMessage, Mockito.atLeast(1)).setBody(dIResponseObject.capture());
289 assertEquals(MediaType.APPLICATION_JSON, dIPayloadMediaType.getValue());
291 JsonReader dIJsonReader = Json.createReader(new StringReader(dIEntityPayload.getValue()));
292 JsonObject dIResponsePayload = dIJsonReader.readObject();
294 JsonObject dIFilters = dIResponsePayload.getJsonObject("filters");
295 assertNotNull(dIFilters);
296 assertEquals(4, dIFilters.size());
298 JsonObject filterFour = dIFilters.getJsonObject("4");
299 assertNotNull(filterFour);
300 assertEquals("Display Name 4", filterFour.getString("label"));
302 JsonObject filterFive = dIFilters.getJsonObject("5");
303 assertNotNull(filterFive);
304 JsonObject fiveInnerControl = filterFive.getJsonObject("controls").getJsonObject("filterName5");
305 assertEquals(5, fiveInnerControl.size());
306 assertEquals("date", fiveInnerControl.getString("type"));
307 assertEquals("false", fiveInnerControl.getString("multiSelect"));
308 assertEquals("Any 5", fiveInnerControl.getString("watermark"));
309 JsonArray dynamicOptions = fiveInnerControl.getJsonArray("dynamicOptions");
310 assertEquals(5, dynamicOptions.size());
311 JsonObject today = dynamicOptions.getJsonObject(0);
312 assertEquals("Today", today.getString("decode"));
316 public void testGetFiltersWithValues_viewNameNull() throws IOException {
318 DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
319 initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
322 filterProcessor.getFiltersWithValues(mockExchange);
324 verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
328 public void testGetFiltersWithValues_viewNameEmptyString() throws IOException {
330 DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest();
331 discoverFiltersRequest.setViewName("");
333 initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false));
336 filterProcessor.getFiltersWithValues(mockExchange);
338 verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
342 public void testGetFiltersWithValues_requestPayloadIsNull() throws IOException {
344 initializeMocks(null);
347 filterProcessor.getFiltersWithValues(mockExchange);
349 verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
353 public void testGetFiltersWithValues_requestPayloadIsEmptyString() throws IOException {
358 filterProcessor.getFiltersWithValues(mockExchange);
360 verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);
364 public void testGetFiltersWithValues_requestPayloadCausesException() throws IOException {
366 initializeMocks("{");
369 filterProcessor.getFiltersWithValues(mockExchange);
371 verifyResponseAndNumFiltersForBadRequest(Status.SUCCESS_OK, 0);