a27c959a2e76a2423c10dbe7b337dbd9e6f5a83d
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / lifecycle / CheckoutTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.components.lifecycle;
22
23 import fj.data.Either;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.mockito.InjectMocks;
27 import org.mockito.Mockito;
28 import org.openecomp.sdc.be.components.csar.CsarArtifactsAndGroupsBusinessLogic;
29 import org.openecomp.sdc.be.components.csar.CsarBusinessLogic;
30 import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
31 import org.openecomp.sdc.be.components.impl.CompositionBusinessLogic;
32 import org.openecomp.sdc.be.components.impl.InputsBusinessLogic;
33 import org.openecomp.sdc.be.components.impl.PropertyBusinessLogic;
34 import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
35 import org.openecomp.sdc.be.components.impl.ResourceImportManager;
36 import org.openecomp.sdc.be.components.merge.resource.ResourceDataMergeBusinessLogic;
37 import org.openecomp.sdc.be.components.merge.utils.MergeInstanceUtils;
38 import org.openecomp.sdc.be.components.validation.component.ComponentContactIdValidator;
39 import org.openecomp.sdc.be.components.validation.component.ComponentNameValidator;
40 import org.openecomp.sdc.be.dao.api.ActionStatus;
41 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
42 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
43 import org.openecomp.sdc.be.model.Component;
44 import org.openecomp.sdc.be.model.LifecycleStateEnum;
45 import org.openecomp.sdc.be.model.Resource;
46 import org.openecomp.sdc.be.model.User;
47 import org.openecomp.sdc.be.user.Role;
48 import org.openecomp.sdc.exception.ResponseFormat;
49
50 import static org.junit.Assert.assertTrue;
51
52 public class CheckoutTest extends LifecycleTestBase {
53
54     private CheckoutTransition checkoutObj = null;
55     private final ComponentInstanceBusinessLogic componentInstanceBusinessLogic = Mockito.mock(ComponentInstanceBusinessLogic.class);
56     private final ResourceImportManager resourceImportManager = Mockito.mock(ResourceImportManager.class);
57     private final InputsBusinessLogic inputsBusinessLogic = Mockito.mock(InputsBusinessLogic.class);
58     private final CompositionBusinessLogic compositionBusinessLogic = Mockito.mock(CompositionBusinessLogic.class);
59     private final ResourceDataMergeBusinessLogic resourceDataMergeBusinessLogic = Mockito.mock(ResourceDataMergeBusinessLogic.class);
60     private final CsarArtifactsAndGroupsBusinessLogic csarArtifactsAndGroupsBusinessLogic = Mockito.mock(CsarArtifactsAndGroupsBusinessLogic.class);
61     private final MergeInstanceUtils mergeInstanceUtils = Mockito.mock(MergeInstanceUtils.class);
62     private final UiComponentDataConverter uiComponentDataConverter = Mockito.mock(UiComponentDataConverter.class);
63     private final CsarBusinessLogic csarBusinessLogic = Mockito.mock(CsarBusinessLogic.class);
64     private final PropertyBusinessLogic propertyBusinessLogic = Mockito.mock(PropertyBusinessLogic.class);
65     protected ComponentContactIdValidator componentContactIdValidator = new ComponentContactIdValidator(componentsUtils);
66     protected ComponentNameValidator componentNameValidator = new ComponentNameValidator(componentsUtils, toscaOperationFacade);
67
68     @InjectMocks
69     ResourceBusinessLogic bl = new ResourceBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
70         groupBusinessLogic, interfaceOperation, interfaceLifecycleTypeOperation, artifactsBusinessLogic,
71         componentInstanceBusinessLogic, resourceImportManager, inputsBusinessLogic, compositionBusinessLogic,
72         resourceDataMergeBusinessLogic, csarArtifactsAndGroupsBusinessLogic, mergeInstanceUtils,
73         uiComponentDataConverter, csarBusinessLogic, artifactToscaOperation, propertyBusinessLogic,
74         componentContactIdValidator, componentNameValidator, componentTagsValidator, componentValidator,
75             componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator );
76
77     @Before
78     public void setup() {
79
80         super.setup();
81         // checkout transition object
82         checkoutObj = new CheckoutTransition(componentsUtils, toscaElementLifecycleOperation, toscaOperationFacade,
83             janusGraphDao);
84         checkoutObj.setLifeCycleOperation(toscaElementLifecycleOperation);
85         checkoutObj.setConfigurationManager(configurationManager);
86         bl.setToscaOperationFacade(toscaOperationFacade);
87         bl.setComponentsUtils(componentsUtils);
88
89     }
90
91     @Test
92     public void testCheckoutStateValidation() {
93         Either<? extends Component, ResponseFormat> changeStateResult;
94         Resource resource = createResourceObject();
95
96         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
97         Either<User, ResponseFormat> ownerResponse = checkoutObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
98         assertTrue(ownerResponse.isLeft());
99         User owner = ownerResponse.left().value();
100         changeStateResult = checkoutObj.changeState(ComponentTypeEnum.RESOURCE, resource, bl, user, owner, false, false);
101         assertTrue(changeStateResult.isLeft());
102
103         resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
104         changeStateResult = checkoutObj.changeState(ComponentTypeEnum.RESOURCE, resource, bl, user, owner, false, false);
105         assertTrue(changeStateResult.isLeft());
106
107     }
108
109     @Test
110     public void testAlreadyCheckout() {
111         Either<Resource, ResponseFormat> changeStateResult;
112         Resource resource = createResourceObject();
113
114         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
115         Either<User, ResponseFormat> ownerResponse = checkoutObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
116         assertTrue(ownerResponse.isLeft());
117         User owner = ownerResponse.left().value();
118         Either<Boolean, ResponseFormat> validateBeforeTransition = checkoutObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user, owner, LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
119         assertTrue(validateBeforeTransition.isRight());
120         changeStateResult = Either.right(validateBeforeTransition.right().value());
121
122         assertTrue(changeStateResult.isRight());
123         assertResponse(changeStateResult, ActionStatus.COMPONENT_IN_CHECKOUT_STATE, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
124
125     }
126
127     @Test
128     public void testRoles() {
129         Either<Resource, ResponseFormat> changeStateResult;
130         Resource resource = createResourceObject();
131
132         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
133
134         User modifier = new User();
135         modifier.setUserId("modifier");
136         modifier.setFirstName("Albert");
137         modifier.setLastName("Einstein");
138         modifier.setRole(Role.DESIGNER.name());
139         Either<User, ResponseFormat> ownerResponse = checkoutObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
140         assertTrue(ownerResponse.isLeft());
141         User owner = ownerResponse.left().value();
142         // changeStateResult = checkoutObj.changeStateOperation(resource,
143         // modifier, owner);
144         Either<Boolean, ResponseFormat> validateBeforeTransition = checkoutObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, modifier, owner, LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
145         assertTrue(validateBeforeTransition.isLeft());
146
147         modifier.setRole(Role.TESTER.name());
148         // changeStateResult = checkoutObj.changeStateOperation(resource,
149         // modifier, owner);
150         validateBeforeTransition = checkoutObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, modifier, owner, LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
151         assertTrue(validateBeforeTransition.isRight());
152         changeStateResult = Either.right(validateBeforeTransition.right().value());
153         assertResponse(changeStateResult, ActionStatus.RESTRICTED_OPERATION);
154
155     }
156 }