package de.dhbw.humbuch.viewmodel; import static de.dhbw.humbuch.test.TestUtils.PASSWORD; import static de.dhbw.humbuch.test.TestUtils.USERNAME; import static de.dhbw.humbuch.test.TestUtils.standardUser; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import javax.persistence.EntityManager; import org.hibernate.criterion.Restrictions; import org.junit.Test; import org.junit.runner.RunWith; import com.google.inject.Inject; import com.google.inject.Provider; import de.dhbw.humbuch.guice.GuiceJUnitRunner; import de.dhbw.humbuch.guice.GuiceJUnitRunner.GuiceModules; import de.dhbw.humbuch.guice.TestModuleWithoutSingletons; import de.dhbw.humbuch.model.DAO; import de.dhbw.humbuch.model.entity.TestPersistenceInitialiser; import de.dhbw.humbuch.model.entity.User; import de.dhbw.humbuch.util.PasswordHash; @RunWith(GuiceJUnitRunner.class) @GuiceModules({ TestModuleWithoutSingletons.class }) public class LoginViewModelTest extends BaseTest { private LoginViewModel vm; private DAO<User> daoUser; @Inject public void setInjected(TestPersistenceInitialiser persistenceInitialiser, Provider<EntityManager> emProvider, LoginViewModel loginViewModel, DAO<User> daoUser) { this.daoUser = daoUser; super.setInjected(persistenceInitialiser, emProvider); this.vm = loginViewModel; } @Test public void testStateInitialisation() { assertNotNull(vm.isLoggedIn.get()); } @Test public void testUserInsert() throws NoSuchAlgorithmException, InvalidKeySpecException { daoUser.insert(standardUser()); User userInDB = daoUser.findSingleWithCriteria(Restrictions.eq("username", USERNAME)); assertNotNull(userInDB); assertEquals(true, PasswordHash.validatePassword(PASSWORD, userInDB.getPassword())); } @Test public void testStateAfterVMInitialisation() { assertEquals(false, vm.isLoggedIn.get()); } @Test public void testStateAfterSuccessfulLogin() { daoUser.insert(standardUser()); vm.doLogin(USERNAME, PASSWORD); assertEquals(true, vm.isLoggedIn.get()); } @Test public void testStateAfterUnsuccessfulLoginWithWrongPassword() { daoUser.insert(standardUser()); vm.doLogin(USERNAME, "wrongPassword"); assertEquals(false, vm.isLoggedIn.get()); } @Test public void testStateAfterUnsuccessfulLoginWithWrongUsername() { daoUser.insert(standardUser()); vm.doLogin("wrongUser", PASSWORD); assertEquals(false, vm.isLoggedIn.get()); } @Test public void testStateAfterUnsuccessfulLoginWithAwfullyLongUsername() { daoUser.insert(standardUser()); vm.doLogin(new String(new char[1025]).replace('\0', 'X'), PASSWORD); assertEquals(false, vm.isLoggedIn.get()); } @Test public void testStateAfterUnsuccessfulLoginWithAwfullyLongPassword() { daoUser.insert(standardUser()); vm.doLogin(USERNAME, new String(new char[1025]).replace('\0', 'X')); assertEquals(false, vm.isLoggedIn.get()); } @Test public void testStateAfterSuccessfulLoginAndLogout() { daoUser.insert(standardUser()); vm.doLogin(USERNAME, PASSWORD); vm.doLogout(null); assertEquals(false, vm.isLoggedIn.get()); } }