package games.strategy.engine.lobby.server.userDB;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.sql.Connection;
import java.sql.ResultSet;
import org.junit.Test;
import games.strategy.util.MD5Crypt;
import games.strategy.util.ThreadUtil;
import games.strategy.util.Util;
public class DBUserControllerTest {
@Test
public void testCreate() throws Exception {
final String name = Util.createUniqueTimeStamp();
final String email = name + "@none.none";
final String password = MD5Crypt.crypt(name);
final DBUserController controller = new DBUserController();
controller.createUser(name, email, password, false);
assertTrue(controller.doesUserExist(name));
try (final Connection con = Database.getConnection()) {
final String sql = " select * from TA_USERS where userName = '" + name + "'";
final ResultSet rs = con.createStatement().executeQuery(sql);
assertTrue(rs.next());
assertEquals(email, rs.getString("email"));
assertEquals(password, rs.getString("password"));
}
}
@Test
public void testGet() throws Exception {
final String name = Util.createUniqueTimeStamp();
final String email = name + "@none.none";
final String password = MD5Crypt.crypt(name);
final DBUserController controller = new DBUserController();
controller.createUser(name, email, password, false);
assertTrue(controller.doesUserExist(name));
final DBUser user = controller.getUser(name);
assertEquals(user.getName(), name);
assertEquals(user.getEmail(), email);
assertEquals(user.isAdmin(), false);
}
@Test
public void testCreateDupe() throws Exception {
final String name = Util.createUniqueTimeStamp();
final String email = name + "@none.none";
final String password = MD5Crypt.crypt(name);
final DBUserController controller = new DBUserController();
controller.createUser(name, email, password, false);
try {
controller.createUser(name, email, password, false);
fail("Allowed to create dupe");
} catch (final Exception e) {
// expected
}
}
@Test
public void testLogin() throws Exception {
final String name = Util.createUniqueTimeStamp();
final String email = name + "@none.none";
final String password = MD5Crypt.crypt(name);
final DBUserController controller = new DBUserController();
controller.createUser(name, email, password, false);
// advance the clock so we can see the login time
long loginTimeMustBeAfter = System.currentTimeMillis();
while (loginTimeMustBeAfter == System.currentTimeMillis()) {
ThreadUtil.sleep(1);
}
loginTimeMustBeAfter = System.currentTimeMillis();
assertTrue(controller.login(name, password));
try (final Connection con = Database.getConnection()) {
final String sql = " select * from TA_USERS where userName = '" + name + "'";
final ResultSet rs = con.createStatement().executeQuery(sql);
assertTrue(rs.next());
assertTrue(rs.getTimestamp("lastLogin").getTime() >= loginTimeMustBeAfter);
}
// make sure last login time was updated
}
@Test
public void testUpdate() throws Exception {
final String name = Util.createUniqueTimeStamp();
final String email = name + "@none.none";
final String password = MD5Crypt.crypt(name);
final DBUserController controller = new DBUserController();
controller.createUser(name, email, password, false);
assertTrue(controller.doesUserExist(name));
final String password2 = MD5Crypt.crypt("foo");
final String email2 = "foo@foo.foo";
controller.updateUser(name, email2, password2, false);
try (final Connection con = Database.getConnection()) {
final String sql = " select * from TA_USERS where userName = '" + name + "'";
final ResultSet rs = con.createStatement().executeQuery(sql);
assertTrue(rs.next());
assertEquals(email2, rs.getString("email"));
assertEquals(password2, rs.getString("password"));
}
}
}