/*
* Copyright (c) JForum Team. All rights reserved.
*
* The software in this package is published under the terms of the LGPL
* license a copy of which has been included with this distribution in the
* license.txt file.
*
* The JForum Project
* http://www.jforum.net
*/
package net.jforum.core.hibernate;
import java.util.Arrays;
import java.util.GregorianCalendar;
import java.util.List;
import net.jforum.entities.Group;
import net.jforum.entities.User;
import net.jforum.repository.GroupRepository;
import net.jforum.repository.UserRepository;
import net.jforum.util.JDBCLoader;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
/**
* @author Rafael Steil
*/
public class UserDAOTestCase extends AbstractDAOTestCase<User> {
@Test
@SuppressWarnings("deprecation")
@Ignore("seam to be a problem with hsqldb commit, work fine with other connector")
public void changeAllowAvatarState() {
new JDBCLoader(this.session()).run("/userdao/changeAllowAvatarState.sql");
GroupRepository groupDao = this.newGroupDao();
UserRepository dao = this.newDao();
Group group1 = groupDao.get(1);
Group group2 = groupDao.get(2);
List<User> users = dao.getAllUsers(0, 10, Arrays.asList(group1));
Assert.assertFalse(users.get(0).isAvatarEnabled());
Assert.assertFalse(users.get(1).isAvatarEnabled());
dao.changeAllowAvatarState(true, group1);
this.commit();
this.beginTransaction();
users = dao.getAllUsers(0, 10, Arrays.asList(group1));
Assert.assertEquals(2, users.size());
Assert.assertTrue(users.get(0).isAvatarEnabled());
Assert.assertTrue(users.get(1).isAvatarEnabled());
Assert.assertFalse(dao.getAllUsers(0, 10, Arrays.asList(group2)).get(0).isAvatarEnabled());
}
@Test
@SuppressWarnings("deprecation")
public void findByUsernameFilteringByGroup() {
new JDBCLoader(this.session()).run("/userdao/findByUsernameFilteringByGroup.sql");
UserRepository dao = this.newDao();
User user = dao.get(1);
List<User> users = dao.findByUserName("user", user.getGroups());
Assert.assertEquals(2, users.size());
Assert.assertEquals("USER1", users.get(0).getUsername());
Assert.assertEquals("user2", users.get(1).getUsername());
}
@Test
@SuppressWarnings("deprecation")
public void getAllUsersFilteringByGroup() {
new JDBCLoader(this.session()).run("/userdao/getAllUsersFilteringByGroup.sql");
UserRepository dao = this.newDao();
User user = dao.get(1);
List<User> users = dao.getAllUsers(0, 10, user.getGroups());
Assert.assertEquals(2, users.size());
Assert.assertEquals("u1", users.get(0).getUsername());
Assert.assertEquals("u2", users.get(1).getUsername());
}
@Test
public void getByEmailShouldFindAMatch() {
User user = new User();
user.setUsername("user1");
user.setEmail("email1");
UserRepository dao = this.newDao();
this.insert(user, dao);
user = dao.getByEmail("email1");
Assert.assertNotNull(user);
Assert.assertEquals("user1", user.getUsername());
}
@Test
public void validateLostPasswordHashUsingBadDataExpectFail() {
UserRepository dao = this.newDao();
User user = dao.validateLostPasswordHash("bad username", "bad hash");
Assert.assertNull(user);
}
@Test
public void validateLostPasswordHashUsingGoodDataExpectSuccess() {
UserRepository dao = this.newDao();
User user = new User();
user.setUsername("rafael");
user.setActivationKey("act key 1");
this.insert(user, dao);
user = dao.validateLostPasswordHash("rafael", "act key 1");
Assert.assertNotNull(user);
}
@Test
@SuppressWarnings("deprecation")
public void getTotalPostsExpectTwoResults() {
new JDBCLoader(session())
.run("/userdao/getTotalPostsExpectTwoResults.sql");
User user = new User(); user.setId(1);
int total = this.newDao().getTotalPosts(user);
Assert.assertEquals(2, total);
}
@Test
public void isUsernaneAvailableTestingUsernameExpectFalse() {
User user = new User(); user.setUsername("username1"); user.setEmail("email1");
UserRepository dao = this.newDao();
this.insert(user, dao);
Assert.assertFalse(dao.isUsernameAvailable("UserNaMe1", "email2"));
}
@Test
public void isUsernaneAvailableTestingEmailExpectFalse() {
User user = new User(); user.setUsername("username1"); user.setEmail("email1");
UserRepository dao = this.newDao();
this.insert(user, dao);
Assert.assertFalse(dao.isUsernameAvailable("UserNaMe2", "eMAil1"));
}
@Test
public void isUsernaneAvailableExpectTrue() {
User user = new User(); user.setUsername("username1"); user.setEmail("email1");
UserRepository dao = this.newDao();
this.insert(user, dao);
Assert.assertTrue(dao.isUsernameAvailable("UserNaMe2", "email2"));
}
@Test
@SuppressWarnings("deprecation")
public void getTotalUnreadPrivateMessages() {
new JDBCLoader(session())
.run("/userdao/getTotalUnreadPrivateMessages.sql");
User user = new User(); user.setId(1);
Assert.assertEquals(1, this.newDao().getTotalUnreadPrivateMessages(user));
}
@Test
public void findByUserNameExpectThreeResults() {
User user1 = new User(); user1.setUsername("Amy Winehouse");
User user2 = new User(); user2.setUsername("John Amy");
User user3 = new User(); user3.setUsername("Something With Amy inside");
User user4 = new User(); user4.setUsername("another username");
UserRepository dao = this.newDao();
this.insert(user1, dao);
this.insert(user3, dao);
this.insert(user4, dao);
this.insert(user2, dao);
List<User> users = dao.findByUserName("amy");
Assert.assertEquals(3, users.size());
Assert.assertEquals("Amy Winehouse", users.get(0).getUsername());
Assert.assertEquals("John Amy", users.get(1).getUsername());
Assert.assertEquals("Something With Amy inside", users.get(2).getUsername());
}
@Test
public void userGroupsCascade() {
User user = new User(); user.setUsername("u1");
Group g = new Group(); g.setName("g1");
this.newGroupDao().add(g);
user.addGroup(g);
UserRepository dao = this.newDao();
this.insert(user, dao);
user = dao.get(user.getId());
Assert.assertEquals(1, user.getGroups().size());
}
@Test
public void userGroupsCascadeCleanThenAddNewExpectDeletesAndInsertsOk() {
User user = new User();
user.setUsername("u1");
Group g = new Group(); g.setName("g1");
Group g2 = new Group(); g2.setName("g2");
Group g3 = new Group(); g3.setName("g3");
GroupRepository groupDao = this.newGroupDao();
groupDao.add(g);
groupDao.add(g2);
groupDao.add(g3);
this.commit();
this.beginTransaction();
user.addGroup(g);
user.addGroup(g2);
UserRepository dao = this.newDao();
this.insert(user, dao);
user = dao.get(user.getId());
Assert.assertEquals(2, user.getGroups().size());
Assert.assertTrue(user.getGroups().contains(g));
Assert.assertTrue(user.getGroups().contains(g2));
user.getGroups().remove(g);
user.addGroup(g3);
this.update(user, dao);
user = dao.get(user.getId());
Assert.assertEquals(2, user.getGroups().size());
Assert.assertTrue(user.getGroups().contains(g2));
Assert.assertTrue(user.getGroups().contains(g3));
}
@Test
public void validateLoginUsingInvalidCredentialsExpectsInvalidLogin() {
User user = new User();
user.setUsername("username1");
user.setPassword("password1");
UserRepository dao = this.newDao();
this.insert(user, dao);
Assert.assertNull(dao.validateLogin("a", "b"));
}
@Test
public void validateLoginUsingGoodCredentialsExpectsSuccess() {
User user = new User();
user.setUsername("username2");
user.setPassword("password2");
UserRepository dao = this.newDao();
this.insert(user, dao);
Assert.assertNotNull(dao.validateLogin("username2", "password2"));
}
@Test
public void addExpectsSuccess() {
User user = new User();
user.setUsername("u1");
user.setPassword("pwd1");
user.setEmail("email1");
UserRepository dao = this.newDao();
this.insert(user, dao);
Assert.assertTrue(user.getId() > 0);
User loaded = dao.get(user.getId());
Assert.assertEquals(user.getUsername(), loaded.getUsername());
Assert.assertEquals(user.getPassword(), loaded.getPassword());
Assert.assertEquals(user.getEmail(), loaded.getEmail());
}
@Test
public void getByUsernameUsingInexistentValueExpectsNull() {
UserRepository dao = this.newDao();
Assert.assertNull(dao.getByUsername("non existent username"));
}
@Test
public void getByUsernameExpectsValidUser() {
UserRepository dao = this.newDao();
User u = new User(); u.setUsername("usernameX"); this.insert(u, dao);
User u2 = dao.getByUsername("usernameX");
Assert.assertNotNull(u2);
Assert.assertEquals(u.getUsername(), u2.getUsername());
}
@Test
public void geTotalUsers() {
UserRepository dao = this.newDao();
User u1 = new User(); u1.setUsername("u1"); this.insert(u1, dao);
User u2 = new User(); u2.setUsername("u1"); this.insert(u2, dao);
User u3 = new User(); u3.setUsername("u1"); this.insert(u3, dao);
Assert.assertEquals(3, dao.getTotalUsers());
}
@Test
@SuppressWarnings("deprecation")
public void getLastRegisteredUser() {
UserRepository dao = this.newDao();
User u1 = new User(); u1.setUsername("u1"); u1.setRegistrationDate(new GregorianCalendar(2008, 3, 19, 20, 03, 10).getTime()); this.insert(u1, dao);
User u2 = new User(); u2.setUsername("u2"); u2.setRegistrationDate(new GregorianCalendar(2008, 3, 5, 7, 19, 10).getTime()); this.insert(u2, dao);
User lastRegisteredUser = dao.getLastRegisteredUser();
Assert.assertNotNull(lastRegisteredUser);
Assert.assertEquals(u1.getUsername(), lastRegisteredUser.getUsername());
Assert.assertEquals(u1.getId(), lastRegisteredUser.getId());
}
@Test
public void listExpectEmptyList() {
UserRepository dao = this.newDao();
Assert.assertEquals(0, dao.getAllUsers(0, 10).size());
}
@Test
public void listExpectTwoRecords() {
UserRepository dao = this.newDao();
User u1 = new User(); u1.setUsername("u1"); this.insert(u1, dao);
User u2 = new User(); u1.setUsername("u2"); this.insert(u2, dao);
List<User> users = dao.getAllUsers(0, 10);
Assert.assertEquals(2, users.size());
Assert.assertTrue(users.contains(u1));
Assert.assertTrue(users.contains(u2));
}
private UserRepository newDao() {
return new UserRepository(session());
}
private GroupRepository newGroupDao() {
return new GroupRepository(session());
}
}