package org.croudtrip.account;
import com.google.common.base.Optional;
import org.croudtrip.api.account.User;
import org.croudtrip.api.account.UserDescription;
import org.croudtrip.auth.BasicAuthenticationUtils;
import org.croudtrip.auth.BasicCredentials;
import org.croudtrip.db.BasicCredentialsDAO;
import org.croudtrip.db.UserDAO;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Date;
import mockit.Expectations;
import mockit.Mocked;
import mockit.Verifications;
import mockit.integration.junit4.JMockit;
@RunWith(JMockit.class)
public class UserManagerTest {
@Mocked UserDAO userDAO;
@Mocked BasicCredentialsDAO basicCredentialsDAO;
@Mocked BasicAuthenticationUtils basicAuthenticationUtils;
private UserManager userManager;
private final UserDescription userDescription = new UserDescription(
"email",
"firstName",
"lastName",
"password");
@Before
public void setUp() throws Exception {
userManager = new UserManager(userDAO, basicCredentialsDAO, basicAuthenticationUtils);
}
@Test
public void testAddUser() {
new Expectations() {{
userDAO.findByEmail(userDescription.getEmail());
result = Optional.absent();
}};
final User user = userManager.addUser(userDescription);
assertEquals(user, userDescription);
new Verifications() {{
userDAO.save(user);
basicCredentialsDAO.save((BasicCredentials) any);
}};
}
@Test(expected = IllegalArgumentException.class)
public void testAddUserAlreadyRegistered() {
new Expectations() {{
userDAO.findByEmail(userDescription.getEmail());
result = Optional.fromNullable(new User(0, "", "", "", "", true, new Date(), "", "", 0));
}};
userManager.addUser(userDescription);
}
@Test
public void testUpdateUser() {
final User user = new User(0, userDescription.getEmail(), "", "", "", true, new Date(), "", "", 0);
new Expectations() {{
userDAO.findByEmail(userDescription.getEmail());
result = Optional.fromNullable(user);
basicCredentialsDAO.findByUserId(user.getId());
result = Optional.of(new BasicCredentials(0, user, new byte[1], new byte[1]));
}};
User updatedUser = userManager.updateUser(user, userDescription);
assertEquals(updatedUser, userDescription);
}
private void assertEquals(User user, UserDescription description) {
Assert.assertEquals(description.getEmail(), user.getEmail());
Assert.assertEquals(description.getFirstName(), user.getFirstName());
Assert.assertEquals(description.getLastName(), user.getLastName());
Assert.assertTrue(user.getLastModified() >= System.currentTimeMillis() / 1000 - 5);
}
}