aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/test/java/org/openecomp/sdc/be/components/merge/instance/ComponentInstanceInputsRedeclareHandlerTest.java
blob: 8385ea8f9078c2e4774d2a7144e4799131f8f665 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package org.openecomp.sdc.be.components.merge.instance;

import fj.data.Either;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.openecomp.sdc.be.auditing.impl.AuditingManager;
import org.openecomp.sdc.be.components.merge.input.DeclaredInputsResolver;
import org.openecomp.sdc.be.components.merge.input.InputsValuesMergingBusinessLogic;
import org.openecomp.sdc.be.components.utils.AnnotationBuilder;
import org.openecomp.sdc.be.components.utils.InputsBuilder;
import org.openecomp.sdc.be.components.utils.ResourceBuilder;
import org.openecomp.sdc.be.dao.api.ActionStatus;
import org.openecomp.sdc.be.datatypes.elements.Annotation;
import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
import org.openecomp.sdc.be.impl.ComponentsUtils;
import org.openecomp.sdc.be.model.InputDefinition;
import org.openecomp.sdc.be.model.Resource;
import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;

import java.util.Collections;
import java.util.List;
import java.util.Map;

import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.openecomp.sdc.be.components.utils.Conditions.hasPropertiesWithNames;

@RunWith(MockitoJUnitRunner.class)
public class ComponentInstanceInputsRedeclareHandlerTest {

    private static final String RESOURCE_ID = "resourceID";
    private ComponentInstanceInputsRedeclareHandler testInstance;
    @Mock
    private ToscaOperationFacade toscaOperationFacade;
    @Mock
    private DeclaredInputsResolver declaredInputsResolver;
    @Mock
    private InputsValuesMergingBusinessLogic inputsValuesMergingBusinessLogic;
    @Captor
    private ArgumentCaptor<Map<String, List<PropertyDataDefinition>>> getInputPropertiesCaptor;
    private Resource  currContainer;
    private List<InputDefinition> prevDeclaredInputs;
    private Annotation annotation1, annotation2, annotation3;

    @Before
    public void setUp() throws Exception {
        testInstance = new ComponentInstanceInputsRedeclareHandler(declaredInputsResolver, toscaOperationFacade, new ComponentsUtils(mock(AuditingManager.class)), inputsValuesMergingBusinessLogic);
        currContainer = new ResourceBuilder()
                .addInstanceProperty("inst1", "prop1")
                .addInstanceProperty("inst1", "prop2")
                .addInstanceInput("inst1", "prop1", Collections.singletonList(new GetInputValueDataDefinition()))
                .addInstanceInput("inst1", "prop2", Collections.singletonList(new GetInputValueDataDefinition()))
                .setUniqueId(RESOURCE_ID)
                .build();

        annotation1 = AnnotationBuilder.create()
                .setName("annotation1")
                .build();

        annotation2 = AnnotationBuilder.create()
                .setName("annotation2")
                .build();

        annotation3 = AnnotationBuilder.create()
                .setName("annotation3")
                .build();

        InputDefinition declaredInput1 = InputsBuilder.create()
                .setPropertyId("prop1")
                .setName("input1")
                .addAnnotation(annotation1)
                .addAnnotation(annotation2)
                .build();

        InputDefinition declaredInput2 = InputsBuilder.create()
                .setPropertyId("prop2")
                .setName("input2")
                .addAnnotation(annotation3)
                .build();

        prevDeclaredInputs = asList(declaredInput1, declaredInput2);
    }

    @Test
    public void redeclareOnlyPropertiesForGivenInstance() {
        Resource originInstanceType = new Resource();
        when(declaredInputsResolver.getPreviouslyDeclaredInputsToMerge(anyList(), eq(currContainer), getInputPropertiesCaptor.capture())).thenReturn(prevDeclaredInputs);
        when(toscaOperationFacade.updateInputsToComponent(prevDeclaredInputs, RESOURCE_ID)).thenReturn(Either.left(null));
        ActionStatus actionStatus = testInstance.redeclareComponentInputsForInstance(currContainer, "inst1", originInstanceType, Collections.emptyList());
        assertThat(actionStatus).isEqualTo(ActionStatus.OK);
        verifyInstanceSpecificPropertiesPassedToDeclaredInputsResolver();
    }

    @Test
    public void updateInputsWithAnnotationsFromOriginInstanceType() {
        InputDefinition input1 = InputsBuilder.create()
                .addAnnotation(annotation2)
                .addAnnotation(annotation3)
                .setName("prop1")
                .build();

        InputDefinition input2 = InputsBuilder.create()
                .setName("prop2")
                .build();
        Resource originInstanceType = new ResourceBuilder()
                .addInput(input1)
                .addInput(input2)
                .build();

        when(declaredInputsResolver.getPreviouslyDeclaredInputsToMerge(anyList(), eq(currContainer), getInputPropertiesCaptor.capture())).thenReturn(prevDeclaredInputs);
        when(toscaOperationFacade.updateInputsToComponent(prevDeclaredInputs, RESOURCE_ID)).thenReturn(Either.left(null));
        ActionStatus actionStatus = testInstance.redeclareComponentInputsForInstance(currContainer, "inst1", originInstanceType, Collections.emptyList());
        assertThat(actionStatus).isEqualTo(ActionStatus.OK);
        assertThat(prevDeclaredInputs)
                .extracting("annotations")
                .containsExactlyInAnyOrder(asList(annotation1, annotation3, annotation2), asList(annotation3));
    }

    private void verifyInstanceSpecificPropertiesPassedToDeclaredInputsResolver() {
        Map<String, List<PropertyDataDefinition>> allResourceProps = getInputPropertiesCaptor.getValue();
        assertThat(allResourceProps)
                .hasEntrySatisfying("inst1", hasPropertiesWithNames("prop1", "prop2"));
    }
}