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