Sync Integ to Master
[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.utils.PolicyDefinitionBuilder;
13 import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
14 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
15 import org.openecomp.sdc.be.components.validation.UserValidations;
16 import org.openecomp.sdc.be.dao.api.ActionStatus;
17 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
18 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
19 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
20 import org.openecomp.sdc.be.impl.ComponentsUtils;
21 import org.openecomp.sdc.be.model.ComponentParametersView;
22 import org.openecomp.sdc.be.model.LifecycleStateEnum;
23 import org.openecomp.sdc.be.model.PolicyDefinition;
24 import org.openecomp.sdc.be.model.PropertyDefinition;
25 import org.openecomp.sdc.be.model.Resource;
26 import org.openecomp.sdc.be.model.User;
27 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
28 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
29 import org.openecomp.sdc.exception.ResponseFormat;
30
31 import javax.ws.rs.core.Response;
32 import java.util.List;
33
34 import static org.assertj.core.api.Assertions.assertThat;
35 import static org.mockito.ArgumentMatchers.anyString;
36 import static org.mockito.ArgumentMatchers.eq;
37 import static org.mockito.Mockito.verify;
38 import static org.mockito.Mockito.when;
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 ComponentParametersView componentFilter;
63     private Resource resource;
64     private PropertyDefinition prop1, prop2;
65
66     @Before
67     public void setUp() throws Exception {
68         componentFilter = new ComponentParametersView(true);
69         componentFilter.setIgnorePolicies(false);
70         componentFilter.setIgnoreUsers(false);
71
72         prop1 = new PropertyDataDefinitionBuilder().setUniqueId("prop1").build();
73         prop2 = new PropertyDataDefinitionBuilder().setUniqueId("prop1").build();
74
75         PolicyDefinition policy1 = PolicyDefinitionBuilder.create()
76                 .setUniqueId(POLICY_ID)
77                 .setProperties(prop1, prop2)
78                 .build();
79
80         PolicyDefinition policy2 = PolicyDefinitionBuilder.create()
81                 .setUniqueId(NO_PROPS_POLICY)
82                 .build();
83         resource = new ResourceBuilder()
84                 .setUniqueId(RESOURCE_ID)
85                 .setLifeCycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT)
86                 .setLastUpdaterUserId(USER_ID)
87                 .addPolicy(policy1)
88                 .addPolicy(policy2)
89                 .build();
90     }
91
92     @After
93     public void tearDown() {
94         verify(titanDao).commit();
95     }
96
97     @Test
98     public void getPolicyProperties_userIdIsNull() {
99         String userId = null;
100         ResponseFormat forbiddenResponse = new ResponseFormat(Response.Status.FORBIDDEN.getStatusCode());
101         when(userValidations.validateUserExists(eq(userId), anyString(), eq(false))).thenReturn(Either.right(forbiddenResponse));
102         Either<List<PropertyDataDefinition>, ResponseFormat> policyProperties = testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, POLICY_ID, null);
103         assertThat(policyProperties.right().value()).isSameAs(forbiddenResponse);
104     }
105
106     @Test
107     public void getPolicyProperties_componentNotFound() {
108         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenReturn(Either.left(new User()));
109         ArgumentCaptor<ComponentParametersView> filterCaptor = ArgumentCaptor.forClass(ComponentParametersView.class);
110         when(toscaOperationFacade.getToscaElement(eq(RESOURCE_ID), filterCaptor.capture())).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
111         when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND, ComponentTypeEnum.RESOURCE)).thenCallRealMethod();
112         ResponseFormat notFoundResponse = new ResponseFormat(Response.Status.NOT_FOUND.getStatusCode());
113         when(componentsUtils.getResponseFormat(eq(ActionStatus.RESOURCE_NOT_FOUND), anyString())).thenReturn(notFoundResponse);
114         Either<List<PropertyDataDefinition>, ResponseFormat> policyProperties = testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, POLICY_ID, USER_ID);
115         assertThat(policyProperties.right().value()).isSameAs(notFoundResponse);
116     }
117
118     @Test
119     public void getPolicyProperties_policyNotExist() {
120         doPolicyValidations();
121         ResponseFormat notFoundResponse = new ResponseFormat(Response.Status.NOT_FOUND.getStatusCode());
122         when(componentsUtils.getResponseFormat(ActionStatus.POLICY_NOT_FOUND_ON_CONTAINER, "nonExistingPolicy", RESOURCE_ID)).thenReturn(notFoundResponse);
123         Either<List<PropertyDataDefinition>, ResponseFormat> policyProperties = testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, "nonExistingPolicy", USER_ID);
124         assertThat(policyProperties.right().value()).isEqualTo(notFoundResponse);
125     }
126
127     @Test
128     public void getPolicyProperties_noPropertiesOnPolicy() {
129         doPolicyValidations();
130         Either<List<PropertyDataDefinition>, ResponseFormat> policyProperties = testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, NO_PROPS_POLICY, USER_ID);
131         assertThat(policyProperties.left().value()).isNull();
132     }
133
134     @Test
135     public void getPolicyProperties() {
136         doPolicyValidations();
137         Either<List<PropertyDataDefinition>, ResponseFormat> policyProperties = testInstance.getPolicyProperties(ComponentTypeEnum.RESOURCE, RESOURCE_ID, POLICY_ID, USER_ID);
138         assertThat(policyProperties.left().value())
139                 .usingElementComparatorOnFields("uniqueId")
140                 .containsExactly(prop1, prop2);
141     }
142
143     private void doPolicyValidations() {
144         when(userValidations.validateUserExists(eq(USER_ID), anyString(), eq(false))).thenReturn(Either.left(new User()));
145         ArgumentCaptor<ComponentParametersView> filterCaptor = ArgumentCaptor.forClass(ComponentParametersView.class);
146         when(toscaOperationFacade.getToscaElement(eq(RESOURCE_ID), filterCaptor.capture())).thenReturn(Either.left(resource));
147     }
148 }