Add collaboration feature
[sdc.git] / openecomp-be / lib / openecomp-sdc-versioning-lib / openecomp-sdc-versioning-core / src / test / java / org / openecomp / sdc / versioning / dao / impl / zusammen / VersionZusammenDaoImplTest.java
1 package org.openecomp.sdc.versioning.dao.impl.zusammen;
2
3 import com.amdocs.zusammen.datatypes.Id;
4 import com.amdocs.zusammen.datatypes.SessionContext;
5 import com.amdocs.zusammen.datatypes.UserInfo;
6 import com.amdocs.zusammen.datatypes.item.Info;
7 import com.amdocs.zusammen.datatypes.item.ItemVersion;
8 import com.amdocs.zusammen.datatypes.item.ItemVersionData;
9 import com.amdocs.zusammen.datatypes.item.ItemVersionStatus;
10 import com.amdocs.zusammen.datatypes.item.SynchronizationStatus;
11 import org.mockito.ArgumentCaptor;
12 import org.mockito.InjectMocks;
13 import org.mockito.Mock;
14 import org.mockito.MockitoAnnotations;
15 import org.openecomp.core.zusammen.api.ZusammenAdaptor;
16 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
17 import org.openecomp.sdc.versioning.dao.types.Version;
18 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
19 import org.testng.Assert;
20 import org.testng.annotations.BeforeMethod;
21 import org.testng.annotations.Test;
22
23 import java.util.Date;
24 import java.util.List;
25 import java.util.Optional;
26 import java.util.stream.Collectors;
27 import java.util.stream.Stream;
28
29 import static org.mockito.Matchers.any;
30 import static org.mockito.Matchers.eq;
31 import static org.mockito.Matchers.isNull;
32 import static org.mockito.Mockito.doReturn;
33 import static org.mockito.Mockito.verify;
34
35 public class VersionZusammenDaoImplTest {
36
37   private static final String USER = "user1";
38   @Mock
39   private ZusammenAdaptor zusammenAdaptorMock;
40   @InjectMocks
41   private VersionZusammenDaoImpl versionDao;
42
43   @BeforeMethod
44   public void setUp() throws Exception {
45     MockitoAnnotations.initMocks(this);
46     SessionContextProviderFactory.getInstance().createInterface().create(USER);
47   }
48
49   @Test
50   public void testList() throws Exception {
51     String itemId = "itemId";
52     Id versionId1 = new Id("v1_id");
53     Id versionId2 = new Id("v2_id");
54     Id versionId3 = new Id("v3_id");
55
56     List<ItemVersion> zusammenVersions = Stream.of(
57         createZusammenVersion(versionId1, null, "version desc", "1.0", VersionStatus.Certified),
58         createZusammenVersion(versionId2, versionId1, "version desc", "2.0", VersionStatus.Certified
59         ),
60         createZusammenVersion(versionId3, versionId2, "version desc", "3.0", VersionStatus.Draft))
61         .collect(Collectors.toList());
62     doReturn(zusammenVersions).when(zusammenAdaptorMock)
63         .listPublicVersions(eq(createZusammenContext()), eq(new Id(itemId)));
64
65     List<Version> versions = versionDao.list(itemId);
66     Assert.assertEquals(versions.size(), 3);
67
68     int zusammenVersionIndex;
69     for (Version version : versions) {
70       zusammenVersionIndex = versionId1.getValue().equals(version.getId())
71           ? 0
72           : versionId2.getValue().equals(version.getId())
73               ? 1
74               : 2;
75       assetVersionEquals(version, zusammenVersions.get(zusammenVersionIndex));
76     }
77   }
78
79   @Test
80   public void testCreate() throws Exception {
81     testCreate(null);
82   }
83
84   @Test
85   public void testCreateBasedOn() throws Exception {
86     testCreate("baseId");
87   }
88
89   private void testCreate(String baseId) {
90     String itemId = "itemId";
91     Version version = new Version(1, 0);
92     version.setBaseId(baseId);
93     version.setName("version name");
94     version.setDescription("version description");
95     version.setStatus(VersionStatus.Draft);
96
97     doReturn(new Id("versionId")).when(zusammenAdaptorMock)
98         .createVersion(eq(createZusammenContext()), eq(new Id(itemId)),
99             baseId == null ? isNull(Id.class) : eq(new Id(baseId)), any(ItemVersionData.class));
100
101     ArgumentCaptor<ItemVersionData> capturedZusammenVersion =
102         ArgumentCaptor.forClass(ItemVersionData.class);
103
104     versionDao.create(itemId, version);
105
106     verify(zusammenAdaptorMock)
107         .createVersion(eq(createZusammenContext()), eq(new Id(itemId)),
108             baseId == null ? isNull(Id.class) : eq(new Id(baseId)),
109             capturedZusammenVersion.capture());
110
111     Info capturedInfo = capturedZusammenVersion.getValue().getInfo();
112     Assert.assertEquals(capturedInfo.getName(), version.getName());
113     Assert.assertEquals(capturedInfo.getDescription(), version.getDescription());
114     Assert.assertEquals(VersionStatus
115             .valueOf(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS)),
116         version.getStatus());
117     Assert.assertEquals(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL),
118         version.toString());
119   }
120
121   @Test
122   public void testUpdate() throws Exception {
123     String itemId = "itemId";
124     Version version = new Version(1, 0);
125     version.setId("versionId");
126     version.setBaseId("baseId");
127     version.setName("version name");
128     version.setDescription("version description");
129     version.setStatus(VersionStatus.Certified);
130
131     ArgumentCaptor<ItemVersionData> capturedZusammenVersion =
132         ArgumentCaptor.forClass(ItemVersionData.class);
133
134     versionDao.update(itemId, version);
135
136     verify(zusammenAdaptorMock)
137         .updateVersion(eq(createZusammenContext()), eq(new Id(itemId)), eq(new Id(version.getId())),
138             capturedZusammenVersion.capture());
139
140     Info capturedInfo = capturedZusammenVersion.getValue().getInfo();
141     Assert.assertEquals(capturedInfo.getName(), version.getName());
142     Assert.assertEquals(capturedInfo.getDescription(), version.getDescription());
143     Assert.assertEquals(VersionStatus
144             .valueOf(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS)),
145         version.getStatus());
146     Assert.assertEquals(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL),
147         version.toString());
148   }
149
150   @Test
151   public void testGetNonExisting() throws Exception {
152     Optional<Version> version = versionDao.get("itemId", new Version("versionId"));
153
154     Assert.assertEquals(version, Optional.empty());
155   }
156
157   @Test
158   public void testGet() throws Exception {
159     String itemId = "itemId";
160     String versionId = "versionId";
161
162     SessionContext zusammenContext = createZusammenContext();
163     Id itemIdObj = new Id(itemId);
164     Id versionIdObj = new Id(versionId);
165
166     ItemVersion zusammenPrivateVersion =
167         createZusammenVersion(versionIdObj, new Id("baseId"), "version desc  updated", "2.0",
168             VersionStatus.Draft);
169     doReturn(zusammenPrivateVersion).when(zusammenAdaptorMock)
170         .getVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
171
172     doReturn(new ItemVersionStatus(SynchronizationStatus.UP_TO_DATE, true))
173         .when(zusammenAdaptorMock)
174         .getVersionStatus(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
175
176     ItemVersion zusammenPublicVersion =
177         createZusammenVersion(versionIdObj, new Id("baseId"), "version desc", "2.0",
178             VersionStatus.Certified);
179     doReturn(zusammenPublicVersion).when(zusammenAdaptorMock)
180         .getPublicVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
181
182     Optional<Version> version = versionDao.get(itemId, new Version(versionId));
183
184     Assert.assertTrue(version.isPresent());
185     zusammenPrivateVersion.getData().getInfo()
186         .addProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS,
187             VersionStatus.Certified.name());
188     assetVersionEquals(version.get(), zusammenPrivateVersion);
189   }
190
191   // TODO: 12/20/2017 complete tests
192  /* @Test
193   public void testDelete() throws Exception {
194
195   }
196
197   @Test
198   public void testPublish() throws Exception {
199
200   }
201
202   @Test
203   public void testSync() throws Exception {
204
205   }
206
207   @Test
208   public void testForceSync() throws Exception {
209
210   }
211
212   @Test
213   public void testRevert() throws Exception {
214
215   }
216
217   @Test
218   public void testListRevisions() throws Exception {
219
220   }*/
221
222   private void assetVersionEquals(Version version, ItemVersion zusammenVersion) {
223     Assert.assertEquals(version.getId(), zusammenVersion.getId().getValue());
224     Assert.assertEquals(version.getBaseId(),
225         zusammenVersion.getBaseId() == null ? null : zusammenVersion.getBaseId().getValue());
226     Info info = zusammenVersion.getData().getInfo();
227     Assert.assertEquals(version.getName(), info.getName());
228     Assert.assertEquals(version.getDescription(), info.getDescription());
229     Assert.assertEquals(version.getStatus(),
230         VersionStatus.valueOf(info.getProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS)));
231     String label = info.getProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL).toString();
232     Assert
233         .assertEquals(version.getMajor(), Integer.parseInt(label.substring(0, label.indexOf('.'))));
234     Assert.assertEquals(version.getMinor(),
235         Integer.parseInt(label.substring(label.indexOf('.') + 1, label.length())));
236     Assert.assertEquals(version.getCreationTime(), zusammenVersion.getCreationTime());
237     Assert.assertEquals(version.getModificationTime(), zusammenVersion.getModificationTime());
238   }
239
240   private ItemVersion createZusammenVersion(Id id, Id baseId, String description, String label,
241                                             VersionStatus status) {
242     ItemVersion version = new ItemVersion();
243     version.setId(id);
244     version.setBaseId(baseId);
245     Info info = new Info();
246     info.setName(id + "_name");
247     info.setDescription(description);
248     info.addProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL, label);
249     info.addProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS, status.name());
250     ItemVersionData data = new ItemVersionData();
251     data.setInfo(info);
252     version.setData(data);
253     version.setCreationTime(new Date());
254     version.setModificationTime(new Date());
255     return version;
256   }
257
258   private SessionContext createZusammenContext() {
259     SessionContext sessionContext = new SessionContext();
260     sessionContext.setUser(new UserInfo(USER));
261     sessionContext.setTenant("dox");
262     return sessionContext;
263   }
264
265 }