Improve code coverage 49/131549/2
authorleventecsanyi <levente.csanyi@est.tech>
Wed, 19 Oct 2022 09:52:44 +0000 (11:52 +0200)
committerleventecsanyi <levente.csanyi@est.tech>
Wed, 19 Oct 2022 14:04:37 +0000 (16:04 +0200)
- Fixed and refactored unit test to get over the 97% coverage baseline.
- Removed unused exception.

Issue-ID: CPS-475
Change-Id: I6dbcba58b880a584f6d9346e2aca6c763e5d2081
Signed-off-by: leventecsanyi <levente.csanyi@est.tech>
cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreResourceRequestHandlerFactory.java
cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/exceptions/CpsTaskExecutionException.java [deleted file]
cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/CmHandleStateMapper.java
cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/mapper/CmHandleStateMapperSpec.groovy [moved from cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/mapper/CmHandleStateMapperTest.groovy with 95% similarity]
cps-service/src/main/java/org/onap/cps/utils/CmHandleQueryRestParametersValidator.java
cps-service/src/test/groovy/org/onap/cps/utils/CmHandleQueryRestParametersValidatorSpec.groovy
cps-service/src/test/groovy/org/onap/cps/utils/JsonObjectMapperSpec.groovy

index 35bd578..7db7542 100644 (file)
@@ -55,10 +55,9 @@ public class NcmpDatastoreResourceRequestHandlerFactory {
                 return new NcmpDatastorePassthroughRunningResourceRequestHandler(networkCmProxyDataService,
                         cpsNcmpTaskExecutor, timeOutInMilliSeconds, notificationFeatureEnabled);
             case PASSTHROUGH_OPERATIONAL:
+            default:
                 return new NcmpDatastorePassthroughOperationalResourceRequestHandler(networkCmProxyDataService,
                         cpsNcmpTaskExecutor, timeOutInMilliSeconds, notificationFeatureEnabled);
-            default:
-                return null;
         }
     }
 }
diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/exceptions/CpsTaskExecutionException.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/exceptions/CpsTaskExecutionException.java
deleted file mode 100644 (file)
index 3e8929d..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *  ============LICENSE_START=======================================================
- *  Copyright (C) 2022 Nordix Foundation
- *  ================================================================================
- *  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.
- *
- *  SPDX-License-Identifier: Apache-2.0
- *  ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.ncmp.rest.exceptions;
-
-import lombok.Getter;
-
-public class CpsTaskExecutionException extends RuntimeException {
-
-    private static final long serialVersionUID = 1481520410918497454L;
-
-    @Getter
-    final String details;
-
-    /**
-     * Constructor.
-     *
-     * @param message the error message
-     * @param details the error details
-     * @param cause   the cause of the exception
-     */
-    public CpsTaskExecutionException(final String message, final String details, final Throwable cause) {
-        super(message, cause);
-        this.details = details;
-    }
-
-}
\ No newline at end of file
index 097dd0a..64a9934 100644 (file)
@@ -62,9 +62,7 @@ public interface CmHandleStateMapper {
             dataStores.setOperational(operationalSyncState);
         }
 
-
         return dataStores;
