Summary Table
Categories |
Total Count |
PII |
0 |
URL |
0 |
DNS |
0 |
EKL |
0 |
IP |
0 |
PORT |
0 |
VsID |
0 |
CF |
0 |
AI |
0 |
VPD |
0 |
PL |
0 |
Other |
0 |
File Content
/*
* UserServiceTest.java
* Copyright (c) 2017 Veterans Affairs.
*/
package gov.va.oneconsult.seoc.api.service;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.http.HttpStatus;
import gov.va.oneconsult.seoc.api.controller.SeocObjectGenerator;
import gov.va.oneconsult.seoc.api.exceptions.BusinessException;
import gov.va.oneconsult.seoc.api.exceptions.SeocConstraintViolationException;
import gov.va.oneconsult.seoc.api.json.CreateUserRequest;
import gov.va.oneconsult.seoc.api.json.SeocGenericResponse;
import gov.va.oneconsult.seoc.api.model.User;
import gov.va.oneconsult.seoc.api.repository.UserRepository;
import gov.va.oneconsult.seoc.api.service.impl.UserServiceImpl;
import gov.va.oneconsult.seoc.api.util.ApiUtil;
import gov.va.oneconsult.seoc.api.util.Constants;
/**
*
* @author AbleVets
*
*/
public class UserServiceTest
{
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService = new UserServiceImpl();
@Before
public void setUp()
{
MockitoAnnotations.initMocks(this);
//PowerMockito.mockStatic(ApiUtil.class);
}
/**
* Description: Return role if the user exists
*/
@Test
public void getRoleByVaUserId_userExists()
{
String role = "Administrator";
String domain = "DAV";
String vaNetworkId = "User1";
String userName = "User1";
User user = SeocObjectGenerator.getUser(1, userName, vaNetworkId, domain, role, null, new Date(), null);
String vaUserId = user.appendDomainToNetworkId();
Mockito.when(userRepository.findByVaUserId(vaUserId)).thenReturn(user);
String foundRole = userService.getRoleByVaUserId(vaUserId);
assertThat(user.getRole()).isEqualTo(foundRole);
Mockito.verify(userRepository, Mockito.times(1)).findByVaUserId(Mockito.anyString());
Mockito.verifyNoMoreInteractions(userRepository);
}
/**
* Description: Return null if no user exists
*/
@Test
public void getRoleByVaUserId_userDoesNotExist()
{
String vaUserId = "DAV"+Constants.DOMAIN_SEPARATOR+"Sys";
User user = null;
Mockito.when(userRepository.findByVaUserId(vaUserId)).thenReturn(user);
String foundRole = userService.getRoleByVaUserId(vaUserId);
assertThat(foundRole).isNull();
Mockito.verify(userRepository, Mockito.times(1)).findByVaUserId(Mockito.anyString());
Mockito.verifyNoMoreInteractions(userRepository);
}
/**
* Description: Save new user successfully
*/
@Test
public void saveUser_newUser()
{
String role = "Administrator";
String vaNetworkId = "User1";
String userName = "User1";
String domain = "DAV";
Date today = ApiUtil.getUTCZoneDateTime(new Date());
User beforeUser = SeocObjectGenerator.getUser(0, userName, vaNetworkId, domain, role, null, today, null);
User afterUser = SeocObjectGenerator.getUser(1, userName, vaNetworkId, domain, role, null, today, null);
CreateUserRequest userReq = CreateUserRequest.Builder.create()
.withDomain(domain)
.withUserName(userName)
.withVaNetworkId(vaNetworkId)
.withRole(role)
.build();
Mockito.when(userRepository.save(beforeUser)).thenReturn(afterUser);
Mockito.when(userRepository.findActiveUsers()).thenReturn(null);
SeocGenericResponse response = userService.saveUser(userReq);
assertThat(response.getStatus()).isEqualTo(Constants.CREATED);
assertThat(response.getMessage()).isEqualTo("Successfully saved User data");
ArgumentCaptor<User> argCaptor = ArgumentCaptor.forClass(User.class);
Mockito.verify(userRepository, Mockito.times(1)).save(argCaptor.capture());
Mockito.verify(userRepository, Mockito.times(1)).findActiveUsers();
Mockito.verifyNoMoreInteractions(userRepository);
}
/**
* Description: Update a user successfully
*/
@Test
public void saveUser_updateUser()
{
String role = "Administrator";
String vaNetworkIdBefore = "NetworkId1";
String vaNetworkIdAfter = "NetworkId2";
String userNameBefore = "User1";
String userNameAfter = "User2";
String domain = "DAV";
Date today = ApiUtil.getUTCZoneDateTime(new Date());
User activeUser = SeocObjectGenerator.getUser(2, "User", "VaNetworkID", domain, role, null, today, null);
User beforeUser = SeocObjectGenerator.getUser(1, userNameBefore, vaNetworkIdBefore, domain, role, null, today, null);
Set<User> activeUsers = new HashSet<User>();
activeUsers.add(activeUser);
activeUsers.add(beforeUser);
User afterUser = SeocObjectGenerator.getUser(1, userNameAfter, vaNetworkIdAfter, domain, role, null, today, today);
CreateUserRequest userReq = CreateUserRequest.Builder.create()
.withPrevNetworkId(vaNetworkIdBefore)
.withDomain(domain)
.withUserName(userNameAfter)
.withVaNetworkId(vaNetworkIdAfter)
.withRole(role)
.build();
Mockito.when(userRepository.save(beforeUser)).thenReturn(afterUser);
Mockito.when(userRepository.findByVaNetworkId(Constants.DOMAIN_SEPARATOR+vaNetworkIdBefore)).thenReturn(beforeUser);
Mockito.when(userRepository.findActiveUsers()).thenReturn(activeUsers);
SeocGenericResponse response = userService.saveUser(userReq);
assertThat(response.getStatus()).isEqualTo(Constants.UPDATED);
assertThat(response.getMessage()).isEqualTo("Successfully saved User data");
ArgumentCaptor<User> argCaptor = ArgumentCaptor.forClass(User.class);
Mockito.verify(userRepository, Mockito.times(1)).save(argCaptor.capture());
Mockito.verify(userRepository, Mockito.times(1)).findByVaNetworkId(Mockito.anyString());
Mockito.verify(userRepository, Mockito.times(1)).findActiveUsers();
Mockito.verifyNoMoreInteractions(userRepository);
}
/**
* Description: Saving user validation failed. Validation is done one role, domain, vaNetworkId and username fields.
*/
@Test(expected = SeocConstraintViolationException.class)
public void saveUser_validationFailure()
{
String role = "Admin";
String vaNetworkId = null;
String userName = "User1";
String domain = null;
Date today = ApiUtil.getUTCZoneDateTime(new Date());
User beforeUser = SeocObjectGenerator.getUser(0, userName, vaNetworkId, domain, role, null, today, null);
User afterUser = SeocObjectGenerator.getUser(1, userName, vaNetworkId, domain, role, null, today, null);
CreateUserRequest userReq = CreateUserRequest.Builder.create()
.withDomain(domain)
.withUserName(userName)
.withVaNetworkId(vaNetworkId)
.withRole(role)
.build();
Mockito.when(userRepository.save(beforeUser)).thenReturn(afterUser);
SeocGenericResponse response = userService.saveUser(userReq);
assertThat(response.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST);
ArgumentCaptor<User> argCaptor = ArgumentCaptor.forClass(User.class);
Mockito.verify(userRepository, Mockito.times(1)).save(argCaptor.capture());
Mockito.verifyNoMoreInteractions(userRepository);
}
/**
* Description: Create a new user, found duplicate user in DB
*/
@Test(expected = BusinessException.class)
public void saveNewUser_duplicateUserIsActive()
{
String role = "Administrator";
String vaNetworkId = "User1";
String userName = "User1";
String domain = "DAV";
Date today = ApiUtil.getUTCZoneDateTime(new Date());
User activeUser = SeocObjectGenerator.getUser(1, userName, vaNetworkId, domain, role, null, today, null);
Set<User> activeUsers = new HashSet<User>();
activeUsers.add(activeUser);
CreateUserRequest userReq = CreateUserRequest.Builder.create()
.withDomain(domain)
.withUserName(userName)
.withVaNetworkId(vaNetworkId)
.withRole(role)
.build();
Mockito.when(userRepository.findActiveUsers()).thenReturn(activeUsers);
SeocGenericResponse response = userService.saveUser(userReq);
assertThat(response.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST);
Mockito.verify(userRepository, Mockito.times(1)).findActiveUsers();
Mockito.verifyNoMoreInteractions(userRepository);
}
/**
* Description: Updating a User and there exists another user which has same username or networkid being updated with
*/
@Test(expected = BusinessException.class)
public void saveUser_updateUser_userExitsWithSameName()
{
String role = "Administrator";
String vaNetworkIdBefore = "NetworkId1";
String vaNetworkIdAfter = "NetworkId2";
String userNameBefore = "User1";
String userNameAfter = "User2";
String domain = "DAV";
Date today = ApiUtil.getUTCZoneDateTime(new Date());
User activeUser = SeocObjectGenerator.getUser(2, userNameAfter, vaNetworkIdAfter, domain, role, null, today, null);
User beforeUser = SeocObjectGenerator.getUser(1, userNameBefore, vaNetworkIdBefore, domain, role, null, today, null);
Set<User> activeUsers = new HashSet<User>();
activeUsers.add(activeUser);
activeUsers.add(beforeUser);
User afterUser = SeocObjectGenerator.getUser(1, userNameAfter, vaNetworkIdAfter, domain, role, null, today, today);
CreateUserRequest userReq = CreateUserRequest.Builder.create()
.withPrevNetworkId(vaNetworkIdBefore)
.withDomain(domain)
.withUserName(userNameAfter)
.withVaNetworkId(vaNetworkIdAfter)
.withRole(role)
.build();
Mockito.when(userRepository.save(beforeUser)).thenReturn(afterUser);
Mockito.when(userRepository.findByVaNetworkId(Constants.DOMAIN_SEPARATOR+vaNetworkIdBefore)).thenReturn(beforeUser);
Mockito.when(userRepository.findActiveUsers()).thenReturn(activeUsers);
SeocGenericResponse response = userService.saveUser(userReq);
assertThat(response.getStatus()).isEqualTo(Constants.UPDATED);
assertThat(response.getMessage()).isEqualTo("Successfully saved User data");
ArgumentCaptor<User> argCaptor = ArgumentCaptor.forClass(User.class);
Mockito.verify(userRepository, Mockito.times(1)).save(argCaptor.capture());
Mockito.verify(userRepository, Mockito.times(1)).findByVaNetworkId(Mockito.anyString());
Mockito.verify(userRepository, Mockito.times(1)).findActiveUsers();
Mockito.verifyNoMoreInteractions(userRepository);
}
/**
* Description: Test successful delete.
* Also Tests
* 1.Successful find from method getUserByVaNetworkId() through deleteUser()
* 2.Successful Save by Save() method
*/
@Test
public void deleteUser_success()
{
String role = "Admin";
String userName = "User1";
String domain = "DOM";
String vaNetworkId = "VAUSERTEST";
String vaUserId = domain + Constants.DOMAIN_SEPARATOR + vaNetworkId;
Date today = ApiUtil.today_UTC();
User beforeUser = SeocObjectGenerator.getUser(1, userName, vaUserId, role, null, today, null);
User afterUser = SeocObjectGenerator.getUser(1, userName, vaUserId, role, today, today, today);
Mockito.when(userRepository.findByVaNetworkId(Constants.DOMAIN_SEPARATOR + vaNetworkId)).thenReturn(beforeUser);
Mockito.when(userRepository.save(beforeUser)).thenReturn(afterUser);
SeocGenericResponse response = userService.deleteUser(vaNetworkId);
assertThat(response.getStatus()).isEqualTo(Constants.SUCCESS);
ArgumentCaptor<User> argCaptor = ArgumentCaptor.forClass(User.class);
Mockito.verify(userRepository, Mockito.times(1)).save(argCaptor.capture());
Mockito.verify(userRepository, Mockito.times(1)).findByVaNetworkId(Mockito.anyString());
Mockito.verifyNoMoreInteractions(userRepository);
}
/**
* Description:Test user not found during delete.
* Also Tests
* 1.Failure of find from method getUserByVaNetworkId() through deleteUser()
*/
@Test
public void deleteUser_NotFound()
{
String vaNetworkId = "VAUSERTEST";
User beforeUser = null;
Mockito.when(userRepository.findByVaNetworkId(Constants.DOMAIN_SEPARATOR + vaNetworkId)).thenReturn(beforeUser);
SeocGenericResponse response = userService.deleteUser(vaNetworkId);
assertThat(response.getStatus()).isEqualTo(Constants.FAILURE);
assertThat(response.getAction()).isEqualTo(Constants.NOTFOUND);
Mockito.verify(userRepository, Mockito.times(1)).findByVaNetworkId(Mockito.anyString());
Mockito.verifyNoMoreInteractions(userRepository);
}
}