Add UT for zusammen adaptor
[sdc.git] / openecomp-be / lib / openecomp-core-lib / openecomp-zusammen-lib / openecomp-zusammen-core / src / test / java / org / openecomp / core / zusammen / impl / ZusammenAdaptorImplTest.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.core.zusammen.impl;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertFalse;
21 import static org.junit.Assert.assertNotNull;
22 import static org.junit.Assert.assertNull;
23 import static org.junit.Assert.assertTrue;
24 import static org.mockito.ArgumentMatchers.eq;
25 import static org.mockito.Mockito.doReturn;
26 import static org.mockito.Mockito.verify;
27
28 import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element;
29 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo;
30 import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement;
31 import com.amdocs.zusammen.datatypes.Id;
32 import com.amdocs.zusammen.datatypes.SessionContext;
33 import com.amdocs.zusammen.datatypes.item.Action;
34 import com.amdocs.zusammen.datatypes.item.ElementContext;
35 import com.amdocs.zusammen.datatypes.item.Info;
36 import java.util.Arrays;
37 import java.util.Collection;
38 import java.util.List;
39 import java.util.Optional;
40 import org.junit.Before;
41 import org.junit.Test;
42 import org.mockito.ArgumentCaptor;
43 import org.mockito.Captor;
44 import org.mockito.InjectMocks;
45 import org.mockito.Mock;
46 import org.mockito.MockitoAnnotations;
47 import org.openecomp.core.zusammen.db.ZusammenConnector;
48
49 public class ZusammenAdaptorImplTest {
50
51     private static final SessionContext CONTEXT = new SessionContext();
52     private static final ElementContext ELEMENT_CONTEXT = new ElementContext();
53     private static final Id ELEMENT_ID = new Id("elementId 0");
54     private static final List<ElementInfo> ELEMENTS = Arrays.asList(
55                     createElementInfo("elementId1", "element1"),
56                     createElementInfo("elementId2", "element2"),
57                     createElementInfo("elementId3", "element3"));
58
59     @Mock
60     private ZusammenConnector connector;
61     @InjectMocks
62     private ZusammenAdaptorImpl zusammenAdaptor;
63     @Captor
64     private ArgumentCaptor<Element> savedElementArg;
65
66     @Before
67     public void setUp() throws Exception {
68         MockitoAnnotations.initMocks(this);
69     }
70
71     @Test
72     public void getEmptyWhenElementNameNotExist() {
73         doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
74
75         Optional<Element> element =
76                 zusammenAdaptor.getElementByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "nonExistingName");
77
78         assertFalse(element.isPresent());
79     }
80
81     @Test
82     public void getEmptyInfoWhenElementNameNotExist() {
83         doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
84
85         Optional<ElementInfo> elementInfo =
86                 zusammenAdaptor.getElementInfoByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "nonExistingName");
87
88         assertFalse(elementInfo.isPresent());
89     }
90
91     @Test
92     public void getElementWhenItsNameExist() {
93         doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
94         ZusammenElement returnedElement = new ZusammenElement();
95         doReturn(returnedElement).when(connector).getElement(CONTEXT, ELEMENT_CONTEXT, ELEMENTS.get(1).getId());
96
97         Optional<Element> element = zusammenAdaptor.getElementByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "element2");
98
99         assertTrue(element.isPresent());
100         assertEquals(returnedElement, element.get());
101     }
102
103     @Test
104     public void getElementInfoWhenItsNameExist() {
105         doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
106
107         Optional<ElementInfo> elementInfo =
108                 zusammenAdaptor.getElementInfoByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "element2");
109
110         assertTrue(elementInfo.isPresent());
111         assertEquals(ELEMENTS.get(1), elementInfo.get());
112
113     }
114
115     @Test
116     public void listElementsWhenTheirParentIdExist() {
117         doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
118
119         List<ZusammenElement> returnedElements =
120                 Arrays.asList(new ZusammenElement(), new ZusammenElement(), new ZusammenElement());
121         doReturn(returnedElements.get(0)).when(connector).getElement(CONTEXT, ELEMENT_CONTEXT, ELEMENTS.get(0).getId());
122         doReturn(returnedElements.get(1)).when(connector).getElement(CONTEXT, ELEMENT_CONTEXT, ELEMENTS.get(1).getId());
123         doReturn(returnedElements.get(2)).when(connector).getElement(CONTEXT, ELEMENT_CONTEXT, ELEMENTS.get(2).getId());
124
125         Collection<Element> elements = zusammenAdaptor.listElementData(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
126
127         assertEquals(returnedElements, elements);
128     }
129
130     @Test
131     public void getEmptyListWhenParentElementNameNotExist() {
132         doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
133
134         Collection<ElementInfo> elements =
135                 zusammenAdaptor.listElementsByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "nonExistingName");
136
137         assertTrue(elements.isEmpty());
138     }
139
140     @Test
141     public void listElementsInfoWhenTheirParentElementNameExist() {
142         doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
143
144         List<ElementInfo> returnedElements = Arrays.asList(new ElementInfo(), new ElementInfo());
145         doReturn(returnedElements).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENTS.get(1).getId());
146
147         Collection<ElementInfo> elements =
148                 zusammenAdaptor.listElementsByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "element2");
149
150         assertEquals(returnedElements, elements);
151     }
152
153     @Test(expected = IllegalArgumentException.class)
154     public void failWhenSavingElementWithoutIdNameOrAction() {
155         zusammenAdaptor.saveElement(CONTEXT, ELEMENT_CONTEXT, new ZusammenElement(), "Illegal element save");
156     }
157
158     @Test
159     public void saveElementAsRootWhenParentIdNotSupplied() {
160         String message = "Create new element tree";
161         ZusammenElement element = new ZusammenElement();
162         element.setAction(Action.CREATE);
163
164         ZusammenElement subElement = new ZusammenElement();
165         subElement.setAction(Action.CREATE);
166         element.addSubElement(subElement);
167
168         testSaveElement(message, element);
169
170         verify(connector).saveElement(CONTEXT, ELEMENT_CONTEXT, element, message);
171     }
172
173     @Test
174     public void saveElementAsSubWhenParentIdSupplied() {
175         String message = "Create sub element";
176         ZusammenElement element = new ZusammenElement();
177         element.setAction(Action.IGNORE);
178         element.setElementId(ELEMENT_ID);
179
180         ZusammenElement subElement = new ZusammenElement();
181         subElement.setAction(Action.CREATE);
182         element.addSubElement(subElement);
183
184         testSaveElement(message, element);
185
186         verify(connector).saveElement(CONTEXT, ELEMENT_CONTEXT, element, message);
187     }
188
189     @Test
190     public void saveElementWhenItsIdSupplied() {
191         String message = "Update element";
192         ZusammenElement element = new ZusammenElement();
193         element.setAction(Action.UPDATE);
194         element.setElementId(new Id("id"));
195
196         testSaveElement(message, element);
197
198         verify(connector).saveElement(CONTEXT, ELEMENT_CONTEXT, element, message);
199     }
200
201     @Test
202     public void saveRootElementWhenItsNameSupplied() {
203         String message = "Update element";
204         ZusammenElement element = new ZusammenElement();
205         element.setAction(Action.UPDATE);
206         element.setInfo(ELEMENTS.get(1).getInfo());
207
208         doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, null);
209
210         testSaveElement(message, element);
211
212         verify(connector).saveElement(eq(CONTEXT), eq(ELEMENT_CONTEXT), savedElementArg.capture(), eq(message));
213
214         Element savedElement = savedElementArg.getValue();
215         assertEquals(element, savedElement);
216         assertNotNull(savedElement.getElementId());
217     }
218
219     @Test
220     public void saveElementWhenItsNameAndParentIdSupplied() {
221         String message = "Update existing element";
222         ZusammenElement element = new ZusammenElement();
223         element.setAction(Action.IGNORE);
224         element.setElementId(ELEMENT_ID);
225
226         ZusammenElement existingSub = new ZusammenElement();
227         existingSub.setAction(Action.UPDATE);
228         existingSub.setInfo(ELEMENTS.get(2).getInfo());
229         element.addSubElement(existingSub);
230
231         doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
232
233         testSaveElement(message, element);
234
235         verify(connector).saveElement(eq(CONTEXT), eq(ELEMENT_CONTEXT), savedElementArg.capture(), eq(message));
236
237         Element savedElement = savedElementArg.getValue();
238         assertEquals(element, savedElement);
239
240         Element updated = savedElement.getSubElements().iterator().next();
241         assertNotNull(updated.getElementId());
242         assertEquals(Action.UPDATE, updated.getAction());
243     }
244
245     @Test
246     public void saveElementWithCreateActionInsteadOfUpdateWhenItDoesNotExist() {
247         String message = "Create new element";
248         ZusammenElement element = new ZusammenElement();
249         element.setAction(Action.IGNORE);
250         element.setElementId(ELEMENT_ID);
251
252         ZusammenElement nonExistingSub = new ZusammenElement();
253         nonExistingSub.setAction(Action.UPDATE);
254         Info info = new Info();
255         info.setName("nonExistingName");
256         nonExistingSub.setInfo(info);
257
258         element.addSubElement(nonExistingSub);
259
260         doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
261
262         testSaveElement(message, element);
263
264         verify(connector).saveElement(eq(CONTEXT), eq(ELEMENT_CONTEXT), savedElementArg.capture(), eq(message));
265
266         Element savedElement = savedElementArg.getValue();
267         assertEquals(element, savedElement);
268
269         Element created = savedElement.getSubElements().iterator().next();
270         assertNull(created.getElementId());
271         assertEquals(Action.CREATE, created.getAction());
272     }
273
274     @Test
275     public void saveElementWithIgnoreActionWhenItExistAndActionNotSupplied() {
276         String message = "save existing element";
277         ZusammenElement element = new ZusammenElement();
278         element.setAction(Action.IGNORE);
279         element.setElementId(ELEMENT_ID);
280
281         ZusammenElement existingSub = new ZusammenElement();
282         existingSub.setInfo(ELEMENTS.get(2).getInfo());
283         element.addSubElement(existingSub);
284
285         doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
286
287         testSaveElement(message, element);
288
289         verify(connector).saveElement(eq(CONTEXT), eq(ELEMENT_CONTEXT), savedElementArg.capture(), eq(message));
290
291         Element savedElement = savedElementArg.getValue();
292         assertEquals(element, savedElement);
293
294         Element ignored = savedElement.getSubElements().iterator().next();
295         assertNotNull(ignored.getElementId());
296         assertEquals(Action.IGNORE, ignored.getAction());
297     }
298
299     private void testSaveElement(String message, ZusammenElement element) {
300         ZusammenElement returnedElement = new ZusammenElement();
301         doReturn(returnedElement).when(connector).saveElement(CONTEXT, ELEMENT_CONTEXT, element, message);
302
303         Element saved = zusammenAdaptor.saveElement(CONTEXT, ELEMENT_CONTEXT, element, message);
304
305         assertEquals(returnedElement, saved);
306     }
307
308     private static ElementInfo createElementInfo(String id, String name) {
309         ElementInfo elementInfo = new ElementInfo();
310         elementInfo.setId(new Id(id));
311         Info info = new Info();
312         info.setName(name);
313         elementInfo.setInfo(info);
314         return elementInfo;
315     }
316 }