-
     }
 
     /**
@@ -32,7 +32,7 @@ import java.time.OffsetDateTime
 import java.time.ZoneOffset
 import java.time.format.DateTimeFormatter
 
-class CmHandleStateMapperTest extends Specification {
+class CmHandleStateMapperSpec extends Specification {
 
     def formattedDateAndTime = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
         .format(OffsetDateTime.of(2022, 12, 31, 20, 30, 40, 1, ZoneOffset.UTC))
@@ -59,6 +59,11 @@ class CmHandleStateMapperTest extends Specification {
             assert result.dataSyncState.operational.getSyncState() != null
     }
 
+    def 'Handling null state.'() {
+        expect: 'converting null returns null'
+            objectUnderTest.toDataStores(null) == null
+    }
+
     def 'Internal to External Lock Reason Mapping of #scenario'() {
         given: 'a LOCKED composite state with locked reason of #scenario'
             def compositeState = new CompositeStateBuilder()
index 7fe47be..4d0eb7d 100644 (file)
@@ -42,16 +42,16 @@ public class CmHandleQueryRestParametersValidator {
         cmHandleQueryServiceParameters.getCmHandleQueryParameters().forEach(
                 conditionApiProperty -> {
                     if (Strings.isNullOrEmpty(conditionApiProperty.getConditionName())) {
-                        throwDataValidationException("Missing 'conditionName' - please supply a valid name.");
+                        throw createDataValidationException("Missing 'conditionName' - please supply a valid name.");
                     }
                     if (Arrays.stream(ValidQueryProperties.values()).noneMatch(validQueryProperty ->
                         validQueryProperty.getQueryProperty().equals(conditionApiProperty.getConditionName()))) {
-                        throwDataValidationException(
+                        throw createDataValidationException(
                                 String.format("Wrong 'conditionName': %s - please supply a valid name.",
                                 conditionApiProperty.getConditionName()));
                     }
                     if (conditionApiProperty.getConditionParameters().isEmpty()) {
-                        throwDataValidationException(
+                        throw createDataValidationException(
                                 "Empty 'conditionsParameters' - please supply a valid condition parameter.");
                     }
                     conditionApiProperty.getConditionParameters().forEach(
@@ -63,16 +63,16 @@ public class CmHandleQueryRestParametersValidator {
 
     private static void validateConditionParameter(final Map<String, String> conditionParameter) {
         if (conditionParameter.isEmpty()) {
-            throwDataValidationException(
+            throw createDataValidationException(
                     "Empty 'conditionsParameter' - please supply a valid condition parameter.");
         }
         if (conditionParameter.size() > 1) {
-            throwDataValidationException("Too many name in one 'conditionsParameter' -"
+            throw createDataValidationException("Too many name in one 'conditionsParameter' -"
                     + " please supply one name in one condition parameter.");
         }
         conditionParameter.forEach((key, value) -> {
             if (Strings.isNullOrEmpty(key)) {
-                throwDataValidationException(
+                throw createDataValidationException(
                         "Missing 'conditionsParameterName' - please supply a valid name.");
             }
         });
@@ -86,7 +86,8 @@ public class CmHandleQueryRestParametersValidator {
         if (conditionProperty.containsKey("moduleName") && !conditionProperty.get("moduleName").isEmpty()) {
             return;
         }
-        throwDataValidationException("Wrong module condition property. - please supply a valid condition property.");
+        throw createDataValidationException("Wrong module condition property. - "
+                + "please supply a valid condition property.");
     }
 
     /**
@@ -98,15 +99,15 @@ public class CmHandleQueryRestParametersValidator {
             return true;
         }
         if (conditionProperty.size() > 1) {
-            throwDataValidationException("Only one condition property is allowed for the CPS path query.");
+            throw createDataValidationException("Only one condition property is allowed for the CPS path query.");
         }
         if (!conditionProperty.containsKey("cpsPath")) {
-            throwDataValidationException(
+            throw createDataValidationException(
                 "Wrong CPS path condition property. - expecting \"cpsPath\" as the condition property.");
         }
         final String cpsPath = conditionProperty.get("cpsPath");
         if (cpsPath.isBlank()) {
-            throwDataValidationException(
+            throw createDataValidationException(
                 "Wrong CPS path. - please supply a valid CPS path.");
         }
         if (cpsPath.contains("/additional-properties")) {
@@ -117,8 +118,8 @@ public class CmHandleQueryRestParametersValidator {
         return true;
     }
 
-    private static void throwDataValidationException(final String details) {
-        throw new DataValidationException("Invalid Query Parameter.", details);
+    private static DataValidationException createDataValidationException(final String details) {
+        return new DataValidationException("Invalid Query Parameter.", details);
     }
 
 }
index d5dcb7f..c40ffa9 100644 (file)
@@ -103,6 +103,11 @@ class CmHandleQueryRestParametersValidatorSpec extends Specification {
             'cpsPath not supplied'                | ['cpsPath':'']                                  || 'Wrong CPS path. - please supply a valid CPS path.'
     }
 
+    def 'No conditions.'() {
+        expect: 'no conditions always returns true'
+            CmHandleQueryRestParametersValidator.validateCpsPathConditionProperties([:]) == true
+    }
+
     def 'Validate CmHandle where #scenario.'() {
         when: 'the validator is called on a cps path condition property'
             def result = CmHandleQueryRestParametersValidator.validateCpsPathConditionProperties(['cpsPath':cpsPath])
index 4610144..e205a19 100644 (file)
@@ -20,7 +20,7 @@
 
 package org.onap.cps.utils
 
-
+import com.fasterxml.jackson.core.JsonProcessingException
 import com.fasterxml.jackson.databind.ObjectMapper
 import com.fasterxml.jackson.databind.SerializationFeature
 import groovy.json.JsonSlurper
@@ -44,6 +44,19 @@ class JsonObjectMapperSpec extends Specification {
             assert contentMap.'test:bookstore'.'bookstore-name' == 'Chapters'
     }
 
+    def 'Map a structured object to json String error.'() {
+        given: 'some object'
+            def object = new Object()
+        and: 'the Object mapper throws an exception'
+            spiedObjectMapper.writeValueAsString(object) >> { throw new JsonProcessingException('Sample problem'){} }
+        when: 'attempting to convert the object to a string'
+            jsonObjectMapper.asJsonString(object);
+        then: 'a Data Validation Exception is thrown'
+            def thrown = thrown(DataValidationException)
+        and: 'the details containing the original error message'
+            assert thrown.details == 'Sample problem'
+    }
+
     def 'Map a structurally compatible object to class object of specific class type T.'() {
         given: 'a map object model'
             def contentMap = new JsonSlurper().parseText(TestUtils.getResourceFileContent('bookstore.json'))
@@ -61,7 +74,7 @@ class JsonObjectMapperSpec extends Specification {
         given: 'Unstructured json string'
             def content = '{ "nest": { "birds": "bird"] } }'
         when: 'mapping json string to given class type'
-            def contentMap = jsonObjectMapper.convertJsonString(content, Map);
+            jsonObjectMapper.convertJsonString(content, Map);
         then: 'an exception is thrown'
             thrown(DataValidationException)
     }