1 package org.openecomp.sdc.versioning.dao.impl.zusammen;
3 import com.amdocs.zusammen.datatypes.Id;
4 import com.amdocs.zusammen.datatypes.SessionContext;
5 import com.amdocs.zusammen.datatypes.item.Info;
6 import com.amdocs.zusammen.datatypes.item.ItemVersion;
7 import com.amdocs.zusammen.datatypes.item.ItemVersionData;
8 import com.amdocs.zusammen.datatypes.item.ItemVersionStatus;
9 import com.amdocs.zusammen.datatypes.item.SynchronizationStatus;
10 import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions;
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.Revision;
18 import org.openecomp.sdc.versioning.dao.types.Version;
19 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
20 import org.testng.Assert;
21 import org.testng.annotations.BeforeMethod;
22 import org.testng.annotations.Test;
24 import java.util.ArrayList;
25 import java.util.Date;
26 import java.util.List;
27 import java.util.Optional;
28 import java.util.stream.Collectors;
29 import java.util.stream.Stream;
31 import static org.mockito.Matchers.eq;
32 import static org.mockito.Matchers.isNull;
33 import static org.mockito.Mockito.doReturn;
34 import static org.mockito.Mockito.verify;
35 import static org.openecomp.sdc.versioning.dao.impl.zusammen.TestUtil.createZusammenContext;
37 public class VersionZusammenDaoImplTest {
39 private static final String USER = "user1";
41 private ZusammenAdaptor zusammenAdaptorMock;
43 private VersionZusammenDaoImpl versionDao;
46 public void setUp() throws Exception {
47 MockitoAnnotations.initMocks(this);
48 SessionContextProviderFactory.getInstance().createInterface().create(USER);
52 public void testListWhenNone() throws Exception {
53 String itemId = "itemId";
55 doReturn(new ArrayList<>()).when(zusammenAdaptorMock)
56 .listPublicVersions(eq(createZusammenContext(USER)), eq(new Id(itemId)));
58 List<Version> versions = versionDao.list(itemId);
60 Assert.assertTrue(versions.isEmpty());
64 public void testList() throws Exception {
65 String itemId = "itemId";
66 Id versionId1 = new Id("v1_id");
67 Id versionId2 = new Id("v2_id");
68 Id versionId3 = new Id("v3_id");
70 List<ItemVersion> zusammenVersions = Stream.of(
71 createZusammenVersion(versionId1, null, "version desc", "1.0", VersionStatus.Certified),
72 createZusammenVersion(versionId2, versionId1, "version desc", "2.0",
73 VersionStatus.Certified),
74 createZusammenVersion(versionId3, versionId2, "version desc", "3.0", VersionStatus.Draft))
75 .collect(Collectors.toList());
76 doReturn(zusammenVersions).when(zusammenAdaptorMock)
77 .listPublicVersions(eq(createZusammenContext(USER)), eq(new Id(itemId)));
79 List<Version> versions = versionDao.list(itemId);
80 Assert.assertEquals(versions.size(), 3);
82 int zusammenVersionIndex;
83 for (Version version : versions) {
84 zusammenVersionIndex = versionId1.getValue().equals(version.getId())
86 : versionId2.getValue().equals(version.getId())
89 assetVersionEquals(version, zusammenVersions.get(zusammenVersionIndex), null);
94 public void testCreate() throws Exception {
99 public void testCreateBasedOn() throws Exception {
100 testCreate("baseId");
103 private void testCreate(String baseId) {
104 String itemId = "itemId";
105 Version version = new Version(1, 0);
106 version.setBaseId(baseId);
107 version.setName("version name");
108 version.setDescription("version description");
109 version.setStatus(VersionStatus.Draft);
111 ArgumentCaptor<ItemVersionData> capturedZusammenVersion =
112 ArgumentCaptor.forClass(ItemVersionData.class);
114 String versionId = "versionId";
115 doReturn(new Id(versionId)).when(zusammenAdaptorMock)
116 .createVersion(eq(createZusammenContext(USER)), eq(new Id(itemId)),
117 baseId == null ? isNull(Id.class) : eq(new Id(baseId)),
118 capturedZusammenVersion.capture());
121 versionDao.create(itemId, version);
123 Assert.assertEquals(version.getId(), versionId);
125 Info capturedInfo = capturedZusammenVersion.getValue().getInfo();
126 Assert.assertEquals(capturedInfo.getName(), version.getName());
127 Assert.assertEquals(capturedInfo.getDescription(), version.getDescription());
128 Assert.assertEquals(VersionStatus
129 .valueOf(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS)),
130 version.getStatus());
131 Assert.assertEquals(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL),
136 public void testUpdate() throws Exception {
137 String itemId = "itemId";
138 Version version = new Version(1, 0);
139 version.setId("versionId");
140 version.setBaseId("baseId");
141 version.setName("version name");
142 version.setDescription("version description");
143 version.setStatus(VersionStatus.Certified);
145 ArgumentCaptor<ItemVersionData> capturedZusammenVersion =
146 ArgumentCaptor.forClass(ItemVersionData.class);
148 versionDao.update(itemId, version);
150 verify(zusammenAdaptorMock)
151 .updateVersion(eq(createZusammenContext(USER)), eq(new Id(itemId)),
152 eq(new Id(version.getId())), capturedZusammenVersion.capture());
154 Info capturedInfo = capturedZusammenVersion.getValue().getInfo();
155 Assert.assertEquals(capturedInfo.getName(), version.getName());
156 Assert.assertEquals(capturedInfo.getDescription(), version.getDescription());
157 Assert.assertEquals(VersionStatus
158 .valueOf(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS)),
159 version.getStatus());
160 Assert.assertEquals(capturedInfo.getProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL),
165 public void testGetNonExisting() throws Exception {
166 Optional<Version> version = versionDao.get("itemId", new Version("versionId"));
168 Assert.assertEquals(version, Optional.empty());
172 public void testGetSynced() throws Exception {
173 String itemId = "itemId";
174 String versionId = "versionId";
176 SessionContext zusammenContext = createZusammenContext(USER);
177 Id itemIdObj = new Id(itemId);
178 Id versionIdObj = new Id(versionId);
180 ItemVersion zusammenPrivateVersion =
181 createZusammenVersion(versionIdObj, new Id("baseId"), "version desc updated", "2.0",
182 VersionStatus.Draft);
183 doReturn(zusammenPrivateVersion).when(zusammenAdaptorMock)
184 .getVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
186 ItemVersionStatus zusammenVersionStatus =
187 new ItemVersionStatus(SynchronizationStatus.UP_TO_DATE, true);
188 doReturn(zusammenVersionStatus).when(zusammenAdaptorMock)
189 .getVersionStatus(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
191 Optional<Version> version = versionDao.get(itemId, new Version(versionId));
193 Assert.assertTrue(version.isPresent());
194 assetVersionEquals(version.get(), zusammenPrivateVersion, zusammenVersionStatus);
198 public void testGetOutOfSync() throws Exception {
199 String itemId = "itemId";
200 String versionId = "versionId";
202 SessionContext zusammenContext = createZusammenContext(USER);
203 Id itemIdObj = new Id(itemId);
204 Id versionIdObj = new Id(versionId);
206 ItemVersion zusammenPrivateVersion =
207 createZusammenVersion(versionIdObj, new Id("baseId"), "version desc updated", "2.0",
208 VersionStatus.Draft);
209 doReturn(zusammenPrivateVersion).when(zusammenAdaptorMock)
210 .getVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
212 ItemVersionStatus zusammenVersionStatus =
213 new ItemVersionStatus(SynchronizationStatus.OUT_OF_SYNC, true);
214 doReturn(zusammenVersionStatus).when(zusammenAdaptorMock)
215 .getVersionStatus(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
217 VersionStatus statusOnPublic = VersionStatus.Certified;
218 ItemVersion zusammenPublicVersion =
219 createZusammenVersion(versionIdObj, new Id("baseId"), "version desc", "2.0",
221 doReturn(zusammenPublicVersion).when(zusammenAdaptorMock)
222 .getPublicVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
224 Optional<Version> version = versionDao.get(itemId, new Version(versionId));
226 Assert.assertTrue(version.isPresent());
227 zusammenPrivateVersion.getData().getInfo()
228 .addProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS, statusOnPublic.name());
229 assetVersionEquals(version.get(), zusammenPrivateVersion, zusammenVersionStatus);
233 public void testGetMerging() throws Exception {
234 String itemId = "itemId";
235 String versionId = "versionId";
237 SessionContext zusammenContext = createZusammenContext(USER);
238 Id itemIdObj = new Id(itemId);
239 Id versionIdObj = new Id(versionId);
241 ItemVersion zusammenPrivateVersion =
242 createZusammenVersion(versionIdObj, new Id("baseId"), "version desc", "2.0",
243 VersionStatus.Draft);
244 doReturn(zusammenPrivateVersion).when(zusammenAdaptorMock)
245 .getVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
247 ItemVersionStatus zusammenVersionStatus =
248 new ItemVersionStatus(SynchronizationStatus.MERGING, true);
249 doReturn(zusammenVersionStatus).when(zusammenAdaptorMock)
250 .getVersionStatus(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
252 ItemVersion zusammenPublicVersion =
253 createZusammenVersion(versionIdObj, new Id("baseId"), "version desc", "2.0",
254 VersionStatus.Draft);
255 doReturn(zusammenPublicVersion).when(zusammenAdaptorMock)
256 .getPublicVersion(eq(zusammenContext), eq(itemIdObj), eq(versionIdObj));
258 Optional<Version> version = versionDao.get(itemId, new Version(versionId));
260 Assert.assertTrue(version.isPresent());
261 assetVersionEquals(version.get(), zusammenPrivateVersion, zusammenVersionStatus);
265 public void testPublish() throws Exception {
266 String itemId = "itemId";
267 String versionId = "versionId";
268 String message = "publish message";
270 versionDao.publish(itemId, new Version(versionId), message);
272 verify(zusammenAdaptorMock)
273 .publishVersion(eq(createZusammenContext(USER)), eq(new Id(itemId)), eq(new Id(versionId)),
278 public void testSync() throws Exception {
279 String itemId = "itemId";
280 String versionId = "versionId";
282 versionDao.sync(itemId, new Version(versionId));
284 verify(zusammenAdaptorMock)
285 .syncVersion(eq(createZusammenContext(USER)), eq(new Id(itemId)), eq(new Id(versionId)));
289 public void testForceSync() throws Exception {
290 String itemId = "itemId";
291 String versionId = "versionId";
293 versionDao.forceSync(itemId, new Version(versionId));
295 verify(zusammenAdaptorMock)
296 .forceSyncVersion(eq(createZusammenContext(USER)), eq(new Id(itemId)),
297 eq(new Id(versionId)));
301 public void testRevert() throws Exception {
302 String itemId = "itemId";
303 String versionId = "versionId";
304 String revisionId = "revisionId";
306 versionDao.revert(itemId, new Version(versionId), revisionId);
308 verify(zusammenAdaptorMock)
309 .revert(eq(createZusammenContext(USER)), eq(new Id(itemId)), eq(new Id(versionId)),
310 eq(new Id(revisionId)));
314 public void testListRevisionsWhenNone() throws Exception {
315 String itemId = "itemId";
316 String versionId = "versionId";
318 List<Revision> revisions = versionDao.listRevisions(itemId, new Version(versionId));
320 Assert.assertTrue(revisions.isEmpty());
324 public void testListRevisions() throws Exception {
325 String itemId = "itemId";
326 String versionId = "versionId";
328 long currentTime = System.currentTimeMillis();
329 Date rev4time = new Date(currentTime); // latest
330 Date rev3time = new Date(currentTime - 1);
331 Date rev2time = new Date(currentTime - 2);
332 Date rev1time = new Date(currentTime - 3); // oldest
333 List<com.amdocs.zusammen.datatypes.itemversion.Revision> zusammenRevisions = Stream.of(
334 createZusammenRevision("rev4", "forth rev", "user1", rev4time),
335 createZusammenRevision("rev1", "first rev", "user2", rev1time),
336 createZusammenRevision("rev3", "third rev", "user2", rev3time),
337 createZusammenRevision("rev2", "second rev", "user1", rev2time))
338 .collect(Collectors.toList());
339 ItemVersionRevisions toBeReturned = new ItemVersionRevisions();
340 toBeReturned.setItemVersionRevisions(zusammenRevisions);
341 doReturn(toBeReturned).when(zusammenAdaptorMock)
342 .listRevisions(eq(createZusammenContext(USER)), eq(new Id(itemId)), eq(new Id(versionId)));
344 List<Revision> revisions = versionDao.listRevisions(itemId, new Version(versionId));
346 Assert.assertEquals(revisions.size(), 4);
347 assertRevisionEquals(revisions.get(0), zusammenRevisions.get(0)); // rev4 - latest
348 assertRevisionEquals(revisions.get(1), zusammenRevisions.get(2)); // rev3
349 assertRevisionEquals(revisions.get(2), zusammenRevisions.get(3)); // rev2
350 assertRevisionEquals(revisions.get(3), zusammenRevisions.get(1)); // rev1 - oldest
353 private ItemVersion createZusammenVersion(Id id, Id baseId, String description, String label,
354 VersionStatus status) {
355 ItemVersion version = new ItemVersion();
357 version.setBaseId(baseId);
358 Info info = new Info();
359 info.setName(id + "_name");
360 info.setDescription(description);
361 info.addProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL, label);
362 info.addProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS, status.name());
363 ItemVersionData data = new ItemVersionData();
365 version.setData(data);
366 version.setCreationTime(new Date());
367 version.setModificationTime(new Date());
371 private void assetVersionEquals(Version version, ItemVersion zusammenVersion,
372 ItemVersionStatus zusammenVersionStatus) {
373 Assert.assertEquals(version.getId(), zusammenVersion.getId().getValue());
374 Assert.assertEquals(version.getBaseId(),
375 zusammenVersion.getBaseId() == null ? null : zusammenVersion.getBaseId().getValue());
376 Info info = zusammenVersion.getData().getInfo();
377 Assert.assertEquals(version.getName(), info.getName());
378 Assert.assertEquals(version.getDescription(), info.getDescription());
379 Assert.assertEquals(version.getStatus(),
380 VersionStatus.valueOf(info.getProperty(VersionZusammenDaoImpl.ZusammenProperty.STATUS)));
381 String label = info.getProperty(VersionZusammenDaoImpl.ZusammenProperty.LABEL).toString();
383 .assertEquals(version.getMajor(), Integer.parseInt(label.substring(0, label.indexOf('.'))));
384 Assert.assertEquals(version.getMinor(),
385 Integer.parseInt(label.substring(label.indexOf('.') + 1, label.length())));
386 Assert.assertEquals(version.getCreationTime(), zusammenVersion.getCreationTime());
387 Assert.assertEquals(version.getModificationTime(), zusammenVersion.getModificationTime());
389 if (zusammenVersionStatus != null) {
390 Assert.assertEquals(version.getState().isDirty(), zusammenVersionStatus.isDirty());
391 Assert.assertEquals(version.getState().getSynchronizationState().toString(),
392 zusammenVersionStatus.getSynchronizationStatus().toString());
396 private com.amdocs.zusammen.datatypes.itemversion.Revision createZusammenRevision(String id,
400 com.amdocs.zusammen.datatypes.itemversion.Revision revision = new com.amdocs.zusammen
401 .datatypes.itemversion.Revision();
402 revision.setRevisionId(new Id(id));
403 revision.setMessage(message);
404 revision.setUser(user);
405 revision.setTime(time);
409 private void assertRevisionEquals(
411 com.amdocs.zusammen.datatypes.itemversion.Revision zusammenRevision) {
412 Assert.assertEquals(revision.getId(), zusammenRevision.getRevisionId().getValue());
413 Assert.assertEquals(revision.getMessage(), zusammenRevision.getMessage());
414 Assert.assertEquals(revision.getUser(), zusammenRevision.getUser());
415 Assert.assertEquals(revision.getTime(), zusammenRevision.getTime());