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