Sync Integ to Master
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / merge / instance / ComponentInstanceMergeDataBusinessLogicTest.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.utils.ResourceBuilder;
12 import org.openecomp.sdc.be.dao.api.ActionStatus;
13 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
14 import org.openecomp.sdc.be.impl.ComponentsUtils;
15 import org.openecomp.sdc.be.model.Component;
16 import org.openecomp.sdc.be.model.ComponentInstance;
17 import org.openecomp.sdc.be.model.ComponentParametersView;
18 import org.openecomp.sdc.be.model.Resource;
19 import org.openecomp.sdc.be.model.Service;
20 import org.openecomp.sdc.be.model.User;
21 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
22 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
23 import org.openecomp.sdc.exception.ResponseFormat;
24
25 import java.util.Arrays;
26
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertFalse;
29 import static org.mockito.Mockito.verify;
30 import static org.mockito.Mockito.verifyZeroInteractions;
31 import static org.mockito.Mockito.when;
32
33 public class ComponentInstanceMergeDataBusinessLogicTest {
34
35     @InjectMocks
36     private ComponentInstanceMergeDataBusinessLogic testInstance;
37
38     @Mock
39     private ToscaOperationFacade toscaOperationFacade;
40
41     @Mock
42     private ComponentsUtils componentsUtils;
43
44     @Mock
45     private ComponentInstanceMergeInterface componentInstanceMergeInterfaceMock1;
46
47     @Mock
48     private ComponentInstanceMergeInterface componentInstanceMergeInterfaceMock2;
49
50     @Before
51     public void setUp() throws Exception {
52         MockitoAnnotations.initMocks(this);
53         testInstance.setComponentInstancesMergeBLs(Arrays.asList(componentInstanceMergeInterfaceMock1, componentInstanceMergeInterfaceMock2));
54     }
55
56     @Test
57     public void saveAllDataBeforeDeleting_allInstanceMergeInterfacesAreCalled() throws Exception {
58         Component container = new Service();
59         ComponentInstance instance = new ComponentInstance();
60         Component instanceOriginResource = new Resource();
61         DataForMergeHolder dataForMergeHolder = testInstance.saveAllDataBeforeDeleting(container, instance, instanceOriginResource);
62         verify(componentInstanceMergeInterfaceMock1).saveDataBeforeMerge(dataForMergeHolder, container, instance, instanceOriginResource);
63         verify(componentInstanceMergeInterfaceMock2).saveDataBeforeMerge(dataForMergeHolder, container, instance, instanceOriginResource);
64     }
65
66     @Test
67     public void mergeComponentUserOrigData_allInstanceMergeInterfacesAreCalled() throws Exception {
68         ArgumentCaptor<ComponentParametersView> componentsFilterCapture = ArgumentCaptor.forClass(ComponentParametersView.class);
69         Service persistedService = new Service();
70         User user = new User();
71         DataForMergeHolder dataHolder = new DataForMergeHolder();
72         when(toscaOperationFacade.getToscaElement(Mockito.eq("newContainerId"), componentsFilterCapture.capture())).thenReturn(Either.left(persistedService));
73         when(componentInstanceMergeInterfaceMock1.mergeDataAfterCreate(user, dataHolder, persistedService, "instId")).thenReturn(Either.left(persistedService));
74         when(componentInstanceMergeInterfaceMock2.mergeDataAfterCreate(user, dataHolder, persistedService, "instId")).thenReturn(Either.left(persistedService));
75         Either<Component, ResponseFormat> mergeResult = testInstance.mergeComponentUserOrigData(user, dataHolder, new Service(), "newContainerId", "instId");
76         assertEquals(persistedService, mergeResult.left().value());
77         assertComponentFilter(componentsFilterCapture.getValue());
78     }
79
80     @Test
81     public void mergeComponentUserOrigData_failToGetPersistedComponent_doNotTryToMerge() throws Exception {
82         User user = new User();
83         DataForMergeHolder dataHolder = new DataForMergeHolder();
84         ResponseFormat rf = new ResponseFormat();
85         Resource container = new ResourceBuilder().setComponentType(ComponentTypeEnum.SERVICE).build();
86         when(toscaOperationFacade.getToscaElement(Mockito.eq("newContainerId"), Mockito.any(ComponentParametersView.class))).thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
87         when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.GENERAL_ERROR, ComponentTypeEnum.SERVICE)).thenReturn(ActionStatus.GENERAL_ERROR);
88         when(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(rf);
89         Either<Component, ResponseFormat> mergeResult = testInstance.mergeComponentUserOrigData(user, dataHolder, container, "newContainerId", "instId");
90         assertEquals(rf, mergeResult.right().value());
91         verifyZeroInteractions(componentInstanceMergeInterfaceMock1, componentInstanceMergeInterfaceMock2);
92     }
93
94     @Test
95     public void mergeComponentUserOrigData_failOnOneMerge_doNotCallOtherMerge() throws Exception {
96         Service persistedService = new Service();
97         User user = new User();
98         DataForMergeHolder dataHolder = new DataForMergeHolder();
99         ResponseFormat rf = new ResponseFormat();
100         when(toscaOperationFacade.getToscaElement(Mockito.eq("newContainerId"), Mockito.any(ComponentParametersView.class))).thenReturn(Either.left(persistedService));
101         when(componentInstanceMergeInterfaceMock1.mergeDataAfterCreate(user, dataHolder, persistedService, "instId")).thenReturn(Either.right(rf));
102         Either<Component, ResponseFormat> mergeResult = testInstance.mergeComponentUserOrigData(user, dataHolder, new Service(), "newContainerId", "instId");
103         assertEquals(rf, mergeResult.right().value());
104         verifyZeroInteractions(componentInstanceMergeInterfaceMock2);
105     }
106
107     private void assertComponentFilter(ComponentParametersView value) {
108         assertFalse(value.isIgnoreComponentInstances());
109         assertFalse(value.isIgnoreComponentInstancesProperties());
110         assertFalse(value.isIgnoreComponentInstancesInputs());
111         assertFalse(value.isIgnoreArtifacts());
112     }
113
114
115
116 }