package edu.lmu.cs.headmaster.ws.dao;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import edu.lmu.cs.headmaster.ws.domain.User;
import edu.lmu.cs.headmaster.ws.types.Role;
import edu.lmu.cs.headmaster.ws.util.ApplicationContextTest;
import edu.lmu.cs.headmaster.ws.util.DomainObjectUtils;
public class UserDaoTest extends ApplicationContextTest {
private UserDao userDao;
@Before
public void getRequiredBeans() {
userDao = (UserDao)applicationContext.getBean("userDao");
}
@Test
public void testGetUserByLogin() {
// The test fixture loads an "admin" user.
User user = userDao.getUserByLogin("admin");
Assert.assertEquals(Long.valueOf(1000000L), user.getId());
Assert.assertEquals("admin", user.getLogin());
// The test fixture does not have encoded passwords.
Assert.assertEquals("password", user.getChallenge());
Assert.assertEquals("admin@headmaster.test", user.getEmail());
Assert.assertEquals(Boolean.TRUE, user.isActive());
Assert.assertEquals(1, user.getRoles().size());
Assert.assertEquals(user, user.getRoles().get(0).getUser());
Assert.assertEquals(Role.HEADMASTER, user.getRoles().get(0).getRole());
}
@Test
public void testGetUserByLoginNoRoles() {
// The test fixture loads a user that does not have any roles.
User user = userDao.getUserByLogin("noroles");
Assert.assertEquals(Long.valueOf(1000001L), user.getId());
Assert.assertEquals("noroles", user.getLogin());
// The test fixture does not have encoded passwords.
Assert.assertEquals("password-noroles", user.getChallenge());
Assert.assertEquals("noroles@headmaster.test", user.getEmail());
Assert.assertEquals(Boolean.TRUE, user.isActive());
Assert.assertEquals(0, user.getRoles().size());
}
@Test
public void testCreateUser() {
// First, create the user.
User userToCreate = DomainObjectUtils.createUserObject("teacher", "teacher@school.edu",
"password", Role.FACULTY, Role.STAFF);
// Now, save it.
userDao.createUser(userToCreate);
// Reload the user that was just created. Because we know what is in the
// test fixture, we know what ID to expect.
User createdUser = userDao.getUserById(1L);
Assert.assertEquals(Long.valueOf(1L), createdUser.getId());
Assert.assertEquals(userToCreate.getLogin(), createdUser.getLogin());
Assert.assertEquals(userToCreate.getEmail(), createdUser.getEmail());
// We expect the password to be different, of course.
Assert.assertEquals(
"b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86",
createdUser.getChallenge()
);
Assert.assertEquals(2, createdUser.getRoles().size());
// We do not make assumptions on which role comes first.
if (createdUser.getRoles().get(0).getRole() == Role.FACULTY) {
Assert.assertEquals(Role.FACULTY, createdUser.getRoles().get(0).getRole());
Assert.assertEquals(Role.STAFF, createdUser.getRoles().get(1).getRole());
} else {
Assert.assertEquals(Role.STAFF, createdUser.getRoles().get(0).getRole());
Assert.assertEquals(Role.FACULTY, createdUser.getRoles().get(1).getRole());
}
}
}