Added oparent to sdc main
[sdc.git] / openecomp-be / lib / openecomp-sdc-versioning-lib / openecomp-sdc-versioning-core / src / test / java / org / openecomp / sdc / versioning / dao / impl / zusammen / ItemZusammenDaoImplTest.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.versioning.dao.impl.zusammen;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.mockito.Matchers.eq;
21 import static org.mockito.Mockito.doReturn;
22 import static org.mockito.Mockito.verify;
23 import static org.openecomp.sdc.versioning.dao.impl.zusammen.TestUtil.createZusammenContext;
24
25 import com.amdocs.zusammen.datatypes.Id;
26 import com.amdocs.zusammen.datatypes.item.Info;
27 import java.util.ArrayList;
28 import java.util.Collection;
29 import java.util.Date;
30 import java.util.HashMap;
31 import java.util.Iterator;
32 import java.util.List;
33 import java.util.Map;
34 import java.util.stream.Collectors;
35 import java.util.stream.Stream;
36 import org.junit.Assert;
37 import org.junit.Before;
38 import org.junit.Test;
39 import org.mockito.ArgumentCaptor;
40 import org.mockito.InjectMocks;
41 import org.mockito.Mock;
42 import org.mockito.MockitoAnnotations;
43 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
44 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
45 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
46 import org.openecomp.sdc.versioning.types.Item;
47 import org.openecomp.sdc.versioning.types.ItemStatus;
48
49 public class ItemZusammenDaoImplTest {
50
51   private static final String USER = "user1";
52   private static final String ITEM_TYPE = "item_type";
53   private static final String ITEM_VERSIONS_STATUSES = "item_versions_statuses";
54   private static final String APP_PROP_1 = "app_prop1";
55   private static final String APP_PROP_2 = "app_prop2";
56   private static final String tenant = "dox";
57
58   @Mock
59   private ZusammenAdaptor zusammenAdaptorMock;
60   @InjectMocks
61   private ItemZusammenDaoImpl itemDao;
62
63   @Before
64   public void setUp() throws Exception {
65     MockitoAnnotations.initMocks(this);
66     SessionContextProviderFactory.getInstance().createInterface().create(USER, tenant);
67   }
68
69   @Test
70   public void testListWhenNone() throws Exception {
71     doReturn(new ArrayList<>()).when(zusammenAdaptorMock)
72         .listItems(eq(createZusammenContext(USER)));
73
74     Collection<Item> items = itemDao.list();
75
76     Assert.assertTrue(items.isEmpty());
77   }
78
79   @Test
80   public void testList() throws Exception {
81     Map<String, Number> vlm1versionStatuses = new HashMap<>();
82     vlm1versionStatuses.put(VersionStatus.Draft.name(), 1);
83
84     Map<String, Number> vsp2versionStatuses = new HashMap<>();
85     vsp2versionStatuses.put(VersionStatus.Draft.name(), 3);
86     vsp2versionStatuses.put(VersionStatus.Certified.name(), 2);
87
88
89     List<com.amdocs.zusammen.datatypes.item.Item> returnedItems = Stream.of(
90         createItem("1", "vsp1", "vsp 1", "vsp", new Date(), new Date(), new HashMap<>()),
91         createItem("2", "vlm1", "vlm 1", "vlm", new Date(), new Date(), vlm1versionStatuses),
92         createItem("3", "vsp2", "vsp 2", "vsp", new Date(), new Date(), vsp2versionStatuses))
93         .collect(Collectors.toList());
94     doReturn(returnedItems).when(zusammenAdaptorMock).listItems(eq(createZusammenContext(USER)));
95
96     Collection<Item> items = itemDao.list();
97     assertEquals(items.size(), 3);
98
99     Iterator<Item> itemIterator = items.iterator();
100     assertItemEquals(itemIterator.next(), returnedItems.get(0));
101     assertItemEquals(itemIterator.next(), returnedItems.get(1));
102     assertItemEquals(itemIterator.next(), returnedItems.get(2));
103   }
104
105   @Test
106   public void testGetNonExisting() throws Exception {
107     Item requestedItem = new Item();
108     requestedItem.setId("1");
109
110     Item item = itemDao.get(requestedItem);
111
112     Assert.assertNull(item);
113   }
114
115   @Test
116   public void testGet() throws Exception {
117     Item inputItem = new Item();
118     inputItem.setId("1");
119
120     Map<String, Number> versionStatuses = new HashMap<>();
121     versionStatuses.put(VersionStatus.Draft.name(), 3);
122     versionStatuses.put(VersionStatus.Certified.name(), 2);
123
124     com.amdocs.zusammen.datatypes.item.Item toBeReturned =
125         createItem("1", "vsp1", "vsp 1", "vsp", new Date(System.currentTimeMillis() - 100),
126             new Date(), versionStatuses);
127     doReturn(toBeReturned).when(zusammenAdaptorMock)
128         .getItem(eq(createZusammenContext(USER)), eq(new Id(inputItem.getId())));
129
130     Item item = itemDao.get(inputItem);
131
132     Assert.assertNotNull(item);
133     assertItemEquals(item, toBeReturned);
134     assertEquals(item.getStatus(), ItemStatus.ACTIVE);
135
136   }
137
138   @Test
139   public void testCreate() throws Exception {
140     Item inputItem = new Item();
141     inputItem.setName("vsp1");
142     inputItem.setDescription("VSP 1");
143     inputItem.setType("vsp");
144
145     ArgumentCaptor<Info> capturedZusammenInfo = ArgumentCaptor.forClass(Info.class);
146
147     String itemId = "1";
148     doReturn(new Id(itemId)).when(zusammenAdaptorMock)
149         .createItem(eq(createZusammenContext(USER)), capturedZusammenInfo.capture());
150
151     Item item = itemDao.create(inputItem);
152
153     Info capturedInfo = capturedZusammenInfo.getValue();
154     assertEquals(capturedInfo.getName(), inputItem.getName());
155     assertEquals(capturedInfo.getDescription(), inputItem.getDescription());
156     assertEquals(capturedInfo.getProperty(ITEM_TYPE), inputItem.getType());
157     assertEquals(capturedInfo.getProperty(ITEM_VERSIONS_STATUSES),
158         inputItem.getVersionStatusCounters());
159
160     assertEquals(item.getId(), itemId);
161     assertEquals(item.getName(), inputItem.getName());
162     assertEquals(item.getDescription(), inputItem.getDescription());
163     assertEquals(item.getType(), inputItem.getType());
164     assertEquals(item.getVersionStatusCounters(), inputItem.getVersionStatusCounters());
165   }
166
167   @Test
168   public void testUpdate() throws Exception {
169     Item item = new Item();
170     item.setId("1");
171     item.setName("vsp1");
172     item.setDescription("VSP 1");
173     item.setType("vsp");
174     item.addVersionStatus(VersionStatus.Draft);
175     item.addVersionStatus(VersionStatus.Draft);
176     item.addVersionStatus(VersionStatus.Certified);
177
178     ArgumentCaptor<Info> capturedZusammenInfo = ArgumentCaptor.forClass(Info.class);
179
180     itemDao.update(item);
181
182     verify(zusammenAdaptorMock)
183         .updateItem(eq(createZusammenContext(USER)), eq(new Id(item.getId())),
184             capturedZusammenInfo.capture());
185
186     Info capturedInfo = capturedZusammenInfo.getValue();
187     assertEquals(capturedInfo.getName(), item.getName());
188     assertEquals(capturedInfo.getDescription(), item.getDescription());
189     assertEquals(capturedInfo.getProperty(ITEM_TYPE), item.getType());
190     assertEquals(capturedInfo.getProperty(ITEM_VERSIONS_STATUSES),
191         item.getVersionStatusCounters());
192   }
193
194   private com.amdocs.zusammen.datatypes.item.Item createItem(String id, String name,
195                                                              String description, String type,
196                                                              Date creationTime,
197                                                              Date modificationTime,
198                                                              Map<String, Number> versionStatusCounters) {
199     com.amdocs.zusammen.datatypes.item.Item item = new com.amdocs.zusammen.datatypes.item.Item();
200     item.setId(new Id(id));
201     Info info = new Info();
202     info.setName(name);
203     info.setDescription(description);
204     info.addProperty(ITEM_TYPE, type);
205     info.addProperty(ITEM_VERSIONS_STATUSES, versionStatusCounters);
206     info.addProperty(APP_PROP_1, "app_prop1_value");
207     info.addProperty(APP_PROP_2, 8);
208     item.setInfo(info);
209     item.setCreationTime(creationTime);
210     item.setModificationTime(modificationTime);
211     return item;
212   }
213
214   private void assertItemEquals(Item item, com.amdocs.zusammen.datatypes.item.Item zusammenItem) {
215     assertEquals(item.getId(), zusammenItem.getId().getValue());
216     assertEquals(item.getName(), zusammenItem.getInfo().getName());
217     assertEquals(item.getDescription(), zusammenItem.getInfo().getDescription());
218     assertEquals(item.getType(), zusammenItem.getInfo().getProperty(ITEM_TYPE));
219     assertEquals(item.getProperties().get(APP_PROP_1),
220         zusammenItem.getInfo().getProperty(APP_PROP_1));
221     assertEquals(item.getProperties().get(APP_PROP_2),
222         zusammenItem.getInfo().getProperty(APP_PROP_2));
223
224     Map<String, Number> zusammenStatusesMap =
225         zusammenItem.getInfo().getProperty(ITEM_VERSIONS_STATUSES);
226     Map<VersionStatus, Integer> statusesMap = item.getVersionStatusCounters();
227
228     zusammenStatusesMap.entrySet()
229             .forEach(entry -> assertEquals(statusesMap.get(VersionStatus.valueOf(entry.getKey())), entry.getValue()));
230
231     assertEquals(item.getCreationTime(), zusammenItem.getCreationTime());
232     assertEquals(item.getModificationTime(), zusammenItem.getModificationTime());
233   }
234
235 }