Sync Integ to Master
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / merge / input / ComponentInputsMergeBLTest.java
1 package org.openecomp.sdc.be.components.merge.input;
2
3 import fj.data.Either;
4 import org.apache.commons.collections.ListUtils;
5 import org.junit.Before;
6 import org.junit.Test;
7 import org.mockito.InjectMocks;
8 import org.mockito.Mock;
9 import org.mockito.MockitoAnnotations;
10 import org.openecomp.sdc.be.components.utils.ObjectGenerator;
11 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
12 import org.openecomp.sdc.be.dao.api.ActionStatus;
13 import org.openecomp.sdc.be.model.InputDefinition;
14 import org.openecomp.sdc.be.model.Resource;
15 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
16
17 import java.util.List;
18 import java.util.Map;
19 import java.util.function.Function;
20 import java.util.stream.Collectors;
21
22 import static org.junit.Assert.assertEquals;
23 import static org.mockito.Mockito.verify;
24 import static org.mockito.Mockito.when;
25
26 public class ComponentInputsMergeBLTest {
27
28     @InjectMocks
29     private ComponentInputsMergeBL testInstance;
30
31     @Mock
32     private InputsValuesMergingBusinessLogic inputsValuesMergingBusinessLogicMock;
33
34     @Mock
35     private ToscaOperationFacade toscaOperationFacade;
36
37     @Before
38     public void setUp() throws Exception {
39         MockitoAnnotations.initMocks(this);
40     }
41
42     @Test
43     public void mergeComponentInputs() {
44         Resource oldResource = new ResourceBuilder()
45                 .addInput("input1")
46                 .addInput("input2")
47                 .build();
48
49         Resource newResource = new Resource();
50
51         List<InputDefinition> inputsToMerge = ObjectGenerator.buildInputs("input1", "input2", "input3");
52
53         when(toscaOperationFacade.updateInputsToComponent(inputsToMerge, newResource.getUniqueId())).thenReturn(Either.left(inputsToMerge));
54         ActionStatus actionStatus = testInstance.mergeComponentInputs(oldResource, newResource, inputsToMerge);
55         assertEquals(ActionStatus.OK, actionStatus);
56         verifyCallToMergeComponentInputs(oldResource, inputsToMerge);
57     }
58
59     @SuppressWarnings("unchecked")
60     @Test
61     public void mergeAndRedeclareComponentInputs() throws Exception {
62         Resource oldResource = new ResourceBuilder()
63                 .addInput("input1")
64                 .addInput("input2")
65                 .build();
66
67         Resource newResource = ObjectGenerator.buildBasicResource();
68         List<InputDefinition> inputsToMerge = ObjectGenerator.buildInputs("input1", "input2", "input3");
69         List<InputDefinition> inputsToRedeclare = ObjectGenerator.buildInputs("input4");
70         List<InputDefinition> expectedInputsToUpdate = ListUtils.union(inputsToMerge, inputsToRedeclare);
71         when(inputsValuesMergingBusinessLogicMock.getPreviouslyDeclaredInputsToMerge(oldResource, newResource)).thenReturn(inputsToRedeclare);
72         when(toscaOperationFacade.updateInputsToComponent(expectedInputsToUpdate, newResource.getUniqueId())).thenReturn(Either.left(inputsToMerge));
73         ActionStatus actionStatus = testInstance.mergeAndRedeclareComponentInputs(oldResource, newResource, inputsToMerge);
74         assertEquals(ActionStatus.OK, actionStatus);
75     }
76
77     @Test
78     public void redeclareResourceInputsForInstance() throws Exception {
79         List<InputDefinition> oldInputs = ObjectGenerator.buildInputs("input1", "input2");
80         Resource newResource = ObjectGenerator.buildBasicResource();
81         List<InputDefinition> inputsToRedeclare = ObjectGenerator.buildInputs("input1");
82         when(inputsValuesMergingBusinessLogicMock.getPreviouslyDeclaredInputsToMerge(oldInputs, newResource, "inst1")).thenReturn(inputsToRedeclare);
83         when(toscaOperationFacade.updateInputsToComponent(inputsToRedeclare, newResource.getUniqueId())).thenReturn(Either.left(inputsToRedeclare));
84         ActionStatus actionStatus = testInstance.redeclareComponentInputsForInstance(oldInputs, newResource, "inst1");
85     }
86
87     private void verifyCallToMergeComponentInputs(Resource oldResource, List<InputDefinition> inputsToMerge) {
88         Map<String, InputDefinition> oldInputsByName = oldResource.getInputs().stream().collect(Collectors.toMap(InputDefinition::getName, Function.identity()));
89         Map<String, InputDefinition> inputsToMergeByName = inputsToMerge.stream().collect(Collectors.toMap(InputDefinition::getName, Function.identity()));
90         verify(inputsValuesMergingBusinessLogicMock).mergeComponentInputs(oldInputsByName, inputsToMergeByName);
91     }
92
93 }