re base code
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / property / ComponentInstanceInputPropertyDeclaratorTest.java
1 package org.openecomp.sdc.be.components.property;
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.components.utils.AnnotationBuilder;
12 import org.openecomp.sdc.be.components.utils.InputsBuilder;
13 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
14 import org.openecomp.sdc.be.datatypes.elements.Annotation;
15 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
16 import org.openecomp.sdc.be.model.Component;
17 import org.openecomp.sdc.be.model.ComponentInstancePropInput;
18 import org.openecomp.sdc.be.model.ComponentParametersView;
19 import org.openecomp.sdc.be.model.InputDefinition;
20 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
21 import org.openecomp.sdc.be.model.operations.StorageException;
22 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
23
24 import java.util.Collections;
25 import java.util.List;
26
27 import static org.assertj.core.api.Assertions.assertThat;
28 import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
29 import static org.mockito.ArgumentMatchers.anyMap;
30 import static org.mockito.ArgumentMatchers.eq;
31 import static org.mockito.Mockito.when;
32 import static org.openecomp.sdc.be.MockGenerator.mockComponentUtils;
33 import static org.openecomp.sdc.be.MockGenerator.mockExceptionUtils;
34
35 @RunWith(MockitoJUnitRunner.class)
36 public class ComponentInstanceInputPropertyDeclaratorTest extends PropertyDeclaratorTestBase {
37
38
39     private ComponentInstanceInputPropertyDeclarator testInstance;
40
41     @Mock
42     private ToscaOperationFacade toscaOperationFacade;
43
44     @Captor
45     private ArgumentCaptor<ComponentParametersView> inputsFilterCaptor;
46
47     private Annotation annotation1, annotation2;
48
49     @Override
50     @Before
51     public void setUp() throws Exception {
52         super.setUp();
53         testInstance = new ComponentInstanceInputPropertyDeclarator(mockComponentUtils(), null,
54                 toscaOperationFacade, null, mockExceptionUtils());
55         annotation1 =  AnnotationBuilder.create()
56                 .setType("annotationType1")
57                 .setName("annotation1")
58                 .addProperty("prop1")
59                 .addProperty("prop2")
60                 .build();
61
62         annotation2 =  AnnotationBuilder.create()
63                 .setType("annotationType2")
64                 .setName("annotation2")
65                 .addProperty("prop3")
66                 .build();
67     }
68
69     @Test
70     public void whenDeclaredPropertyOriginalInputContainsAnnotation_createNewInputWithSameAnnotations() {
71         List<PropertyDataDefinition> properties = Collections.singletonList(prop1);
72         List<ComponentInstancePropInput> propsToDeclare = createInstancePropInputList(properties);
73         Component originInstanceNodeType = createComponentWithInputAndAnnotation(prop1.getName());
74         when(toscaOperationFacade.addComponentInstanceInputsToComponent(eq(resource), anyMap())).thenReturn(Either.left(Collections.emptyMap()));
75         when(toscaOperationFacade.getToscaElement(eq(ORIGIN_INSTANCE_ID), inputsFilterCaptor.capture())).thenReturn(Either.left(originInstanceNodeType));
76         Either<List<InputDefinition>, StorageOperationStatus> createdInputs = testInstance.declarePropertiesAsInputs(resource, "inst1", propsToDeclare);
77         List<InputDefinition> inputs = createdInputs.left().value();
78         assertThat(inputs).hasSize(1);
79         verifyInputAnnotations(inputs.get(0));
80         assertThat(inputsFilterCaptor.getValue().isIgnoreInputs()).isFalse();
81     }
82
83     @Test
84     public void throwExceptionWhenFailingToGetInstanceOriginType() {
85         List<PropertyDataDefinition> properties = Collections.singletonList(prop1);
86         List<ComponentInstancePropInput> propsToDeclare = createInstancePropInputList(properties);
87         when(toscaOperationFacade.getToscaElement(eq(ORIGIN_INSTANCE_ID), inputsFilterCaptor.capture())).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
88         assertThatExceptionOfType(StorageException.class).isThrownBy(() -> testInstance.declarePropertiesAsInputs(resource, "inst1", propsToDeclare));
89     }
90
91     private void verifyInputAnnotations(InputDefinition inputDefinition) {
92         List<Annotation> annotations = inputDefinition.getAnnotations();
93         assertThat(annotations)
94                 .containsExactlyInAnyOrder(annotation1, annotation2);
95     }
96
97     private Component createComponentWithInputAndAnnotation(String inputName) {
98         InputDefinition input = InputsBuilder.create()
99                 .setName(inputName)
100                 .addAnnotation(annotation1)
101                 .addAnnotation(annotation2)
102                 .build();
103         return new ResourceBuilder()
104                 .addInput(input)
105                 .build();
106     }
107
108 }