Added additional tests for UserService login

This commit is contained in:
Sankaranarayanan Viswanathan
2014-10-08 20:59:05 -04:00
parent dce0cf7ee4
commit 174be9c2d1
2 changed files with 72 additions and 1 deletions

View File

@@ -103,8 +103,10 @@ public class UserService {
/**
* should triggers after successful login
*
* Note: Visibility changed to protected to enabled spying on this method
*/
private void afterLogin(User user) {
protected void afterLogin(User user) {
Date lastLogin = user.getLastLogin();
Date now = new Date();

View File

@@ -5,6 +5,8 @@ import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.doNothing;
import org.junit.Assert;
import org.junit.Test;
@@ -104,5 +106,72 @@ public class UserServiceTest {
verify(encryptionService).authenticate("password", encryptedPassword, salt);
}
@Test public void
calling_login_should_not_return_user_object_on_unsuccessful_authentication() {
// Make a user who is not disabled
User user = new User();
user.setDisabled(false);
// Set the encryptedPassword on the user
byte[] encryptedPassword = new byte[]{1,2,3};
user.setPassword(encryptedPassword);
// Set a salt for this user
byte[] salt = new byte[]{4,5,6};
user.setSalt(salt);
// Mock DAO to return the user
UserDAO dao = mock(UserDAO.class);
when(dao.findByName("test")).thenReturn(user);
// Mock PasswordEncryptionService
PasswordEncryptionService encryptionService = mock(PasswordEncryptionService.class);
when(encryptionService.authenticate(anyString(), any(byte[].class), any(byte[].class))).thenReturn(false);
// Create service with mocks
UserService service = new UserService(null, dao, null, null, encryptionService, null);
// Try to login as the user
Optional<User> authenticatedUser = service.login("test", "password");
Assert.assertFalse(authenticatedUser.isPresent());
}
@Test public void
calling_login_should_return_user_object_on_successful_authentication() {
// Make a user who is not disabled
User user = new User();
user.setDisabled(false);
// Set the encryptedPassword on the user
byte[] encryptedPassword = new byte[]{1,2,3};
user.setPassword(encryptedPassword);
// Set a salt for this user
byte[] salt = new byte[]{4,5,6};
user.setSalt(salt);
// Mock DAO to return the user
UserDAO dao = mock(UserDAO.class);
when(dao.findByName("test")).thenReturn(user);
// Mock PasswordEncryptionService
PasswordEncryptionService encryptionService = mock(PasswordEncryptionService.class);
when(encryptionService.authenticate(anyString(), any(byte[].class), any(byte[].class))).thenReturn(true);
// Create service with mocks
UserService service = new UserService(null, dao, null, null, encryptionService, null);
// Skip afterLogin activities
UserService spy = spy(service);
doNothing().when(spy).afterLogin(any(User.class));
// Try to login as the user
Optional<User> authenticatedUser = spy.login("test", "password");
Assert.assertTrue(authenticatedUser.isPresent());
Assert.assertEquals(user, authenticatedUser.get());
}
}