Revert "Interface operation feature enhancements"
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / validation / InterfaceOperationValidationTest.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.openecomp.sdc.be.components.validation;
18
19 import static org.mockito.ArgumentMatchers.any;
20 import static org.mockito.Mockito.when;
21
22 import com.google.common.collect.Sets;
23 import fj.data.Either;
24
25 import java.util.ArrayList;
26 import java.util.Collection;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.Set;
31 import org.junit.Assert;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.mockito.Mockito;
35 import org.mockito.MockitoAnnotations;
36 import org.openecomp.sdc.be.components.impl.ResponseFormatManager;
37 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
38 import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition;
39 import org.openecomp.sdc.be.datatypes.elements.OperationOutputDefinition;
40 import org.openecomp.sdc.be.model.ArtifactDefinition;
41 import org.openecomp.sdc.be.model.ComponentInstanceInput;
42 import org.openecomp.sdc.be.model.InputDefinition;
43 import org.openecomp.sdc.be.model.InterfaceDefinition;
44 import org.openecomp.sdc.be.model.Operation;
45 import org.openecomp.sdc.be.model.Component;
46 import org.openecomp.sdc.be.model.Resource;
47 import org.openecomp.sdc.exception.ResponseFormat;
48 import org.openecomp.sdc.test.utils.InterfaceOperationTestUtils;
49
50 public class InterfaceOperationValidationTest {
51
52     private final Component component = setUpComponentMock();
53     private ResponseFormatManager responseFormatManagerMock;
54
55     private final InterfaceOperationValidationUtilTest interfaceOperationValidationUtilTest = new InterfaceOperationValidationUtilTest();
56     private final ListDataDefinition<OperationInputDefinition> operationInputDefinitionList = new ListDataDefinition<>();
57     private final ListDataDefinition<OperationOutputDefinition> operationOutputDefinitionList = new ListDataDefinition<>();
58
59     @Before
60     public void init() {
61         MockitoAnnotations.initMocks(this);
62         responseFormatManagerMock = Mockito.mock(ResponseFormatManager.class);
63         when(responseFormatManagerMock.getResponseFormat(any())).thenReturn(new ResponseFormat());
64         when(responseFormatManagerMock.getResponseFormat(any(), any())).thenReturn(new ResponseFormat());
65         when(responseFormatManagerMock.getResponseFormat(any(), any(), any())).thenReturn(new ResponseFormat());
66     }
67
68     @Test
69     public void shouldPassOperationValidationForHappyScenario() {
70         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
71         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
72         Collection<Operation> operations = createInterfaceOperationData("op2",
73                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
74                         operationOutputDefinitionList,"upgrade");
75         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
76                 .validateInterfaceOperations(operations, component, false);
77         Assert.assertTrue(booleanResponseFormatEither.isLeft());
78     }
79
80     @Test
81     public void shouldFailWhenOperationOperationDescriptionLengthInvalid() {
82         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
83         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
84         Collection<Operation> operations = createInterfaceOperationData("op2",
85                 "interface operation2 -  The Spring Initializer provides a project generator to make you " +
86                         "productive with the certain technology stack from the beginning. You can create a skeleton project" +
87                         "with web, data access (relational and NoSQL data stores), cloud, or messaging support",
88                 new ArtifactDefinition(), operationInputDefinitionList, operationOutputDefinitionList,"update");
89         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
90                 .validateInterfaceOperations(operations, component, false);
91         Assert.assertTrue(booleanResponseFormatEither.isRight());
92     }
93
94
95
96     @Test
97     public void shouldFailWhenOperationNameIsEmpty() {
98         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
99         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
100         Collection<Operation> operations = createInterfaceOperationData("op2",
101                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
102                 operationOutputDefinitionList, "");
103         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
104                 .validateInterfaceOperations(operations, component, false);
105         Assert.assertTrue(booleanResponseFormatEither.isRight());
106     }
107
108     @Test
109     public void shouldFailWhenOperationNamesAreNotUnique() {
110         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
111         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
112         Collection<Operation> operations = createInterfaceOperationData("op2",
113                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
114                 operationOutputDefinitionList,"CREATE");
115         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
116                 .validateInterfaceOperations(operations, component, false);
117         Assert.assertTrue(booleanResponseFormatEither.isRight());
118     }
119
120     @Test
121     public void shouldFailWhenOperationNameLengthIsInvalid() {
122         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
123         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
124         Collection<Operation> operations = createInterfaceOperationData("op2",
125                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
126                 operationOutputDefinitionList,
127                 "interface operation2 -  The Spring Initializer provides a project generator to make you " +
128                         "productive with the certain technology stack from the beginning. You can create a skeleton project" +
129                         "with web, data access (relational and NoSQL data stores), cloud, or messaging support");
130         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
131                 .validateInterfaceOperations(operations, component, false);
132         Assert.assertTrue(booleanResponseFormatEither.isRight());
133     }
134
135
136     @Test
137     public void shouldFailWhenOperationInputParamNamesAreNotUnique() {
138         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
139         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
140         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label2"));
141         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label2"));
142         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
143         Collection<Operation> operations = createInterfaceOperationData("op2",
144                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
145                 operationOutputDefinitionList,"create");
146
147         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
148                 .validateInterfaceOperations(operations, component, false);
149         Assert.assertTrue(booleanResponseFormatEither.isRight());
150     }
151
152     @Test
153     public void shouldPassWhenOperationInputParamNamesAreUnique() {
154         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
155         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label2"));
156         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
157         Collection<Operation> operations = createInterfaceOperationData("op2",
158                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
159                 operationOutputDefinitionList,"update");
160
161         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
162                 .validateInterfaceOperations(operations, component, false);
163         Assert.assertTrue(booleanResponseFormatEither.isLeft());
164     }
165
166     @Test
167     public void shouldPassWhenOperationInputParamNamesHasSubProperty() {
168         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
169         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label2"));
170         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
171         Collection<Operation> operations = createInterfaceOperationData("op2",
172                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
173                 operationOutputDefinitionList,"update");
174         operationInputDefinitionList.getListToscaDataDefinition().get(0).setInputId(operationInputDefinitionList
175                 .getListToscaDataDefinition().get(0).getInputId().concat(".subproperty"));
176         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
177                 .validateInterfaceOperations(operations, component, false);
178         Assert.assertTrue(booleanResponseFormatEither.isLeft());
179     }
180
181     @Test
182     public void shouldFailWhenOperationInputParamNameEmpty() {
183         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("  "));
184         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
185         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
186         Collection<Operation> operations = createInterfaceOperationData("op2",
187                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
188                 operationOutputDefinitionList,"update");
189
190         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
191                 .validateInterfaceOperations(operations, component, false);
192         Assert.assertTrue(booleanResponseFormatEither.isRight());
193     }
194
195     @Test
196     public void shouldFailWhenOperationOutputParamNameEmpty() {
197         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("inputParam"));
198         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
199         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition(" "));
200         Collection<Operation> operations = createInterfaceOperationData("op2",
201                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
202                 operationOutputDefinitionList,"update");
203
204         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
205                 .validateInterfaceOperations(operations, component, false);
206         Assert.assertTrue(booleanResponseFormatEither.isRight());
207     }
208
209     @Test
210     public void shouldPassWhenInterfaceOperationOutputParamNamesUnique() {
211         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
212         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
213         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label2"));
214         Collection<Operation> operations = createInterfaceOperationData("op2",
215                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
216                 operationOutputDefinitionList,"update");
217
218         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
219                 .validateInterfaceOperations(operations, component, false);
220         Assert.assertTrue(booleanResponseFormatEither.isLeft());
221     }
222
223     @Test
224     public void shouldFailWhenOperationOutputParamNamesAreNotUnique() {
225         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("inputParam1"));
226         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("outParam1"));
227         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("outParam2"));
228         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("outParam2"));
229         Collection<Operation> operations = createInterfaceOperationData("op2",
230                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
231                 operationOutputDefinitionList,"update");
232
233         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
234                 .validateInterfaceOperations(operations, component, false);
235         Assert.assertTrue(booleanResponseFormatEither.isRight());
236     }
237
238     private Set<Operation> createInterfaceOperationData( String uniqueID, String description, ArtifactDefinition artifactDefinition,
239                                                          ListDataDefinition<OperationInputDefinition> inputs,
240                                                          ListDataDefinition<OperationOutputDefinition> outputs, String name) {
241         return Sets.newHashSet(InterfaceOperationTestUtils.createInterfaceOperation(uniqueID, description, artifactDefinition, inputs, outputs, name));
242     }
243
244     private Component setUpComponentMock(){
245         Component component = new Resource();
246
247         List<InputDefinition> inputs = new ArrayList<>();
248         InputDefinition inputDefinition = new InputDefinition();
249         InputDefinition inputDefinition1 = new InputDefinition();
250
251         List<ComponentInstanceInput> componentInstanceInputs = new ArrayList<>();
252         ComponentInstanceInput componentInstanceInput1 = new ComponentInstanceInput();
253         componentInstanceInput1.setComponentInstanceName("componentInstance1");
254         componentInstanceInput1.setUniqueId("inputId1");
255         ComponentInstanceInput componentInstanceInput2 = new ComponentInstanceInput();
256         componentInstanceInput2.setComponentInstanceName("componentInstance2");
257         componentInstanceInput2.setUniqueId("inputId2");
258
259         componentInstanceInputs.add(componentInstanceInput1);
260         componentInstanceInputs.add(componentInstanceInput2);
261
262         inputDefinition.setUniqueId("inputId1");
263         inputDefinition.setInputs(componentInstanceInputs);
264         inputDefinition1.setUniqueId("uniqueId3");
265
266         inputs.add(inputDefinition);
267         inputs.add(inputDefinition1);
268         component.setInputs(inputs);
269         component.setInterfaces(createMockInterfaceDefinition());
270         return  component;
271     }
272
273     private  Map<String, InterfaceDefinition> createMockInterfaceDefinition() {
274         Map<String, Operation> operationMap = InterfaceOperationTestUtils.createMockOperationMap();
275         Map<String, InterfaceDefinition> interfaceDefinitionMap = new HashMap<>();
276         interfaceDefinitionMap.put("int1", InterfaceOperationTestUtils.createInterface("int1", "Interface 1",
277                 "lifecycle", "tosca", operationMap));
278
279         return interfaceDefinitionMap;
280     }
281
282     private class InterfaceOperationValidationUtilTest extends InterfaceOperationValidation {
283
284         protected ResponseFormatManager getResponseFormatManager() {
285             return responseFormatManagerMock;
286         }
287     }
288 }