Service Consumption BE
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / merge / instance / ComponentInstanceInputsRedeclareHandlerTest.java
1 package org.openecomp.sdc.be.components.merge.instance;
2
3 import fj.data.Either;
4 import org.junit.Before;
5 import org.junit.Test;
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.jsontitan.operations.ToscaOperationFacade;
25
26 import java.util.Collections;
27 import java.util.List;
28 import java.util.Map;
29
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;
37
38 @RunWith(MockitoJUnitRunner.class)
39 public class ComponentInstanceInputsRedeclareHandlerTest {
40
41     private static final String RESOURCE_ID = "resourceID";
42     private ComponentInstanceInputsRedeclareHandler testInstance;
43     @Mock
44     private ToscaOperationFacade toscaOperationFacade;
45     @Mock
46     private DeclaredInputsResolver declaredInputsResolver;
47     @Mock
48     private InputsValuesMergingBusinessLogic inputsValuesMergingBusinessLogic;
49     @Captor
50     private ArgumentCaptor<Map<String, List<PropertyDataDefinition>>> getInputPropertiesCaptor;
51     private Resource  currContainer;
52     private List<InputDefinition> prevDeclaredInputs;
53     private Annotation annotation1, annotation2, annotation3;
54
55     @Before
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)
64                 .build();
65
66         annotation1 = AnnotationBuilder.create()
67                 .setName("annotation1")
68                 .build();
69
70         annotation2 = AnnotationBuilder.create()
71                 .setName("annotation2")
72                 .build();
73
74         annotation3 = AnnotationBuilder.create()
75                 .setName("annotation3")
76                 .build();
77
78         InputDefinition declaredInput1 = InputsBuilder.create()
79                 .setPropertyId("prop1")
80                 .setName("input1")
81                 .addAnnotation(annotation1)
82                 .addAnnotation(annotation2)
83                 .build();
84
85         InputDefinition declaredInput2 = InputsBuilder.create()
86                 .setPropertyId("prop2")
87                 .setName("input2")
88                 .addAnnotation(annotation3)
89                 .build();
90
91         prevDeclaredInputs = asList(declaredInput1, declaredInput2);
92     }
93
94     @Test
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();
102     }
103
104     @Test
105     public void updateInputsWithAnnotationsFromOriginInstanceType() {
106         InputDefinition input1 = InputsBuilder.create()
107                 .addAnnotation(annotation2)
108                 .addAnnotation(annotation3)
109                 .setName("prop1")
110                 .build();
111
112         InputDefinition input2 = InputsBuilder.create()
113                 .setName("prop2")
114                 .build();
115         Resource originInstanceType = new ResourceBuilder()
116                 .addInput(input1)
117                 .addInput(input2)
118                 .build();
119
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));
127     }
128
129     private void verifyInstanceSpecificPropertiesPassedToDeclaredInputsResolver() {
130         Map<String, List<PropertyDataDefinition>> allResourceProps = getInputPropertiesCaptor.getValue();
131         assertThat(allResourceProps)
132                 .hasEntrySatisfying("inst1", hasPropertiesWithNames("prop1", "prop2"));
133     }
134 }