summaryrefslogtreecommitdiffstats
path: root/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAdminServiceImplSpec.groovy
blob: e7d4e4ddb17c350ef8c2f4de3c2ee912484c169c (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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 *  ============LICENSE_START=======================================================
 *  Copyright (C) 2020-2022 Nordix Foundation
 *  Modifications Copyright (C) 2020-2022 Bell Canada.
 *  Modifications Copyright (C) 2021 Pantheon.tech
 *  Modifications Copyright (C) 2022 TechMahindra Ltd.
 *  ================================================================================
 *  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.api.impl

import org.onap.cps.api.CpsDataService
import org.onap.cps.spi.CpsAdminPersistenceService
import org.onap.cps.spi.model.Anchor
import org.onap.cps.spi.model.Dataspace
import org.onap.cps.spi.utils.CpsValidator
import spock.lang.Specification
import java.time.OffsetDateTime

class CpsAdminServiceImplSpec extends Specification {
    def mockCpsAdminPersistenceService = Mock(CpsAdminPersistenceService)
    def mockCpsDataService = Mock(CpsDataService)
    def mockCpsValidator = Mock(CpsValidator)
    def objectUnderTest = new CpsAdminServiceImpl(mockCpsAdminPersistenceService, mockCpsDataService,mockCpsValidator)

    def 'Create dataspace method invokes persistence service.'() {
        when: 'create dataspace method is invoked'
            objectUnderTest.createDataspace('someDataspace')
        then: 'the persistence service method is invoked with same parameters'
            1 * mockCpsAdminPersistenceService.createDataspace('someDataspace')
        and: 'the CpsValidator is called on the dataspaceName'
            1 * mockCpsValidator.validateNameCharacters('someDataspace')
    }

    def 'Create anchor method invokes persistence service.'() {
        when: 'create anchor method is invoked'
            objectUnderTest.createAnchor('someDataspace', 'someSchemaSet', 'someAnchorName')
        then: 'the persistence service method is invoked with same parameters'
            1 * mockCpsAdminPersistenceService.createAnchor('someDataspace', 'someSchemaSet', 'someAnchorName')
        and: 'the CpsValidator is called on the dataspaceName, schemaSetName and anchorName'
            1 * mockCpsValidator.validateNameCharacters('someDataspace', 'someSchemaSet', 'someAnchorName')
    }

    def 'Retrieve all anchors for dataspace.'() {
        given: 'that an anchor is associated with the dataspace'
            def anchors = [new Anchor()]
            mockCpsAdminPersistenceService.getAnchors('someDataspace') >> anchors
        when: 'get Anchors is called for a dataspace name'
            def result = objectUnderTest.getAnchors('someDataspace')
        then: 'the collection provided by persistence service is returned as result'
            result == anchors
        and: 'the CpsValidator is called on the dataspaceName'
            1 * mockCpsValidator.validateNameCharacters('someDataspace')
    }

    def 'Retrieve all anchors for schema-set.'() {
        given: 'that anchor is associated with the dataspace and schemaset'
            def anchors = [new Anchor()]
            mockCpsAdminPersistenceService.getAnchors('someDataspace', 'someSchemaSet') >> anchors
        when: 'get anchors is called for a dataspace name and schema set name'
            def result = objectUnderTest.getAnchors('someDataspace', 'someSchemaSet')
        then: 'the collection provided by persistence service is returned as result'
            result == anchors
        and: 'the CpsValidator is called on the dataspaceName, schemaSetName'
            1 * mockCpsValidator.validateNameCharacters('someDataspace', 'someSchemaSet')
    }

    def 'Retrieve anchor for dataspace and provided anchor name.'() {
        given: 'that anchor name is associated with the dataspace'
            Anchor anchor = new Anchor()
            mockCpsAdminPersistenceService.getAnchor('someDataspace','someAnchor') >>  anchor
        when: 'get anchor is called for a dataspace name and anchor name'
            def result = objectUnderTest.getAnchor('someDataspace','someAnchor')
        then: 'the anchor provided by persistence service is returned as result'
            result == anchor
        and: 'the CpsValidator is called on the dataspaceName, anchorName'
            1 * mockCpsValidator.validateNameCharacters('someDataspace', 'someAnchor')
    }

    def 'Retrieve dataspace.'() {
        given: 'a dataspace is already created'
            def dataspace = new Dataspace(name: "someDataspace")
            mockCpsAdminPersistenceService.getDataspace('someDataspace') >> dataspace
        expect: 'the dataspace provided by persistence service is returned as result'
          assert objectUnderTest.getDataspace('someDataspace') == dataspace
    }

    def 'Retrieve all dataspaces.'() {
        given: 'that all given dataspaces are already created'
        def dataspaces = [new Dataspace(name: "test-dataspace1"), new Dataspace(name: "test-dataspace2")]
            mockCpsAdminPersistenceService.getAllDataspaces() >> dataspaces
        expect: 'the dataspace provided by persistence service is returned as result'
           assert objectUnderTest.getAllDataspaces() == dataspaces
    }

    def 'Delete anchor.'() {
        when: 'delete anchor is invoked'
            objectUnderTest.deleteAnchor('someDataspace','someAnchor')
        then: 'delete data nodes is invoked on the data service with expected parameters'
            1 * mockCpsDataService.deleteDataNodes('someDataspace','someAnchor', _ as OffsetDateTime )
        and: 'the persistence service method is invoked with same parameters to delete anchor'
             1 * mockCpsAdminPersistenceService.deleteAnchor('someDataspace','someAnchor')
        and: 'the CpsValidator is called on the dataspaceName, anchorName'
            1 * mockCpsValidator.validateNameCharacters('someDataspace', 'someAnchor')
    }

    def 'Query all anchor identifiers for a dataspace and module names.'() {
        given: 'the persistence service is invoked with the expected parameters and returns a list of anchors'
            mockCpsAdminPersistenceService.queryAnchors('some-dataspace-name', ['some-module-name']) >> [new Anchor(name:'some-anchor-identifier')]
        when: 'query anchor names is called using a dataspace name and module name'
            def result = objectUnderTest.queryAnchorNames('some-dataspace-name', ['some-module-name'])
        then: 'get anchor identifiers returns the same anchor identifier returned by the persistence layer'
            result == ['some-anchor-identifier']
        and: 'the CpsValidator is called on the dataspaceName'
            1 * mockCpsValidator.validateNameCharacters('some-dataspace-name')
    }

    def 'Delete dataspace.'() {
        when: 'delete dataspace is invoked'
            objectUnderTest.deleteDataspace('someDataspace')
        then: 'associated persistence service method is invoked with correct parameter'
            1 * mockCpsAdminPersistenceService.deleteDataspace('someDataspace')
        and: 'the CpsValidator is called on the dataspaceName'
            1 * mockCpsValidator.validateNameCharacters('someDataspace')
    }
}