3 * Copyright © 2017-2018 European Support Limited
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
19 package org.openecomp.sdc.action.impl;
21 import org.junit.Assert;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.junit.runner.RunWith;
25 import org.mockito.Matchers;
26 import org.mockito.Mock;
27 import org.mockito.Mockito;
28 import org.mockito.MockitoAnnotations;
29 import org.mockito.runners.MockitoJUnitRunner;
30 import org.openecomp.core.dao.UniqueValueDao;
31 import org.openecomp.sdc.action.ActionConstants;
32 import org.openecomp.sdc.action.dao.ActionArtifactDao;
33 import org.openecomp.sdc.action.dao.ActionDao;
34 import org.openecomp.sdc.action.dao.types.ActionArtifactEntity;
35 import org.openecomp.sdc.action.dao.types.ActionEntity;
36 import org.openecomp.sdc.action.errors.ActionException;
37 import org.openecomp.sdc.action.types.Action;
38 import org.openecomp.sdc.action.types.ActionArtifact;
39 import org.openecomp.sdc.action.types.ActionArtifactProtection;
40 import org.openecomp.sdc.action.types.ActionStatus;
41 import org.openecomp.sdc.action.types.OpenEcompComponent;
42 import org.openecomp.sdc.common.errors.CoreException;
43 import org.openecomp.sdc.common.errors.ErrorCode;
44 import org.openecomp.sdc.versioning.ActionVersioningManager;
45 import org.openecomp.sdc.versioning.dao.VersionInfoDao;
46 import org.openecomp.sdc.versioning.dao.types.UserCandidateVersion;
47 import org.openecomp.sdc.versioning.dao.types.Version;
48 import org.openecomp.sdc.versioning.dao.types.VersionInfoEntity;
49 import org.openecomp.sdc.versioning.errors.VersioningErrorCodes;
50 import org.openecomp.sdc.versioning.types.VersionInfo;
52 import java.util.ArrayList;
53 import java.util.Date;
54 import java.util.HashMap;
55 import java.util.List;
58 import static org.mockito.Matchers.any;
59 import static org.mockito.Matchers.anyInt;
60 import static org.mockito.Matchers.anyString;
61 import static org.mockito.Mockito.doReturn;
62 import static org.mockito.Mockito.times;
63 import static org.mockito.Mockito.when;
65 @RunWith(MockitoJUnitRunner.class)
66 public class ActionManagerImplTest {
69 private ActionDao actionDao;
71 private ActionVersioningManager versioningManager;
73 private ActionArtifactDao actionArtifactDao;
75 private VersionInfoDao versionInfoDao;
77 private UniqueValueDao uniqueValueDao;
79 private ActionManagerImpl actionManager;
83 MockitoAnnotations.initMocks(this);
84 actionManager = new ActionManagerImpl(actionDao, versioningManager, actionArtifactDao,
85 versionInfoDao, uniqueValueDao);
89 public void testCreateAction() {
90 Action action = createAction();
91 Version version = createVersion();
92 doReturn(version).when(versioningManager).create(anyString(), anyString(), anyString());
93 doReturn(action).when(actionDao).createAction(any());
94 actionManager.createAction(action, "USER");
95 Mockito.verify(actionDao,times(1)).createAction(any());
99 public void testGetActionsByActionInvariantUuIdShouldPass() {
100 String invariantId = "invariantId";
101 Mockito.when(actionDao.getActionsByActionInvariantUuId(invariantId.toUpperCase())).thenReturn(mockActionsToReturn());
102 List<Action> actions = actionManager.getActionsByActionInvariantUuId(invariantId);
103 Assert.assertEquals(1, actions.size());
106 @Test(expected = ActionException.class)
107 public void testGetActionsByActionInvariantUuIdShouldThrowExceptionWhenReturnedActionsOrEmptyOrNull() {
108 String invariantId = "invariantId";
109 Mockito.when(actionDao.getActionsByActionInvariantUuId(invariantId.toUpperCase())).thenReturn(new ArrayList<>());
110 actionManager.getActionsByActionInvariantUuId(invariantId);
115 public void testGetFilteredActionsShouldPassForFilterTypeName() {
116 Mockito.when(actionDao.getFilteredActions(Matchers.anyString(), Matchers.anyString()))
117 .thenReturn(mockActionsToReturn());
118 List<Action> actions = actionManager.getFilteredActions("NAME", ActionConstants.FILTER_TYPE_NAME );
119 Assert.assertEquals(1, actions.size());
122 @Test(expected = ActionException.class)
123 public void testGetFilteredActionsShouldThrowExceptionForFilterTypeNameWhenReturnedActionsOrEmptyOrNull() {
124 Mockito.when(actionDao.getFilteredActions(Matchers.anyString(), Matchers.anyString()))
125 .thenReturn(new ArrayList<>());
126 actionManager.getFilteredActions("NAME", ActionConstants.FILTER_TYPE_NAME );
130 public void testGetFilteredActionsByMajorMinorVersionShouldPassWithActiveVersion() {
131 Mockito.when(actionDao.getFilteredActions(Matchers.anyString(), Matchers.anyString()))
132 .thenReturn(mockActionsToReturn());
134 Map<String, VersionInfo> actionVersionMap = new HashMap<>();
135 VersionInfo versionInfo = createVersionInfo();
136 actionVersionMap.put("uuid", versionInfo);
138 Mockito.when(versioningManager.listEntitiesVersionInfo(Matchers.anyString(),
139 Matchers.anyString(), Matchers.any())).thenReturn(actionVersionMap);
140 List<Action> actions = actionManager.getFilteredActions("type", ActionConstants.FILTER_TYPE_NAME );
141 Assert.assertEquals(1, actions.size());
145 public void testGetFilteredActionsByMajorMinorVersionShouldPassWithLatestFinalVersion() {
146 Mockito.when(actionDao.getFilteredActions(Matchers.anyString(), Matchers.anyString()))
147 .thenReturn(mockActionsToReturn());
149 Map<String, VersionInfo> actionVersionMap = new HashMap<>();
150 VersionInfo versionInfo = createVersionInfo();
151 actionVersionMap.put("uuid", versionInfo);
153 Mockito.when(versioningManager.listEntitiesVersionInfo(Matchers.anyString(),
154 Matchers.anyString(), Matchers.any())).thenReturn(actionVersionMap);
155 List<Action> actions = actionManager.getFilteredActions("type", ActionConstants.FILTER_TYPE_NAME );
156 Assert.assertEquals(1, actions.size());
160 public void testGetActionsByActionUuIdShouldPassIfReturnedActionsAreNotNull() {
161 String actionUuId = "actionUuId";
162 Mockito.when(actionDao.getActionsByActionUuId(actionUuId.toUpperCase()))
163 .thenReturn(new Action());
164 Assert.assertNotNull(actionManager.getActionsByActionUuId(actionUuId));
167 @Test(expected = ActionException.class)
168 public void testGetActionsByActionUuIdShouldThrowExceptionIfReturnedActionsAreNull() {
169 String actionUuId = "actionUuId";
170 Mockito.when(actionDao.getActionsByActionUuId(actionUuId.toUpperCase()))
172 actionManager.getActionsByActionUuId(actionUuId);
176 public void testGetOpenEcompComponents() {
177 ArrayList<OpenEcompComponent> ecompComponents = new ArrayList<>();
178 ecompComponents.add(new OpenEcompComponent());
179 Mockito.when(actionDao.getOpenEcompComponents())
180 .thenReturn(ecompComponents);
181 Assert.assertEquals(1, actionManager.getOpenEcompComponents().size());
185 public void testDeleteActionShouldPassIfDeleteMethodGeCallsOneTime() {
186 String actionInvariantUuId = "actionInvariantUuId";
187 String user = "user";
189 actionManager.deleteAction(actionInvariantUuId, user);
191 Mockito.verify(versioningManager, times(1)).delete(anyString(), anyString(), anyString());
192 Mockito.verify(actionDao, times(1)).deleteAction(anyString());
196 public void testUpdateActionShouldUpdateActionSuccessfully() {
197 Action action = new Action();
198 action.setActionInvariantUuId("actionInvId");
199 action.setName("actionToupdate");
200 action.setData("{actionInvariantUuId : actionInvariantUuId, name : actionToupdate}");
201 VersionInfo versionInfo = createVersionInfo();
202 Version activeVersion = new Version("2.1");
204 versionInfo.setActiveVersion(activeVersion);
205 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
206 .thenReturn(versionInfo);
208 ActionEntity actionEntity = createActionEntity();
210 when(actionDao.get(any())).thenReturn(actionEntity);
211 actionManager.updateAction(action, "user");
212 Mockito.verify(actionDao, times(1)).updateAction(any());
215 @Test(expected = ActionException.class)
216 public void testUpdateActionShouldThrowExceptionIfToUpdateAndExistingActionNameIsNotSame() {
217 Action action = createAction();
218 VersionInfo versionInfo = createVersionInfo();
219 Version activeVersion = new Version("2.1");
221 versionInfo.setActiveVersion(activeVersion);
222 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
223 .thenReturn(versionInfo);
224 actionManager.updateAction(action, "user");
228 public void testCheckoutShouldPassSuccessFully() {
229 String invariantUuId = "invariantUuId";
230 ActionEntity actionEntity = createActionEntity();
231 when(actionDao.get(any())).thenReturn(actionEntity);
232 Mockito.when(versioningManager.checkout(anyString(), anyString(),anyString())).thenReturn(createVersion());
233 Action action = actionManager.checkout(invariantUuId, "user");
234 Assert.assertNotNull(action);
235 Mockito.verify(actionDao, times(1)).update(Matchers.any(ActionEntity.class));
239 @Test(expected = ActionException.class)
240 public void testCheckoutShouldFailInCaseOfException() {
241 String invariantUuId = "invariantUuId";
242 Mockito.when(versioningManager.checkout(anyString(), anyString(),anyString()))
243 .thenThrow(new CoreException(new ErrorCode.ErrorCodeBuilder()
244 .withId(VersioningErrorCodes.CHECKOT_ON_LOCKED_ENTITY).build()));
245 VersionInfoEntity versionInfoEntity = createVersionInfoEntity();
246 when(versionInfoDao.get(any(VersionInfoEntity.class))).thenReturn(versionInfoEntity);
247 actionManager.checkout(invariantUuId, "user");
252 public void testUndoCheckoutShouldPass() {
253 VersionInfoEntity versionInfoEntity = createVersionInfoEntity();
254 when(versionInfoDao.get(any(VersionInfoEntity.class))).thenReturn(versionInfoEntity);
255 when(versioningManager.undoCheckout(anyString(), anyString(), anyString())).thenReturn(createVersion());
256 ActionEntity actionEntity = createActionEntity();
258 when(actionDao.get(any(ActionEntity.class))).thenReturn(actionEntity);
260 actionManager.undoCheckout("invariantUuid", "user");
261 Mockito.verify(actionArtifactDao, times(1)).delete(any(ActionArtifactEntity.class));
264 @Test(expected = ActionException.class)
265 public void testUndoCheckoutShouldThrowExceptionIfVersionInfoEntityIsNull() {
266 when(versionInfoDao.get(any(VersionInfoEntity.class))).thenReturn(null);
267 actionManager.undoCheckout("invariantUuid", "user");
272 public void testCheckinShouldPassForHappyScenario() {
273 when(versioningManager.checkin(anyString(), anyString(), anyString(), Matchers.any()))
274 .thenReturn(createVersion());
275 when(actionDao.get(any(ActionEntity.class))).thenReturn(createActionEntity());
276 Assert.assertNotNull(actionManager.checkin("invariantUuid", "user"));
277 Mockito.verify(actionDao, times(1)).update(Matchers.any(ActionEntity.class));
280 @Test(expected = ActionException.class)
281 public void testCheckinShouldShouldThrowExceptionInCaseOfAnyException() {
282 when(versioningManager.checkin(anyString(), anyString(), anyString(), Matchers.any()))
283 .thenThrow((new CoreException(new ErrorCode.ErrorCodeBuilder()
284 .withId(VersioningErrorCodes.CHECKIN_ON_UNLOCKED_ENTITY).build())));
285 actionManager.checkin("invariantUuid", "user");
289 public void testSubmitShouldPassForHappyScenario() {
290 when(versioningManager.submit(anyString(), anyString(), anyString(), Matchers.any()))
291 .thenReturn(createVersion());
292 when(actionDao.get(any(ActionEntity.class))).thenReturn(createActionEntity());
294 Assert.assertNotNull( actionManager.submit("invariantUuid", "user"));
296 Mockito.verify(actionDao, times(1)).update(Matchers.any(ActionEntity.class));
299 @Test(expected = ActionException.class)
300 public void testSubmitShouldThrowExceptionForAnyException() {
301 when(versioningManager.submit(anyString(), anyString(), anyString(), Matchers.any()))
302 .thenThrow((new CoreException(new ErrorCode.ErrorCodeBuilder()
303 .withId(VersioningErrorCodes.SUBMIT_FINALIZED_ENTITY_NOT_ALLOWED).build())));
304 actionManager.submit("invariantUuid", "user");
309 public void testDownloadArtifactShouldPassForHappyScenario() {
310 Action action = createAction();
311 action.setVersion("2.1");
312 when(actionDao.getActionsByActionUuId(anyString())).thenReturn(action);
313 when(actionArtifactDao.downloadArtifact(anyInt(), anyString())).thenReturn(new ActionArtifact());
314 Assert.assertNotNull(actionManager.downloadArtifact("actionUuId", "artifactUuId"));
317 @Test(expected = ActionException.class)
318 public void testDownloadArtifactShouldThrowExceptionIfActionIsNull() {
320 when(actionDao.getActionsByActionUuId(anyString())).thenReturn(null);
321 actionManager.downloadArtifact("actionUuId", "artifactUuId");
325 public void testUploadArtifactShouldPassForHappyScenario() {
326 ActionArtifact artifact = createActionArtifact();
327 artifact.setArtifactName("artifactNameToUpload");
328 VersionInfo versionInfo = createVersionInfo();
329 Version activeVersion = new Version("2.1");
330 versionInfo.setActiveVersion(activeVersion);
331 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
332 .thenReturn(versionInfo);
333 when(actionDao.get(any())).thenReturn(createActionEntity());
334 Assert.assertNotNull(actionManager.uploadArtifact(artifact, "actionInvariantUuId", "user"));
336 Mockito.verify(actionArtifactDao, times(1)).uploadArtifact(any(ActionArtifact.class));
337 Mockito.verify(actionDao, times(1)).updateAction(any(Action.class));
341 @Test(expected = ActionException.class)
342 public void testUploadArtifactShouldThrowExceptionIfArtifactAlreadyExist() {
343 ActionArtifact artifact = createActionArtifact();
344 VersionInfo versionInfo = createVersionInfo();
345 Version activeVersion = new Version("2.1");
346 versionInfo.setActiveVersion(activeVersion);
347 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
348 .thenReturn(versionInfo);
349 when(actionDao.get(any())).thenReturn(createActionEntity());
350 actionManager.uploadArtifact(artifact, "actionInvariantUuId", "user");
355 public void testDeleteArtifactShouldPassForHappyScenario() {
356 Action action = createAction();
357 action.setVersion("2.1");
358 action.getArtifacts().forEach(actionArtifact -> {
359 actionArtifact.setArtifactUuId("86B2B1049CC13B4E9275414DBB29485C");
360 actionArtifact.setArtifactProtection(ActionArtifactProtection.readWrite.name());
362 when(actionDao.getLockedAction(anyString(), anyString())).thenReturn(action);
363 actionManager.deleteArtifact("actionInvariantUuId", "86B2B1049CC13B4E9275414DBB29485C", "user" );
364 Mockito.verify(actionDao, times(1)).update(any(ActionEntity.class));
365 Mockito.verify(actionArtifactDao, times(1)).delete(any(ActionArtifactEntity.class));
368 @Test(expected = ActionException.class)
369 public void testDeleteArtifactShouldThrowExceptionIfArtifactMetaDataIsNull() {
370 when(actionDao.getLockedAction(anyString(), anyString())).thenReturn(createAction());
371 actionManager.deleteArtifact("actionInvariantUuId", "86B2B1049CC13B4E9275414DBB29485C", "user" );
375 public void testUpdateArtifactShouldPassForHappyScenario() {
376 ActionArtifact artifact = createActionArtifact();
377 VersionInfo versionInfo = createVersionInfo();
378 Version activeVersion = new Version("2.1");
379 versionInfo.setActiveVersion(activeVersion);
380 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
381 .thenReturn(versionInfo);
382 when(actionDao.get(any())).thenReturn(createActionEntity());
383 actionManager.updateArtifact(artifact, "actionInvariantUuId", "user");
384 Mockito.verify(actionArtifactDao, times(1)).updateArtifact(any(ActionArtifact.class));
387 @Test(expected = ActionException.class)
388 public void testUpdateArtifactShouldThrowExceptionIfArtifactNotExist() {
389 ActionArtifact artifact = createActionArtifact();
390 artifact.setArtifactUuId("Uuid");
391 VersionInfo versionInfo = createVersionInfo();
392 Version activeVersion = new Version("2.1");
393 versionInfo.setActiveVersion(activeVersion);
394 when(actionDao.get(any())).thenReturn(createActionEntity());
395 when(versioningManager.getEntityVersionInfo(anyString(), anyString(),anyString(), any()))
396 .thenReturn(versionInfo);
397 actionManager.updateArtifact(artifact, "actionInvariantUuId", "user");
400 private ActionArtifact createActionArtifact() {
401 ActionArtifact artifact = new ActionArtifact();
402 artifact.setArtifactUuId("artifactUuId");
403 artifact.setArtifactName("artifactName");
404 artifact.setArtifact(new byte[0]);
408 private List<Action> mockActionsToReturn() {
409 List<Action> actionList = new ArrayList<>();
410 Action action = new Action();
411 action.setActionInvariantUuId("uuid");
412 action.setVersion("1.1");
413 action.setStatus(ActionStatus.Available);
414 action.setData("action data");
415 actionList.add(action);
419 private VersionInfo createVersionInfo() {
420 VersionInfo versionInfo = new VersionInfo();
421 Version version = createVersion();
422 versionInfo.setActiveVersion(version);
423 versionInfo.setLatestFinalVersion(version);
427 private Version createVersion() {
428 Version version = new Version();
434 private ActionEntity createActionEntity() {
435 ActionEntity actionEntity = new ActionEntity();
436 actionEntity.setData("{actionUuId : actionUuId, actionInvariantUuId : actionInvariantUuId," +
437 " name : actionToupdate,version: 2.1 ," +
438 " artifacts : [{artifactUuId: artifactUuId ,artifactName : artifactName," +
439 "artifactLabel: artifactLabel, artifactProtection : readWrite, artifactCategory : artifactCategory," +
440 "artifactDescription: artifactDescription}] }");
441 actionEntity.setUser("user");
442 actionEntity.setTimestamp(new Date());
446 private Action createAction() {
447 Action action = new Action();
448 action.setActionUuId("uid");
449 action.setActionInvariantUuId("uuid");
450 action.setName("actionToupdate2");
451 action.setData("{actionInvariantUuId : actionInvariantUuId," +
452 " name : actionToupdate, artifacts : [{artifactName : artifactName}] }");
454 List<ActionArtifact> actionArtifacts = new ArrayList<>();
455 ActionArtifact actionArtifact = new ActionArtifact();
456 actionArtifact.setArtifactName("artifactName");
457 actionArtifact.setArtifactUuId("artifactUuId");
458 actionArtifacts.add(actionArtifact);
459 action.setArtifacts(actionArtifacts);
464 private VersionInfoEntity createVersionInfoEntity() {
465 VersionInfoEntity versionInfoEntity = new VersionInfoEntity();
466 UserCandidateVersion userCandidateVersion = new UserCandidateVersion();
467 userCandidateVersion.setUser("user");
468 userCandidateVersion.setVersion(createVersion());
469 versionInfoEntity.setCandidate(userCandidateVersion);
470 return versionInfoEntity;