2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.be.servlets;
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;
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;
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;
71 public class UserEndpointTest extends JerseySpringBaseTest {
73 static final String USER_ID = "jh0003";
74 static final String NEW_USER_ID = "ab0001";
75 static final String MODIFIER_ID = "admin1";
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;
84 private UserData userData = new UserData();
85 private UserData modifierData = new UserData();
87 @org.springframework.context.annotation.Configuration
88 @Import(BaseTestConfig.class)
89 static class UserTestConfig {
92 UserAdminServlet userEndpoint() {
93 ComponentsUtils componentsUtils = mock(ComponentsUtils.class);
94 return new UserAdminServlet(userBusinessLogic(), componentsUtils, userBusinessLogicExt());
98 UserBusinessLogic userBusinessLogic() {
99 return new UserBusinessLogic(userAdminOperation(), componentUtils, facadeUserOperation);
103 UserBusinessLogicExt userBusinessLogicExt() {
104 return new UserBusinessLogicExt(userBusinessLogic(), userAdminOperation(), lifecycleBusinessLogic, componentUtils);
108 UserAdminOperation userAdminOperation() {
109 return new UserAdminOperation(janusGraphGenericDao, toscaOperationFacade);
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);
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));
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());
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);
151 protected ResourceConfig configure() {
152 return super.configure(UserEndpointTest.UserTestConfig.class)
153 .register(UserAdminServlet.class)
154 .property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER, "WARNING");
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)
163 assertThat(user.getUserId()).isEqualTo(USER_ID);
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)
172 assertThat(result).isEqualTo("{ \"role\" : \"" + DESIGNER.name() + "\" }");
176 public void updateUserRole_success() {
177 UserAdminServlet.UserRole role = new UserAdminServlet.UserRole();
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());
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);
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")
223 assertThat(user.getUserId()).isEqualTo(USER_ID);
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)
241 assertThat(user.getUserId()).isEqualTo(USER_ID);