2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.be.components.lifecycle;
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;
54 import static org.junit.jupiter.api.Assertions.assertTrue;
55 import static org.mockito.ArgumentMatchers.any;
56 import static org.mockito.Mockito.when;
58 class CheckoutTest extends LifecycleTestBase {
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);
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);
91 // checkout transition object
92 checkoutObj = new CheckoutTransition(componentsUtils, toscaElementLifecycleOperation, toscaOperationFacade,
94 checkoutObj.setLifeCycleOperation(toscaElementLifecycleOperation);
95 checkoutObj.setConfigurationManager(configurationManager);
96 bl.setToscaOperationFacade(toscaOperationFacade);
97 bl.setComponentsUtils(componentsUtils);
102 void testCheckoutStateValidation() {
103 Either<? extends Component, ResponseFormat> changeStateResult;
104 Resource resource = createResourceObject();
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());
114 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
115 changeStateResult = checkoutObj.changeState(ComponentTypeEnum.RESOURCE, resource, bl, user, owner, false, false);
116 assertTrue(changeStateResult.isLeft());
121 void testAlreadyCheckout() {
122 Either<Resource, ResponseFormat> changeStateResult;
123 Resource resource = createResourceObject();
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());
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());
142 Either<Resource, ResponseFormat> changeStateResult;
143 Resource resource = createResourceObject();
145 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
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,
157 Either<Boolean, ResponseFormat> validateBeforeTransition = checkoutObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE,
158 modifier, owner, LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
159 assertTrue(validateBeforeTransition.isLeft());
161 modifier.setRole(Role.TESTER.name());
162 // changeStateResult = checkoutObj.changeStateOperation(resource,
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);