2953d0c293c1dc2419181d185b3e73cb3ef893eb
[sdc/sdc-workflow-designer.git] /
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.onap.sdc.workflow.persistence.impl;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertTrue;
21 import static org.mockito.ArgumentMatchers.isNull;
22 import static org.mockito.Matchers.any;
23 import static org.mockito.Matchers.eq;
24 import static org.mockito.Mockito.doReturn;
25 import static org.mockito.Mockito.verify;
26
27 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
28 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
29 import com.amdocs.zusammen.datatypes.Id;
30 import com.amdocs.zusammen.datatypes.SessionContext;
31 import com.amdocs.zusammen.datatypes.item.ElementContext;
32 import com.amdocs.zusammen.datatypes.item.Info;
33 import java.util.ArrayList;
34 import java.util.Collection;
35 import java.util.Optional;
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.junit.runner.RunWith;
39 import org.mapstruct.ap.internal.util.Collections;
40 import org.mockito.InjectMocks;
41 import org.mockito.Mock;
42 import org.mockito.Spy;
43 import org.mockito.junit.MockitoJUnitRunner;
44 import org.onap.sdc.workflow.persistence.impl.types.ParameterPropertyName;
45 import org.onap.sdc.workflow.persistence.impl.types.WorkflowElementType;
46 import org.onap.sdc.workflow.persistence.types.ParameterEntity;
47 import org.onap.sdc.workflow.persistence.types.ParameterRole;
48 import org.onap.sdc.workflow.persistence.types.ParameterType;
49 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
50 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
51
52 @RunWith(MockitoJUnitRunner.class)
53 public class ParameterRepositoryTest {
54
55     private static final String ITEM1_ID = "item_id_1";
56     private static final String VERSION1_ID = "version_id_1";
57     private static final String PARAMETER1_ID = "parameter_id_1";
58     private static final String PARAMETER2_ID = "parameter_id_2";
59     private static final String PARAMETERS_PARENT_ID = "parameters_id";
60
61
62     @Mock
63     private ZusammenAdaptor zusammenAdaptorMock;
64     @Spy
65     @InjectMocks
66     private ParameterRepositoryImpl parameterRepository;
67
68     @Before
69     public void setUp() {
70         SessionContextProviderFactory.getInstance().createInterface().create("test_user", "workflow");
71     }
72
73     @Test
74     public void shouldGetParameterById() {
75
76         ElementInfo element = new ElementInfo();
77         element.setId(new Id(PARAMETER1_ID));
78         Info info = new Info();
79         info.setName("testInput");
80         info.addProperty(ParameterPropertyName.TYPE.name(), ParameterType.FLOAT.name());
81         info.addProperty(ParameterPropertyName.MANDATORY.name(), true);
82         element.setInfo(info);
83         doReturn(Optional.of(element)).when(zusammenAdaptorMock)
84                                       .getElementInfo(any(SessionContext.class), any(ElementContext.class),
85                                               eq(new Id(PARAMETER1_ID)));
86         ParameterEntity result = parameterRepository.get(ITEM1_ID, VERSION1_ID, PARAMETER1_ID);
87         verify(zusammenAdaptorMock)
88                 .getElementInfo(any(SessionContext.class), any(ElementContext.class), eq(new Id(PARAMETER1_ID)));
89         assertEquals("testInput", result.getName());
90
91     }
92
93
94     @Test
95     public void shouldUpdateParameter() {
96         ParameterEntity parameterEntityToUpdate = new ParameterEntity();
97         parameterEntityToUpdate.setId(PARAMETER1_ID);
98         parameterEntityToUpdate.setName("Input1");
99         parameterEntityToUpdate.setMandatory(true);
100         parameterEntityToUpdate.setType(ParameterType.STRING);
101
102         parameterRepository.update(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT, parameterEntityToUpdate);
103         verify(zusammenAdaptorMock)
104                 .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
105                         eq("Update WorkflowVersion Parameter"));
106
107     }
108
109     @Test
110     public void shouldCreateParameterStructure() {
111         parameterRepository.createStructure(ITEM1_ID, VERSION1_ID);
112         verify(zusammenAdaptorMock)
113                 .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
114                         eq("Create WorkflowVersion INPUTS Element"));
115         verify(zusammenAdaptorMock)
116                 .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
117                         eq("Create WorkflowVersion OUTPUTS Element"));
118     }
119
120     @Test
121     public void shouldDeleteParameter() {
122         parameterRepository.delete(ITEM1_ID, VERSION1_ID, PARAMETER1_ID);
123         verify(zusammenAdaptorMock)
124                 .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
125                         eq("Delete Parameter with id parameter_id_1"));
126     }
127
128
129     @Test
130     public void shouldListParametersByType() {
131
132         ElementInfo parameter1 = new ElementInfo();
133         parameter1.setId(new Id(PARAMETER1_ID));
134         Info info1 = new Info();
135         info1.setName("input1");
136         info1.addProperty(ParameterPropertyName.TYPE.name(), "INTEGER");
137         info1.addProperty(ParameterPropertyName.MANDATORY.name(), true);
138         parameter1.setInfo(info1);
139         ElementInfo parameter2 = new ElementInfo();
140         parameter2.setId(new Id(PARAMETER2_ID));
141         Info info2 = new Info();
142         info2.setName("input2");
143         info2.addProperty(ParameterPropertyName.TYPE.name(), "STRING");
144         info2.addProperty(ParameterPropertyName.MANDATORY.name(), false);
145         parameter2.setInfo(info2);
146         Collection<ElementInfo> parameters = Collections.asSet(parameter1, parameter2);
147         doReturn(parameters).when(zusammenAdaptorMock)
148                             .listElementsByName(any(SessionContext.class), any(ElementContext.class), isNull(),
149                                     eq(WorkflowElementType.INPUTS.name()));
150         Collection<ParameterEntity> results = parameterRepository.list(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT);
151
152         verify(zusammenAdaptorMock).listElementsByName(any(SessionContext.class), any(ElementContext.class), isNull(),
153                 eq(WorkflowElementType.INPUTS.name()));
154         assertTrue(results.stream().anyMatch(parameterEntity -> parameterEntity.getId().equals(PARAMETER1_ID)));
155         assertTrue(results.stream().anyMatch(parameterEntity -> parameterEntity.getId().equals(PARAMETER2_ID)));
156     }
157
158     @Test
159     public void shouldDeleteAllParametersByType() {
160         ElementInfo parameterParentElement = new ElementInfo();
161         parameterParentElement.setId(new Id(PARAMETERS_PARENT_ID));
162         ElementInfo parameter1 = new ElementInfo();
163         parameter1.setId(new Id(PARAMETER1_ID));
164         ElementInfo parameter2 = new ElementInfo();
165         parameter2.setId(new Id(PARAMETER2_ID));
166         parameterParentElement.setSubElements(new ArrayList<>());
167         parameterParentElement.getSubElements().add(parameter1);
168         parameterParentElement.getSubElements().add(parameter2);
169
170         Optional<ElementInfo> elementOptional = Optional.of(parameterParentElement);
171
172         doReturn(elementOptional).when(zusammenAdaptorMock)
173                                  .getElementInfoByName(any(SessionContext.class), any(ElementContext.class), isNull(),
174                                          eq(WorkflowElementType.INPUTS.name()));
175
176         parameterRepository.deleteAll(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT);
177         verify(zusammenAdaptorMock)
178                 .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
179                         eq("Delete all INPUT"));
180     }
181
182     @Test(expected = IllegalStateException.class)
183     public void shouldFailIfParentElementDoesNotExist() {
184         doReturn(Optional.empty()).when(zusammenAdaptorMock)
185                                  .getElementInfoByName(any(SessionContext.class), any(ElementContext.class), isNull(),
186                                          eq(WorkflowElementType.INPUTS.name()));
187         parameterRepository.deleteAll(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT);
188     }
189
190     @Test
191     public void shouldCreateParameter() {
192         ZusammenElement zusammenParentElement = new ZusammenElement();
193         zusammenParentElement.setElementId(new Id(PARAMETERS_PARENT_ID));
194         ZusammenElement zusammenElement = new ZusammenElement();
195         zusammenElement.setElementId(new Id(PARAMETER1_ID));
196         zusammenParentElement.addSubElement(zusammenElement);
197         doReturn(zusammenParentElement).when(zusammenAdaptorMock)
198                                        .saveElement(any(SessionContext.class), any(ElementContext.class),
199                                                any(ZusammenElement.class), eq("Create WorkflowVersion Parameter Element"));
200         ParameterEntity parameterEntity = new ParameterEntity("test_input_parameter");
201         parameterEntity.setType(ParameterType.INTEGER);
202         parameterEntity.setMandatory(true);
203
204         ParameterEntity returnedParameter =
205                 parameterRepository.create(ITEM1_ID, VERSION1_ID, ParameterRole.INPUT, parameterEntity);
206         verify(zusammenAdaptorMock)
207                 .saveElement(any(SessionContext.class), any(ElementContext.class), any(ZusammenElement.class),
208                         eq("Create WorkflowVersion Parameter Element"));
209         assertEquals(PARAMETER1_ID, returnedParameter.getId());
210     }
211
212 }