Rewrite PropertyControllerTest 67/76067/4
authorJoanna Jeremicz <joanna.jeremicz@nokia.com>
Fri, 18 Jan 2019 10:17:46 +0000 (11:17 +0100)
committerJoanna Jeremicz <joanna.jeremicz@nokia.com>
Fri, 25 Jan 2019 11:43:45 +0000 (12:43 +0100)
Change-Id: I8c564a945f374d6dcc12a30ff4d8d9268b50a815
Issue-ID: VID-384
Signed-off-by: Joanna Jeremicz <joanna.jeremicz@nokia.com>
vid-app-common/src/main/java/org/onap/vid/controller/PropertyController.java
vid-app-common/src/main/java/org/onap/vid/utils/SystemPropertiesWrapper.java [new file with mode: 0644]
vid-app-common/src/test/java/org/onap/vid/controller/PropertyControllerTest.java

index 2f8d6e2..579f17a 100644 (file)
@@ -4,12 +4,14 @@
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright 2019 Nokia
+ * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -22,12 +24,11 @@ package org.onap.vid.controller;
 
 import org.onap.portalsdk.core.controller.RestrictedBaseController;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
-import org.onap.portalsdk.core.util.SystemProperties;
 import org.onap.vid.category.CategoryParametersResponse;
 import org.onap.vid.model.CategoryParameter.Family;
 import org.onap.vid.services.CategoryParameterService;
+import org.onap.vid.utils.SystemPropertiesWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
@@ -35,92 +36,59 @@ import org.springframework.web.servlet.ModelAndView;
 import javax.servlet.http.HttpServletRequest;
 
 import static org.onap.vid.utils.Logging.getMethodName;
+import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
+import static org.springframework.http.HttpStatus.OK;
 
-/**
- * The Class PropertyController.
- */
 @RestController
