2 * Copyright © 2016-2018 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.openecomp.core.zusammen.impl;
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;
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;
49 public class ZusammenAdaptorImplTest {
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"));
60 private ZusammenConnector connector;
62 private ZusammenAdaptorImpl zusammenAdaptor;
64 private ArgumentCaptor<Element> savedElementArg;
67 public void setUp() throws Exception {
68 MockitoAnnotations.initMocks(this);
72 public void getEmptyWhenElementNameNotExist() {
73 doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
75 Optional<Element> element =
76 zusammenAdaptor.getElementByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "nonExistingName");
78 assertFalse(element.isPresent());
82 public void getEmptyInfoWhenElementNameNotExist() {
83 doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
85 Optional<ElementInfo> elementInfo =
86 zusammenAdaptor.getElementInfoByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "nonExistingName");
88 assertFalse(elementInfo.isPresent());
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());
97 Optional<Element> element = zusammenAdaptor.getElementByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "element2");
99 assertTrue(element.isPresent());
100 assertEquals(returnedElement, element.get());
104 public void getElementInfoWhenItsNameExist() {
105 doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
107 Optional<ElementInfo> elementInfo =
108 zusammenAdaptor.getElementInfoByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "element2");
110 assertTrue(elementInfo.isPresent());
111 assertEquals(ELEMENTS.get(1), elementInfo.get());
116 public void listElementsWhenTheirParentIdExist() {
117 doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
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());
125 Collection<Element> elements = zusammenAdaptor.listElementData(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
127 assertEquals(returnedElements, elements);
131 public void getEmptyListWhenParentElementNameNotExist() {
132 doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
134 Collection<ElementInfo> elements =
135 zusammenAdaptor.listElementsByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "nonExistingName");
137 assertTrue(elements.isEmpty());
141 public void listElementsInfoWhenTheirParentElementNameExist() {
142 doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
144 List<ElementInfo> returnedElements = Arrays.asList(new ElementInfo(), new ElementInfo());
145 doReturn(returnedElements).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENTS.get(1).getId());
147 Collection<ElementInfo> elements =
148 zusammenAdaptor.listElementsByName(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID, "element2");
150 assertEquals(returnedElements, elements);
153 @Test(expected = IllegalArgumentException.class)
154 public void failWhenSavingElementWithoutIdNameOrAction() {
155 zusammenAdaptor.saveElement(CONTEXT, ELEMENT_CONTEXT, new ZusammenElement(), "Illegal element save");
159 public void saveElementAsRootWhenParentIdNotSupplied() {
160 String message = "Create new element tree";
161 ZusammenElement element = new ZusammenElement();
162 element.setAction(Action.CREATE);
164 ZusammenElement subElement = new ZusammenElement();
165 subElement.setAction(Action.CREATE);
166 element.addSubElement(subElement);
168 testSaveElement(message, element);
170 verify(connector).saveElement(CONTEXT, ELEMENT_CONTEXT, element, message);
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);
180 ZusammenElement subElement = new ZusammenElement();
181 subElement.setAction(Action.CREATE);
182 element.addSubElement(subElement);
184 testSaveElement(message, element);
186 verify(connector).saveElement(CONTEXT, ELEMENT_CONTEXT, element, message);
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"));
196 testSaveElement(message, element);
198 verify(connector).saveElement(CONTEXT, ELEMENT_CONTEXT, element, message);
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());
208 doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, null);
210 testSaveElement(message, element);
212 verify(connector).saveElement(eq(CONTEXT), eq(ELEMENT_CONTEXT), savedElementArg.capture(), eq(message));
214 Element savedElement = savedElementArg.getValue();
215 assertEquals(element, savedElement);
216 assertNotNull(savedElement.getElementId());
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);
226 ZusammenElement existingSub = new ZusammenElement();
227 existingSub.setAction(Action.UPDATE);
228 existingSub.setInfo(ELEMENTS.get(2).getInfo());
229 element.addSubElement(existingSub);
231 doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
233 testSaveElement(message, element);
235 verify(connector).saveElement(eq(CONTEXT), eq(ELEMENT_CONTEXT), savedElementArg.capture(), eq(message));
237 Element savedElement = savedElementArg.getValue();
238 assertEquals(element, savedElement);
240 Element updated = savedElement.getSubElements().iterator().next();
241 assertNotNull(updated.getElementId());
242 assertEquals(Action.UPDATE, updated.getAction());
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);
252 ZusammenElement nonExistingSub = new ZusammenElement();
253 nonExistingSub.setAction(Action.UPDATE);
254 Info info = new Info();
255 info.setName("nonExistingName");
256 nonExistingSub.setInfo(info);
258 element.addSubElement(nonExistingSub);
260 doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
262 testSaveElement(message, element);
264 verify(connector).saveElement(eq(CONTEXT), eq(ELEMENT_CONTEXT), savedElementArg.capture(), eq(message));
266 Element savedElement = savedElementArg.getValue();
267 assertEquals(element, savedElement);
269 Element created = savedElement.getSubElements().iterator().next();
270 assertNull(created.getElementId());
271 assertEquals(Action.CREATE, created.getAction());
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);
281 ZusammenElement existingSub = new ZusammenElement();
282 existingSub.setInfo(ELEMENTS.get(2).getInfo());
283 element.addSubElement(existingSub);
285 doReturn(ELEMENTS).when(connector).listElements(CONTEXT, ELEMENT_CONTEXT, ELEMENT_ID);
287 testSaveElement(message, element);
289 verify(connector).saveElement(eq(CONTEXT), eq(ELEMENT_CONTEXT), savedElementArg.capture(), eq(message));
291 Element savedElement = savedElementArg.getValue();
292 assertEquals(element, savedElement);
294 Element ignored = savedElement.getSubElements().iterator().next();
295 assertNotNull(ignored.getElementId());
296 assertEquals(Action.IGNORE, ignored.getAction());
299 private void testSaveElement(String message, ZusammenElement element) {
300 ZusammenElement returnedElement = new ZusammenElement();
301 doReturn(returnedElement).when(connector).saveElement(CONTEXT, ELEMENT_CONTEXT, element, message);
303 Element saved = zusammenAdaptor.saveElement(CONTEXT, ELEMENT_CONTEXT, element, message);
305 assertEquals(returnedElement, saved);
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();
313 elementInfo.setInfo(info);