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.PropertyDataDefinition;
20 import org.openecomp.sdc.be.impl.ComponentsUtils;
21 import org.openecomp.sdc.be.model.InputDefinition;
22 import org.openecomp.sdc.be.model.Resource;
23 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
25 import java.util.Collections;
26 import java.util.List;
29 import static java.util.Arrays.asList;
30 import static org.assertj.core.api.Assertions.assertThat;
31 import static org.mockito.ArgumentMatchers.anyList;
32 import static org.mockito.ArgumentMatchers.eq;
33 import static org.mockito.Mockito.mock;
34 import static org.mockito.Mockito.when;
35 import static org.openecomp.sdc.be.components.utils.Conditions.hasPropertiesWithNames;
37 @RunWith(MockitoJUnitRunner.class)
38 public class ComponentInstanceInputsRedeclareHandlerTest {
40 private static final String RESOURCE_ID = "resourceID";
41 private ComponentInstanceInputsRedeclareHandler testInstance;
43 private ToscaOperationFacade toscaOperationFacade;
45 private DeclaredInputsResolver declaredInputsResolver;
47 private InputsValuesMergingBusinessLogic inputsValuesMergingBusinessLogic;
49 private ArgumentCaptor<Map<String, List<PropertyDataDefinition>>> getInputPropertiesCaptor;
50 private Resource currContainer;
51 private List<InputDefinition> prevDeclaredInputs;
52 private Annotation annotation1, annotation2, annotation3;
55 public void setUp() throws Exception {
56 testInstance = new ComponentInstanceInputsRedeclareHandler(declaredInputsResolver, toscaOperationFacade, new ComponentsUtils(mock(AuditingManager.class)), inputsValuesMergingBusinessLogic);
57 currContainer = new ResourceBuilder()
58 .addInstanceProperty("inst1", "prop1")
59 .addInstanceProperty("inst1", "prop2")
60 .addInstanceInput("inst2", "prop3")
61 .setUniqueId(RESOURCE_ID)
64 annotation1 = AnnotationBuilder.create()
65 .setName("annotation1")
68 annotation2 = AnnotationBuilder.create()
69 .setName("annotation2")
72 annotation3 = AnnotationBuilder.create()
73 .setName("annotation3")
76 InputDefinition declaredInput1 = InputsBuilder.create()
77 .setPropertyId("prop1")
79 .addAnnotation(annotation1)
80 .addAnnotation(annotation2)
83 InputDefinition declaredInput2 = InputsBuilder.create()
84 .setPropertyId("prop2")
86 .addAnnotation(annotation3)
89 prevDeclaredInputs = asList(declaredInput1, declaredInput2);
93 public void redeclareOnlyPropertiesForGivenInstance() {
94 Resource originInstanceType = new Resource();
95 when(declaredInputsResolver.getPreviouslyDeclaredInputsToMerge(anyList(), eq(currContainer), getInputPropertiesCaptor.capture())).thenReturn(prevDeclaredInputs);
96 when(toscaOperationFacade.updateInputsToComponent(prevDeclaredInputs, RESOURCE_ID)).thenReturn(Either.left(null));
97 ActionStatus actionStatus = testInstance.redeclareComponentInputsForInstance(currContainer, "inst1", originInstanceType, Collections.emptyList());
98 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
99 verifyInstanceSpecificPropertiesPassedToDeclaredInputsResolver();
103 public void updateInputsWithAnnotationsFromOriginInstanceType() {
104 InputDefinition input1 = InputsBuilder.create()
105 .addAnnotation(annotation2)
106 .addAnnotation(annotation3)
110 InputDefinition input2 = InputsBuilder.create()
113 Resource originInstanceType = new ResourceBuilder()
118 when(declaredInputsResolver.getPreviouslyDeclaredInputsToMerge(anyList(), eq(currContainer), getInputPropertiesCaptor.capture())).thenReturn(prevDeclaredInputs);
119 when(toscaOperationFacade.updateInputsToComponent(prevDeclaredInputs, RESOURCE_ID)).thenReturn(Either.left(null));
120 ActionStatus actionStatus = testInstance.redeclareComponentInputsForInstance(currContainer, "inst1", originInstanceType, Collections.emptyList());
121 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
122 assertThat(prevDeclaredInputs)
123 .extracting("annotations")
124 .containsExactlyInAnyOrder(asList(annotation1, annotation3, annotation2), asList(annotation3));
127 private void verifyInstanceSpecificPropertiesPassedToDeclaredInputsResolver() {
128 Map<String, List<PropertyDataDefinition>> allResourceProps = getInputPropertiesCaptor.getValue();
129 assertThat(allResourceProps)
130 .hasEntrySatisfying("inst1", hasPropertiesWithNames("prop1", "prop2"));