package info.ozkan.vipera.dao.login; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Matchers.contains; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import info.ozkan.vipera.business.login.AdministratorLoginStatus; import info.ozkan.vipera.entities.Administrator; import info.ozkan.vipera.entities.Authorize; import info.ozkan.vipera.login.AdministratorLoginResult; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; import org.junit.Before; import org.junit.Test; /** * LoginDaoImpl sınıfının birim testleri * * @author Ömer Özkan */ public class AdministratorLoginDaoImplTest { /** * Kullanıcı adı */ private final String username = "admin"; /** * Parola */ private final String password = "password"; /** * EntityManager nesnesi */ private EntityManager em; /** * Query nesnesi */ private Query query; /** * Test edilen dao nesnesi */ private AdministratorLoginDaoImpl dao; /** * Test verilerini hazırlar * * @throws Exception */ @Before public void setUp() throws Exception { query = mock(Query.class); em = mock(EntityManager.class); dao = new AdministratorLoginDaoImpl(); dao.setEntityManager(em); } /** * Yönetici kullanıcı adı ve parolasını girip login butonuna tıklar * kullanıcı adı geçersizdir. * * @throws Exception */ @Test public void loginInvalidUsername() throws Exception { configureMockObjects(Collections.emptyList()); final AdministratorLoginResult result = dao.findUser(username, password); assertEquals(AdministratorLoginStatus.INVALID_USERNAME, result.getStatus()); verifyMockObjects(); } /** * Yönetici kullanıcı adı ve parolasını girip login butonuna tıklar parolası * geçersizdir. * * @throws Exception */ @Test public void loginInvalidPassword() throws Exception { final List<Administrator> list = createAdminList(username, "different"); configureMockObjects(list); final AdministratorLoginResult result = dao.findUser(username, password); assertEquals(AdministratorLoginStatus.INVALID_PASSWORD, result.getStatus()); verifyMockObjects(); } /** * Yönetici kullanıcı adı ve parolasını girip login butonuna tıklar bilgiler * geçerlidir ve login işlemi başarılıdır. * * @throws Exception */ @Test public void loginSuccessfull() throws Exception { final List<Administrator> list = createAdminList(username, password); configureMockObjects(list); final AdministratorLoginResult result = dao.findUser(username, password); assertEquals(AdministratorLoginStatus.SUCCESS, result.getStatus()); assertNotNull(result.getAdministrator()); verifyMockObjects(); } /** * Tek bir Administrator nesnesi içeren liste oluşturur * * @param username * Kullanıcı adı * @param password * Parola * @return Liste */ private List<Administrator> createAdminList(final String username, final String password) { final List<Administrator> list = new ArrayList<Administrator>(); final Administrator admin = new Administrator(); admin.setUsername(username); admin.setPassword(password); list.add(admin); return list; } /** * Mock metodlarının çağrıldığını onaylar */ private void verifyMockObjects() { verify(em).createQuery(AdministratorLoginDaoImpl.GET_USER_JQL); verify(query).setParameter(contains("username"), contains(username)); verify(query).setParameter("enabled", Authorize.ENABLE); verify(query).getResultList(); } /** * Mock nesnelerinin metodlarını tanımlar * * @param list */ private void configureMockObjects(final List list) { when(em.createQuery(AdministratorLoginDaoImpl.GET_USER_JQL)) .thenReturn(query); when(query.setParameter(contains("username"), contains(username))) .thenReturn(query); when(query.setParameter("enabled", Authorize.ENABLE)).thenReturn(query); when(query.getResultList()).thenReturn(list); } }