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