re base code
[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.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;
24
25 import java.util.Collections;
26 import java.util.List;
27 import java.util.Map;
28
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;
36
37 @RunWith(MockitoJUnitRunner.class)
38 public class ComponentInstanceInputsRedeclareHandlerTest {
39
40     private static final String RESOURCE_ID = "resourceID";
41     private ComponentInstanceInputsRedeclareHandler testInstance;
42     @Mock
43     private ToscaOperationFacade toscaOperationFacade;
44     @Mock
45     private DeclaredInputsResolver declaredInputsResolver;
46     @Mock
47     private InputsValuesMergingBusinessLogic inputsValuesMergingBusinessLogic;
48     @Captor
49     private ArgumentCaptor<Map<String, List<PropertyDataDefinition>>> getInputPropertiesCaptor;
50     private Resource  currContainer;
51     private List<InputDefinition> prevDeclaredInputs;
52     private Annotation annotation1, annotation2, annotation3;
53
54     @Before
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)
62                 .build();
63
64         annotation1 = AnnotationBuilder.create()
65                 .setName("annotation1")
66                 .build();
67
68         annotation2 = AnnotationBuilder.create()
69                 .setName("annotation2")
70                 .build();
71
72         annotation3 = AnnotationBuilder.create()
73                 .setName("annotation3")
74                 .build();
75
76         InputDefinition declaredInput1 = InputsBuilder.create()
77                 .setPropertyId("prop1")
78                 .setName("input1")
79                 .addAnnotation(annotation1)
80                 .addAnnotation(annotation2)
81                 .build();
82
83         InputDefinition declaredInput2 = InputsBuilder.create()
84                 .setPropertyId("prop2")
85                 .setName("input2")
86                 .addAnnotation(annotation3)
87                 .build();
88
89         prevDeclaredInputs = asList(declaredInput1, declaredInput2);
90     }
91
92     @Test
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();
100     }
101
102     @Test
103     public void updateInputsWithAnnotationsFromOriginInstanceType() {
104         InputDefinition input1 = InputsBuilder.create()
105                 .addAnnotation(annotation2)
106                 .addAnnotation(annotation3)
107                 .setName("prop1")
108                 .build();
109
110         InputDefinition input2 = InputsBuilder.create()
111                 .setName("prop2")
112                 .build();
113         Resource originInstanceType = new ResourceBuilder()
114                 .addInput(input1)
115                 .addInput(input2)
116                 .build();
117
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));
125     }
126
127     private void verifyInstanceSpecificPropertiesPassedToDeclaredInputsResolver() {
128         Map<String, List<PropertyDataDefinition>> allResourceProps = getInputPropertiesCaptor.getValue();
129         assertThat(allResourceProps)
130                 .hasEntrySatisfying("inst1", hasPropertiesWithNames("prop1", "prop2"));
131     }
132 }