2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2021, Nordix Foundation. 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=========================================================
20 package org.openecomp.sdc.be.components.impl;
22 import static org.assertj.core.api.Assertions.assertThat;
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.junit.jupiter.api.Assertions.assertNotNull;
25 import static org.junit.jupiter.api.Assertions.assertTrue;
26 import static org.junit.jupiter.api.Assertions.fail;
27 import static org.mockito.ArgumentMatchers.any;
28 import static org.mockito.ArgumentMatchers.anyMap;
29 import static org.mockito.ArgumentMatchers.anyString;
30 import static org.mockito.ArgumentMatchers.eq;
31 import static org.mockito.Mockito.times;
32 import static org.mockito.Mockito.verify;
33 import static org.mockito.Mockito.when;
35 import fj.data.Either;
36 import java.util.ArrayList;
37 import java.util.Arrays;
38 import java.util.Collections;
39 import java.util.HashMap;
40 import java.util.List;
42 import java.util.stream.Collectors;
43 import javax.ws.rs.core.Response.Status;
44 import org.apache.commons.collections.CollectionUtils;
45 import org.junit.jupiter.api.BeforeEach;
46 import org.junit.jupiter.api.Test;
47 import org.mockito.InjectMocks;
48 import org.mockito.Mock;
49 import org.mockito.MockitoAnnotations;
50 import org.openecomp.sdc.be.components.attribute.AttributeDeclarationOrchestrator;
51 import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException;
52 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
53 import org.openecomp.sdc.be.components.validation.UserValidations;
54 import org.openecomp.sdc.be.config.ConfigurationManager;
55 import org.openecomp.sdc.be.dao.api.ActionStatus;
56 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
57 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
58 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
59 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
60 import org.openecomp.sdc.be.impl.ComponentsUtils;
61 import org.openecomp.sdc.be.model.AttributeDefinition;
62 import org.openecomp.sdc.be.model.ComponentInstOutputsMap;
63 import org.openecomp.sdc.be.model.ComponentInstance;
64 import org.openecomp.sdc.be.model.ComponentInstanceAttribOutput;
65 import org.openecomp.sdc.be.model.ComponentInstanceOutput;
66 import org.openecomp.sdc.be.model.ComponentParametersView;
67 import org.openecomp.sdc.be.model.LifecycleStateEnum;
68 import org.openecomp.sdc.be.model.OutputDefinition;
69 import org.openecomp.sdc.be.model.Service;
70 import org.openecomp.sdc.be.model.User;
71 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
72 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
73 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
74 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
75 import org.openecomp.sdc.be.model.operations.impl.AttributeOperation;
76 import org.openecomp.sdc.be.user.UserBusinessLogic;
77 import org.openecomp.sdc.common.impl.ExternalConfiguration;
78 import org.openecomp.sdc.common.impl.FSConfigurationSource;
79 import org.openecomp.sdc.exception.ResponseFormat;
81 class OutputsBusinessLogicTest {
83 private static final String COMPONENT_INSTANCE_ID = "instanceId";
84 private static final String COMPONENT_ID = "componentId";
85 private static final String USER_ID = "userId";
86 private static final String OUTPUT_ID = "outputId";
87 private static final String OUTPUT_TYPE = "string";
88 private static final String LISTOUTPUT_NAME = "listOutput";
89 private static final String LISTOUTPUT_SCHEMA_TYPE = "org.onap.datatypes.listoutput";
90 private static final String LISTOUTPUT_PROP1_NAME = "prop1";
91 private static final String LISTOUTPUT_PROP1_TYPE = "string";
92 private static final String LISTOUTPUT_PROP2_NAME = "prop2";
93 private static final String LISTOUTPUT_PROP2_TYPE = "integer";
94 private static final String OLD_VALUE = "old value";
95 private static final String NEW_VALUE = "new value";
96 private final ConfigurationManager configurationManager =
97 new ConfigurationManager(new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be"));
100 private ComponentsUtils componentsUtilsMock;
102 private UserBusinessLogic userAdminMock;
104 private ToscaOperationFacade toscaOperationFacadeMock;
106 private UserValidations userValidations;
108 private IGraphLockOperation graphLockOperation;
110 private AttributeDeclarationOrchestrator attributeDeclarationOrchestrator;
112 private ApplicationDataTypeCache applicationDataTypeCache;
114 private AttributeOperation attributeOperation;
116 private JanusGraphDao janusGraphDao;
118 private ResponseFormatManager responseFormatManager;
120 private OutputsBusinessLogic testInstance;
122 private Service service;
124 private Map<String, List<ComponentInstanceOutput>> instanceOutputMap;
125 private List<ComponentInstanceOutput> outputsList;
129 MockitoAnnotations.openMocks(this);
130 service = new Service();
131 service.setUniqueId(COMPONENT_ID);
132 service.setLastUpdaterUserId(USER_ID);
133 service.setIsDeleted(false);
134 service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
136 testInstance.setUserValidations(userValidations);
137 testInstance.setToscaOperationFacade(toscaOperationFacadeMock);
138 testInstance.setGraphLockOperation(graphLockOperation);
139 testInstance.setComponentsUtils(componentsUtilsMock);
140 testInstance.setJanusGraphDao(janusGraphDao);
141 testInstance.setApplicationDataTypeCache(applicationDataTypeCache);
142 testInstance.setAttributeOperation(attributeOperation);
144 // add a ComponentInstance
145 final ComponentInstance componentInstance = new ComponentInstance();
146 componentInstance.setUniqueId(COMPONENT_INSTANCE_ID);
147 componentInstance.setName(COMPONENT_INSTANCE_ID);
148 final AttributeDefinition attributeDefinition = new AttributeDefinition();
149 attributeDefinition.setName("attribName");
150 componentInstance.setAttributes(Collections.singletonList(attributeDefinition));
151 service.setComponentInstances(Collections.singletonList(componentInstance));
153 instanceOutputMap = new HashMap<>();
154 final ComponentInstanceOutput componentInstanceOutput = new ComponentInstanceOutput();
155 componentInstanceOutput.setOutputId(OUTPUT_ID);
156 componentInstanceOutput.setName(OUTPUT_ID);
157 outputsList = Collections.singletonList(componentInstanceOutput);
158 instanceOutputMap.put(COMPONENT_INSTANCE_ID, outputsList);
159 instanceOutputMap.put("someOutputId", Collections.singletonList(new ComponentInstanceOutput()));
160 service.setComponentInstancesOutputs(instanceOutputMap);
161 when(userValidations.validateUserExists(USER_ID)).thenReturn(new User());
162 when(userAdminMock.getUser(USER_ID, false)).thenReturn(new User());
166 void getComponentInstanceOutputs_ComponentInstanceNotExist() {
167 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(Either.left(service));
168 final Either<List<ComponentInstanceOutput>, ResponseFormat> componentInstanceOutputs = testInstance
169 .getComponentInstanceOutputs(USER_ID, COMPONENT_ID, "nonExisting");
170 assertThat(componentInstanceOutputs.isRight()).isTrue();
171 verify(componentsUtilsMock).getResponseFormat(ActionStatus.COMPONENT_INSTANCE_NOT_FOUND);
175 void getComponentInstanceOutputs_emptyOutputsMap() {
176 service.setComponentInstancesOutputs(Collections.emptyMap());
177 getComponents_emptyOutputs(service);
181 void getComponentInstanceOutputs_nullOutputsMap() {
182 service.setComponentInstancesOutputs(null);
183 getComponents_emptyOutputs(service);
187 void getComponentInstanceOutputs_instanceHasNoOutputs() {
188 service.setComponentInstancesOutputs(Collections.singletonMap("someOutputId", new ArrayList<>()));
189 getComponents_emptyOutputs(service);
193 void getComponentInstanceOutputs() {
194 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(Either.left(service));
195 final Either<List<ComponentInstanceOutput>, ResponseFormat> componentInstanceOutputs = testInstance
196 .getComponentInstanceOutputs(USER_ID, COMPONENT_ID, COMPONENT_INSTANCE_ID);
197 assertEquals("outputId", componentInstanceOutputs.left().value().get(0).getOutputId());
201 void testDeclareAttributes() {
202 service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
203 service.setLastUpdaterUserId(USER_ID);
204 final ComponentInstOutputsMap componentInstOutputsMap = new ComponentInstOutputsMap();
205 final Map<String, List<ComponentInstanceAttribOutput>> propertiesForDeclaration = new HashMap<>();
206 propertiesForDeclaration.put(COMPONENT_ID, getPropertiesListForDeclaration());
208 final List<OutputDefinition> declaredPropertiesToOutputs = getDeclaredProperties();
209 initMockitoStubbings(declaredPropertiesToOutputs);
211 final Either<List<OutputDefinition>, ResponseFormat> declaredPropertiesEither =
212 testInstance.declareAttributes(USER_ID, COMPONENT_ID, ComponentTypeEnum.SERVICE, componentInstOutputsMap);
214 assertThat(declaredPropertiesEither.isLeft()).isTrue();
216 final List<OutputDefinition> declaredProperties = declaredPropertiesEither.left().value();
217 assertThat(CollectionUtils.isNotEmpty(declaredProperties)).isTrue();
218 assertEquals(1, declaredProperties.size());
219 assertEquals(declaredProperties, declaredPropertiesToOutputs);
223 void testDeclareAttributes_fail() {
224 service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
225 service.setLastUpdaterUserId(USER_ID);
226 final ComponentInstOutputsMap componentInstOutputsMap = new ComponentInstOutputsMap();
227 final Map<String, List<ComponentInstanceAttribOutput>> propertiesForDeclaration = new HashMap<>();
228 propertiesForDeclaration.put(COMPONENT_ID, getPropertiesListForDeclaration());
230 final List<OutputDefinition> declaredPropertiesToOutputs = getDeclaredProperties();
231 initMockitoStubbings(declaredPropertiesToOutputs);
232 when(attributeDeclarationOrchestrator.declareAttributesToOutputs(any(), any())).thenThrow(ByResponseFormatComponentException.class);
233 final Either<List<OutputDefinition>, ResponseFormat> declaredPropertiesEither =
234 testInstance.declareAttributes(USER_ID, COMPONENT_ID, ComponentTypeEnum.SERVICE, componentInstOutputsMap);
236 assertThat(declaredPropertiesEither.isRight()).isTrue();
240 private void initMockitoStubbings(List<OutputDefinition> declaredPropertiesToOutputs) {
241 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(Either.left(service));
242 when(attributeDeclarationOrchestrator.declareAttributesToOutputs(any(), any())).thenReturn(Either.left(declaredPropertiesToOutputs));
243 when(toscaOperationFacadeMock.addOutputsToComponent(any(), any())).thenReturn(Either.left(declaredPropertiesToOutputs));
244 when(janusGraphDao.commit()).thenReturn(JanusGraphOperationStatus.OK);
245 when(graphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
246 when(graphLockOperation.unlockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
249 private void getComponents_emptyOutputs(Service service) {
250 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(Either.left(service));
251 final Either<List<ComponentInstanceOutput>, ResponseFormat> componentInstanceOutputs = testInstance
252 .getComponentInstanceOutputs(USER_ID, COMPONENT_ID, COMPONENT_INSTANCE_ID);
253 assertEquals(Collections.emptyList(), componentInstanceOutputs.left().value());
256 private List<ComponentInstanceAttribOutput> getPropertiesListForDeclaration() {
257 return outputsList.stream().map(this::getPropertyForDeclaration).collect(Collectors.toList());
260 private ComponentInstanceAttribOutput getPropertyForDeclaration(ComponentInstanceOutput componentInstanceOutput) {
261 final ComponentInstanceAttribOutput propOutput = new ComponentInstanceAttribOutput();
262 propOutput.setOutput(componentInstanceOutput);
263 propOutput.setAttributesName(componentInstanceOutput.getName());
268 private List<OutputDefinition> getDeclaredProperties() {
269 return outputsList.stream().map(OutputDefinition::new).collect(Collectors.toList());
272 private OutputDefinition setUpListOutput() {
273 final OutputDefinition listOutput = new OutputDefinition();
274 listOutput.setName(LISTOUTPUT_NAME);
275 listOutput.setType("list");
280 void test_deleteOutput_listOutput_fail_getComponent() throws Exception {
281 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
282 .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
283 when(componentsUtilsMock.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND)).thenReturn(ActionStatus.RESOURCE_NOT_FOUND);
286 testInstance.deleteOutput(COMPONENT_ID, USER_ID, LISTOUTPUT_NAME);
287 } catch (ComponentException e) {
288 assertEquals(ActionStatus.RESOURCE_NOT_FOUND, e.getActionStatus());
289 verify(toscaOperationFacadeMock, times(1)).getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class));
296 void test_deleteOutput_listOutput_fail_validateOutput() throws Exception {
297 final OutputDefinition listOutput = setUpListOutput();
298 final String outputId = COMPONENT_ID + "." + listOutput.getName();
299 listOutput.setUniqueId(outputId);
300 service.setOutputs(Collections.singletonList(listOutput));
301 final String NONEXIST_OUTPUT_NAME = "myOutput";
303 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(Either.left(service));
306 testInstance.deleteOutput(COMPONENT_ID, USER_ID, NONEXIST_OUTPUT_NAME);
307 } catch (ComponentException e) {
308 assertEquals(ActionStatus.OUTPUT_IS_NOT_CHILD_OF_COMPONENT, e.getActionStatus());
309 verify(toscaOperationFacadeMock, times(1)).getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class));
316 void test_deleteOutput_listOutput_fail_lockComponent() throws Exception {
317 final OutputDefinition listOutput = setUpListOutput();
318 final String outputId = COMPONENT_ID + "." + listOutput.getName();
319 listOutput.setUniqueId(outputId);
320 service.setOutputs(Collections.singletonList(listOutput));
322 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(Either.left(service));
323 when(graphLockOperation.lockComponent(COMPONENT_ID, NodeTypeEnum.Service)).thenReturn(StorageOperationStatus.NOT_FOUND);
324 when(componentsUtilsMock.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND, ComponentTypeEnum.SERVICE))
325 .thenReturn(ActionStatus.SERVICE_NOT_FOUND);
328 testInstance.deleteOutput(COMPONENT_ID, USER_ID, outputId);
329 } catch (ComponentException e) {
330 assertEquals(ActionStatus.SERVICE_NOT_FOUND, e.getActionStatus());
331 verify(toscaOperationFacadeMock, times(1)).getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class));
332 verify(graphLockOperation, times(1)).lockComponent(COMPONENT_ID, NodeTypeEnum.Service);
339 void test_deleteOutput_listOutput_fail_deleteOutput() throws Exception {
340 final OutputDefinition listOutput = setUpListOutput();
341 final String outputId = COMPONENT_ID + "." + listOutput.getName();
342 listOutput.setUniqueId(outputId);
343 service.setOutputs(Collections.singletonList(listOutput));
345 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(Either.left(service));
346 when(graphLockOperation.lockComponent(COMPONENT_ID, NodeTypeEnum.Service)).thenReturn(StorageOperationStatus.OK);
347 when(toscaOperationFacadeMock.deleteOutputOfResource(service, listOutput.getName())).thenReturn(StorageOperationStatus.BAD_REQUEST);
348 when(componentsUtilsMock.convertFromStorageResponse(StorageOperationStatus.BAD_REQUEST)).thenReturn(ActionStatus.INVALID_CONTENT);
351 testInstance.deleteOutput(COMPONENT_ID, USER_ID, outputId);
352 } catch (ComponentException e) {
353 assertEquals(ActionStatus.INVALID_CONTENT, e.getActionStatus());
354 verify(toscaOperationFacadeMock, times(1)).getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class));
355 verify(graphLockOperation, times(1)).lockComponent(COMPONENT_ID, NodeTypeEnum.Service);
356 verify(toscaOperationFacadeMock, times(1)).deleteOutputOfResource(service, listOutput.getName());
363 void test_deleteOutput_output_fail_unDeclare() throws Exception {
364 final OutputDefinition listOutput = setUpListOutput();
365 final String outputId = COMPONENT_ID + "." + listOutput.getName();
366 listOutput.setUniqueId(outputId);
367 service.setOutputs(Collections.singletonList(listOutput));
369 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(Either.left(service));
370 when(graphLockOperation.lockComponent(COMPONENT_ID, NodeTypeEnum.Service)).thenReturn(StorageOperationStatus.OK);
371 when(toscaOperationFacadeMock.deleteOutputOfResource(service, listOutput.getName())).thenReturn(StorageOperationStatus.OK);
372 when(attributeDeclarationOrchestrator.unDeclareAttributesAsOutputs(service, listOutput)).thenReturn(StorageOperationStatus.BAD_REQUEST);
373 when(componentsUtilsMock.convertFromStorageResponse(StorageOperationStatus.BAD_REQUEST)).thenReturn(ActionStatus.INVALID_CONTENT);
376 testInstance.deleteOutput(COMPONENT_ID, USER_ID, outputId);
377 } catch (ComponentException e) {
378 assertEquals(ActionStatus.INVALID_CONTENT, e.getActionStatus());
379 verify(attributeDeclarationOrchestrator, times(1)).unDeclareAttributesAsOutputs(service, listOutput);
386 void test_deleteOutput_output_success() throws Exception {
387 final OutputDefinition listOutput = setUpListOutput();
388 final String outputId = COMPONENT_ID + "." + listOutput.getName();
389 listOutput.setUniqueId(outputId);
390 service.setOutputs(Collections.singletonList(listOutput));
392 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(Either.left(service));
393 when(graphLockOperation.lockComponent(COMPONENT_ID, NodeTypeEnum.Service)).thenReturn(StorageOperationStatus.OK);
394 when(toscaOperationFacadeMock.deleteOutputOfResource(service, listOutput.getName())).thenReturn(StorageOperationStatus.OK);
395 when(attributeDeclarationOrchestrator.unDeclareAttributesAsOutputs(service, listOutput)).thenReturn(StorageOperationStatus.OK);
397 testInstance.deleteOutput(COMPONENT_ID, USER_ID, outputId);
398 verify(attributeDeclarationOrchestrator, times(1)).unDeclareAttributesAsOutputs(service, listOutput);
402 void testCreateOutputsInGraph_OK() {
403 final Map<String, OutputDefinition> outputs = new HashMap<>();
404 final var out_1 = new OutputDefinition();
405 out_1.setName("out-1");
406 out_1.setValue("{ get_attribute: [ instanceId, attribName ] }");
407 final var out_2 = new OutputDefinition();
408 out_2.setName("out-2");
409 out_2.setValue("{ get_attribute: [ SELF, oneMoreAttribute ] }");
410 outputs.put(out_1.getName(), out_1);
411 outputs.put(out_2.getName(), out_2);
413 final List<OutputDefinition> serviceOutputs = new ArrayList<>();
414 final var out_3 = new OutputDefinition();
415 out_3.setName("out-3");
416 serviceOutputs.add(out_3);
417 service.setOutputs(serviceOutputs);
419 final List<OutputDefinition> list = Arrays.asList(out_1, out_2, out_3);
420 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(Either.left(service));
421 when(graphLockOperation.lockComponent(COMPONENT_ID, NodeTypeEnum.Service)).thenReturn(StorageOperationStatus.OK);
422 when(attributeDeclarationOrchestrator.declareAttributesToOutputs(eq(service), any(ComponentInstOutputsMap.class)))
423 .thenReturn(Either.left(list));
424 when(toscaOperationFacadeMock.addOutputsToComponent(anyMap(), anyString())).thenReturn(Either.left(list));
426 final var result = testInstance.createOutputsInGraph(outputs, service, USER_ID);
427 assertTrue(result.isLeft());
428 assertEquals(3, result.left().value().size());
429 assertEquals(list, result.left().value());
433 void testCreateOutputsInGraph_NegativeCreateAndAssociateOutputsStatus() {
434 final Map<String, OutputDefinition> outputs = new HashMap<>();
435 final var out_1 = new OutputDefinition();
436 out_1.setName("out-1");
437 out_1.setValue("{ get_attribute: [ instanceId, attribName ] }");
438 final var out_2 = new OutputDefinition();
439 out_2.setName("out-2");
440 out_2.setValue("{ get_attribute: [ SELF, oneMoreAttribute ] }");
441 outputs.put(out_1.getName(), out_1);
442 outputs.put(out_2.getName(), out_2);
444 final List<OutputDefinition> serviceOutputs = new ArrayList<>();
445 final var out_3 = new OutputDefinition();
446 out_3.setName("out-3");
447 serviceOutputs.add(out_3);
448 service.setOutputs(serviceOutputs);
450 final var list = Arrays.asList(out_1, out_2, out_3);
451 when(toscaOperationFacadeMock.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class))).thenReturn(Either.left(service));
452 when(graphLockOperation.lockComponent(COMPONENT_ID, NodeTypeEnum.Service)).thenReturn(StorageOperationStatus.OK);
453 when(attributeDeclarationOrchestrator.declareAttributesToOutputs(eq(service), any(ComponentInstOutputsMap.class)))
454 .thenReturn(Either.left(list));
455 when(toscaOperationFacadeMock.addOutputsToComponent(anyMap(), eq(COMPONENT_ID)))
456 .thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
457 when(componentsUtilsMock.convertFromStorageResponse(StorageOperationStatus.GENERAL_ERROR)).thenReturn(ActionStatus.GENERAL_ERROR);
458 when(componentsUtilsMock.getResponseFormat(StorageOperationStatus.GENERAL_ERROR))
459 .thenReturn(new ResponseFormat(Status.INTERNAL_SERVER_ERROR.getStatusCode()));
461 final var result = testInstance.createOutputsInGraph(outputs, service, USER_ID);
462 assertNotNull(result);
463 assertTrue(result.isRight());
464 assertEquals(500, result.right().value().getStatus());