From d5bda8848a661465f214b0bf11211e63b272cfd6 Mon Sep 17 00:00:00 2001 From: lukegleeson Date: Wed, 2 Mar 2022 14:32:47 +0000 Subject: Replacing ModelMapper with MapStruct - Removed Model Mapper from pom files - Replaced ModelMapper with MapStruct - Added Tests for MapStruct - Changed mapstruct annotations for individual variables to be null safe rather than all variables - Excluded generated code from code coverage - Set ModuleReferences input to required for SchemaSet so that ModuleReferences list set to empty list rather than null Issue-ID: CPS-127 Signed-off-by: lukegleeson Change-Id: I43f874aea79f58dda5526c6fdead27d8474d90af --- .../org/onap/cps/config/CpsConfigSpec.groovy | 34 ----------- .../rest/controller/AdminRestControllerSpec.groovy | 14 ++--- .../rest/controller/CpsRestInputMapperSpec.groovy | 69 ++++++++++++++++++++++ .../exceptions/CpsRestExceptionHandlerSpec.groovy | 8 ++- 4 files changed, 80 insertions(+), 45 deletions(-) delete mode 100644 cps-rest/src/test/groovy/org/onap/cps/config/CpsConfigSpec.groovy create mode 100644 cps-rest/src/test/groovy/org/onap/cps/rest/controller/CpsRestInputMapperSpec.groovy (limited to 'cps-rest/src/test/groovy') diff --git a/cps-rest/src/test/groovy/org/onap/cps/config/CpsConfigSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/config/CpsConfigSpec.groovy deleted file mode 100644 index fc96f0447..000000000 --- a/cps-rest/src/test/groovy/org/onap/cps/config/CpsConfigSpec.groovy +++ /dev/null @@ -1,34 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 2021 Nordix Foundation - * Modifications Copyright (C) 2021 Bell Canada. - * ================================================================================ - * 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.config - -import org.modelmapper.ModelMapper -import spock.lang.Specification - -class CpsConfigSpec extends Specification { - def objectUnderTest = new CpsConfig() - - def 'CPS configuration has a Model Mapper'() { - expect: 'the CPS configuration has a Model Mapper' - objectUnderTest.modelMapper() instanceof ModelMapper - } -} diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy index e8cfcfb6f..58a5ebf04 100755 --- a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy +++ b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2020-2021 Pantheon.tech * Modifications Copyright (C) 2020-2021 Bell Canada. - * Modifications Copyright (C) 2021 Nordix Foundation + * Modifications Copyright (C) 2021-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. @@ -22,17 +22,16 @@ package org.onap.cps.rest.controller +import org.mapstruct.factory.Mappers + import static org.onap.cps.spi.CascadeDeleteAllowed.CASCADE_DELETE_PROHIBITED import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post -import org.modelmapper.ModelMapper import org.onap.cps.api.CpsAdminService -import org.onap.cps.api.CpsDataService import org.onap.cps.api.CpsModuleService -import org.onap.cps.api.CpsQueryService import org.onap.cps.spi.exceptions.AlreadyDefinedException import org.onap.cps.spi.exceptions.SchemaSetInUseException import org.onap.cps.spi.model.Anchor @@ -59,7 +58,7 @@ class AdminRestControllerSpec extends Specification { CpsAdminService mockCpsAdminService = Mock() @SpringBean - ModelMapper modelMapper = Spy() + CpsRestInputMapper cpsRestInputMapper = Mappers.getMapper(CpsRestInputMapper) @Autowired MockMvc mvc @@ -68,10 +67,9 @@ class AdminRestControllerSpec extends Specification { def basePath def dataspaceName = 'my_dataspace' - def anchor = new Anchor(name: 'my_anchor') - def anchorList = [anchor] def anchorName = 'my_anchor' def schemaSetName = 'my_schema_set' + def anchor = new Anchor(name: anchorName, dataspaceName: dataspaceName, schemaSetName: schemaSetName) def 'Create new dataspace.'() { given: 'an endpoint' @@ -274,7 +272,7 @@ class AdminRestControllerSpec extends Specification { def 'Get existing anchor.'() { given: 'service method returns a list of anchors' - mockCpsAdminService.getAnchors(dataspaceName) >> anchorList + mockCpsAdminService.getAnchors(dataspaceName) >> [anchor] and: 'an endpoint' def anchorEndpoint = "$basePath/v1/dataspaces/$dataspaceName/anchors" when: 'get all anchors API is invoked' diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/CpsRestInputMapperSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/CpsRestInputMapperSpec.groovy new file mode 100644 index 000000000..9ff1a9fe9 --- /dev/null +++ b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/CpsRestInputMapperSpec.groovy @@ -0,0 +1,69 @@ +/* + * ============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.rest.controller + +import org.mapstruct.factory.Mappers +import org.onap.cps.rest.model.AnchorDetails +import org.onap.cps.rest.model.SchemaSetDetails +import org.onap.cps.spi.model.Anchor +import org.onap.cps.rest.model.ModuleReferences +import org.onap.cps.spi.model.ModuleReference +import org.onap.cps.spi.model.SchemaSet +import spock.lang.Specification + +class CpsRestInputMapperSpec extends Specification { + + def objectUnderTest = Mappers.getMapper(CpsRestInputMapper.class) + + def 'Convert a SchemaSet to a SchemaSetDetails a ModuleReference'() { + given: 'a ModuleReference' + def moduleReference = new ModuleReference() + and: 'a SchemaSet containing the ModuleReference' + def schemaSet = new SchemaSet(name: 'some-schema-set', dataspaceName: 'some-dataspace', + moduleReferences: [moduleReference]) + when: 'to schemaSetDetails is called' + def result = objectUnderTest.toSchemaSetDetails(schemaSet) + then: 'the result returns a SchemaSetDetails' + result.class == SchemaSetDetails.class + and: 'the results ModuleReferences are of type ModuleReference' + result.moduleReferences[0].class == ModuleReferences.class + } + + def 'Convert a schemaSet to a SchemaSetDetails without an ModuleReference'() { + given: 'a SchemaSet' + def schemaSet = new SchemaSet() + when: 'to schemaSetDetails is called' + def result = objectUnderTest.toSchemaSetDetails(schemaSet) + then: 'the result returns a SchemaSetDetails' + result.class == SchemaSetDetails.class + and: 'the ModuleReferences of SchemaSetDetails is an empty collection' + result.moduleReferences.size() == 0 + } + + def 'Convert an Anchor to an AnchorDetails'() { + given: 'an Anchor' + def anchor = new Anchor() + when: 'to anchorDetails is called' + def result = objectUnderTest.toAnchorDetails(anchor) + then: 'the result returns an AnchorDetails' + result.class == AnchorDetails.class + } +} diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy index a2eaa525e..2aa4ddd1e 100644 --- a/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy +++ b/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy @@ -22,12 +22,14 @@ package org.onap.cps.rest.exceptions +import com.fasterxml.jackson.databind.ObjectMapper import groovy.json.JsonSlurper -import org.modelmapper.ModelMapper +import org.mapstruct.factory.Mappers import org.onap.cps.api.CpsAdminService import org.onap.cps.api.CpsDataService import org.onap.cps.api.CpsModuleService import org.onap.cps.api.CpsQueryService +import org.onap.cps.rest.controller.CpsRestInputMapper import org.onap.cps.spi.exceptions.AlreadyDefinedException import org.onap.cps.spi.exceptions.CpsException import org.onap.cps.spi.exceptions.CpsPathException @@ -71,10 +73,10 @@ class CpsRestExceptionHandlerSpec extends Specification { CpsQueryService mockCpsQueryService = Stub() @SpringBean - ModelMapper modelMapper = Stub() + JsonObjectMapper jsonObjectMapper = new JsonObjectMapper(new ObjectMapper()) @SpringBean - JsonObjectMapper jsonObjectMapper = Stub() + CpsRestInputMapper cpsRestInputMapper = Stub() @Autowired MockMvc mvc -- cgit 1.2.3-korg