Fix 'Substitution Node not updated during import'-bug
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / ComponentBusinessLogicTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 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  * Modifications copyright (c) 2019 Nokia
20  * ================================================================================
21  */
22
23 package org.openecomp.sdc.be.components;
24
25 import fj.data.Either;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.mockito.junit.MockitoJUnitRunner;
29 import org.openecomp.sdc.be.DummyConfigurationManager;
30 import org.openecomp.sdc.be.components.impl.ComponentBusinessLogic;
31 import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
32 import org.openecomp.sdc.be.components.utils.ComponentBusinessLogicMock;
33 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
34 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
35 import org.openecomp.sdc.be.model.ArtifactDefinition;
36 import org.openecomp.sdc.be.model.Component;
37 import org.openecomp.sdc.be.model.ComponentInstance;
38 import org.openecomp.sdc.be.model.Resource;
39 import org.openecomp.sdc.be.model.Service;
40 import org.openecomp.sdc.be.model.User;
41 import org.openecomp.sdc.be.model.category.CategoryDefinition;
42 import org.openecomp.sdc.be.model.category.SubCategoryDefinition;
43 import org.openecomp.sdc.be.ui.model.UiComponentDataTransfer;
44 import org.openecomp.sdc.be.ui.model.UiLeftPaletteComponent;
45 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
46 import org.openecomp.sdc.exception.ResponseFormat;
47
48 import java.util.ArrayList;
49 import java.util.HashMap;
50 import java.util.List;
51 import java.util.Map;
52
53 import static org.assertj.core.api.Assertions.assertThat;
54 import static org.mockito.Mockito.when;
55 import static org.openecomp.sdc.be.components.impl.utils.TestGenerationUtils.getComponentsUtils;
56 import static org.openecomp.sdc.common.util.GeneralUtility.getCategorizedComponents;
57
58 @RunWith(MockitoJUnitRunner.class)
59 public class ComponentBusinessLogicTest extends ComponentBusinessLogicMock {
60
61     private static final User USER = new User();
62     private static final String ARTIFACT_LABEL = "toscaArtifact1";
63     private static final String ARTIFACT_LABEL2 = "toscaArtifact2";
64
65     private ComponentBusinessLogic testInstance = new ComponentBusinessLogic(elementDao, groupOperation, groupInstanceOperation,
66         groupTypeOperation, groupBusinessLogic, interfaceOperation, interfaceLifecycleTypeOperation, artifactsBusinessLogic,
67         artifactToscaOperation,componentContactIdValidator, componentNameValidator, componentTagsValidator, componentValidator,
68             componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator) {
69         @Override
70         public Either<List<String>, ResponseFormat> deleteMarkedComponents() {
71             return null;
72         }
73
74         @Override
75         public ComponentInstanceBusinessLogic getComponentInstanceBL() {
76             return null;
77         }
78
79         @Override
80         public Either<List<ComponentInstance>, ResponseFormat> getComponentInstancesFilteredByPropertiesAndInputs(String componentId, String userId) {
81             return null;
82         }
83
84         @Override
85         public Either<UiComponentDataTransfer, ResponseFormat> getUiComponentDataTransferByComponentId(String componentId, List<String> dataParamsToReturn) {
86             return null;
87         }
88     };
89
90
91     DummyConfigurationManager dummyConfigurationManager = new DummyConfigurationManager();;
92
93     @SuppressWarnings("unchecked")
94     @Test
95     public void setToscaArtifactsPlaceHolders_normalizeArtifactName() throws Exception {
96         Resource resource = new ResourceBuilder().setUniqueId("uid")
97                 .setComponentType(ComponentTypeEnum.RESOURCE)
98                 .setSystemName("myResource")
99                 .build();
100         Map<String, Object> artifactsFromConfig = new HashMap<>();
101         artifactsFromConfig.put(ARTIFACT_LABEL, buildArtifactMap("artifact:not normalized.yml"));
102         artifactsFromConfig.put(ARTIFACT_LABEL2, buildArtifactMap("alreadyNormalized.csar"));
103         when(dummyConfigurationManager.getConfigurationMock().getToscaArtifacts()).thenReturn(artifactsFromConfig);
104         when(artifactsBusinessLogic.createArtifactPlaceHolderInfo(resource.getUniqueId(), ARTIFACT_LABEL, (Map<String, Object>) artifactsFromConfig.get(ARTIFACT_LABEL), USER, ArtifactGroupTypeEnum.TOSCA))
105                 .thenReturn(buildArtifactDef(ARTIFACT_LABEL));
106         when(artifactsBusinessLogic.createArtifactPlaceHolderInfo(resource.getUniqueId(), ARTIFACT_LABEL2, (Map<String, Object>) artifactsFromConfig.get(ARTIFACT_LABEL2), USER, ArtifactGroupTypeEnum.TOSCA))
107                 .thenReturn(buildArtifactDef(ARTIFACT_LABEL2));
108         testInstance.setToscaArtifactsPlaceHolders(resource, USER);
109
110         Map<String, ArtifactDefinition> toscaArtifacts = resource.getToscaArtifacts();
111         assertThat(toscaArtifacts).hasSize(2);
112         ArtifactDefinition artifactDefinition = toscaArtifacts.get(ARTIFACT_LABEL);
113         assertThat(artifactDefinition.getArtifactName()).isEqualTo("resource-myResourceartifactnot-normalized.yml");
114         ArtifactDefinition artifactDefinition2 = toscaArtifacts.get(ARTIFACT_LABEL2);
115         assertThat(artifactDefinition2.getArtifactName()).isEqualTo("resource-myResourcealreadyNormalized.csar");
116     }
117
118     private Map<String, Object> buildArtifactMap(String artifactName) {
119         Map<String, Object> artifact = new HashMap<>();
120         artifact.put("artifactName", artifactName);
121         return artifact;
122     }
123
124     private ArtifactDefinition buildArtifactDef(String artifactLabel) {
125         ArtifactDefinition artifactDefinition = new ArtifactDefinition();
126         artifactDefinition.setArtifactLabel(artifactLabel);
127         return artifactDefinition;
128     }
129
130     @Test
131     public void categorizeOneResource(){
132         List<Component> componentList = new ArrayList<>();
133         String subCategoryName = "Load Balancer";
134         String categoryName = "Application L4+";
135         Component component = initComponent(ComponentTypeEnum.RESOURCE, subCategoryName, categoryName);
136         componentList.add(component);
137         Map<String,Map<String,List<UiLeftPaletteComponent>>> response = getCategorizedComponents(getComponentsUtils().convertComponentToUiLeftPaletteComponentObject(componentList));
138         assertThat(response.get(categoryName).get(subCategoryName).size()).isEqualTo(1);
139     }
140
141     @Test
142     public void categorizeResourcesSameCategoryDifferentSubcategory(){
143         List<Component> componentList = new ArrayList<>();
144         String categoryName = "Application L4+";
145         String subCategoryName = "Load Balancer";
146         Component component = initComponent(ComponentTypeEnum.RESOURCE, subCategoryName, categoryName);
147         componentList.add(component);
148         String subCategoryName2 = "Database";
149         Component component2 = initComponent(ComponentTypeEnum.RESOURCE, subCategoryName2, categoryName);
150         componentList.add(component2);
151         Map<String,Map<String,List<UiLeftPaletteComponent>>> response = getCategorizedComponents(getComponentsUtils().convertComponentToUiLeftPaletteComponentObject(componentList));
152         assertThat(response.get(categoryName).get(subCategoryName).size()).isEqualTo(1);
153         assertThat(response.get(categoryName).get(subCategoryName2).size()).isEqualTo(1);
154     }
155
156     @Test
157     public void categorizeResourceAndServiceSameCategoryDifferentSubcategory(){
158         List<Component> componentList = new ArrayList<>();
159         String categoryName = "Generic";
160         String subCategoryName = "Load Balancer";
161         Component component = initComponent(ComponentTypeEnum.RESOURCE, subCategoryName, categoryName);
162         componentList.add(component);
163         Component component2 = initComponent(ComponentTypeEnum.SERVICE, null, categoryName);
164         componentList.add(component2);
165         Map<String,Map<String,List<UiLeftPaletteComponent>>> response = getCategorizedComponents(getComponentsUtils().convertComponentToUiLeftPaletteComponentObject(componentList));
166         assertThat(response.get(categoryName).get(subCategoryName).size()).isEqualTo(1);
167         assertThat(response.get("Generic").get("Generic").size()).isEqualTo(1);
168     }
169
170     @Test
171     public void categorizeResourcesSameCategorySameSubcategory(){
172         List<Component> componentList = new ArrayList<>();
173         String categoryName = "Application L4+";
174         String subCategoryName = "Load Balancer";
175         Component component = initComponent(ComponentTypeEnum.RESOURCE, subCategoryName, categoryName);
176         componentList.add(component);
177         componentList.add(component);
178         Map<String,Map<String,List<UiLeftPaletteComponent>>> response = getCategorizedComponents(getComponentsUtils().convertComponentToUiLeftPaletteComponentObject(componentList));
179         assertThat(response.get(categoryName).get(subCategoryName).size()).isEqualTo(2);
180     }
181
182     @Test
183     public void categorizeTwoServices(){
184         List<Component> componentList = new ArrayList<>();
185         String categoryName = "Application L4+";
186         String categoryName2 = "IP Mux Demux";
187         Component component = initComponent(ComponentTypeEnum.SERVICE, null, categoryName);
188         componentList.add(component);
189         Component component2 = initComponent(ComponentTypeEnum.SERVICE, null, categoryName2);
190         componentList.add(component2);
191         Map<String,Map<String,List<UiLeftPaletteComponent>>> response = getCategorizedComponents(getComponentsUtils().convertComponentToUiLeftPaletteComponentObject(componentList));
192         assertThat(response.get("Generic").get("Generic").size()).isEqualTo(2);
193     }
194
195     @Test
196     public void categorizeTwoResourcesDiffCategory(){
197         List<Component> componentList = new ArrayList<>();
198         String categoryName = "Application L4+";
199         String categoryName2 = "IP Mux Demux";
200         String subCategoryName = "Load Balancer";
201         Component component = initComponent(ComponentTypeEnum.RESOURCE, subCategoryName, categoryName);
202         componentList.add(component);
203         Component component2 = initComponent(ComponentTypeEnum.RESOURCE, subCategoryName, categoryName2);
204         componentList.add(component2);
205         Map<String,Map<String,List<UiLeftPaletteComponent>>> response = getCategorizedComponents(getComponentsUtils().convertComponentToUiLeftPaletteComponentObject(componentList));
206         assertThat(response.get(categoryName).get(subCategoryName).size()).isEqualTo(1);
207         assertThat(response.get(categoryName2).get(subCategoryName).size()).isEqualTo(1);
208     }
209
210     private Component initComponent(ComponentTypeEnum componentTypeEnum, String subCategoryName, String categoryName) {
211         Component component = null;
212         if(componentTypeEnum == ComponentTypeEnum.RESOURCE){
213             component = new Resource();
214         }
215         if(componentTypeEnum == ComponentTypeEnum.SERVICE){
216             component = new Service();
217         }
218         component.setComponentType(componentTypeEnum);
219         CategoryDefinition categoryDefinition = new CategoryDefinition();
220         SubCategoryDefinition subCategoryDefinition = new SubCategoryDefinition();
221         subCategoryDefinition.setName(subCategoryName);
222         List<SubCategoryDefinition> subCategoryDefinitionList = new ArrayList<>();
223         subCategoryDefinitionList.add(subCategoryDefinition);
224         categoryDefinition.setSubcategories(subCategoryDefinitionList);
225         categoryDefinition.setName(categoryName);
226         List<CategoryDefinition> categoryDefinitionList = new ArrayList<>();
227         categoryDefinitionList.add(categoryDefinition);
228         component.setCategories(categoryDefinitionList);
229         List<String> tags = new ArrayList<>();
230         tags.add("tag1");
231         tags.add("tag2");
232         component.setTags(tags);
233         return component;
234     }
235 }