Catalog alignment
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / servlets / UserEndpointTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.servlets;
22
23 import com.fasterxml.jackson.databind.DeserializationFeature;
24 import fj.data.Either;
25 import org.eclipse.jetty.http.HttpStatus;
26 import org.glassfish.jersey.client.ClientConfig;
27 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
28 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider;
29 import org.glassfish.jersey.logging.LoggingFeature;
30 import org.glassfish.jersey.media.multipart.MultiPartFeature;
31 import org.glassfish.jersey.server.ResourceConfig;
32 import org.janusgraph.graphdb.types.system.EmptyVertex;
33 import org.junit.Before;
34 import org.junit.BeforeClass;
35 import org.junit.Test;
36 import org.openecomp.sdc.be.components.lifecycle.LifecycleBusinessLogic;
37 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
38 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
39 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
40 import org.openecomp.sdc.be.dao.utils.UserStatusEnum;
41 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
42 import org.openecomp.sdc.be.facade.operations.UserOperation;
43 import org.openecomp.sdc.be.impl.ComponentsUtils;
44 import org.openecomp.sdc.be.model.User;
45 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
46 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
47 import org.openecomp.sdc.be.model.operations.impl.UserAdminOperation;
48 import org.openecomp.sdc.be.resources.data.UserData;
49 import org.openecomp.sdc.be.user.Role;
50 import org.openecomp.sdc.be.user.UserBusinessLogic;
51 import org.openecomp.sdc.be.user.UserBusinessLogicExt;
52 import org.openecomp.sdc.common.api.Constants;
53 import org.springframework.context.annotation.Bean;
54 import org.springframework.context.annotation.Import;
55
56 import javax.ws.rs.client.Entity;
57 import javax.ws.rs.core.MediaType;
58 import javax.ws.rs.core.Response;
59 import java.util.ArrayList;
60
61 import static org.assertj.core.api.Assertions.assertThat;
62 import static org.mockito.ArgumentMatchers.any;
63 import static org.mockito.ArgumentMatchers.eq;
64 import static org.mockito.Mockito.mock;
65 import static org.mockito.Mockito.when;
66 import static org.openecomp.sdc.be.dao.utils.UserStatusEnum.ACTIVE;
67 import static org.openecomp.sdc.be.dao.utils.UserStatusEnum.INACTIVE;
68 import static org.openecomp.sdc.be.user.Role.ADMIN;
69 import static org.openecomp.sdc.be.user.Role.DESIGNER;
70
71 public class UserEndpointTest extends JerseySpringBaseTest {
72
73     static final String USER_ID = "jh0003";
74     static final String NEW_USER_ID = "ab0001";
75     static final String MODIFIER_ID = "admin1";
76
77     private static ComponentsUtils componentUtils;
78     private static JanusGraphGenericDao janusGraphGenericDao;
79     private static ToscaOperationFacade toscaOperationFacade;
80     private static LifecycleBusinessLogic lifecycleBusinessLogic;
81     private static UserOperation facadeUserOperation;
82
83
84     private UserData userData = new UserData();
85     private UserData modifierData = new UserData();
86
87     @org.springframework.context.annotation.Configuration
88     @Import(BaseTestConfig.class)
89     static class UserTestConfig {
90
91         @Bean
92         UserAdminServlet userEndpoint() {
93             ComponentsUtils componentsUtils = mock(ComponentsUtils.class);
94             return new UserAdminServlet(userBusinessLogic(), componentsUtils, userBusinessLogicExt());
95         }
96
97         @Bean
98         UserBusinessLogic userBusinessLogic() {
99             return new UserBusinessLogic(userAdminOperation(), componentUtils, facadeUserOperation);
100         }
101
102         @Bean
103         UserBusinessLogicExt userBusinessLogicExt() {
104             return new UserBusinessLogicExt(userBusinessLogic(), userAdminOperation(), lifecycleBusinessLogic, componentUtils);
105         }
106
107         @Bean
108         UserAdminOperation userAdminOperation() {
109             return new UserAdminOperation(janusGraphGenericDao, toscaOperationFacade);
110         }
111     }
112
113     @BeforeClass
114     public static void initClass() {
115         janusGraphGenericDao = mock(JanusGraphGenericDao.class);
116         componentUtils = mock(ComponentsUtils.class);
117         toscaOperationFacade = mock(ToscaOperationFacade.class);
118         lifecycleBusinessLogic = mock(LifecycleBusinessLogic.class);
119         facadeUserOperation = mock(UserOperation.class);
120     }
121
122     @Before
123     public void setup() {
124         setUserProperties(userData, USER_ID, DESIGNER, ACTIVE);
125         setUserProperties(modifierData, MODIFIER_ID, ADMIN, ACTIVE);
126         Either<UserData, JanusGraphOperationStatus> janusGraphValidUser = Either.left(userData);
127         Either<UserData, JanusGraphOperationStatus> janusGraphValidModifier = Either.left(modifierData);
128         when(janusGraphGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), USER_ID, UserData.class))
129                 .thenReturn(janusGraphValidUser);
130         when(janusGraphGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), MODIFIER_ID, UserData.class))
131                 .thenReturn(janusGraphValidModifier);
132         when(janusGraphGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), NEW_USER_ID, UserData.class))
133                 .thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
134     }
135
136     private void setUserProperties(UserData user, String userId, Role role, UserStatusEnum statusEnum) {
137         user.setUserId(userId);
138         user.setRole(role.name());
139         user.setStatus(statusEnum.name());
140     }
141
142     @Override
143     protected void configureClient(ClientConfig config) {
144         final JacksonJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider()
145                 .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
146         config.register(jacksonJsonProvider);
147         config.register(MultiPartFeature.class);
148     }
149
150     @Override
151     protected ResourceConfig configure() {
152         return super.configure(UserEndpointTest.UserTestConfig.class)
153                 .register(UserAdminServlet.class)
154                 .property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER, "WARNING");
155     }
156
157     @Test
158     public void getUser_success() {
159         User user = target().path("/v1/user/" + USER_ID)
160                 .request(MediaType.APPLICATION_JSON)
161                 .header(Constants.USER_ID_HEADER, USER_ID)
162                 .get(User.class);
163         assertThat(user.getUserId()).isEqualTo(USER_ID);
164     }
165
166     @Test
167     public void getUserRole_success() {
168         String result = target().path("/v1/user/" + USER_ID + "/role")
169                 .request(MediaType.APPLICATION_JSON)
170                 .header(Constants.USER_ID_HEADER, MODIFIER_ID)
171                 .get(String.class);
172         assertThat(result).isEqualTo("{ \"role\" : \"" + DESIGNER.name() + "\" }");
173     }
174
175     @Test
176     public void updateUserRole_success() {
177         UserAdminServlet.UserRole role = new UserAdminServlet.UserRole();
178         role.setRole(ADMIN);
179         EmptyVertex emptyVertex = new EmptyVertex();
180         UserData updatedUser = new UserData();
181         setUserProperties(updatedUser, USER_ID, ADMIN, ACTIVE);
182         when(janusGraphGenericDao.getVertexByProperty(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), USER_ID))
183                 .thenReturn(Either.left(emptyVertex));
184         when(janusGraphGenericDao.getOutgoingEdgesByCriteria(eq(emptyVertex), eq(GraphEdgeLabels.STATE), any()))
185                 .thenReturn(Either.left(new ArrayList<>()));
186         when(janusGraphGenericDao.updateNode(eq(updatedUser), eq(UserData.class))).thenReturn(Either.left(updatedUser));
187         User user = target().path("/v1/user/" + USER_ID + "/role")
188                 .request(MediaType.APPLICATION_JSON)
189                 .accept(MediaType.APPLICATION_JSON)
190                 .header(Constants.USER_ID_HEADER, MODIFIER_ID)
191                 .post(Entity.entity(role, MediaType.APPLICATION_JSON),User.class);
192         assertThat(user.getRole()).isEqualTo(ADMIN.name());
193     }
194
195     @Test
196     public void createUser_success() {
197         User newUser = new User();
198         newUser.setUserId(NEW_USER_ID);
199         UserData updatedUser = new UserData();
200         setUserProperties(updatedUser, NEW_USER_ID, DESIGNER, ACTIVE);
201         //when(janusGraphGenericDao.updateNode(any(), eq(UserData.class))).thenReturn(Either.left(updatedUser));
202         when(janusGraphGenericDao.createNode(any(), eq(UserData.class))).thenReturn(Either.left(updatedUser));
203         Response response = target().path("/v1/user")
204                 .request(MediaType.APPLICATION_JSON)
205                 .header(Constants.USER_ID_HEADER, MODIFIER_ID)
206                 .post(Entity.entity(newUser, MediaType.APPLICATION_JSON),Response.class);
207         assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED_201);
208         User createdUser = response.readEntity(User.class);
209         assertThat(createdUser.getUserId()).isEqualTo(NEW_USER_ID);
210         assertThat(createdUser.getStatus()).isEqualTo(ACTIVE);
211     }
212
213     @Test
214     public void authorizeUser_success() {
215         when(janusGraphGenericDao.updateNode(any(), eq(UserData.class))).thenReturn(Either.left(userData));
216         User user = target().path("/v1/user/authorize")
217                 .request(MediaType.APPLICATION_JSON)
218                 .header(Constants.USER_ID_HEADER, USER_ID)
219                 .header("HTTP_CSP_FIRSTNAME", "Jimmy")
220                 .header("HTTP_CSP_LASTNAME", "Hendrix")
221                 .header("HTTP_CSP_EMAIL", "admin@sdc.com")
222                 .get(User.class);
223         assertThat(user.getUserId()).isEqualTo(USER_ID);
224     }
225
226     @Test
227     public void deactivateUser_success() {
228         EmptyVertex emptyVertex = new EmptyVertex();
229         UserData updatedUser = new UserData();
230         setUserProperties(updatedUser, USER_ID, DESIGNER, INACTIVE);
231         when(janusGraphGenericDao.getVertexByProperty(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), USER_ID))
232                 .thenReturn(Either.left(emptyVertex));
233         when(janusGraphGenericDao.getOutgoingEdgesByCriteria(eq(emptyVertex), eq(GraphEdgeLabels.STATE), any()))
234                 .thenReturn(Either.left(new ArrayList<>()));
235         when(janusGraphGenericDao.updateNode(eq(updatedUser), eq(UserData.class))).thenReturn(Either.left(updatedUser));
236         User user = target().path("/v1/user/" + USER_ID)
237                 .request(MediaType.APPLICATION_JSON)
238                 .accept(MediaType.APPLICATION_JSON)
239                 .header(Constants.USER_ID_HEADER, MODIFIER_ID)
240                 .delete(User.class);
241         assertThat(user.getUserId()).isEqualTo(USER_ID);
242     }
243
244 }