ba1e33c272694c30b837eac6e9d7e586b527dce2
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * Copyright (C) 2021-2022 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.policy.clamp.models.acm.persistence.provider;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.mockito.ArgumentMatchers.any;
27 import static org.mockito.Mockito.mock;
28 import static org.mockito.Mockito.when;
29
30 import java.util.List;
31 import java.util.Optional;
32 import java.util.UUID;
33 import org.junit.jupiter.api.BeforeEach;
34 import org.junit.jupiter.api.Test;
35 import org.mockito.Mockito;
36 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
37 import org.onap.policy.clamp.models.acm.persistence.concepts.JpaAutomationComposition;
38 import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionRepository;
39 import org.onap.policy.common.utils.coder.Coder;
40 import org.onap.policy.common.utils.coder.StandardCoder;
41 import org.onap.policy.common.utils.resources.ResourceUtils;
42 import org.springframework.data.domain.Example;
43
44 class AutomationCompositionProviderTest {
45
46     private static final String OBJECT_IS_NULL = "automationComposition is marked non-null but is null";
47
48     private static final Coder CODER = new StandardCoder();
49     private static final String AUTOMATION_COMPOSITION_JSON =
50             "src/test/resources/providers/TestAutomationCompositions.json";
51
52     private AutomationCompositions inputAutomationCompositions;
53     private List<JpaAutomationComposition> inputAutomationCompositionsJpa;
54     private final String originalJson = ResourceUtils.getResourceAsString(AUTOMATION_COMPOSITION_JSON);
55
56     @BeforeEach
57     void beforeSetupDao() throws Exception {
58         inputAutomationCompositions = CODER.decode(originalJson, AutomationCompositions.class);
59         inputAutomationCompositionsJpa =
60                 ProviderUtils.getJpaAndValidateList(inputAutomationCompositions.getAutomationCompositionList(),
61                         JpaAutomationComposition::new, "automation compositions");
62     }
63
64     @Test
65     void testAutomationCompositionCreate() {
66         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
67         var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
68
69         when(automationCompositionRepository.save(any(JpaAutomationComposition.class)))
70                 .thenReturn(inputAutomationCompositionsJpa.get(0));
71         var inputAc = inputAutomationCompositions.getAutomationCompositionList().get(0);
72
73         var createdAutomationComposition = automationCompositionProvider.createAutomationComposition(inputAc);
74         inputAc.setInstanceId(createdAutomationComposition.getInstanceId());
75         assertEquals(inputAc, createdAutomationComposition);
76     }
77
78     @Test
79     void testAutomationCompositionUpdate() {
80         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
81         var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
82
83         assertThatThrownBy(() -> automationCompositionProvider.updateAutomationComposition(null))
84                 .hasMessageMatching(OBJECT_IS_NULL);
85
86         when(automationCompositionRepository.save(inputAutomationCompositionsJpa.get(0)))
87                 .thenReturn(inputAutomationCompositionsJpa.get(0));
88
89         var createdAutomationComposition = automationCompositionProvider
90                 .updateAutomationComposition(inputAutomationCompositions.getAutomationCompositionList().get(0));
91
92         assertEquals(inputAutomationCompositions.getAutomationCompositionList().get(0), createdAutomationComposition);
93     }
94
95     @Test
96     void testGetAutomationCompositions() throws Exception {
97         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
98         var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
99
100         var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0);
101         var acList = automationCompositionProvider.getAutomationCompositions(UUID.randomUUID(),
102                 automationComposition.getName(), automationComposition.getVersion());
103         assertThat(acList).isEmpty();
104
105         when(automationCompositionRepository.findAll(Mockito.<Example<JpaAutomationComposition>>any()))
106                 .thenReturn(inputAutomationCompositionsJpa);
107         acList = automationCompositionProvider.getAutomationCompositions(automationComposition.getCompositionId(), null,
108                 null);
109         assertThat(acList).hasSize(2);
110     }
111
112     @Test
113     void testGetAutomationComposition() {
114         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
115         var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
116
117         var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0);
118         assertThatThrownBy(
119                 () -> automationCompositionProvider.getAutomationComposition(automationComposition.getInstanceId()))
120                         .hasMessageMatching("AutomationComposition not found");
121
122         when(automationCompositionRepository.findById(automationComposition.getInstanceId().toString()))
123                 .thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0)));
124         var ac = automationCompositionProvider.getAutomationComposition(automationComposition.getInstanceId());
125         assertEquals(automationComposition, ac);
126     }
127
128     @Test
129     void testFindAutomationComposition() {
130         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
131         var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
132
133         var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0);
134         var acOpt = automationCompositionProvider.findAutomationComposition(automationComposition.getInstanceId());
135         assertThat(acOpt).isEmpty();
136
137         acOpt = automationCompositionProvider.findAutomationComposition(automationComposition.getKey().asIdentifier());
138         assertThat(acOpt).isEmpty();
139
140         when(automationCompositionRepository.findById(automationComposition.getInstanceId().toString()))
141                 .thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0)));
142         acOpt = automationCompositionProvider.findAutomationComposition(automationComposition.getInstanceId());
143         assertEquals(automationComposition, acOpt.get());
144
145         when(automationCompositionRepository.findOne(Mockito.<Example<JpaAutomationComposition>>any()))
146                 .thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0)));
147         acOpt = automationCompositionProvider.findAutomationComposition(automationComposition.getKey().asIdentifier());
148         assertEquals(automationComposition, acOpt.get());
149     }
150
151     @Test
152     void testGetAcInstancesByCompositionId() {
153         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
154         var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
155
156         var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0);
157         when(automationCompositionRepository.findByCompositionId(automationComposition.getCompositionId().toString()))
158                 .thenReturn(inputAutomationCompositionsJpa);
159         var acList =
160                 automationCompositionProvider.getAcInstancesByCompositionId(automationComposition.getCompositionId());
161         assertEquals(inputAutomationCompositions.getAutomationCompositionList(), acList);
162     }
163
164     @Test
165     void testDeleteAutomationComposition() {
166         var automationCompositionRepository = mock(AutomationCompositionRepository.class);
167         var automationCompositionProvider = new AutomationCompositionProvider(automationCompositionRepository);
168
169         assertThatThrownBy(() -> automationCompositionProvider.deleteAutomationComposition(UUID.randomUUID()))
170                 .hasMessageMatching(".*.failed, automation composition does not exist");
171
172         var automationComposition = inputAutomationCompositions.getAutomationCompositionList().get(0);
173         when(automationCompositionRepository.findById(automationComposition.getInstanceId().toString()))
174                 .thenReturn(Optional.of(inputAutomationCompositionsJpa.get(0)));
175
176         var deletedAc =
177                 automationCompositionProvider.deleteAutomationComposition(automationComposition.getInstanceId());
178         assertEquals(automationComposition, deletedAc);
179     }
180 }