X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cps-ncmp-rest%2Fsrc%2Ftest%2Fgroovy%2Forg%2Fonap%2Fcps%2Fncmp%2Frest%2Fcontroller%2FNetworkCmProxyInventoryControllerSpec.groovy;h=1d03be107d8b3d07aaace1981d2140705633d01c;hb=e5c66c7fec638412e10d5abef14d2a7afc86cb23;hp=30b6beb37968d44db57eca0ea0e808d37786e6c7;hpb=b14f04b6bd92b4dd6e3ed511ef5334db02e0b1ea;p=cps.git diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy index 30b6beb37..1d03be107 100644 --- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy @@ -1,7 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2021-2022 Bell Canada - * Modifications Copyright (C) 2021-2022 Nordix Foundation + * Modifications Copyright (C) 2021-2023 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,9 +27,11 @@ import org.onap.cps.ncmp.api.NetworkCmProxyDataService import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse import org.onap.cps.ncmp.api.models.DmiPluginRegistration import org.onap.cps.ncmp.api.models.DmiPluginRegistrationResponse +import org.onap.cps.ncmp.rest.model.CmHandleQueryParameters import org.onap.cps.ncmp.rest.model.CmHandlerRegistrationErrorResponse import org.onap.cps.ncmp.rest.model.DmiPluginRegistrationErrorResponse import org.onap.cps.ncmp.rest.model.RestDmiPluginRegistration +import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters import org.onap.cps.utils.JsonObjectMapper import org.spockframework.spring.SpringBean import org.springframework.beans.factory.annotation.Autowired @@ -41,8 +43,7 @@ import org.springframework.http.MediaType import org.springframework.test.web.servlet.MockMvc import spock.lang.Specification -import static org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse.RegistrationError.CM_HANDLE_ALREADY_EXIST -import static org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse.RegistrationError.CM_HANDLE_DOES_NOT_EXIST +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post @WebMvcTest(NetworkCmProxyInventoryController) @@ -60,6 +61,9 @@ class NetworkCmProxyInventoryControllerSpec extends Specification { DmiPluginRegistration mockDmiPluginRegistration = Mock() + CmHandleQueryServiceParameters cmHandleQueryServiceParameters = Mock() + + @SpringBean JsonObjectMapper jsonObjectMapper = new JsonObjectMapper(new ObjectMapper()) @Value('${rest.api.ncmp-inventory-base-path}/v1') @@ -102,6 +106,71 @@ class NetworkCmProxyInventoryControllerSpec extends Specification { response.status == HttpStatus.BAD_REQUEST.value() } + def 'CmHandle search endpoint test #scenario.'() { + given: 'a query object' + def cmHandleQueryParameters = jsonObjectMapper.asJsonString(new CmHandleQueryParameters()) + and: 'the mapper service returns a converted object' + ncmpRestInputMapper.toCmHandleQueryServiceParameters(_) >> cmHandleQueryServiceParameters + and: 'the service returns the desired results' + mockNetworkCmProxyDataService.executeCmHandleIdSearchForInventory(cmHandleQueryServiceParameters) >> serviceMockResponse + when: 'post request is performed & search is called with the given request parameters' + def response = mvc.perform( + post("$ncmpBasePathV1/ch/searches") + .contentType(MediaType.APPLICATION_JSON) + .content(cmHandleQueryParameters) + ).andReturn().response + then: 'response status is OK' + assert response.status == HttpStatus.OK.value() + and: 'the response data matches the service response.' + jsonObjectMapper.convertJsonString(response.getContentAsString(), List) == serviceMockResponse + where: 'the service respond with' + scenario | serviceMockResponse + 'empty response' | [] + 'populates response' | ['cmHandle1', 'cmHandle2'] + } + + def 'CmHandle search endpoint test #scenario with blank cmHandleQueryParameters.'() { + given: 'a query object' + def cmHandleQueryParameters = "{}" + and: 'the mapper service returns a converted object' + ncmpRestInputMapper.toCmHandleQueryServiceParameters(_) >> cmHandleQueryServiceParameters + and: 'the service returns the desired results' + mockNetworkCmProxyDataService.executeCmHandleIdSearchForInventory(cmHandleQueryServiceParameters) >> serviceMockResponse + when: 'post request is performed & search is called with the given request parameters' + def response = mvc.perform( + post("$ncmpBasePathV1/ch/searches") + .contentType(MediaType.APPLICATION_JSON) + .content(cmHandleQueryParameters) + ).andReturn().response + then: 'response status is OK' + assert response.status == HttpStatus.OK.value() + and: 'the response data matches the service response.' + jsonObjectMapper.convertJsonString(response.getContentAsString(), List) == serviceMockResponse + where: 'the service respond with' + scenario | serviceMockResponse + 'empty response' | [] + 'populates response' | ['cmHandle1', 'cmHandle2'] + } + + def 'CmHandle search endpoint Error Handling.'() { + given: 'the mapper service returns a converted object' + ncmpRestInputMapper.toCmHandleQueryServiceParameters(_) >> cmHandleQueryServiceParameters + and: 'the service returns the desired results' + mockNetworkCmProxyDataService.executeCmHandleIdSearchForInventory(cmHandleQueryServiceParameters) >> [] + when: 'post request is performed & search is called with the given request parameters' + def response = mvc.perform( + post("$ncmpBasePathV1/ch/searches") + .contentType(MediaType.APPLICATION_JSON) + .content(cmHandleQueryParameters) + ).andReturn().response + then: 'response status is BAD_REQUEST' + assert response.status == HttpStatus.BAD_REQUEST.value() + where: 'the cmHandleQueryParameters are' + scenario | cmHandleQueryParameters + 'empty string' | "" + 'non-json string' | "this is a test" + } + def 'DMI Registration: All cm-handles operations processed successfully.'() { given: 'a dmi plugin registration' def dmiRegistrationRequest = '{}' @@ -150,25 +219,42 @@ class NetworkCmProxyInventoryControllerSpec extends Specification { responseBody.getFailedUpdatedCmHandles() == expectedFailedUpdateCmHandle responseBody.getFailedRemovedCmHandles() == expectedFailedRemovedCmHandle where: - scenario | createCmHandleResponse | updateCmHandleResponse | removeCmHandleResponse || expectedFailedCreatedCmHandle | expectedFailedUpdateCmHandle | expectedFailedRemovedCmHandle - 'only create failed' | failedResponse('cm-handle-1') | successResponse('cm-handle-2') | successResponse('cm-handle-3') || [failedRestResponse('cm-handle-1')] | [] | [] - 'only update failed' | successResponse('cm-handle-1') | failedResponse('cm-handle-2') | successResponse('cm-handle-3') || [] | [failedRestResponse('cm-handle-2')] | [] - 'only delete failed' | successResponse('cm-handle-1') | successResponse('cm-handle-2') | failedResponse('cm-handle-3') || [] | [] | [failedRestResponse('cm-handle-3')] - 'all three failed' | failedResponse('cm-handle-1') | failedResponse('cm-handle-2') | failedResponse('cm-handle-3') || [failedRestResponse('cm-handle-1')] | [failedRestResponse('cm-handle-2')] | [failedRestResponse('cm-handle-3')] - 'create update failed' | failedResponse('cm-handle-1') | failedResponse('cm-handle-2') | successResponse('cm-handle-3') || [failedRestResponse('cm-handle-1')] | [failedRestResponse('cm-handle-2')] | [] - 'create delete failed' | failedResponse('cm-handle-1') | successResponse('cm-handle-2') | failedResponse('cm-handle-3') || [failedRestResponse('cm-handle-1')] | [] | [failedRestResponse('cm-handle-3')] - 'update delete failed' | successResponse('cm-handle-1') | failedResponse('cm-handle-2') | failedResponse('cm-handle-3') || [] | [failedRestResponse('cm-handle-2')] | [failedRestResponse('cm-handle-3')] + scenario | createCmHandleResponse | updateCmHandleResponse | removeCmHandleResponse || expectedFailedCreatedCmHandle | expectedFailedUpdateCmHandle | expectedFailedRemovedCmHandle + 'only create failed' | expectedFailedResponse('cm-handle-1') | expectedSuccessResponse('cm-handle-2') | expectedSuccessResponse('cm-handle-3') || [expectedUnknownErrorResponse('cm-handle-1')] | [] | [] + 'only update failed' | expectedSuccessResponse('cm-handle-1') | expectedFailedResponse('cm-handle-2') | expectedSuccessResponse('cm-handle-3') || [] | [expectedUnknownErrorResponse('cm-handle-2')] | [] + 'only delete failed' | expectedSuccessResponse('cm-handle-1') | expectedSuccessResponse('cm-handle-2') | expectedFailedResponse('cm-handle-3') || [] | [] | [expectedUnknownErrorResponse('cm-handle-3')] + 'all three failed' | expectedFailedResponse('cm-handle-1') | expectedFailedResponse('cm-handle-2') | expectedFailedResponse('cm-handle-3') || [expectedUnknownErrorResponse('cm-handle-1')] | [expectedUnknownErrorResponse('cm-handle-2')] | [expectedUnknownErrorResponse('cm-handle-3')] + 'create update failed' | expectedFailedResponse('cm-handle-1') | expectedFailedResponse('cm-handle-2') | expectedSuccessResponse('cm-handle-3') || [expectedUnknownErrorResponse('cm-handle-1')] | [expectedUnknownErrorResponse('cm-handle-2')] | [] + 'create delete failed' | expectedFailedResponse('cm-handle-1') | expectedSuccessResponse('cm-handle-2') | expectedFailedResponse('cm-handle-3') || [expectedUnknownErrorResponse('cm-handle-1')] | [] | [expectedUnknownErrorResponse('cm-handle-3')] + 'update delete failed' | expectedSuccessResponse('cm-handle-1') | expectedFailedResponse('cm-handle-2') | expectedFailedResponse('cm-handle-3') || [] | [expectedUnknownErrorResponse('cm-handle-2')] | [expectedUnknownErrorResponse('cm-handle-3')] + } + + def 'Get all cm handle IDs by DMI plugin identifier.'() { + given: 'an endpoint for returning cm handle IDs for a registered dmi plugin' + def getUrl = "$ncmpBasePathV1/ch/cmHandles?dmi-plugin-identifier=some-dmi-plugin-identifier" + and: 'a collection of cm handle IDs are returned' + 1 * mockNetworkCmProxyDataService.getAllCmHandleIdsByDmiPluginIdentifier('some-dmi-plugin-identifier') + >> ['cm-handle-id-1','cm-handle-id-2'] + when: 'the endpoint is invoked' + def response = mvc.perform( + get(getUrl) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON_VALUE) + ).andReturn().response + then: 'the response matches the result returned by the service layer' + assert response.contentAsString.contains('cm-handle-id-1') + assert response.contentAsString.contains('cm-handle-id-2') } - def failedRestResponse(cmHandle) { - return new CmHandlerRegistrationErrorResponse('cmHandle': cmHandle, 'errorCode': '00', 'errorText': 'Failed') + def expectedUnknownErrorResponse(cmHandle) { + return new CmHandlerRegistrationErrorResponse('cmHandle': cmHandle, 'errorCode': '108', 'errorText': 'Failed') } - def failedResponse(cmHandle) { - return CmHandleRegistrationResponse.createFailureResponse(cmHandle, new RuntimeException("Failed")) + def expectedFailedResponse(cmHandle) { + return CmHandleRegistrationResponse.createFailureResponse(cmHandle, new RuntimeException('Failed')) } - def successResponse(cmHandle) { + def expectedSuccessResponse(cmHandle) { return CmHandleRegistrationResponse.createSuccessResponse(cmHandle) }