package models;
import static org.fest.assertions.Assertions.*;
import static play.test.Helpers.running;
import static test.AorraTestUtils.fakeAorraApp;
import static test.AorraTestUtils.asAdminUser;
import static test.AorraTestUtils.jcrom;
import static test.AorraTestUtils.sessionFactory;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.jcr.Session;
import org.jcrom.Jcrom;
import org.junit.Test;
import play.Play;
import play.libs.F;
import play.test.FakeRequest;
import service.GuiceInjectionPlugin;
import service.JcrSessionFactory;
public class UserDAOTest {
@Test
public void findByEmail() {
running(fakeAorraApp(), new Runnable() {
@Override
public void run() {
sessionFactory().inSession(new F.Function<Session,UserDAO>() {
@Override
public UserDAO apply(Session session) {
final UserDAO dao = new UserDAO(session, jcrom());
List<String> emailAddresses = Arrays.asList(
"user@domain.com",
"user@domain.net",
"user@uq.edu.au",
"tommy@domain.com");
Map<String, User> users = new HashMap<String, User>();
for (String email : emailAddresses) {
User u = new User();
u.setEmail(email);
u.setName("Sparticus");
dao.create(u);
users.put(email, u);
}
assertThat(users.size()).isEqualTo(emailAddresses.size());
for (String email : emailAddresses) {
User a = dao.findByEmail(email);
assertThat(a.getEmail()).isEqualTo(email);
User e = users.get(email);
assertThat(a.getId()).isEqualTo(e.getId());
}
// No need to clean up, but we will to test user deletion
for (User user : users.values()) {
dao.delete(user);
assertThat(dao.findByEmail(user.getEmail())).isNull();
}
return dao;
}
});
}
});
}
@Test
public void suspendUser() {
asAdminUser(new F.Function3<Session, User, FakeRequest, Session>() {
@Override
public Session apply(Session session, User user, FakeRequest r)
throws Throwable {
final UserDAO dao = new UserDAO(session, jcrom());
assertThat(dao.checkPassword(user, "password")).isTrue();
dao.suspend(user);
user = dao.loadById(user.getId());
assertThat(user.isVerified()).isFalse();
assertThat(dao.checkPassword(user, "password")).isFalse();
dao.unsuspend(user);
user = dao.loadById(user.getId());
assertThat(user.isVerified()).isTrue();
assertThat(dao.checkPassword(user, "password")).isTrue();
return session;
}
});
}
}