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