/**
*
*/
package com.globant.katari.registration.application;
import static com.globant.katari.registration.SpringTestUtils.createSmtpServer;
import static com.globant.katari.registration.SpringTestUtils.getContext;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.isA;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.containsString;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.validation.Errors;
import com.dumbster.smtp.SmtpMessage;
import com.globant.katari.registration.domain.RecoverPasswordRequest;
import com.globant.katari.registration.domain.RegistrationRepository;
import com.globant.katari.tools.DummySmtpServer;
import com.globant.katari.user.domain.User;
import com.globant.katari.user.domain.UserRepository;
/**
* @author waabox (emiliano[dot]arango[at]globant[dot]com)
*/
public class RegisterUserCommandTest {
private RegisterUserCommand command;
private UserRepository userRepository;
private DummySmtpServer smtpServer;
private RegistrationRepository registrationRepository;
@Before
public void setUp() throws Exception {
smtpServer = createSmtpServer();
command = (RegisterUserCommand) getContext().getBean(
"registration.registerUserCommand");
userRepository = (UserRepository) getContext().getBean(
"user.userRepository");
registrationRepository = (RegistrationRepository) getContext().getBean(
"registration.registrationRepository");
userRepository.getHibernateTemplate().bulkUpdate("delete from User");
}
@After
public void tearDown() {
smtpServer.stop();
}
@Test
public void testExecute() throws Exception {
command.setEmail("emiliano.arango@globant.com");
command.setName("emiliano");
command.execute();
User user = userRepository.findUserByEmail(command.getEmail());
assertEquals(command.getName(), user.getName());
assertThat(smtpServer.getReceivedEmailSize(), is(1));
RecoverPasswordRequest request;
request = (RecoverPasswordRequest) registrationRepository
.getHibernateTemplate().find(
"from RecoverPasswordRequest where userId=?", user.getId()).get(0);
SmtpMessage message = smtpServer.iterator().next();
String mailBody = message.getBody();
String subject = message.getHeaderValue("Subject");
assertThat(mailBody, containsString(request.getToken()));
assertThat(subject, is("Katari Registration"));
}
@Test
public void testValidate_validate_parameters() throws Exception {
Errors errors = createMock(Errors.class);
errors.rejectValue(isA(String.class), isA(String.class), isA(String.class));
expectLastCall().times(2);
replay(errors);
command.setEmail("");
command.setName("");
command.validate(errors);
verify(errors);
}
@Test
public void testValidate_validate_user_exist() throws Exception {
command.setEmail("emiliano.arango@globant.com");
command.setName("emiliano");
command.execute();
User user = userRepository.findUserByEmail(command.getEmail());
assertEquals(command.getName(), user.getName());
Errors errors = createMock(Errors.class);
errors.reject("existing.name", "A user with that name alredy exists");
replay(errors);
command.setEmail("emiliano.arango2@globant.com");
command.setName("emiliano");
command.validate(errors);
verify(errors);
}
@Test
public void testValidate_validate_user_exist_with_same_email()
throws Exception {
command.setEmail("emiliano.arango@globant.com");
command.setName("emiliano");
command.execute();
User user = userRepository.findUserByEmail(command.getEmail());
assertEquals(command.getName(), user.getName());
Errors errors = createMock(Errors.class);
errors.reject("existing.email", "A user with that email alredy exists");
replay(errors);
command.setEmail("emiliano.arango@globant.com");
command.setName("emilianoPepe");
command.validate(errors);
verify(errors);
}
}