1 package org.openecomp.sdc.be.components.merge.instance;
4 import org.junit.Before;
6 import org.junit.runner.RunWith;
7 import org.mockito.ArgumentCaptor;
8 import org.mockito.Captor;
9 import org.mockito.Mock;
10 import org.mockito.junit.MockitoJUnitRunner;
11 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
12 import org.openecomp.sdc.be.components.merge.input.DeclaredInputsResolver;
13 import org.openecomp.sdc.be.components.merge.input.InputsValuesMergingBusinessLogic;
14 import org.openecomp.sdc.be.components.utils.AnnotationBuilder;
15 import org.openecomp.sdc.be.components.utils.InputsBuilder;
16 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
17 import org.openecomp.sdc.be.dao.api.ActionStatus;
18 import org.openecomp.sdc.be.datatypes.elements.Annotation;
19 import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
20 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
21 import org.openecomp.sdc.be.impl.ComponentsUtils;
22 import org.openecomp.sdc.be.model.InputDefinition;
23 import org.openecomp.sdc.be.model.Resource;
24 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
26 import java.util.Collections;
27 import java.util.List;
30 import static java.util.Arrays.asList;
31 import static org.assertj.core.api.Assertions.assertThat;
32 import static org.mockito.ArgumentMatchers.anyList;
33 import static org.mockito.ArgumentMatchers.eq;
34 import static org.mockito.Mockito.mock;
35 import static org.mockito.Mockito.when;
36 import static org.openecomp.sdc.be.components.utils.Conditions.hasPropertiesWithNames;
38 @RunWith(MockitoJUnitRunner.class)
39 public class ComponentInstanceInputsRedeclareHandlerTest {
41 private static final String RESOURCE_ID = "resourceID";
42 private ComponentInstanceInputsRedeclareHandler testInstance;
44 private ToscaOperationFacade toscaOperationFacade;
46 private DeclaredInputsResolver declaredInputsResolver;
48 private InputsValuesMergingBusinessLogic inputsValuesMergingBusinessLogic;
50 private ArgumentCaptor<Map<String, List<PropertyDataDefinition>>> getInputPropertiesCaptor;
51 private Resource currContainer;
52 private List<InputDefinition> prevDeclaredInputs;
53 private Annotation annotation1, annotation2, annotation3;
56 public void setUp() throws Exception {
57 testInstance = new ComponentInstanceInputsRedeclareHandler(declaredInputsResolver, toscaOperationFacade, new ComponentsUtils(mock(AuditingManager.class)), inputsValuesMergingBusinessLogic);
58 currContainer = new ResourceBuilder()
59 .addInstanceProperty("inst1", "prop1")
60 .addInstanceProperty("inst1", "prop2")
61 .addInstanceInput("inst1", "prop1", Collections.singletonList(new GetInputValueDataDefinition()))
62 .addInstanceInput("inst1", "prop2", Collections.singletonList(new GetInputValueDataDefinition()))
63 .setUniqueId(RESOURCE_ID)
66 annotation1 = AnnotationBuilder.create()
67 .setName("annotation1")
70 annotation2 = AnnotationBuilder.create()
71 .setName("annotation2")
74 annotation3 = AnnotationBuilder.create()
75 .setName("annotation3")
78 InputDefinition declaredInput1 = InputsBuilder.create()
79 .setPropertyId("prop1")
81 .addAnnotation(annotation1)
82 .addAnnotation(annotation2)
85 InputDefinition declaredInput2 = InputsBuilder.create()
86 .setPropertyId("prop2")
88 .addAnnotation(annotation3)
91 prevDeclaredInputs = asList(declaredInput1, declaredInput2);
95 public void redeclareOnlyPropertiesForGivenInstance() {
96 Resource originInstanceType = new Resource();
97 when(declaredInputsResolver.getPreviouslyDeclaredInputsToMerge(anyList(), eq(currContainer), getInputPropertiesCaptor.capture())).thenReturn(prevDeclaredInputs);
98 when(toscaOperationFacade.updateInputsToComponent(prevDeclaredInputs, RESOURCE_ID)).thenReturn(Either.left(null));
99 ActionStatus actionStatus = testInstance.redeclareComponentInputsForInstance(currContainer, "inst1", originInstanceType, Collections.emptyList());
100 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
101 verifyInstanceSpecificPropertiesPassedToDeclaredInputsResolver();
105 public void updateInputsWithAnnotationsFromOriginInstanceType() {
106 InputDefinition input1 = InputsBuilder.create()
107 .addAnnotation(annotation2)
108 .addAnnotation(annotation3)
112 InputDefinition input2 = InputsBuilder.create()
115 Resource originInstanceType = new ResourceBuilder()
120 when(declaredInputsResolver.getPreviouslyDeclaredInputsToMerge(anyList(), eq(currContainer), getInputPropertiesCaptor.capture())).thenReturn(prevDeclaredInputs);
121 when(toscaOperationFacade.updateInputsToComponent(prevDeclaredInputs, RESOURCE_ID)).thenReturn(Either.left(null));
122 ActionStatus actionStatus = testInstance.redeclareComponentInputsForInstance(currContainer, "inst1", originInstanceType, Collections.emptyList());
123 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
124 assertThat(prevDeclaredInputs)
125 .extracting("annotations")
126 .containsExactlyInAnyOrder(asList(annotation1, annotation3, annotation2), asList(annotation3));
129 private void verifyInstanceSpecificPropertiesPassedToDeclaredInputsResolver() {
130 Map<String, List<PropertyDataDefinition>> allResourceProps = getInputPropertiesCaptor.getValue();
131 assertThat(allResourceProps)
132 .hasEntrySatisfying("inst1", hasPropertiesWithNames("prop1", "prop2"));