diff options
Diffstat (limited to 'catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/UserAdminOperationTest.java')
-rw-r--r-- | catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/UserAdminOperationTest.java | 553 |
1 files changed, 365 insertions, 188 deletions
diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/UserAdminOperationTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/UserAdminOperationTest.java index 57689edb3d..5226a468d7 100644 --- a/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/UserAdminOperationTest.java +++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/UserAdminOperationTest.java @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -20,33 +20,21 @@ package org.openecomp.sdc.be.model.operations.impl; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.time.Instant; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.apache.tinkerpop.gremlin.structure.Direction; -import org.apache.tinkerpop.gremlin.structure.Edge; -import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.structure.Property; -import org.apache.tinkerpop.gremlin.structure.Vertex; +import com.thinkaurelius.titan.core.*; +import com.thinkaurelius.titan.graphdb.relations.StandardVertexProperty; +import com.thinkaurelius.titan.graphdb.types.system.EmptyVertex; +import com.thinkaurelius.titan.graphdb.types.system.ImplicitKey; +import fj.data.Either; +import org.apache.tinkerpop.gremlin.structure.*; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.openecomp.sdc.be.dao.api.ActionStatus; +import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary; import org.openecomp.sdc.be.dao.titan.TitanGenericDao; import org.openecomp.sdc.be.dao.titan.TitanOperationStatus; import org.openecomp.sdc.be.dao.utils.UserStatusEnum; @@ -57,173 +45,362 @@ import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import org.openecomp.sdc.be.resources.data.UserData; import org.openecomp.sdc.common.api.UserRoleEnum; -import fj.data.Either; +import java.time.Instant; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; public class UserAdminOperationTest extends ModelTestBase { - private static final TitanGenericDao titanGenericDao = mock(TitanGenericDao.class); - @InjectMocks - private static final UserAdminOperation userAdminOperation = new UserAdminOperation(titanGenericDao); - private static final String ADMIN = "admin"; - - @BeforeClass - public static void setup() { - ModelTestBase.init(); - } - - @Before - public void initMocks() { - MockitoAnnotations.initMocks(this); - Mockito.reset(titanGenericDao); - mockTitanUpdate(); - mockTitanDelete(); - - } - - @Test - public void testDeActivateUserDataSuccess() { - UserData userData = mockTitanGet(ADMIN, UserRoleEnum.ADMIN, true); - - Either<User, StorageOperationStatus> eitherUser = userAdminOperation.deActivateUser(userAdminOperation.convertToUser(userData)); - - verify(titanGenericDao, times(1)).updateNode(Mockito.eq(userData), Mockito.eq(UserData.class)); - verify(titanGenericDao, times(0)).deleteNode(Mockito.any(UserData.class), Mockito.eq(UserData.class)); - assertTrue(eitherUser.isLeft()); - User user = eitherUser.left().value(); - assertTrue(user.getStatus() == UserStatusEnum.INACTIVE); - } - - @Test - public void testDeleteUserWithoutResources() { - UserData userData = mockTitanGet(ADMIN, UserRoleEnum.ADMIN, true); - - List<Edge> edgesList = new ArrayList<Edge>(); - - Either<List<Edge>, TitanOperationStatus> eitherResult = Either.left(edgesList); - when(titanGenericDao.getEdgesForNode(userData, Direction.BOTH)).thenReturn(eitherResult); - - Either<User, ActionStatus> eitherUser = userAdminOperation.deleteUserData(ADMIN); - verify(titanGenericDao, times(0)).updateNode(Mockito.any(UserData.class), Mockito.eq(UserData.class)); - verify(titanGenericDao, times(1)).deleteNode(userData, UserData.class); - assertTrue(eitherUser.isLeft()); - - } - - @Test - public void testDeleteUserWithResources() { - UserData userData = mockTitanGet(ADMIN, UserRoleEnum.ADMIN, true); - - List<Edge> edgesList = new ArrayList<Edge>(); - edgesList.add(getEmptyEdgeImpl()); - - Either<List<Edge>, TitanOperationStatus> eitherResult = Either.left(edgesList); - when(titanGenericDao.getEdgesForNode(userData, Direction.BOTH)).thenReturn(eitherResult); - - Either<User, ActionStatus> eitherUser = userAdminOperation.deleteUserData(ADMIN); - verify(titanGenericDao, times(0)).updateNode(Mockito.any(UserData.class), Mockito.eq(UserData.class)); - verify(titanGenericDao, times(0)).deleteNode(Mockito.any(UserData.class), Mockito.eq(UserData.class)); - assertTrue(eitherUser.isRight()); - assertTrue(eitherUser.right().value() == ActionStatus.USER_HAS_ACTIVE_ELEMENTS); - - } - - private Edge getEmptyEdgeImpl() { - return new Edge() { - - @Override - public Object id() { - // TODO Auto-generated method stub - return null; - } - - @Override - public String label() { - // TODO Auto-generated method stub - return null; - } - - @Override - public Graph graph() { - // TODO Auto-generated method stub - return null; - } - - @Override - public <V> Property<V> property(String key, V value) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void remove() { - // TODO Auto-generated method stub - - } - - @Override - public Iterator<Vertex> vertices(Direction direction) { - // TODO Auto-generated method stub - return null; - } - - @Override - public <V> Iterator<Property<V>> properties(String... propertyKeys) { - // TODO Auto-generated method stub - return null; - } - - }; - } - - private UserData mockTitanGet(String userId, UserRoleEnum role, boolean isActive) { - UserData userData = buildUserData(userId, role, isActive); - Either<UserData, TitanOperationStatus> eitherUserData = Either.left(userData); - when(titanGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), userId, UserData.class)).thenReturn(eitherUserData); - return userData; - } - - private static void mockTitanUpdate() { - doAnswer(new Answer<Either<UserData, TitanOperationStatus>>() { - public Either<UserData, TitanOperationStatus> answer(InvocationOnMock invocation) { - Object[] args = invocation.getArguments(); - UserData retValue = (UserData) args[0]; - Either<UserData, TitanOperationStatus> result = Either.left(retValue); - return result; - } - - }).when(titanGenericDao).updateNode(Mockito.any(UserData.class), Mockito.eq(UserData.class)); - } - - private static void mockTitanDelete() { - doAnswer(new Answer<Either<UserData, TitanOperationStatus>>() { - public Either<UserData, TitanOperationStatus> answer(InvocationOnMock invocation) { - Object[] args = invocation.getArguments(); - UserData retValue = (UserData) args[0]; - Either<UserData, TitanOperationStatus> result = Either.left(retValue); - return result; - } - - }).when(titanGenericDao).deleteNode(Mockito.any(UserData.class), Mockito.eq(UserData.class)); - } - - private void assertUserEquals(UserData expected, User actual) { - assertEquals(expected.getEmail(), actual.getEmail()); - assertEquals(expected.getFirstName(), actual.getFirstName()); - assertEquals(expected.getLastName(), actual.getLastName()); - assertEquals(expected.getRole(), actual.getRole()); - assertEquals(expected.getStatus(), actual.getStatus().name()); - assertEquals(expected.getUserId(), actual.getUserId()); - - } - - private static UserData buildUserData(String userId, UserRoleEnum role, boolean isActive) { - UserData userData = new UserData(); - userData.setUserId(userId); - userData.setRole(role.getName()); - userData.setEmail("someEmail@somePlace.com"); - userData.setFirstName("israel"); - userData.setLastName("israeli"); - userData.setLastLoginTime(Instant.MIN.getEpochSecond()); - userData.setStatus(isActive ? UserStatusEnum.ACTIVE.name() : UserStatusEnum.INACTIVE.name()); - return userData; - } + private static final TitanGenericDao titanGenericDao = mock(TitanGenericDao.class); + @InjectMocks + private static final UserAdminOperation userAdminOperation = new UserAdminOperation(titanGenericDao); + private static final String ADMIN = "admin"; + + @BeforeClass + public static void setup() { + ModelTestBase.init(); + } + + @Before + public void initMocks() { + MockitoAnnotations.initMocks(this); + Mockito.reset(titanGenericDao); + mockTitanUpdate(); + mockTitanDelete(); + + } + + @Test + public void testDeActivateUserDataSuccess() { + UserData userData = mockTitanGet(ADMIN, UserRoleEnum.ADMIN, true); + + Either<User, StorageOperationStatus> eitherUser = userAdminOperation.deActivateUser(userAdminOperation.convertToUser(userData)); + + verify(titanGenericDao, times(1)).updateNode(eq(userData), eq(UserData.class)); + verify(titanGenericDao, times(0)).deleteNode(any(UserData.class), eq(UserData.class)); + assertTrue(eitherUser.isLeft()); + User user = eitherUser.left().value(); + assertSame(user.getStatus(), UserStatusEnum.INACTIVE); + } + + @Test + public void testDeleteUserWithoutResources() { + UserData userData = mockTitanGet(ADMIN, UserRoleEnum.ADMIN, true); + + List<Edge> edgesList = new ArrayList<>(); + + Either<List<Edge>, TitanOperationStatus> eitherResult = Either.left(edgesList); + when(titanGenericDao.getEdgesForNode(userData, Direction.BOTH)).thenReturn(eitherResult); + + Either<User, ActionStatus> eitherUser = userAdminOperation.deleteUserData(ADMIN); + verify(titanGenericDao, times(0)).updateNode(any(UserData.class), eq(UserData.class)); + verify(titanGenericDao, times(1)).deleteNode(userData, UserData.class); + assertTrue(eitherUser.isLeft()); + + } + + @Test + public void testDeleteUserWithResources() { + UserData userData = mockTitanGet(ADMIN, UserRoleEnum.ADMIN, true); + + List<Edge> edgesList = new ArrayList<>(); + edgesList.add(getEmptyEdgeImpl()); + + Either<List<Edge>, TitanOperationStatus> eitherResult = Either.left(edgesList); + when(titanGenericDao.getEdgesForNode(userData, Direction.BOTH)).thenReturn(eitherResult); + + Either<User, ActionStatus> eitherUser = userAdminOperation.deleteUserData(ADMIN); + verify(titanGenericDao, times(0)).updateNode(any(UserData.class), eq(UserData.class)); + verify(titanGenericDao, times(0)).deleteNode(any(UserData.class), eq(UserData.class)); + assertTrue(eitherUser.isRight()); + assertSame(eitherUser.right().value(), ActionStatus.USER_HAS_ACTIVE_ELEMENTS); + + } + + @Test + public void getUserPendingTasks_shouldReturnNonDeleted() { + String userId = "abc123"; + String userKey = UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User); + User user = new User(); + user.setUserId(userId); + TitanVertex userVertex = null; + TestVertex component1 = new TestVertex(null); + TestVertex component2 = new TestVertex(true); + TestVertex component3 = new TestVertex(false); + List<Edge> edges = new ArrayList<>(); + Edge edge1 = new TestEdge(component1, "1"); + Edge edge2 = new TestEdge(component2, "2"); + Edge edge3 = new TestEdge(component3, "3"); + edges.add(edge1); + edges.add(edge2); + edges.add(edge3); + when(titanGenericDao.getVertexByProperty(userKey, userId)).thenReturn(Either.left(userVertex)); + when(titanGenericDao.getOutgoingEdgesByCriteria(any(), any(), any())).thenReturn(Either.left(edges)); + Either<List<Edge>, StorageOperationStatus> result = userAdminOperation.getUserPendingTasksList(user, new HashMap<>()); + assertThat(result.isLeft()).isTrue(); + List<Edge> pendingTasks = result.left().value(); + assertThat(pendingTasks.size()).isEqualTo(2); + assertThat(((TestEdge)pendingTasks.get(0)).getName()).isNotEqualTo("2"); + assertThat(((TestEdge)pendingTasks.get(1)).getName()).isNotEqualTo("2"); + } + + private class TestVertex implements TitanVertex { + + private final Boolean isDeleted; + + private TestVertex(Boolean isDeleted) { + this.isDeleted = isDeleted; + } + + @Override + public TitanEdge addEdge(String s, Vertex vertex, Object... objects) { + return null; + } + + @Override + public <V> TitanVertexProperty<V> property(String s, V v, Object... objects) { + return null; + } + + @Override + public <V> VertexProperty<V> property(String key) { + if (key.equals(GraphPropertiesDictionary.IS_DELETED.getProperty())) { + if (isDeleted==null) + return VertexProperty.empty(); + return new StandardVertexProperty(1, ImplicitKey.ID, new EmptyVertex(), isDeleted, (byte)1); + } + return VertexProperty.empty(); + } + + @Override + public <V> TitanVertexProperty<V> property(VertexProperty.Cardinality cardinality, String s, V v, Object... objects) { + return null; + } + + @Override + public Iterator<Edge> edges(Direction direction, String... strings) { + return null; + } + + @Override + public Iterator<Vertex> vertices(Direction direction, String... strings) { + return null; + } + + @Override + public Object id() { + return null; + } + + @Override + public long longId() { + return 0; + } + + @Override + public boolean hasId() { + return false; + } + + @Override + public String label() { + return null; + } + + @Override + public VertexLabel vertexLabel() { + return null; + } + + @Override + public TitanVertexQuery<? extends TitanVertexQuery> query() { + return null; + } + + @Override + public boolean isModified() { + return false; + } + + @Override + public TitanTransaction graph() { + return null; + } + + @Override + public void remove() { + + } + + @Override + public <V> V valueOrNull(PropertyKey propertyKey) { + return null; + } + + @Override + public boolean isNew() { + return false; + } + + @Override + public boolean isLoaded() { + return false; + } + + @Override + public boolean isRemoved() { + return false; + } + + @Override + public <V> Iterator<VertexProperty<V>> properties(String... strings) { + return null; + } + } + + private class TestEdge implements Edge { + + private final Vertex inVertx; + private final String name; + + TestEdge(Vertex inVertx, String name) { + this.inVertx = inVertx; + this.name = name; + } + + public String getName() { + return name; + } + + @Override + public Iterator<Vertex> vertices(Direction direction) { + return null; + } + + @Override + public Vertex inVertex() { + return inVertx; + } + + @Override + public Object id() { + return null; + } + + @Override + public String label() { + return null; + } + + @Override + public Graph graph() { + return null; + } + + @Override + public <V> Property<V> property(String s, V v) { + return null; + } + + @Override + public void remove() { + + } + + @Override + public <V> Iterator<Property<V>> properties(String... strings) { + return null; + } + } + + private Edge getEmptyEdgeImpl() { + return new Edge() { + + @Override + public Object id() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String label() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Graph graph() { + // TODO Auto-generated method stub + return null; + } + + @Override + public <V> Property<V> property(String key, V value) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void remove() { + // TODO Auto-generated method stub + + } + + @Override + public Iterator<Vertex> vertices(Direction direction) { + // TODO Auto-generated method stub + return null; + } + + @Override + public <V> Iterator<Property<V>> properties(String... propertyKeys) { + // TODO Auto-generated method stub + return null; + } + + }; + } + + private UserData mockTitanGet(String userId, UserRoleEnum role, boolean isActive) { + UserData userData = buildUserData(userId, role, isActive); + Either<UserData, TitanOperationStatus> eitherUserData = Either.left(userData); + when(titanGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), userId, UserData.class)).thenReturn(eitherUserData); + return userData; + } + + private static void mockTitanUpdate() { + doAnswer((Answer<Either<UserData, TitanOperationStatus>>) invocation -> { + Object[] args = invocation.getArguments(); + UserData retValue = (UserData) args[0]; + return Either.left(retValue); + }).when(titanGenericDao).updateNode(any(UserData.class), eq(UserData.class)); + } + + private static void mockTitanDelete() { + doAnswer((Answer<Either<UserData, TitanOperationStatus>>) invocation -> { + Object[] args = invocation.getArguments(); + UserData retValue = (UserData) args[0]; + return Either.left(retValue); + }).when(titanGenericDao).deleteNode(any(UserData.class), eq(UserData.class)); + } + + private static UserData buildUserData(String userId, UserRoleEnum role, boolean isActive) { + UserData userData = new UserData(); + userData.setUserId(userId); + userData.setRole(role.getName()); + userData.setEmail("someEmail@somePlace.com"); + userData.setFirstName("israel"); + userData.setLastName("israeli"); + userData.setLastLoginTime(Instant.MIN.getEpochSecond()); + userData.setStatus(isActive ? UserStatusEnum.ACTIVE.name() : UserStatusEnum.INACTIVE.name()); + return userData; + } } |