Revert "Delete workflow artifact
[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 com.google.common.collect.Sets;
20 import fj.data.Either;
21 import org.junit.Assert;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.mockito.InjectMocks;
25 import org.mockito.Mock;
26 import org.mockito.Mockito;
27 import org.mockito.MockitoAnnotations;
28 import org.openecomp.sdc.be.components.InterfaceOperationTestUtils;
29 import org.openecomp.sdc.be.components.impl.ResponseFormatManager;
30 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
31 import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition;
32 import org.openecomp.sdc.be.model.ArtifactDefinition;
33 import org.openecomp.sdc.be.model.Component;
34 import org.openecomp.sdc.be.model.ComponentParametersView;
35 import org.openecomp.sdc.be.model.InterfaceDefinition;
36 import org.openecomp.sdc.be.model.Operation;
37 import org.openecomp.sdc.be.model.Resource;
38 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
39 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
40 import org.openecomp.sdc.exception.ResponseFormat;
41
42 import java.util.Collection;
43 import java.util.HashMap;
44 import java.util.Map;
45 import java.util.Set;
46
47 import static org.mockito.ArgumentMatchers.any;
48 import static org.mockito.Mockito.when;
49
50 public class InterfaceOperationValidationTest implements InterfaceOperationTestUtils {
51
52     private Resource  resource = (Resource) getToscaFullElement().left().value();
53
54     ResponseFormatManager mock;
55     @Mock
56     ToscaOperationFacade toscaOperationFacade;
57
58     @InjectMocks
59     InterfaceOperationValidationUtilTest interfaceOperationValidationUtilTest = new InterfaceOperationValidationUtilTest();
60     private static final String RESOURCE_ID = "resource1";
61     ListDataDefinition<OperationInputDefinition> operationInputDefinitionList = new ListDataDefinition<>();
62     @Before
63     public void init() {
64         MockitoAnnotations.initMocks(this);
65         mock = Mockito.mock(ResponseFormatManager.class);
66         when(toscaOperationFacade.getToscaElement(any(), any(ComponentParametersView.class))).thenReturn(Either.left(resource));
67         when(mock.getResponseFormat(any())).thenReturn(new ResponseFormat());
68         when(mock.getResponseFormat(any(), any())).thenReturn(new ResponseFormat());
69         when(mock.getResponseFormat(any(), any(), any())).thenReturn(new ResponseFormat());
70     }
71
72
73     @Test
74     public void testValidInterfaceOperation() {
75         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
76         Collection<Operation> operations = createInterfaceOperationData("op2",
77                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"upgrade");
78         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
79                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
80         Assert.assertTrue(booleanResponseFormatEither.isLeft());
81     }
82
83     @Test
84     public void testInterfaceOperationDescriptionLength() {
85         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
86         Collection<Operation> operations = createInterfaceOperationData("op2",
87                 "interface operation2 -  The Spring Initializer provides a project generator to make you " +
88                         "productive with the certain technology stack from the beginning. You can create a skeleton project" +
89                         "with web, data access (relational and NoSQL datastores), cloud, or messaging support",
90                 new ArtifactDefinition(), operationInputDefinitionList,"update");
91         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
92                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
93         Assert.assertTrue(booleanResponseFormatEither.isRight());
94     }
95
96
97
98     @Test
99     public void testInterfaceOperationForEmptyType() {
100         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
101         Collection<Operation> operations = createInterfaceOperationData("op2",
102                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"");
103         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
104                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
105         Assert.assertTrue(booleanResponseFormatEither.isRight());
106     }
107
108     @Test
109     public void testInterfaceOperationForEmptyInputParam() {
110         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
111         Collection<Operation> operations = createInterfaceOperationData("op2",
112                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"input2");
113         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
114                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
115         Assert.assertTrue(booleanResponseFormatEither.isRight());
116     }
117
118     @Test
119     public void testInterfaceOperationForNonUniqueType() {
120         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
121         Collection<Operation> operations = createInterfaceOperationData("op2",
122                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"CREATE");
123         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
124                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
125         Assert.assertTrue(booleanResponseFormatEither.isRight());
126     }
127
128     @Test
129     public void testInterfaceOperationTypeLength() {
130         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
131         Collection<Operation> operations = createInterfaceOperationData("op2",
132                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
133                 "interface operation2 -  The Spring Initializer provides a project generator to make you " +
134                         "productive with the certain technology stack from the beginning. You can create a skeleton project" +
135                         "with web, data access (relational and NoSQL datastores), cloud, or messaging support");
136         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
137                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
138         Assert.assertTrue(booleanResponseFormatEither.isRight());
139     }
140
141
142     @Test
143     public void testInterfaceOperationUniqueInputParamNameInvalid() {
144         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
145         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
146         operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
147         operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
148         Collection<Operation> operations = createInterfaceOperationData("op2",
149                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"create");
150
151         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
152                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
153         Assert.assertTrue(booleanResponseFormatEither.isRight());
154     }
155
156     @Test
157     public void testInterfaceOperationUniqueInputParamNameValid() {
158         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
159         operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
160         Collection<Operation> operations = createInterfaceOperationData("op2",
161                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"update");
162
163
164         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
165                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
166         Assert.assertTrue(booleanResponseFormatEither.isLeft());
167     }
168
169     private Set<Operation> createInterfaceOperationData( String uniqueID, String description, ArtifactDefinition artifactDefinition,
170                                                          ListDataDefinition<OperationInputDefinition> inputs, String name) {
171         return Sets.newHashSet(createInterfaceOperation(uniqueID, description, artifactDefinition, inputs, name));
172     }
173
174     private  <T extends Component> Either<T, StorageOperationStatus> getToscaFullElement() {
175
176         return Either.left((T) setUpResourceMock());
177     }
178
179     private Resource setUpResourceMock(){
180         Resource resource = new Resource();
181         resource.setInterfaces(createMockInterfaceDefinition());
182
183         return  resource;
184     }
185
186     private  Map<String, InterfaceDefinition> createMockInterfaceDefinition() {
187         Map<String, Operation> operationMap = createMockOperationMap();
188         Map<String, InterfaceDefinition> interfaceDefinitionMap = new HashMap<>();
189         interfaceDefinitionMap.put("int1", createInterface("int1", "Interface 1",
190                 "lifecycle", "tosca", operationMap));
191
192         return interfaceDefinitionMap;
193     }
194
195     private class InterfaceOperationValidationUtilTest extends InterfaceOperationValidation {
196
197         protected ResponseFormatManager getResponseFormatManager() {
198             return mock;
199         }
200     }
201 }