Fix sonars from removal of duplicate code
[policy/models.git] / models-tosca / src / test / java / org / onap / policy / models / tosca / simple / concepts / JpaToscaWithToscaPropertiesTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP
4  * ================================================================================
5  * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.models.tosca.simple.concepts;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.junit.Assert.assertEquals;
25
26 import java.util.ArrayList;
27 import java.util.Collections;
28 import java.util.List;
29 import java.util.Map;
30 import lombok.Getter;
31 import lombok.NoArgsConstructor;
32 import lombok.Setter;
33 import org.junit.Before;
34 import org.junit.BeforeClass;
35 import org.junit.Test;
36 import org.onap.policy.common.parameters.annotations.NotNull;
37 import org.onap.policy.models.base.PfConceptKey;
38 import org.onap.policy.models.base.PfKey;
39 import org.onap.policy.models.base.PfReferenceKey;
40 import org.onap.policy.models.tosca.authorative.concepts.ToscaProperty;
41 import org.onap.policy.models.tosca.authorative.concepts.ToscaWithToscaProperties;
42
43 public class JpaToscaWithToscaPropertiesTest {
44     private static final String SOME_DESCRIPTION = "some description";
45     private static final String KEY1 = "abc";
46     private static final String KEY2 = "def";
47     private static final PfConceptKey CONCEPT_KEY1 = new PfConceptKey("hello", "1.2.3");
48     private static final PfConceptKey CONCEPT_KEY2 = new PfConceptKey("world", "3.2.1");
49     private static final PfReferenceKey REF_KEY1 = new PfReferenceKey(CONCEPT_KEY1);
50     private static final PfReferenceKey REF_KEY2 = new PfReferenceKey(CONCEPT_KEY2);
51     private static final JpaToscaProperty JPA_PROP1 = new JpaToscaProperty(REF_KEY1);
52     private static final JpaToscaProperty JPA_PROP2 = new JpaToscaProperty(REF_KEY2);
53     private static ToscaProperty PROP1;
54     private static ToscaProperty PROP2;
55     private static final String DESCRIPT1 = "description A";
56     private static final String DESCRIPT2 = "description B";
57
58     private MyJpa jpa;
59
60     /**
61      * Initializes the properties.
62      */
63     @BeforeClass
64     public static void setUpBeforeClass() {
65         JPA_PROP1.setDescription(DESCRIPT1);
66         JPA_PROP2.setDescription(DESCRIPT2);
67
68         PROP1 = JPA_PROP1.toAuthorative();
69         PROP2 = JPA_PROP2.toAuthorative();
70     }
71
72     @Before
73     public void setUp() {
74         jpa = new MyJpa();
75     }
76
77     @Test
78     public void testGetKeys() {
79         PfConceptKey key = new PfConceptKey("bye", "9.8.7");
80
81         jpa = new MyJpa(key);
82         jpa.setDescription(SOME_DESCRIPTION);
83         jpa.setProperties(Map.of(KEY1, JPA_PROP1, KEY2, JPA_PROP2));
84
85         // properties should be included
86
87         List<PfKey> keys = jpa.getKeys();
88         Collections.sort(keys);
89
90         assertThat(keys).isEqualTo(
91                         List.of(PfConceptKey.getNullKey(), PfConceptKey.getNullKey(), key, REF_KEY1, REF_KEY2));
92     }
93
94     @Test
95     public void testClean() {
96         jpa.clean();
97
98         jpa.setDescription("  some description  ");
99
100         JpaToscaProperty prop1 = new JpaToscaProperty(JPA_PROP1);
101         prop1.setDescription(DESCRIPT1 + " ");
102
103         JpaToscaProperty prop2 = new JpaToscaProperty(JPA_PROP2);
104         prop2.setDescription(" " + DESCRIPT2);
105
106         jpa.setProperties(Map.of(KEY1, prop1, KEY2, prop2));
107
108         jpa.clean();
109         assertEquals(SOME_DESCRIPTION, jpa.getDescription());
110         assertThat(jpa.getProperties()).isEqualTo(Map.of(KEY1, JPA_PROP1, KEY2, JPA_PROP2));
111     }
112
113     @Test
114     public void testToAuthorative() {
115         jpa.setDescription(SOME_DESCRIPTION);
116         jpa.setProperties(Map.of(KEY1, JPA_PROP1, KEY2, JPA_PROP2));
117
118         MyTosca tosca = jpa.toAuthorative();
119         assertEquals(SOME_DESCRIPTION, tosca.getDescription());
120         assertThat(tosca.getProperties()).isEqualTo(Map.of(KEY1, PROP1, KEY2, PROP2));
121     }
122
123     @Test
124     public void testFromAuthorative() {
125         MyTosca tosca = new MyTosca();
126         tosca.setDescription(SOME_DESCRIPTION);
127
128         jpa.fromAuthorative(tosca);
129         assertEquals(SOME_DESCRIPTION, jpa.getDescription());
130         assertThat(jpa.getProperties()).isNull();
131
132         tosca.setProperties(Map.of(KEY1, PROP1, KEY2, PROP2));
133
134         JpaToscaProperty jpa1 = new JpaToscaProperty(PROP1);
135         jpa1.setKey(new PfReferenceKey(jpa.getKey(), KEY1));
136
137         JpaToscaProperty jpa2 = new JpaToscaProperty(PROP2);
138         jpa2.setKey(new PfReferenceKey(jpa.getKey(), KEY2));
139
140         jpa = new MyJpa();
141         jpa.fromAuthorative(tosca);
142         assertEquals(SOME_DESCRIPTION, jpa.getDescription());
143         assertThat(jpa.getProperties()).isEqualTo(Map.of(KEY1, jpa1, KEY2, jpa2));
144     }
145
146     @Test
147     public void testCompareTo() {
148         jpa.setDescription(SOME_DESCRIPTION);
149         jpa.setProperties(Map.of(KEY1, JPA_PROP1, KEY2, JPA_PROP2));
150
151         assertThat(jpa).isNotEqualByComparingTo(null).isEqualByComparingTo(jpa).isNotEqualByComparingTo(new MyJpa2());
152
153         MyJpa jpa2 = new MyJpa();
154         jpa2.setDescription(SOME_DESCRIPTION);
155         jpa2.setProperties(Map.of(KEY1, JPA_PROP1, KEY2, JPA_PROP2));
156         assertThat(jpa).isEqualByComparingTo(jpa2);
157
158         jpa2.setProperties(Map.of(KEY1, JPA_PROP1));
159         assertThat(jpa).isNotEqualByComparingTo(jpa2);
160     }
161
162     @Test
163     public void testJpaToscaWithToscaProperties() {
164         assertThat(jpa.getProperties()).isNull();
165         assertThat(jpa.getKey().isNullKey()).isTrue();
166     }
167
168     @Test
169     public void testJpaToscaWithToscaPropertiesPfConceptKey() {
170         jpa = new MyJpa(CONCEPT_KEY1);
171         assertEquals(CONCEPT_KEY1, jpa.getKey());
172     }
173
174     @Test
175     public void testJpaToscaWithToscaPropertiesJpaToscaWithToscaPropertiesOfT() {
176         jpa.setDescription(SOME_DESCRIPTION);
177         assertEquals(jpa, new MyJpa(jpa));
178
179         jpa.setProperties(Map.of(KEY1, JPA_PROP1, KEY2, JPA_PROP2));
180         assertEquals(jpa, new MyJpa(jpa));
181     }
182
183     @Test
184     public void testJpaToscaWithToscaPropertiesT() {
185         MyTosca tosca = new MyTosca();
186         tosca.setName("world");
187         tosca.setVersion("3.2.1");
188         tosca.setDescription(SOME_DESCRIPTION);
189         tosca.setProperties(Map.of(KEY1, PROP1, KEY2, PROP2));
190
191         jpa = new MyJpa(tosca);
192         assertEquals(SOME_DESCRIPTION, jpa.getDescription());
193
194         JpaToscaProperty jpa1 = new JpaToscaProperty(PROP1);
195         jpa1.setKey(new PfReferenceKey(jpa.getKey(), KEY1));
196
197         JpaToscaProperty jpa2 = new JpaToscaProperty(PROP2);
198         jpa2.setKey(new PfReferenceKey(jpa.getKey(), KEY2));
199
200         assertThat(jpa.getProperties()).isEqualTo(Map.of(KEY1, jpa1, KEY2, jpa2));
201
202         assertEquals(new PfConceptKey("world", "3.2.1"), jpa.getKey());
203     }
204
205     @Test
206     public void testValidateWithKey() {
207         // null key - should fail
208         jpa.setText("some text");
209         assertThat(jpa.validateWithKey("fieldA").isValid()).isFalse();
210
211         // valid
212         jpa.setKey(new PfConceptKey("xyz", "2.3.4"));
213         assertThat(jpa.validateWithKey("fieldB").isValid()).isTrue();
214
215         // null text - bean validator should fail
216         jpa.setText(null);
217         assertThat(jpa.validateWithKey("fieldA").isValid()).isFalse();
218     }
219
220     @Test
221     public void testGetReferencedDataTypes() {
222         assertThat(jpa.getReferencedDataTypes()).isEmpty();
223
224         // one with a schema
225         PfConceptKey schemaKey = new PfConceptKey("schemaZ", "9.8.7");
226         JpaToscaSchemaDefinition schema = new JpaToscaSchemaDefinition();
227         schema.setType(schemaKey);
228         JpaToscaProperty prop1 = new JpaToscaProperty(JPA_PROP1);
229         prop1.setType(CONCEPT_KEY1);
230         prop1.setEntrySchema(schema);
231
232         // one property without a schema
233         JpaToscaProperty prop2 = new JpaToscaProperty(JPA_PROP2);
234         prop2.setType(CONCEPT_KEY2);
235         prop2.setEntrySchema(null);
236
237         jpa.setProperties(Map.of(KEY1, prop1, KEY2, prop2));
238
239         List<PfConceptKey> keys = new ArrayList<>(jpa.getReferencedDataTypes());
240         Collections.sort(keys);
241
242         assertThat(keys).isEqualTo(List.of(CONCEPT_KEY1, schemaKey, CONCEPT_KEY2));
243     }
244
245
246     private static class MyTosca extends ToscaWithToscaProperties {
247
248     }
249
250     @NoArgsConstructor
251     protected static class MyJpa extends JpaToscaWithToscaProperties<MyTosca> {
252         private static final long serialVersionUID = 1L;
253
254         @NotNull
255         @Getter
256         @Setter
257         private String text;
258
259         public MyJpa(MyJpa jpa) {
260             super(jpa);
261         }
262
263         public MyJpa(PfConceptKey key) {
264             super(key);
265         }
266
267         public MyJpa(MyTosca tosca) {
268             super(tosca);
269         }
270
271         @Override
272         public MyTosca toAuthorative() {
273             this.setToscaEntity(new MyTosca());
274             return super.toAuthorative();
275         }
276     }
277
278     private static class MyJpa2 extends MyJpa {
279         private static final long serialVersionUID = 1L;
280     }
281 }