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