From dce0cf7ee42b43ff61ba7cb0c0b21e5a78615cc6 Mon Sep 17 00:00:00 2001 From: Sankaranarayanan Viswanathan Date: Wed, 8 Oct 2014 00:31:49 -0400 Subject: [PATCH] Added a couple of unit tests for UserService login --- .../backend/service/UserServiceTest.java | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/test/java/com/commafeed/backend/service/UserServiceTest.java diff --git a/src/test/java/com/commafeed/backend/service/UserServiceTest.java b/src/test/java/com/commafeed/backend/service/UserServiceTest.java new file mode 100644 index 00000000..bef52eba --- /dev/null +++ b/src/test/java/com/commafeed/backend/service/UserServiceTest.java @@ -0,0 +1,108 @@ +package com.commafeed.backend.service; + +import static org.mockito.Matchers.any; +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 org.junit.Assert; +import org.junit.Test; + +import com.commafeed.backend.dao.UserDAO; +import com.commafeed.backend.model.User; +import com.google.common.base.Optional; + + +public class UserServiceTest { + + @Test public void + calling_login_should_not_return_user_object_when_given_null_nameOrEmail() { + UserService service = new UserService(null, null, null, null, null, null); + + Optional user = service.login(null, "password"); + + Assert.assertFalse(user.isPresent()); + } + + @Test public void + calling_login_should_not_return_user_object_when_given_null_password() { + UserService service = new UserService(null, null, null, null, null, null); + + Optional user = service.login("testusername", null); + + Assert.assertFalse(user.isPresent()); + } + + @Test public void + calling_login_should_lookup_user_by_name() { + UserDAO dao = mock(UserDAO.class); + + UserService service = new UserService(null, dao, null, null, null, null); + service.login("test", "password"); + + verify(dao).findByName("test"); + } + + @Test public void + calling_login_should_lookup_user_by_email_if_lookup_by_name_failed() { + UserDAO dao = mock(UserDAO.class); + when(dao.findByName("test@test.com")).thenReturn(null); + + UserService service = new UserService(null, dao, null, null, null, null); + service.login("test@test.com", "password"); + + verify(dao).findByEmail("test@test.com"); + } + + @Test public void + calling_login_should_not_return_user_object_if_user_is_disabled() { + // Make a disabled user + User disabledUser = new User(); + disabledUser.setDisabled(true); + + // Mock DAO to return the disabled user + UserDAO dao = mock(UserDAO.class); + when(dao.findByName("test")).thenReturn(disabledUser); + + // Create service with mocked DAO + UserService service = new UserService(null, dao, null, null, null, null); + + // Try to login as the disabled user + Optional user = service.login("test", "password"); + + Assert.assertFalse(user.isPresent()); + } + + @Test public void + calling_login_should_try_to_authenticate_user_who_is_not_disabled() { + // Make a user who is not disabled + User user = new User(); + user.setDisabled(false); + + // Set the encryptedPassword on the user + byte[] encryptedPassword = new byte[]{5,6,7}; + user.setPassword(encryptedPassword); + + // Set a salt for this user + byte[] salt = new byte[]{1,2,3}; + 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 + service.login("test", "password"); + + verify(encryptionService).authenticate("password", encryptedPassword, salt); + } + +}