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