9864cf456d0695cdd77aba8c82f7b8827222a8d5
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / datamodel / UiComponentDataConverterTest.java
1 /*
2  * Copyright © 2016-2019 European Support Limited
3  * Modifications © 2020 AT&T
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
18
19 package org.openecomp.sdc.be.datamodel;
20
21 import static org.assertj.core.api.Assertions.assertThat;
22 import static org.junit.Assert.assertEquals;
23 import static org.hibernate.validator.internal.util.CollectionHelper.asSet;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertTrue;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.when;
28
29 import java.util.Arrays;
30 import java.util.Collections;
31 import java.util.HashMap;
32 import java.util.List;
33 import java.util.Map;
34 import java.util.Set;
35 import org.junit.Before;
36 import org.junit.BeforeClass;
37 import org.junit.Test;
38 import org.openecomp.sdc.be.components.impl.GroupTypeBusinessLogic;
39 import org.openecomp.sdc.be.components.impl.PolicyTypeBusinessLogic;
40 import org.openecomp.sdc.be.components.utils.GroupDefinitionBuilder;
41 import org.openecomp.sdc.be.components.utils.InputsBuilder;
42 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
43 import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
44 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
45 import org.openecomp.sdc.be.components.utils.ServiceBuilder;
46 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
47 import org.openecomp.sdc.be.datatypes.elements.CINodeFilterDataDefinition;
48 import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition;
49 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
50 import org.openecomp.sdc.be.datatypes.elements.RequirementSubstitutionFilterPropertyDataDefinition;
51 import org.openecomp.sdc.be.datatypes.elements.SubstitutionFilterDataDefinition;
52 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
53 import org.openecomp.sdc.be.model.GroupDefinition;
54 import org.openecomp.sdc.be.model.InputDefinition;
55 import org.openecomp.sdc.be.model.InterfaceDefinition;
56 import org.openecomp.sdc.be.model.OutputDefinition;
57 import org.openecomp.sdc.be.model.PolicyDefinition;
58 import org.openecomp.sdc.be.model.PropertyDefinition;
59 import org.openecomp.sdc.be.model.Resource;
60 import org.openecomp.sdc.be.model.Service;
61 import org.openecomp.sdc.be.ui.model.UIConstraint;
62 import org.openecomp.sdc.be.ui.model.UiComponentDataTransfer;
63 import org.openecomp.sdc.be.ui.model.UiComponentMetadata;
64 import org.openecomp.sdc.be.ui.model.UiServiceDataTransfer;
65
66 public class UiComponentDataConverterTest {
67
68     private PolicyDefinition policy1, policy2;
69     private GroupDefinition group1, group2;
70     private InputDefinition input1;
71     private OutputDefinition output;
72     private PropertyDefinition propertyDef;
73     private InterfaceDefinition interfaceDef;
74
75
76     private static GroupTypeBusinessLogic groupTypeBusinessLogic;
77     private static PolicyTypeBusinessLogic policyTypeBusinessLogic;
78     private static UiComponentDataConverter uiComponentDataConverter;
79
80     private static final String PROPERTY_UID = "propertyUid";
81     private static final String NODE_FILTER_UID = "nodeFilterUid";
82     private static final String SUBSTITUTION_FILTER_UID = "substitutionFilterUid";
83     private static final String COMPONENT_UID = "componentUid";
84
85     @BeforeClass
86     public static void initClass() {
87         groupTypeBusinessLogic = mock(GroupTypeBusinessLogic.class);
88         policyTypeBusinessLogic = mock(PolicyTypeBusinessLogic.class);
89         uiComponentDataConverter = new UiComponentDataConverter(groupTypeBusinessLogic, policyTypeBusinessLogic);
90     }
91
92     @Before
93     public void setUp() throws Exception {
94         policy1 = PolicyDefinitionBuilder.create()
95                 .setName("policy1")
96                 .setUniqueId("uid1")
97                 .setType("a")
98                 .build();
99
100         policy2 = PolicyDefinitionBuilder.create()
101                 .setName("policy2")
102                 .setUniqueId("uid2")
103                 .setType("b")
104                 .build();
105         group1 = GroupDefinitionBuilder.create()
106                 .setUniqueId("group1")
107                 .setName("Group 1")
108                 .setType("a")
109                 .build();
110         group2 = GroupDefinitionBuilder.create()
111                 .setUniqueId("group2")
112                 .setName("Group 2")
113                 .setType("b")
114                 .build();
115
116         input1 = InputsBuilder.create()
117                 .setName("input1")
118                 .setPropertyId("inputid")
119                 .build();
120
121         propertyDef = new PropertyDataDefinitionBuilder()
122                 .setName("propety1")
123                 .setValue("true")
124                 .setType("boolean")
125                 .setUniqueId("property1")
126                 .build();
127
128
129     }
130
131     @Test
132     public void getUiDataTransferFromResourceByParams_groups_allGroups() {
133         Resource resourceWithGroups = buildResourceWithGroups();
134         UiComponentDataTransfer componentDTO1 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("PROPERTIES"));
135         UiComponentDataTransfer componentDTO2 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("properties"));
136         UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("groups"));
137         assertThat(componentDTO.getGroups()).isEqualTo(resourceWithGroups.getGroups());
138     }
139
140     @Test
141     public void getUiDataTransferFromResourceByParams_groups_excludedGroups() {
142         Resource resourceWithGroups = buildResourceWithGroups();
143         when(groupTypeBusinessLogic.getExcludedGroupTypes("VFC")).thenReturn(buildExcludedTypesList());
144         UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("nonExcludedGroups"));
145         List<GroupDefinition> groups = componentDTO.getGroups();
146         assertThat(groups.size()).isEqualTo(1);
147         assertThat(groups.get(0)).isEqualTo(group2);
148     }
149
150     @Test
151     public void getUiDataTransferFromResourceByParams_policies_noPoliciesForResource() {
152         UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(new Resource(), Collections.singletonList("policies"));
153         assertThat(componentDTO.getPolicies()).isEmpty();
154     }
155
156     @Test
157     public void getUiDataTransferFromResourceByParams_All() {
158         Resource resourceWithGroups = buildResourceWithGroups();
159         Resource resourceWithInputs = buildResourceWithInputs();
160         Resource resourceWithOutputs = buildResourceWithOutputs();
161
162         UiComponentDataTransfer componentDTO1 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("PROPERTIES"));
163         UiComponentDataTransfer componentDTO2 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("properties"));
164         UiComponentDataTransfer componentDTO3 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("interfaces"));
165         UiComponentDataTransfer componentDTO4 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("attributes"));
166         UiComponentDataTransfer componentDTO5 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("metadata"));
167         UiComponentDataTransfer componentDTO6 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("derivedFrom"));
168         UiComponentDataTransfer componentDTO7 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("additionalInformation"));
169
170         UiComponentDataTransfer componentDTO8 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("inputs"));
171         UiComponentDataTransfer componentDTO81 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithInputs, Collections.singletonList("inputs"));
172         UiComponentDataTransfer componentDTO82 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithOutputs, Collections.singletonList("outputs"));
173
174         UiComponentDataTransfer componentDTO9 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("users"));
175         UiComponentDataTransfer componentDTO10 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("componentInstances"));
176         UiComponentDataTransfer componentDTO11 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("componentInstancesProperties"));
177         UiComponentDataTransfer componentDTO12 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("capabilities"));
178         UiComponentDataTransfer componentDTO13 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("requirements"));
179         UiComponentDataTransfer componentDTO14 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("allVersions"));
180         UiComponentDataTransfer componentDTO15 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("artifacts"));
181
182         UiComponentDataTransfer componentDTO16 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("interfaces"));
183         UiComponentDataTransfer componentDTO17 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("componentInstancesAttributes"));
184         UiComponentDataTransfer componentDTO18= uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("componentInstancesInputs"));
185         UiComponentDataTransfer componentDTO19 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("toscaArtifacts"));
186
187         UiComponentDataTransfer componentDTO21= uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("componentInstancesRelations"));
188         UiComponentDataTransfer componentDTO20 = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("deploymentArtifacts"));
189
190         UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithGroups, Collections.singletonList("groups"));
191         assertThat(componentDTO.getGroups()).isEqualTo(resourceWithGroups.getGroups());
192     }
193
194     @Test
195     public void getUiDataTransferFromServiceByParams_policies_noPoliciesForResource() {
196         UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromServiceByParams(new Service(), Collections.singletonList("policies"));
197         assertThat(componentDTO.getPolicies()).isEmpty();
198     }
199
200     @Test
201     public void getUiDataTransferFromServiceByParams_SERVICE_API_ARTIFACTS() {
202         UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromServiceByParams(new Service(), Collections.singletonList("serviceApiArtifacts"));
203         assertThat(componentDTO.getArtifacts()).isNull();
204     }
205
206     @Test
207     public void getUiDataTransferFromServiceByParams_FORWARDING_PATHS() {
208         UiServiceDataTransfer componentDTO = (UiServiceDataTransfer) uiComponentDataConverter.getUiDataTransferFromServiceByParams(new Service(), Collections.singletonList("forwardingPaths"));
209         assertThat(componentDTO.getForwardingPaths()).isEmpty();
210     }
211
212     @Test
213     public void getUiDataTransferFromServiceByParams_METADATA() {
214         UiServiceDataTransfer componentDTO = (UiServiceDataTransfer) uiComponentDataConverter.getUiDataTransferFromServiceByParams(new Service(), Collections.singletonList("metadata"));
215         assertThat(componentDTO.getMetadata().getNamingPolicy()).isEmpty();
216     }
217
218     @Test
219     public void getUiDataTransferFromServiceByParams_INTERFACES() {
220         UiServiceDataTransfer componentDTO = (UiServiceDataTransfer) uiComponentDataConverter.getUiDataTransferFromServiceByParams(new Service(), Collections.singletonList("interfaces"));
221         assertThat(componentDTO.getInterfaces()).isEmpty();
222     }
223
224     @Test
225     public void getUiDataTransferFromResourceByParams_policies() {
226         Resource resourceWithPolicies = buildResourceWithPolicies();
227         UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithPolicies, Collections.singletonList("policies"));
228         List<PolicyDefinition> expectedPolicies = resourceWithPolicies.resolvePoliciesList();
229         assertThat(componentDTO.getPolicies()).containsExactlyInAnyOrder((PolicyDefinition[]) expectedPolicies.toArray(new PolicyDefinition[expectedPolicies.size()]));
230     }
231
232     @Test
233     public void getUiDataTransferFromServiceByParams_policies() {
234         Service resourceWithPolicies = buildServiceWithPolicies();
235         UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromServiceByParams(resourceWithPolicies, Collections.singletonList("policies"));
236         List<PolicyDefinition> expectedPolicies = resourceWithPolicies.resolvePoliciesList();
237         assertThat(componentDTO.getPolicies()).containsExactlyInAnyOrder((PolicyDefinition[]) expectedPolicies.toArray(new PolicyDefinition[expectedPolicies.size()]));
238     }
239
240     @Test
241     public void getUiDataTransferFromResourceByParams_policies_excludedPolicies() {
242         Resource resourceWithPolicies = buildResourceWithPolicies();
243         when(policyTypeBusinessLogic.getExcludedPolicyTypes("VFC")).thenReturn(buildExcludedTypesList());
244         UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resourceWithPolicies, Collections.singletonList("nonExcludedPolicies"));
245         List<PolicyDefinition> policies = componentDTO.getPolicies();
246         assertThat(policies.size()).isEqualTo(1);
247         assertThat(policies.get(0)).isEqualTo(policy2);
248     }
249
250     @Test
251     public void convertToUiComponentMetadataTestResource() {
252         Resource resourceWithPolicies = buildResourceWithPolicies();
253         when(policyTypeBusinessLogic.getExcludedPolicyTypes("VFC")).thenReturn(buildExcludedTypesList());
254         UiComponentMetadata componentMd = uiComponentDataConverter.convertToUiComponentMetadata(resourceWithPolicies);
255         assertThat(componentMd.getComponentType().getValue()).isEqualTo("Resource");
256
257     }
258
259     @Test
260     public void convertToUiComponentMetadataTestService() {
261         Service resourceWithPolicies = buildServiceWithPolicies();
262         when(policyTypeBusinessLogic.getExcludedPolicyTypes("VFC")).thenReturn(buildExcludedTypesList());
263         UiComponentMetadata componentMd = uiComponentDataConverter.convertToUiComponentMetadata(resourceWithPolicies);
264         assertThat(componentMd.getComponentType().getValue()).isEqualTo("Service");
265
266     }
267     @Test
268     public void getResourceWithoutGroupsAndPolicies_returnsEmptyLists() {
269         Resource resource = new ResourceBuilder().build();
270         UiComponentDataTransfer componentDTO = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource, Arrays.asList("nonExcludedPolicies", "nonExcludedGroups"));
271         List<PolicyDefinition> policies = componentDTO.getPolicies();
272         assertThat(policies.size()).isZero();
273         List<GroupDefinition> groups = componentDTO.getGroups();
274         assertThat(groups.size()).isZero();
275     }
276
277     @Test
278     public void testGetDeclaredPolicies() {
279         ComponentInstanceProperty property = new ComponentInstanceProperty();
280         property.setName(PROPERTY_UID);
281
282         GetPolicyValueDataDefinition getPolicy = new GetPolicyValueDataDefinition();
283         getPolicy.setPolicyId(PROPERTY_UID);
284         getPolicy.setPropertyName(PROPERTY_UID);
285         property.setGetPolicyValues(Collections.singletonList(getPolicy));
286
287         Map<String, List<ComponentInstanceProperty>> instanceProperties = new HashMap<>();
288         instanceProperties.put(COMPONENT_UID, Collections.singletonList(property));
289
290         Resource resource = new ResourceBuilder().build();
291         resource.setComponentInstancesProperties(instanceProperties);
292
293         UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
294                 Collections.singletonList("policies"));
295
296         assertThat(uiComponentDataTransfer.getPolicies()).isNotEmpty();
297     }
298
299     @Test
300     public void testGetNodeFilterEmptyList() {
301         Resource resource = new ResourceBuilder().build();
302         UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
303                 Collections.singletonList("nodeFilter"));
304
305         assertThat(uiComponentDataTransfer.getNodeFilter()).isNull();
306     }
307
308     @Test
309     public void testGetNodeFilter() {
310         CINodeFilterDataDefinition nodeFilter = new CINodeFilterDataDefinition();
311         nodeFilter.setID(NODE_FILTER_UID);
312
313         Map<String, CINodeFilterDataDefinition> nodeFilterMap = new HashMap<>();
314         nodeFilterMap.put(NODE_FILTER_UID, nodeFilter);
315
316         Resource resource = new ResourceBuilder().build();
317         resource.setNodeFilterComponents(nodeFilterMap);
318
319         UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
320                 Collections.singletonList("nodeFilter"));
321
322         assertThat(uiComponentDataTransfer.getNodeFilterforNode()).isNotEmpty();
323     }
324
325     @Test
326     public void testGetSubstitutionFilterEmptyList() {
327         Resource resource = new ResourceBuilder().build();
328         UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
329                 Collections.singletonList("substitutionFilter"));
330
331         assertThat(uiComponentDataTransfer.getSubstitutionFilters()).isNull();
332     }
333
334     @Test
335     public void testGetSubstitutionFilter() {
336         SubstitutionFilterDataDefinition substitutionFilter = new SubstitutionFilterDataDefinition();
337         substitutionFilter.setID(SUBSTITUTION_FILTER_UID);
338
339         final ListDataDefinition<RequirementSubstitutionFilterPropertyDataDefinition> expectedPropertyFilters = new ListDataDefinition<>();
340         var filter1 = new RequirementSubstitutionFilterPropertyDataDefinition();
341         filter1.setName("filter1");
342         filter1.setConstraints(Collections.singletonList("constraint1: {equal: testvalue1}\n"));
343         expectedPropertyFilters.add(filter1);
344
345         var filter2 = new RequirementSubstitutionFilterPropertyDataDefinition();
346         filter2.setName("filter2");
347         filter2.setConstraints(Collections.singletonList("constraint2: {equal: testvalue2}\n"));
348         expectedPropertyFilters.add(filter2);
349
350         substitutionFilter.setProperties(expectedPropertyFilters);
351
352         Resource resource = new ResourceBuilder().build();
353         resource.setSubstitutionFilter(substitutionFilter);
354
355         UiComponentDataTransfer uiComponentDataTransfer = uiComponentDataConverter.getUiDataTransferFromResourceByParams(resource,
356                 Collections.singletonList("substitutionFilter"));
357         assertThat(uiComponentDataTransfer.getSubstitutionFilters()).isNotNull();
358
359         List<UIConstraint> propertyFilters = uiComponentDataTransfer.getSubstitutionFilters().getProperties();
360         assertFalse(propertyFilters.isEmpty());
361         assertEquals(propertyFilters.size(), substitutionFilter.getProperties().getListToscaDataDefinition().size());
362
363         verifyPropertyFilters(propertyFilters.get(0), "constraint1", "testvalue1", "static", "equal");
364         verifyPropertyFilters(propertyFilters.get(1), "constraint2", "testvalue2", "static", "equal");
365     }
366
367     private void verifyPropertyFilters(UIConstraint uiConstraint, String propertyName, String value, String sourceType, String operator){
368         assertEquals(propertyName, uiConstraint.getServicePropertyName());
369         assertEquals(value, uiConstraint.getValue());
370         assertEquals(sourceType, uiConstraint.getSourceType());
371         assertEquals(operator, uiConstraint.getConstraintOperator());
372     }
373
374     private Resource buildResourceWithGroups() {
375         return new ResourceBuilder()
376                 .addGroup(group1)
377                 .addGroup(group2)
378                 .build();
379     }
380
381     private Resource buildResourceWithInputs() {
382         return new ResourceBuilder()
383                 .addInput(input1)
384                 .build();
385     }
386
387     private Resource buildResourceWithOutputs() {
388         return new ResourceBuilder()
389                 .addOutput(output)
390                 .build();
391     }
392
393     private Resource buildResourceWithParameter(final String field) {
394         final ResourceBuilder res =  new ResourceBuilder();
395         switch(field){
396             case "inputs":
397                 res.addInput(input1);
398                 break;
399             case "outputs":
400                 res.addOutput(output);
401                 break;
402             case "properties":
403                 //res.addProperty(propertyDef);
404                 break;
405
406
407         }
408         return new ResourceBuilder()
409                 .addInput(input1)
410                 .addOutput(output)
411                 .build();
412     }
413
414     private Resource buildResourceWithPolicies() {
415         return new ResourceBuilder()
416                 .addPolicy(policy1)
417                 .addPolicy(policy2)
418                 .build();
419     }
420
421     private Service buildServiceWithPolicies() {
422         return new ServiceBuilder()
423                 .addPolicy(policy1)
424                 .addPolicy(policy2)
425                 .build();
426     }
427
428     private Set<String> buildExcludedTypesList() {
429         return asSet("a");
430     }
431
432 }