Implement Attributes/Outputs BE (part 2)
[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.OutputsBusinessLogic;
34 import org.openecomp.sdc.be.components.impl.PolicyBusinessLogic;
35 import org.openecomp.sdc.be.components.impl.PropertyBusinessLogic;
36 import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
37 import org.openecomp.sdc.be.components.impl.ResourceImportManager;
38 import org.openecomp.sdc.be.components.merge.resource.ResourceDataMergeBusinessLogic;
39 import org.openecomp.sdc.be.components.merge.utils.MergeInstanceUtils;
40 import org.openecomp.sdc.be.components.validation.component.ComponentContactIdValidator;
41 import org.openecomp.sdc.be.components.validation.component.ComponentNameValidator;
42 import org.openecomp.sdc.be.dao.api.ActionStatus;
43 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
44 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
45 import org.openecomp.sdc.be.model.Component;
46 import org.openecomp.sdc.be.model.LifecycleStateEnum;
47 import org.openecomp.sdc.be.model.Resource;
48 import org.openecomp.sdc.be.model.User;
49 import org.openecomp.sdc.be.user.Role;
50 import org.openecomp.sdc.exception.ResponseFormat;
51
52 import static org.junit.Assert.assertTrue;
53
54 public class CheckoutTest extends LifecycleTestBase {
55
56     private CheckoutTransition checkoutObj = null;
57     private final ComponentInstanceBusinessLogic componentInstanceBusinessLogic = Mockito.mock(ComponentInstanceBusinessLogic.class);
58     private final ResourceImportManager resourceImportManager = Mockito.mock(ResourceImportManager.class);
59     private final InputsBusinessLogic inputsBusinessLogic = Mockito.mock(InputsBusinessLogic.class);
60     private final OutputsBusinessLogic outputsBusinessLogic = Mockito.mock(OutputsBusinessLogic.class);
61     private final CompositionBusinessLogic compositionBusinessLogic = Mockito.mock(CompositionBusinessLogic.class);
62     private final ResourceDataMergeBusinessLogic resourceDataMergeBusinessLogic = Mockito.mock(ResourceDataMergeBusinessLogic.class);
63     private final CsarArtifactsAndGroupsBusinessLogic csarArtifactsAndGroupsBusinessLogic = Mockito.mock(CsarArtifactsAndGroupsBusinessLogic.class);
64     private final MergeInstanceUtils mergeInstanceUtils = Mockito.mock(MergeInstanceUtils.class);
65     private final UiComponentDataConverter uiComponentDataConverter = Mockito.mock(UiComponentDataConverter.class);
66     private final CsarBusinessLogic csarBusinessLogic = Mockito.mock(CsarBusinessLogic.class);
67     private final PropertyBusinessLogic propertyBusinessLogic = Mockito.mock(PropertyBusinessLogic.class);
68     private final ComponentContactIdValidator componentContactIdValidator = new ComponentContactIdValidator(componentsUtils);
69     private final ComponentNameValidator componentNameValidator = new ComponentNameValidator(componentsUtils, toscaOperationFacade);
70     private final PolicyBusinessLogic policyBusinessLogic = Mockito.mock(PolicyBusinessLogic.class);
71     @InjectMocks
72     ResourceBusinessLogic bl = new ResourceBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
73         groupBusinessLogic, interfaceOperation, interfaceLifecycleTypeOperation, artifactsBusinessLogic,
74         componentInstanceBusinessLogic, resourceImportManager, inputsBusinessLogic, outputsBusinessLogic,compositionBusinessLogic,
75         resourceDataMergeBusinessLogic, csarArtifactsAndGroupsBusinessLogic, mergeInstanceUtils,
76         uiComponentDataConverter, csarBusinessLogic, artifactToscaOperation, propertyBusinessLogic,
77         componentContactIdValidator, componentNameValidator, componentTagsValidator, componentValidator,
78             componentIconValidator, componentProjectCodeValidator, componentDescriptionValidator ,policyBusinessLogic);
79
80     @Before
81     public void setup() {
82
83         super.setup();
84         // checkout transition object
85         checkoutObj = new CheckoutTransition(componentsUtils, toscaElementLifecycleOperation, toscaOperationFacade,
86             janusGraphDao);
87         checkoutObj.setLifeCycleOperation(toscaElementLifecycleOperation);
88         checkoutObj.setConfigurationManager(configurationManager);
89         bl.setToscaOperationFacade(toscaOperationFacade);
90         bl.setComponentsUtils(componentsUtils);
91
92     }
93
94     @Test
95     public void testCheckoutStateValidation() {
96         Either<? extends Component, ResponseFormat> changeStateResult;
97         Resource resource = createResourceObject();
98
99         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
100         Either<User, ResponseFormat> ownerResponse = checkoutObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
101         assertTrue(ownerResponse.isLeft());
102         User owner = ownerResponse.left().value();
103         changeStateResult = checkoutObj.changeState(ComponentTypeEnum.RESOURCE, resource, bl, user, owner, false, false);
104         assertTrue(changeStateResult.isLeft());
105
106         resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
107         changeStateResult = checkoutObj.changeState(ComponentTypeEnum.RESOURCE, resource, bl, user, owner, false, false);
108         assertTrue(changeStateResult.isLeft());
109
110     }
111
112     @Test
113     public void testAlreadyCheckout() {
114         Either<Resource, ResponseFormat> changeStateResult;
115         Resource resource = createResourceObject();
116
117         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
118         Either<User, ResponseFormat> ownerResponse = checkoutObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
119         assertTrue(ownerResponse.isLeft());
120         User owner = ownerResponse.left().value();
121         Either<Boolean, ResponseFormat> validateBeforeTransition = checkoutObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user, owner, LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
122         assertTrue(validateBeforeTransition.isRight());
123         changeStateResult = Either.right(validateBeforeTransition.right().value());
124
125         assertTrue(changeStateResult.isRight());
126         assertResponse(changeStateResult, ActionStatus.COMPONENT_IN_CHECKOUT_STATE, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
127
128     }
129
130     @Test
131     public void testRoles() {
132         Either<Resource, ResponseFormat> changeStateResult;
133         Resource resource = createResourceObject();
134
135         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
136
137         User modifier = new User();
138         modifier.setUserId("modifier");
139         modifier.setFirstName("Albert");
140         modifier.setLastName("Einstein");
141         modifier.setRole(Role.DESIGNER.name());
142         Either<User, ResponseFormat> ownerResponse = checkoutObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
143         assertTrue(ownerResponse.isLeft());
144         User owner = ownerResponse.left().value();
145         // changeStateResult = checkoutObj.changeStateOperation(resource,
146         // modifier, owner);
147         Either<Boolean, ResponseFormat> validateBeforeTransition = checkoutObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, modifier, owner, LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
148         assertTrue(validateBeforeTransition.isLeft());
149
150         modifier.setRole(Role.TESTER.name());
151         // changeStateResult = checkoutObj.changeStateOperation(resource,
152         // modifier, owner);
153         validateBeforeTransition = checkoutObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, modifier, owner, LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
154         assertTrue(validateBeforeTransition.isRight());
155         changeStateResult = Either.right(validateBeforeTransition.right().value());
156         assertResponse(changeStateResult, ActionStatus.RESTRICTED_OPERATION);
157
158     }
159 }