CmSubscription review comments
[cps.git] / cps-ncmp-service / src / test / groovy / org / onap / cps / ncmp / api / impl / events / cmsubscription / CmSubscriptionNcmpInEventConsumerSpec.groovy
1 /*
2  * ============LICENSE_START=======================================================
3  * Copyright (c) 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.api.impl.events.cmsubscription
22
23 import ch.qos.logback.classic.Level
24 import ch.qos.logback.classic.Logger
25 import ch.qos.logback.classic.spi.ILoggingEvent
26 import ch.qos.logback.core.read.ListAppender
27 import com.fasterxml.jackson.databind.ObjectMapper
28 import io.cloudevents.CloudEvent
29 import io.cloudevents.core.builder.CloudEventBuilder
30 import org.apache.kafka.clients.consumer.ConsumerRecord
31 import org.junit.jupiter.api.AfterEach
32 import org.junit.jupiter.api.BeforeEach
33 import org.onap.cps.ncmp.api.kafka.MessagingBaseSpec
34 import org.onap.cps.ncmp.events.cmsubscription_merge1_0_0.client_to_ncmp.CmSubscriptionNcmpInEvent
35 import org.onap.cps.ncmp.utils.TestUtils
36 import org.onap.cps.utils.JsonObjectMapper
37 import org.slf4j.LoggerFactory
38 import org.springframework.beans.factory.annotation.Autowired
39 import org.springframework.boot.test.context.SpringBootTest
40
41 @SpringBootTest(classes = [ObjectMapper, JsonObjectMapper])
42 class CmSubscriptionNcmpInEventConsumerSpec extends MessagingBaseSpec {
43
44     def objectUnderTest = new CmSubscriptionNcmpInEventConsumer()
45     def logger = Spy(ListAppender<ILoggingEvent>)
46
47     @Autowired
48     JsonObjectMapper jsonObjectMapper
49
50     @Autowired
51     ObjectMapper objectMapper
52
53     @BeforeEach
54     void setup() {
55         ((Logger) LoggerFactory.getLogger(CmSubscriptionNcmpInEventConsumer.class)).addAppender(logger);
56         logger.start();
57     }
58
59     @AfterEach
60     void teardown() {
61         ((Logger) LoggerFactory.getLogger(CmSubscriptionNcmpInEventConsumer.class)).detachAndStopAllAppenders();
62     }
63
64
65     def 'Consume valid CMSubscription create message'() {
66         given: 'a cmsubscription event'
67             def jsonData = TestUtils.getResourceFileContent('cmSubscription/cmSubscriptionNcmpInEvent.json')
68             def testEventSent = jsonObjectMapper.convertJsonString(jsonData, CmSubscriptionNcmpInEvent.class)
69             def testCloudEventSent = CloudEventBuilder.v1()
70                 .withData(objectMapper.writeValueAsBytes(testEventSent))
71                 .withId('subscriptionCreated')
72                 .withType('subscriptionCreated')
73                 .withSource(URI.create('some-resource'))
74                 .withExtension('correlationid', 'test-cmhandle1').build()
75             def consumerRecord = new ConsumerRecord<String, CloudEvent>('topic-name', 0, 0, 'event-key', testCloudEventSent)
76         and: 'notifications are enabled'
77             objectUnderTest.notificationFeatureEnabled = true
78         and: 'subscription model loader is enabled'
79             objectUnderTest.subscriptionModelLoaderEnabled = true
80         when: 'the valid event is consumed'
81             objectUnderTest.consumeSubscriptionEvent(consumerRecord)
82         then: 'an event is logged with level INFO'
83             def loggingEvent = getLoggingEvent()
84             assert loggingEvent.level == Level.INFO
85         and: 'the log indicates the task completed successfully'
86             assert loggingEvent.formattedMessage == 'Subscription with name cm-subscription-001 to be mapped to hazelcast object...'
87     }
88
89     def getLoggingEvent() {
90         return logger.list[0]
91     }
92
93 }