a016d1202aa1750e7bdbec576ba6729228e705ed
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021 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.concepts;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.assertj.core.api.Assertions.assertThatCode;
25 import static org.assertj.core.api.Assertions.assertThatThrownBy;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertNotEquals;
28 import static org.junit.Assert.assertNotNull;
29 import static org.junit.Assert.assertNull;
30 import static org.junit.Assert.assertTrue;
31
32 import java.io.File;
33 import java.util.LinkedHashMap;
34 import org.junit.jupiter.api.Test;
35 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
36 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
37 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState;
38 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
39 import org.onap.policy.common.utils.coder.CoderException;
40 import org.onap.policy.common.utils.coder.StandardCoder;
41 import org.onap.policy.models.base.PfConceptKey;
42 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
43
44 /**
45  * Test the {@link JpaAutomationCompositionTest} class.
46  */
47 class JpaAutomationCompositionTest {
48
49     private static final String NULL_KEY_ERROR = "key is marked .*ull but is null";
50
51     @Test
52     void testJpaAutomationCompositionConstructor() {
53         assertThatThrownBy(() -> {
54             new JpaAutomationComposition((JpaAutomationComposition) null);
55         }).hasMessageMatching("copyConcept is marked .*ull but is null");
56
57         assertThatThrownBy(() -> {
58             new JpaAutomationComposition((PfConceptKey) null);
59         }).hasMessageMatching(NULL_KEY_ERROR);
60
61         assertThatThrownBy(() -> {
62             new JpaAutomationComposition(null, null, null, null);
63         }).hasMessageMatching(NULL_KEY_ERROR);
64
65         assertThatThrownBy(() -> {
66             new JpaAutomationComposition(null, null, null, new LinkedHashMap<>());
67         }).hasMessageMatching(NULL_KEY_ERROR);
68
69         assertThatThrownBy(() -> {
70             new JpaAutomationComposition(null, null, AutomationCompositionState.UNINITIALISED, null);
71         }).hasMessageMatching(NULL_KEY_ERROR);
72
73         assertThatThrownBy(() -> {
74             new JpaAutomationComposition(null, null, AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>());
75         }).hasMessageMatching(NULL_KEY_ERROR);
76
77         assertThatThrownBy(() -> {
78             new JpaAutomationComposition(null, new PfConceptKey(), null, null);
79         }).hasMessageMatching(NULL_KEY_ERROR);
80
81         assertThatThrownBy(() -> {
82             new JpaAutomationComposition(null, new PfConceptKey(), null, new LinkedHashMap<>());
83         }).hasMessageMatching(NULL_KEY_ERROR);
84
85         assertThatThrownBy(() -> {
86             new JpaAutomationComposition(null, new PfConceptKey(), AutomationCompositionState.UNINITIALISED, null);
87         }).hasMessageMatching(NULL_KEY_ERROR);
88
89         assertThatThrownBy(() -> {
90             new JpaAutomationComposition(null, new PfConceptKey(), AutomationCompositionState.UNINITIALISED,
91                 new LinkedHashMap<>());
92         }).hasMessageMatching(NULL_KEY_ERROR);
93
94         assertThatThrownBy(() -> {
95             new JpaAutomationComposition(new PfConceptKey(), null, null, null);
96         }).hasMessageMatching("definition is marked .*ull but is null");
97
98         assertThatThrownBy(() -> {
99             new JpaAutomationComposition(new PfConceptKey(), null, null, new LinkedHashMap<>());
100         }).hasMessageMatching("definition is marked .*ull but is null");
101
102         assertThatThrownBy(() -> {
103             new JpaAutomationComposition(new PfConceptKey(), null, AutomationCompositionState.UNINITIALISED, null);
104         }).hasMessageMatching("definition is marked .*ull but is null");
105
106         assertThatThrownBy(() -> {
107             new JpaAutomationComposition(new PfConceptKey(), null, AutomationCompositionState.UNINITIALISED,
108                 new LinkedHashMap<>());
109         }).hasMessageMatching("definition is marked .*ull but is null");
110
111         assertThatThrownBy(() -> {
112             new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(), null, null);
113         }).hasMessageMatching("state is marked .*ull but is null");
114
115         assertThatThrownBy(() -> {
116             new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(), null, new LinkedHashMap<>());
117         }).hasMessageMatching("state is marked .*ull but is null");
118
119         assertThatThrownBy(() -> {
120             new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(),
121                 AutomationCompositionState.UNINITIALISED, null);
122         }).hasMessageMatching("elements is marked .*ull but is null");
123
124         assertNotNull(new JpaAutomationComposition());
125         assertNotNull(new JpaAutomationComposition((new PfConceptKey())));
126         assertNotNull(new JpaAutomationComposition(new PfConceptKey(), new PfConceptKey(),
127             AutomationCompositionState.UNINITIALISED, new LinkedHashMap<>()));
128     }
129
130     @Test
131     void testJpaAutomationComposition() {
132         JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
133
134         AutomationComposition participant = createAutomationCompositionInstance();
135         assertEquals(participant, testJpaAutomationComposition.toAuthorative());
136
137         assertThatThrownBy(() -> {
138             testJpaAutomationComposition.fromAuthorative(null);
139         }).hasMessageMatching("automationComposition is marked .*ull but is null");
140
141         assertThatThrownBy(() -> new JpaAutomationComposition((JpaAutomationComposition) null))
142             .isInstanceOf(NullPointerException.class);
143
144         JpaAutomationComposition testJpaAutomationCompositionFa = new JpaAutomationComposition();
145         testJpaAutomationCompositionFa.setKey(null);
146         testJpaAutomationCompositionFa.fromAuthorative(participant);
147         assertEquals(testJpaAutomationComposition, testJpaAutomationCompositionFa);
148         testJpaAutomationCompositionFa.setKey(PfConceptKey.getNullKey());
149         testJpaAutomationCompositionFa.fromAuthorative(participant);
150         assertEquals(testJpaAutomationComposition, testJpaAutomationCompositionFa);
151         testJpaAutomationCompositionFa.setKey(new PfConceptKey("automation-composition", "0.0.1"));
152         testJpaAutomationCompositionFa.fromAuthorative(participant);
153         assertEquals(testJpaAutomationComposition, testJpaAutomationCompositionFa);
154
155         assertEquals("automation-composition", testJpaAutomationComposition.getKey().getName());
156         assertEquals("automation-composition",
157             new JpaAutomationComposition(createAutomationCompositionInstance()).getKey().getName());
158         assertEquals("automation-composition",
159             ((PfConceptKey) new JpaAutomationComposition(createAutomationCompositionInstance()).getKeys().get(0))
160                 .getName());
161
162         testJpaAutomationComposition.clean();
163         assertEquals("automation-composition", testJpaAutomationComposition.getKey().getName());
164
165         testJpaAutomationComposition.setDescription("   A Message   ");
166         testJpaAutomationComposition.clean();
167         assertEquals("A Message", testJpaAutomationComposition.getDescription());
168
169         JpaAutomationComposition testJpaAutomationComposition2 =
170             new JpaAutomationComposition(testJpaAutomationComposition);
171         assertEquals(testJpaAutomationComposition, testJpaAutomationComposition2);
172     }
173
174     @Test
175     void testJpaAutomationCompositionElementOrderedState() throws CoderException {
176         AutomationComposition testAutomationComposition = createAutomationCompositionInstance();
177         JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
178
179         testJpaAutomationComposition.setOrderedState(null);
180         assertEquals(testAutomationComposition, testJpaAutomationComposition.toAuthorative());
181         testJpaAutomationComposition.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
182
183         AutomationComposition noOrderedStateAc = new StandardCoder().decode(
184             new File("src/test/resources/json/AutomationCompositionNoOrderedState.json"), AutomationComposition.class);
185
186         JpaAutomationComposition noOrderedStateJpaAc = new JpaAutomationComposition(noOrderedStateAc);
187         assertNull(noOrderedStateJpaAc.getOrderedState());
188         noOrderedStateAc.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
189         noOrderedStateJpaAc = new JpaAutomationComposition(noOrderedStateAc);
190         assertEquals(testJpaAutomationComposition, noOrderedStateJpaAc);
191
192         AutomationCompositions automationCompositionsWithElements = new StandardCoder().decode(
193             new File("src/test/resources/providers/TestAutomationCompositions.json"), AutomationCompositions.class);
194
195         JpaAutomationComposition jpaAutomationCompositionWithElements =
196             new JpaAutomationComposition(automationCompositionsWithElements.getAutomationCompositionList().get(0));
197         assertEquals(4, jpaAutomationCompositionWithElements.getElements().size());
198         assertEquals(18, jpaAutomationCompositionWithElements.getKeys().size());
199         assertThatCode(() -> jpaAutomationCompositionWithElements.clean()).doesNotThrowAnyException();
200
201         assertEquals(automationCompositionsWithElements.getAutomationCompositionList().get(0),
202             jpaAutomationCompositionWithElements.toAuthorative());
203     }
204
205     @Test
206     void testJpaAutomationCompositionValidation() {
207         JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
208
209         assertThatThrownBy(() -> {
210             testJpaAutomationComposition.validate(null);
211         }).hasMessageMatching("fieldName is marked .*ull but is null");
212
213         assertTrue(testJpaAutomationComposition.validate("").isValid());
214     }
215
216     @Test
217     void testJpaAutomationCompositionCompareTo() {
218         JpaAutomationComposition testJpaAutomationComposition = createJpaAutomationCompositionInstance();
219
220         JpaAutomationComposition otherJpaAutomationComposition =
221             new JpaAutomationComposition(testJpaAutomationComposition);
222         assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
223         assertEquals(-1, testJpaAutomationComposition.compareTo(null));
224         assertEquals(0, testJpaAutomationComposition.compareTo(testJpaAutomationComposition));
225         assertNotEquals(0, testJpaAutomationComposition.compareTo(new DummyJpaAutomationCompositionChild()));
226
227         testJpaAutomationComposition.setKey(new PfConceptKey("BadValue", "0.0.1"));
228         assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
229         testJpaAutomationComposition.setKey(new PfConceptKey("automation-composition", "0.0.1"));
230         assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
231
232         testJpaAutomationComposition.setDefinition(new PfConceptKey("BadValue", "0.0.1"));
233         assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
234         testJpaAutomationComposition.setDefinition(new PfConceptKey("automationCompositionDefinitionName", "0.0.1"));
235         assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
236
237         testJpaAutomationComposition.setState(AutomationCompositionState.PASSIVE);
238         assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
239         testJpaAutomationComposition.setState(AutomationCompositionState.UNINITIALISED);
240         assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
241
242         testJpaAutomationComposition.setOrderedState(AutomationCompositionOrderedState.PASSIVE);
243         assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
244         testJpaAutomationComposition.setOrderedState(AutomationCompositionOrderedState.UNINITIALISED);
245         assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
246
247         testJpaAutomationComposition.setDescription("A description");
248         assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
249         testJpaAutomationComposition.setDescription(null);
250         assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
251
252         testJpaAutomationComposition.setPrimed(true);
253         assertNotEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
254         testJpaAutomationComposition.setPrimed(false);
255         assertEquals(0, testJpaAutomationComposition.compareTo(otherJpaAutomationComposition));
256
257         assertEquals(testJpaAutomationComposition, new JpaAutomationComposition(testJpaAutomationComposition));
258     }
259
260     @Test
261     void testJpaAutomationCompositionLombok() {
262         assertNotNull(new AutomationComposition());
263         JpaAutomationComposition ac0 = new JpaAutomationComposition();
264
265         assertThat(ac0.toString()).contains("JpaAutomationComposition(");
266         assertThat(ac0.hashCode()).isNotZero();
267         assertEquals(true, ac0.equals(ac0));
268         assertEquals(false, ac0.equals(null));
269
270         JpaAutomationComposition ac1 = new JpaAutomationComposition();
271
272         ac1.setDefinition(new PfConceptKey("defName", "0.0.1"));
273         ac1.setDescription("Description");
274         ac1.setElements(new LinkedHashMap<>());
275         ac1.setKey(new PfConceptKey("participant", "0.0.1"));
276         ac1.setState(AutomationCompositionState.UNINITIALISED);
277
278         assertThat(ac1.toString()).contains("AutomationComposition(");
279         assertEquals(false, ac1.hashCode() == 0);
280         assertEquals(false, ac1.equals(ac0));
281         assertEquals(false, ac1.equals(null));
282
283         assertNotEquals(ac1, ac0);
284
285         JpaAutomationComposition ac2 = new JpaAutomationComposition();
286         assertEquals(ac2, ac0);
287     }
288
289     private JpaAutomationComposition createJpaAutomationCompositionInstance() {
290         AutomationComposition testAutomationComposition = createAutomationCompositionInstance();
291         JpaAutomationComposition testJpaAutomationComposition = new JpaAutomationComposition();
292         testJpaAutomationComposition.setKey(null);
293         testJpaAutomationComposition.fromAuthorative(testAutomationComposition);
294         testJpaAutomationComposition.setKey(PfConceptKey.getNullKey());
295         testJpaAutomationComposition.fromAuthorative(testAutomationComposition);
296
297         return testJpaAutomationComposition;
298     }
299
300     private AutomationComposition createAutomationCompositionInstance() {
301         AutomationComposition testAutomationComposition = new AutomationComposition();
302         testAutomationComposition.setName("automation-composition");
303         testAutomationComposition.setVersion("0.0.1");
304         testAutomationComposition
305             .setDefinition(new ToscaConceptIdentifier("automationCompositionDefinitionName", "0.0.1"));
306         testAutomationComposition.setElements(new LinkedHashMap<>());
307
308         return testAutomationComposition;
309     }
310 }