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 static org.junit.jupiter.api.Assertions.assertTrue;
25 import fj.data.Either;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.mockito.Mockito;
29 import org.openecomp.sdc.be.components.csar.CsarArtifactsAndGroupsBusinessLogic;
30 import org.openecomp.sdc.be.components.csar.CsarBusinessLogic;
31 import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
32 import org.openecomp.sdc.be.components.impl.CompositionBusinessLogic;
33 import org.openecomp.sdc.be.components.impl.DataTypeBusinessLogic;
34 import org.openecomp.sdc.be.components.impl.InputsBusinessLogic;
35 import org.openecomp.sdc.be.components.impl.ModelBusinessLogic;
36 import org.openecomp.sdc.be.components.impl.OutputsBusinessLogic;
37 import org.openecomp.sdc.be.components.impl.PolicyBusinessLogic;
38 import org.openecomp.sdc.be.components.impl.PolicyTypeBusinessLogic;
39 import org.openecomp.sdc.be.components.impl.PropertyBusinessLogic;
40 import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
41 import org.openecomp.sdc.be.components.impl.ResourceImportManager;
42 import org.openecomp.sdc.be.components.merge.resource.ResourceDataMergeBusinessLogic;
43 import org.openecomp.sdc.be.components.merge.utils.MergeInstanceUtils;
44 import org.openecomp.sdc.be.components.validation.component.ComponentContactIdValidator;
45 import org.openecomp.sdc.be.components.validation.component.ComponentNameValidator;
46 import org.openecomp.sdc.be.dao.api.ActionStatus;
47 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
48 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
49 import org.openecomp.sdc.be.model.Component;
50 import org.openecomp.sdc.be.model.LifecycleStateEnum;
51 import org.openecomp.sdc.be.model.Resource;
52 import org.openecomp.sdc.be.model.User;
53 import org.openecomp.sdc.be.model.operations.impl.ModelOperation;
54 import org.openecomp.sdc.be.user.Role;
55 import org.openecomp.sdc.exception.ResponseFormat;
57 public class CheckoutTest extends LifecycleTestBase {
59 private CheckoutTransition checkoutObj = null;
60 private final ComponentInstanceBusinessLogic componentInstanceBusinessLogic = Mockito.mock(ComponentInstanceBusinessLogic.class);
61 private final ResourceImportManager resourceImportManager = Mockito.mock(ResourceImportManager.class);
62 private final InputsBusinessLogic inputsBusinessLogic = Mockito.mock(InputsBusinessLogic.class);
63 private final OutputsBusinessLogic outputsBusinessLogic = Mockito.mock(OutputsBusinessLogic.class);
64 private final CompositionBusinessLogic compositionBusinessLogic = Mockito.mock(CompositionBusinessLogic.class);
65 private final ResourceDataMergeBusinessLogic resourceDataMergeBusinessLogic = Mockito.mock(ResourceDataMergeBusinessLogic.class);
66 private final CsarArtifactsAndGroupsBusinessLogic csarArtifactsAndGroupsBusinessLogic = Mockito.mock(CsarArtifactsAndGroupsBusinessLogic.class);
67 private final MergeInstanceUtils mergeInstanceUtils = Mockito.mock(MergeInstanceUtils.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 public 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 changeStateResult = checkoutObj.changeState(ComponentTypeEnum.RESOURCE, resource, bl, user, owner, false, false);
111 assertTrue(changeStateResult.isLeft());
113 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
114 changeStateResult = checkoutObj.changeState(ComponentTypeEnum.RESOURCE, resource, bl, user, owner, false, false);
115 assertTrue(changeStateResult.isLeft());
120 public void testAlreadyCheckout() {
121 Either<Resource, ResponseFormat> changeStateResult;
122 Resource resource = createResourceObject();
124 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
125 Either<User, ResponseFormat> ownerResponse = checkoutObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
126 assertTrue(ownerResponse.isLeft());
127 User owner = ownerResponse.left().value();
128 Either<Boolean, ResponseFormat> validateBeforeTransition = checkoutObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, user,
129 owner, LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
130 assertTrue(validateBeforeTransition.isRight());
131 changeStateResult = Either.right(validateBeforeTransition.right().value());
133 assertTrue(changeStateResult.isRight());
134 assertResponse(changeStateResult, ActionStatus.COMPONENT_IN_CHECKOUT_STATE, resource.getName(),
135 ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId());
140 public void testRoles() {
141 Either<Resource, ResponseFormat> changeStateResult;
142 Resource resource = createResourceObject();
144 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
146 User modifier = new User();
147 modifier.setUserId("modifier");
148 modifier.setFirstName("Albert");
149 modifier.setLastName("Einstein");
150 modifier.setRole(Role.DESIGNER.name());
151 Either<User, ResponseFormat> ownerResponse = checkoutObj.getComponentOwner(resource, ComponentTypeEnum.RESOURCE);
152 assertTrue(ownerResponse.isLeft());
153 User owner = ownerResponse.left().value();
154 // changeStateResult = checkoutObj.changeStateOperation(resource,
156 Either<Boolean, ResponseFormat> validateBeforeTransition = checkoutObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE,
157 modifier, owner, LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
158 assertTrue(validateBeforeTransition.isLeft());
160 modifier.setRole(Role.TESTER.name());
161 // changeStateResult = checkoutObj.changeStateOperation(resource,
163 validateBeforeTransition = checkoutObj.validateBeforeTransition(resource, ComponentTypeEnum.RESOURCE, modifier, owner,
164 LifecycleStateEnum.NOT_CERTIFIED_CHECKIN);
165 assertTrue(validateBeforeTransition.isRight());
166 changeStateResult = Either.right(validateBeforeTransition.right().value());
167 assertResponse(changeStateResult, ActionStatus.RESTRICTED_OPERATION);