summaryrefslogtreecommitdiffstats
path: root/src/test/groovy/org/onap/cps/ncmp/dmi/service/client/SdncRestconfClientSpec.groovy
blob: 8a3170b447e4648e7baf9f8a18592b944cf793f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
 *  ============LICENSE_START=======================================================
 *  Copyright (C) 2021 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.dmi.service.client

import org.onap.cps.ncmp.dmi.config.DmiConfiguration
import org.springframework.http.HttpEntity
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpMethod
import org.springframework.http.ResponseEntity
import org.springframework.web.client.RestTemplate
import spock.lang.Specification

import static org.springframework.http.HttpMethod.GET
import static org.springframework.http.HttpMethod.POST
import static org.springframework.http.HttpMethod.DELETE
import static org.springframework.http.HttpMethod.PUT

class SdncRestconfClientSpec extends Specification {

    def mockSdncProperties = Mock(DmiConfiguration.SdncProperties)
    def mockRestTemplate = Mock(RestTemplate)
    def objectUnderTest = new SdncRestconfClient(mockSdncProperties, mockRestTemplate)

    def 'SDNC GET operation.'() {
        given: 'a get url'
            def getResourceUrl = '/getResourceUrl'
        and: 'sdnc properties'
            setupTestConfigurationData()
        and: 'the rest template returns a valid response entity'
            def mockResponseEntity = Mock(ResponseEntity)
            mockRestTemplate.exchange({ it.toString() == 'http://some-uri/getResourceUrl' },
                    HttpMethod.GET, _ as HttpEntity, String.class) >> mockResponseEntity
        when: 'GET operation is invoked'
            def result = objectUnderTest.getOperation(getResourceUrl)
        then: 'the output of the method is equal to the output from the test template'
            result == mockResponseEntity
    }

    def 'SDNC #scenario operation called.'() {
        given: 'json data'
            def jsonData = 'some-json'
        and: 'a url for get module resources'
            def getModuleResourceUrl = '/getModuleResourceUrl'
        and: 'configuration data'
            setupTestConfigurationData()
        and: 'the rest template returns a valid response entity'
            def mockResponseEntity = Mock(ResponseEntity)
        when: 'get module resources is invoked'
            def result = objectUnderTest.httpOperationWithJsonData(expectedHttpMethod, getModuleResourceUrl, jsonData, new HttpHeaders())
        then: 'the rest template is called with the correct uri and json in the body'
            1 * mockRestTemplate.exchange({ it.toString() == 'http://some-uri/getModuleResourceUrl' },
                    expectedHttpMethod, { it.body.contains(jsonData) }, String.class) >> mockResponseEntity
        and: 'the output of the method is the same as the output from the test template'
            result == mockResponseEntity
        where: 'the following values are used'
            scenario || expectedHttpMethod
            'POST'   || POST
            'PUT'    || PUT
            'GET'    || GET
            'DELETE' || DELETE
    }

    def 'SDNC GET operation with header.'() {
        given: 'a get url'
            def getResourceUrl = '/getResourceUrl'
        and: 'sdnc properties'
            setupTestConfigurationData()
        and: 'the rest template returns a valid response entity'
            def mockResponseEntity = Mock(ResponseEntity)
            mockRestTemplate.exchange({ it.toString() == 'http://some-uri/getResourceUrl' },
                    HttpMethod.GET, _ as HttpEntity, String.class) >> mockResponseEntity
        when: 'GET operation is invoked'
            def result = objectUnderTest.getOperation(getResourceUrl, new HttpHeaders())
        then: 'the output of the method is equal to the output from the test template'
            result == mockResponseEntity
    }

    def setupTestConfigurationData() {
        mockSdncProperties.baseUrl >> 'http://some-uri'
        mockSdncProperties.authUsername >> 'some-username'
        mockSdncProperties.authPassword >> 'some-password'
        mockSdncProperties.topologyId >> 'some-topology-id'
    }
}