re base code
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / merge / instance / ComponentInstancePropsAndInputsMergeTest.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.mockito.*;
7 import org.openecomp.sdc.be.components.utils.ObjectGenerator;
8 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
9 import org.openecomp.sdc.be.dao.api.ActionStatus;
10 import org.openecomp.sdc.be.impl.ComponentsUtils;
11 import org.openecomp.sdc.be.model.*;
12 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
13 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
14 import org.openecomp.sdc.exception.ResponseFormat;
15
16 import java.util.List;
17
18 import static org.junit.Assert.assertEquals;
19 import static org.junit.Assert.assertFalse;
20 import static org.mockito.ArgumentMatchers.*;
21 import static org.mockito.Mockito.verifyZeroInteractions;
22 import static org.mockito.Mockito.when;
23 public class ComponentInstancePropsAndInputsMergeTest {
24
25     private static final String INSTANCE_ID1 = "inst1";
26     private static final User USER = new User();
27
28     @InjectMocks
29     private ComponentInstancePropsAndInputsMerge testInstance;
30
31     @Mock
32     private ToscaOperationFacade toscaOperationFacade;
33
34     @Mock
35     private ComponentsUtils componentsUtils;
36
37     @Mock
38     private ComponentInstancePropertiesMergeBL componentInstancePropertiesMergeBL;
39
40     @Mock
41     private ComponentInstanceInputsMergeBL componentInstanceInputsMergeBL;
42
43     @Mock
44     private ComponentInstanceInputsRedeclareHandler componentInstanceInputsRedeclareHandler;
45
46     private Resource resourceToUpdate;
47
48     private DataForMergeHolder oldDataHolder;
49
50     @Before
51     public void setUp() throws Exception {
52         MockitoAnnotations.initMocks(this);
53         resourceToUpdate =  new ResourceBuilder().addInstanceInput(INSTANCE_ID1, "instInput1")
54                 .addInstanceInput(INSTANCE_ID1, "instInput2")
55                 .addInstanceProperty(INSTANCE_ID1, "instProp1")
56                 .addInstanceProperty(INSTANCE_ID1, "instProp2")
57                 .addInput("input1")
58                 .addInput("input2")
59                 .setUniqueId("resourceId").build();
60
61         List<InputDefinition> oldInputs = ObjectGenerator.buildInputs("input1");
62         List<ComponentInstanceProperty> oldInstProps = ObjectGenerator.buildInstanceProperties("instProp1", "instProp3");
63         List<ComponentInstanceInput> oldInstInputs = ObjectGenerator.buildInstanceInputs("instInput1", "instInput3");
64
65         oldDataHolder = new DataForMergeHolder();
66         oldDataHolder.setOrigComponentInputs(oldInputs);
67         oldDataHolder.setOrigComponentInstanceProperties(oldInstProps);
68         oldDataHolder.setOrigComponentInstanceInputs(oldInstInputs);
69     }
70
71     @Test
72     public void mergeDataAfterCreate() throws Exception {
73         List<InputDefinition> oldInputs = ObjectGenerator.buildInputs("input1");
74         List<ComponentInstanceProperty> oldInstProps = ObjectGenerator.buildInstanceProperties("instProp1", "instProp3");
75         List<ComponentInstanceInput> oldInstInputs = ObjectGenerator.buildInstanceInputs("instInput1", "instInput3");
76
77         DataForMergeHolder dataForMergeHolder = new DataForMergeHolder();
78         dataForMergeHolder.setOrigComponentInputs(oldInputs);
79         dataForMergeHolder.setOrigComponentInstanceProperties(oldInstProps);
80         dataForMergeHolder.setOrigComponentInstanceInputs(oldInstInputs);
81         Resource currInstanceOriginType = new Resource();
82         dataForMergeHolder.setCurrInstanceNode(currInstanceOriginType);
83
84         ArgumentCaptor<ComponentParametersView> parametersViewCaptor = ArgumentCaptor.forClass(ComponentParametersView.class);
85
86         when(toscaOperationFacade.getToscaElement(Mockito.eq("resourceId"), parametersViewCaptor.capture())).thenReturn(Either.left(resourceToUpdate));
87         when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(oldInstInputs, oldInputs, resourceToUpdate, INSTANCE_ID1)).thenReturn(ActionStatus.OK);
88         when(componentInstancePropertiesMergeBL.mergeComponentInstanceProperties(oldInstProps, oldInputs, resourceToUpdate, INSTANCE_ID1)).thenReturn(ActionStatus.OK);
89         when(componentInstanceInputsRedeclareHandler.redeclareComponentInputsForInstance(resourceToUpdate, INSTANCE_ID1, currInstanceOriginType, oldInputs)).thenReturn(ActionStatus.OK);
90         Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, dataForMergeHolder, resourceToUpdate, INSTANCE_ID1);
91         assertEquals(mergeResult.left().value(), resourceToUpdate);
92         assertComponentFilter(parametersViewCaptor.getValue());
93     }
94
95     @Test
96     public void mergeDataAfterCreate_failedToMergeComponentInstanceInputs() throws Exception {
97         ResponseFormat errorResponse = new ResponseFormat();
98         when(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(errorResponse);
99         when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.GENERAL_ERROR);
100         Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, new DataForMergeHolder(), new Service(), "inst1");
101         assertEquals(errorResponse, mergeResult.right().value());
102         verifyZeroInteractions(componentInstanceInputsRedeclareHandler, componentInstancePropertiesMergeBL, toscaOperationFacade);
103     }
104
105     @Test
106     public void mergeDataAfterCreate_failedToMergeComponentInstProps() throws Exception {
107         ResponseFormat errorResponse = new ResponseFormat();
108         when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.OK);
109         when(componentInstancePropertiesMergeBL.mergeComponentInstanceProperties(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.GENERAL_ERROR);
110         when(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(errorResponse);
111         Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, new DataForMergeHolder(), new Service(), "inst1");
112         assertEquals(errorResponse, mergeResult.right().value());
113         verifyZeroInteractions(componentInstanceInputsRedeclareHandler, toscaOperationFacade);
114     }
115
116     @Test
117     public void mergeDataAfterCreate_mergeInputs_FailedToFetchResource() throws Exception {
118         ResponseFormat errorResponse = new ResponseFormat();
119         when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.OK);
120         when(componentInstancePropertiesMergeBL.mergeComponentInstanceProperties(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.OK);
121         when(toscaOperationFacade.getToscaElement(any(), any(ComponentParametersView.class))).thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
122         when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.GENERAL_ERROR)).thenReturn(ActionStatus.GENERAL_ERROR);
123         when(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(errorResponse);
124         DataForMergeHolder dataHolder = new DataForMergeHolder();
125         dataHolder.setOrigComponentInputs(ObjectGenerator.buildInputs("input1", "input2"));
126         Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, dataHolder, new Service(), "inst1");
127         assertEquals(errorResponse, mergeResult.right().value());
128         verifyZeroInteractions(componentInstanceInputsRedeclareHandler);
129     }
130
131     private void assertComponentFilter(ComponentParametersView value) {
132         assertFalse(value.isIgnoreComponentInstances());
133         assertFalse(value.isIgnoreComponentInstancesProperties());
134         assertFalse(value.isIgnoreComponentInstancesInputs());
135         assertFalse(value.isIgnoreArtifacts());
136     }
137 }