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