re base code
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / PolicyPropertiesBusinessLogicTest.java
1 package org.openecomp.sdc.be.components.impl;
2
3 import fj.data.Either;
4 import org.junit.After;
5 import org.junit.Before;
6 import org.junit.Test;
7 import org.junit.runner.RunWith;
8 import org.mockito.ArgumentCaptor;
9 import org.mockito.InjectMocks;
10 import org.mockito.Mock;
11 import org.mockito.junit.MockitoJUnitRunner;
12 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
13 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
14 import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
15 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
16 import org.openecomp.sdc.be.components.validation.UserValidations;
17 import org.openecomp.sdc.be.dao.api.ActionStatus;
18 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
19 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
20 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
21 import org.openecomp.sdc.be.impl.ComponentsUtils;
22 import org.openecomp.sdc.be.model.*;
23 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
24 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
25 import org.openecomp.sdc.exception.ResponseFormat;
26
27 import javax.ws.rs.core.Response;
28 import java.util.List;
29
30 import static org.assertj.core.api.Assertions.assertThat;
31 import static org.mockito.ArgumentMatchers.anyString;
32 import static org.mockito.ArgumentMatchers.eq;
33 import static org.mockito.Mockito.verify;
34 import static org.mockito.Mockito.when;
35
36 @RunWith(MockitoJUnitRunner.class)
37 public class PolicyPropertiesBusinessLogicTest {
38
39     private static final String POLICY_ID = "policy1";
40     private static final String RESOURCE_ID = "resourceId";
41     private static final String USER_ID = "userId";
42     public static final String NO_PROPS_POLICY = "policy2";
43     @InjectMocks
44     private PolicyBusinessLogic testInstance;
45
46     @Mock
47     private UserValidations userValidations;
48
49     @Mock
50     private TitanDao titanDao;
51
52     @Mock
53     private ToscaOperationFacade toscaOperationFacade;
54
55     @Mock
56     private ComponentsUtils componentsUtils;
57
58     private final ComponentTypeEnum COMPONENT_TYPE = ComponentTypeEnum.RESOURCE;
59
60     private ComponentParametersView componentFilter;
61     private Resource resource;
62     private PropertyDefinition prop1, prop2;
63
64     @Before
65     public void setUp() throws Exception {
66         componentFilter = new ComponentParametersView(true);
67         componentFilter.setIgnorePolicies(false);
68         componentFilter.setIgnoreUsers(false);
69
70         prop1 = new PropertyDataDefinitionBuilder().setUniqueId("prop1").build();
71         prop2 = new PropertyDataDefinitionBuilder().setUniqueId("prop1").build();
72
73         PolicyDefinition policy1 = PolicyDefinitionBuilder.create()
74                 .setUniqueId(POLICY_ID)
75                 .setProperties(prop1, prop2)
76                 .build();
77
78         PolicyDefinition policy2 = PolicyDefinitionBuilder.create()
79                 .setUniqueId(NO_PROPS_POLICY)
80                 .build();
81         resource = new ResourceBuilder()
82                 .setUniqueId(RESOURCE_ID)
83                 .setComponentType(COMPONENT_TYPE)
84                 .setLifeCycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT)
85                 .setLastUpdaterUserId(USER_ID)
86                 .addPolicy(policy1)
87                 .addPolicy(policy2)
88                 .build();
89     }
90
91     @After
92     public void tearDown() {
93         verify(titanDao).commit();
94     }
95
96     @Test
97     public void getPolicyProperties_userIdIsNull() {
98         String userId = null;
99         ComponentException forbiddenException = new ComponentException(ActionStatus.AUTH_FAILED);
100         when(userValidations.validateUserExists(eq(userId), anyString(), eq(false))).thenThrow(forbiddenException);
101         try{
102             testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, POLICY_ID, null);
103         } catch(ComponentException e){
104             assertThat(e.getActionStatus()).isEqualTo(ActionStatus.AUTH_FAILED);
105         }
106     }
107
108     @Test
109     public void getPolicyProperties_componentNotFound() {
110         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenReturn(new User());
111         ArgumentCaptor<ComponentParametersView> filterCaptor = ArgumentCaptor.forClass(ComponentParametersView.class);
112         when(toscaOperationFacade.getToscaElement(eq(RESOURCE_ID), filterCaptor.capture())).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
113         when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND, ComponentTypeEnum.RESOURCE)).thenCallRealMethod();
114         ResponseFormat notFoundResponse = new ResponseFormat(Response.Status.NOT_FOUND.getStatusCode());
115         when(componentsUtils.getResponseFormat(eq(ActionStatus.RESOURCE_NOT_FOUND), anyString())).thenReturn(notFoundResponse);
116         Either<List<PropertyDataDefinition>, ResponseFormat> policyProperties = testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, POLICY_ID, USER_ID);
117         assertThat(policyProperties.right().value()).isSameAs(notFoundResponse);
118     }
119
120     @Test
121     public void getPolicyProperties_policyNotExist() {
122         doPolicyValidations();
123         ResponseFormat notFoundResponse = new ResponseFormat(Response.Status.NOT_FOUND.getStatusCode());
124         when(componentsUtils.getResponseFormat(ActionStatus.POLICY_NOT_FOUND_ON_CONTAINER, "nonExistingPolicy", RESOURCE_ID)).thenReturn(notFoundResponse);
125         Either<List<PropertyDataDefinition>, ResponseFormat> policyProperties = testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, "nonExistingPolicy", USER_ID);
126         assertThat(policyProperties.right().value()).isEqualTo(notFoundResponse);
127     }
128
129     @Test
130     public void getPolicyProperties_noPropertiesOnPolicy() {
131         doPolicyValidations();
132         Either<List<PropertyDataDefinition>, ResponseFormat> policyProperties = testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, NO_PROPS_POLICY, USER_ID);
133         assertThat(policyProperties.left().value()).isNull();
134     }
135
136     @Test
137     public void getPolicyProperties() {
138         doPolicyValidations();
139         Either<List<PropertyDataDefinition>, ResponseFormat> policyProperties = testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, POLICY_ID, USER_ID);
140         assertThat(policyProperties.left().value())
141                 .usingElementComparatorOnFields("uniqueId")
142                 .containsExactly(prop1, prop2);
143     }
144
145     private void doPolicyValidations() {
146         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenReturn(new User());
147         ArgumentCaptor<ComponentParametersView> filterCaptor = ArgumentCaptor.forClass(ComponentParametersView.class);
148         when(toscaOperationFacade.getToscaElement(eq(RESOURCE_ID), filterCaptor.capture())).thenReturn(Either.left(resource));
149     }
150 }