-public class PropertyController extends RestrictedBaseController{
-       
+public class PropertyController extends RestrictedBaseController {
 
-       /** The logger. */
-       private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(PropertyController.class);
+    private static final String ERROR_MESSAGE = "Internal error occurred: ";
+    private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(PropertyController.class);
+    private final CategoryParameterService categoryParameterService;
+    private final SystemPropertiesWrapper systemPropertiesWrapper;
 
-       @Autowired
-       protected CategoryParameterService categoryParameterService;
+    @Autowired
+    public PropertyController(CategoryParameterService service, SystemPropertiesWrapper systemPropertiesWrapper) {
+        categoryParameterService = service;
+        this.systemPropertiesWrapper = systemPropertiesWrapper;
+    }
 
-       
-       /**
-        * Welcome.
-        *
-        * @param request the request
-        * @return the model and view
-        */
-       @RequestMapping(value = {"/propertyhome" }, method = RequestMethod.GET)
-       public ModelAndView welcome(HttpServletRequest request) {
-               LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== PropertyController welcome start");
-               return new ModelAndView(getViewName());         
-       }
-       
-       /**
-        * Gets the property.
-        *
-        * @param name the name
-        * @param defaultvalue the defaultvalue
-        * @param request the request
-        * @return the property
-        * @throws Exception the exception
-        */
-       @RequestMapping(value = "/get_property/{name}/{defaultvalue}", method = RequestMethod.GET)
-       public ResponseEntity<String> getProperty (@PathVariable("name") String name, @PathVariable("defaultvalue") String defaultvalue,
-                       HttpServletRequest request) {
-               
-               String methodName = "getProperty";      
-               ResponseEntity<String> resp = null;
-               String pvalue = null;
-               LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== " + methodName + " start");
-               
-               try {
-                       // convert "_" to "." in the property name
-                       if (name == null || name.length() == 0 ) {
-                               return ( new ResponseEntity<String> (defaultvalue, HttpStatus.OK));
-                       }
-                       // convert "_" to "." in the property name
-                       String propertyName = name.replace('_', '.');
-                       pvalue = SystemProperties.getProperty(propertyName);
-                       if ( ( pvalue == null ) || ( pvalue.length() == 0 ) ) {
-                               pvalue = defaultvalue;
-                       }
-                       resp = new ResponseEntity<>(pvalue, HttpStatus.OK);
-               }
-               catch (Exception e) {
-                       LOGGER.info(EELFLoggerDelegate.errorLogger,  "<== " + "." + methodName + e.toString());
-                       LOGGER.debug(EELFLoggerDelegate.debugLogger,  "<== " + "." + methodName + e.toString());
-                       throw e;
-               }
-               LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== " + methodName + " returning " + pvalue);
-               return ( resp );
-       }
+    @RequestMapping(value = {"/propertyhome"}, method = RequestMethod.GET)
+    public ModelAndView welcome(HttpServletRequest request) {
+        LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== PropertyController welcome start");
+        return new ModelAndView(getViewName());
+    }
 
-       /**
-        * Gets the owning entity properties.
-        * @param request the request
-        * @return the property
-        * @throws Exception the exception
-        */
-       @RequestMapping(value = "/category_parameter", method = RequestMethod.GET)
-       public ResponseEntity getCategoryParameter(HttpServletRequest request, @RequestParam(value="familyName", required = true) Family familyName) {
-               LOGGER.debug(EELFLoggerDelegate.debugLogger, "start {}({})", getMethodName());
-               try {
-                       CategoryParametersResponse response = categoryParameterService.getCategoryParameters(familyName);
-                       LOGGER.debug(EELFLoggerDelegate.debugLogger, "end {}() => {}", getMethodName(), response);
-                       return new ResponseEntity<>(response, HttpStatus.OK);
-               }
-               catch (Exception exception) {
-                       LOGGER.error("failed to retrieve category parameter list from DB.", exception);
-                       return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
-               }
-       }
+    @RequestMapping(value = "/get_property/{name}/{defaultvalue}", method = RequestMethod.GET)
+    public ResponseEntity<String> getProperty(@PathVariable("name") String name,
+        @PathVariable("defaultvalue") String defaultvalue,
+        HttpServletRequest request) {
 
+        String methodName = "getProperty";
+        LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== {} {}", methodName, " start");
+        try {
+            String propertyName = name.replace('_', '.');
+            String pvalue = systemPropertiesWrapper.getOrDefault(propertyName, defaultvalue);
+            LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== {} {} {}", methodName, "returning", pvalue);
+            return ResponseEntity.status(OK).body(pvalue);
+        } catch (Exception e) {
+            LOGGER.info(EELFLoggerDelegate.errorLogger, "<== {} {}", methodName, e.toString());
+            LOGGER.debug(EELFLoggerDelegate.debugLogger, "<== {} {}", methodName, e.toString());
+            return ResponseEntity.status(INTERNAL_SERVER_ERROR).body(ERROR_MESSAGE + e.getMessage());
+        }
+    }
 
+    @RequestMapping(value = "/category_parameter", method = RequestMethod.GET)
+    public ResponseEntity getCategoryParameter(HttpServletRequest request,
+        @RequestParam(value = "familyName", required = true) Family familyName) {
+        LOGGER.debug(EELFLoggerDelegate.debugLogger, "start {}({})", getMethodName());
+        try {
+            CategoryParametersResponse response = categoryParameterService.getCategoryParameters(familyName);
+            LOGGER.debug(EELFLoggerDelegate.debugLogger, "end {}() => {}", getMethodName(), response);
+            return ResponseEntity.status(OK).body(response);
+        } catch (Exception e) {
+            LOGGER.error("failed to retrieve category parameter list from DB.", e);
+            return ResponseEntity.status(INTERNAL_SERVER_ERROR).body(ERROR_MESSAGE + e.getMessage());
+        }
+    }
 }
diff --git a/vid-app-common/src/main/java/org/onap/vid/utils/SystemPropertiesWrapper.java b/vid-app-common/src/main/java/org/onap/vid/utils/SystemPropertiesWrapper.java
new file mode 100644 (file)
index 0000000..d24be4d
--- /dev/null
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright 2019 Nokia
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.vid.utils;
+
+import org.apache.commons.lang.StringUtils;
+
+import org.onap.portalsdk.core.util.SystemProperties;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SystemPropertiesWrapper {
+    public String getProperty(String key) {
+        return SystemProperties.getProperty(key);
+    }
+    public String getOrDefault(String key, String defaultValue) {
+        return StringUtils.defaultIfEmpty(getProperty(key), defaultValue);
+    }
+}
index e9d2cfd..5dbe010 100644 (file)
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright 2019 Nokia
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
 package org.onap.vid.controller;
 
-import org.junit.Test;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.servlet.ModelAndView;
+import static org.mockito.BDDMockito.given;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
-import javax.servlet.http.HttpServletRequest;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import org.apache.log4j.BasicConfigurator;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.vid.category.CategoryParameterOptionRep;
+import org.onap.vid.category.CategoryParametersResponse;
+import org.onap.vid.model.CategoryParameter.Family;
+import org.onap.vid.services.CategoryParameterService;
+import org.onap.vid.utils.SystemPropertiesWrapper;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
+@RunWith(MockitoJUnitRunner.class)
 public class PropertyControllerTest {
 
-       private PropertyController createTestSubject() {
-               return new PropertyController();
-       }
-
-       @Test
-       public void testWelcome() throws Exception {
-               PropertyController testSubject;
-               HttpServletRequest request = null;
-               ModelAndView result;
-
-               // default test
-               testSubject = createTestSubject();
-               result = testSubject.welcome(request);
-       }
-
-
-       @Test
-       public void testGetProperty() throws Exception {
-               PropertyController testSubject;
-               String name = "";
-               String defaultvalue = "";
-               HttpServletRequest request = null;
-               ResponseEntity<String> result;
-
-               // default test
-               testSubject = createTestSubject();
-               result = testSubject.getProperty(name, defaultvalue, request);
-       }
+    private static final String GET_PROPERTY = "/get_property/{name}/{defaultvalue}";
+    private static final String CATEGORY_PARAMETER = "/category_parameter";
+
+    private static final String ERROR_MSG = "Internal error occurred: ";
+    private static final String FAMILY_NAME = "familyName";
+
+    private PropertyController propertyController;
+    private MockMvc mockMvc;
+    private ObjectMapper objectMapper;
+
+    @Mock
+    private CategoryParameterService service;
+    @Mock
+    private SystemPropertiesWrapper systemPropertiesWrapper;
+
+    @Before
+    public void setUp() {
+        propertyController = new PropertyController(service, systemPropertiesWrapper);
+        BasicConfigurator.configure();
+        mockMvc = MockMvcBuilders.standaloneSetup(propertyController).build();
+        objectMapper = new ObjectMapper();
+    }
+
+    @Test
+    public void shouldReturnInputJson_whenPropertyIsNotFound() throws Exception {
+        String inputJson = "{key1: val1}";
+        given(systemPropertiesWrapper.getOrDefault("name.1", inputJson)).willReturn(inputJson);
+
+        mockMvc.perform(get(GET_PROPERTY, "name_1", inputJson)
+            .contentType(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(inputJson));
+    }
+
+    @Test
+    public void shouldReturnGivenJson_whenPropertyIsFound() throws Exception {
+        String propertyJson = "{key1: val1}";
+        String inputJson = "{key2: val2}";
+        given(systemPropertiesWrapper.getOrDefault("name.1", inputJson)).willReturn(propertyJson);
+
+        mockMvc.perform(get(GET_PROPERTY, "name_1", inputJson)
+            .contentType(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(propertyJson));
+    }
+
+    @Test
+    public void shouldReturnInternalServerError_whenExceptionIsThrownFromSystemProperties() throws Exception {
+        String exceptionMessage = "Test exception message from system properties";
+        String inputJson = "{key1: val1}";
+        given(systemPropertiesWrapper.getOrDefault("name.1", inputJson)).willThrow(new RuntimeException(exceptionMessage));
+
+        mockMvc.perform(get(GET_PROPERTY, "name_1", inputJson)
+            .contentType(MediaType.APPLICATION_JSON))
+            .andExpect(status().isInternalServerError())
+            .andExpect(content().string(ERROR_MSG + exceptionMessage));
+    }
+
+    @Test
+    public void shouldReturnResponse_whenResponseIsFound() throws Exception {
+
+        CategoryParametersResponse categoryParametersResponse =
+            new CategoryParametersResponse(
+                ImmutableMap.of(
+                    "key1", ImmutableList.of(
+                        new CategoryParameterOptionRep("testId", "testName"))));
+
+        given(service.getCategoryParameters(Family.PARAMETER_STANDARDIZATION)).willReturn(categoryParametersResponse);
+
+        mockMvc.perform(get(CATEGORY_PARAMETER)
+            .param(FAMILY_NAME, "PARAMETER_STANDARDIZATION")
+            .contentType(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(objectMapper.writeValueAsString(categoryParametersResponse)));
+    }
+
+    @Test
+    public void shouldReturnInternalServerError_whenExceptionIsThrownFromService() throws Exception {
+        String exceptionMessage = "Test exception message from category parameter service";
+        given(service.getCategoryParameters(Family.PARAMETER_STANDARDIZATION)).willThrow(new RuntimeException(
+            exceptionMessage));
+
+        mockMvc.perform(get(CATEGORY_PARAMETER)
+            .param(FAMILY_NAME, "PARAMETER_STANDARDIZATION")
+            .contentType(MediaType.APPLICATION_JSON))
+            .andExpect(status().isInternalServerError())
+            .andExpect(content().string(ERROR_MSG + exceptionMessage));
+    }
 }
\ No newline at end of file