Merge "Fix: Update OpenSSF Scorecard to RelEng reusable"
[cps.git] / cps-ncmp-service / src / test / groovy / org / onap / cps / ncmp / init / InventoryModelLoaderSpec.groovy
1 /*
2  *  ============LICENSE_START=======================================================
3  *  Copyright (C) 2023-2024 Nordix Foundation
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  *  SPDX-License-Identifier: Apache-2.0
18  *  ============LICENSE_END=========================================================
19  */
20
21 package org.onap.cps.ncmp.init
22
23 import ch.qos.logback.classic.Level
24 import ch.qos.logback.classic.Logger
25 import ch.qos.logback.core.read.ListAppender
26 import org.onap.cps.api.CpsAnchorService
27 import org.onap.cps.api.CpsDataService
28 import org.onap.cps.api.CpsDataspaceService
29 import org.onap.cps.api.CpsModuleService
30 import org.onap.cps.api.model.Dataspace
31 import org.slf4j.LoggerFactory
32 import org.springframework.boot.context.event.ApplicationStartedEvent
33 import org.springframework.context.ApplicationEventPublisher
34 import org.springframework.context.annotation.AnnotationConfigApplicationContext
35 import spock.lang.Specification
36
37 import static org.onap.cps.ncmp.impl.inventory.NcmpPersistence.NCMP_DATASPACE_NAME
38 import static org.onap.cps.ncmp.impl.inventory.NcmpPersistence.NCMP_DMI_REGISTRY_ANCHOR
39
40 class InventoryModelLoaderSpec extends Specification {
41
42     def mockCpsAdminService = Mock(CpsDataspaceService)
43     def mockCpsModuleService = Mock(CpsModuleService)
44     def mockCpsDataService = Mock(CpsDataService)
45     def mockCpsAnchorService = Mock(CpsAnchorService)
46     def mockApplicationEventPublisher = Mock(ApplicationEventPublisher)
47     def objectUnderTest = new InventoryModelLoader(mockCpsAdminService, mockCpsModuleService, mockCpsAnchorService, mockCpsDataService, mockApplicationEventPublisher)
48
49     def applicationContext = new AnnotationConfigApplicationContext()
50
51     def expectedYangResourceToContentMap
52     def logger = (Logger) LoggerFactory.getLogger(objectUnderTest.class)
53     def loggingListAppender
54
55     void setup() {
56         expectedYangResourceToContentMap = objectUnderTest.mapYangResourcesToContent('dmi-registry@2024-02-23.yang')
57         logger.setLevel(Level.DEBUG)
58         loggingListAppender = new ListAppender()
59         logger.addAppender(loggingListAppender)
60         loggingListAppender.start()
61         applicationContext.refresh()
62     }
63
64     void cleanup() {
65         ((Logger) LoggerFactory.getLogger(CmDataSubscriptionModelLoader.class)).detachAndStopAllAppenders()
66         applicationContext.close()
67     }
68
69     def 'Onboard subscription model via application ready event.'() {
70         given: 'dataspace is ready for use'
71             mockCpsAdminService.getDataspace(NCMP_DATASPACE_NAME) >> new Dataspace('')
72         when: 'the application is started'
73             objectUnderTest.onApplicationEvent(Mock(ApplicationStartedEvent))
74         then: 'the module service is used to create the new schema set from the correct resource'
75             1 * mockCpsModuleService.createSchemaSet(NCMP_DATASPACE_NAME, 'dmi-registry-2024-02-23', expectedYangResourceToContentMap)
76         and: 'the admin service is used to update the anchor'
77             1 * mockCpsAnchorService.updateAnchorSchemaSet(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, 'dmi-registry-2024-02-23')
78         and: 'No schema sets are being removed by the module service (yet)'
79             0 * mockCpsModuleService.deleteSchemaSet(NCMP_DATASPACE_NAME, _, _)
80         and: 'application event publisher is called once'
81             1 * mockApplicationEventPublisher.publishEvent(_)
82     }
83
84 }