package com.globant.katari.registration.application; import static com.globant.katari.registration.SpringTestUtils.*; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.*; import static org.junit.Assert.*; import java.util.Date; import java.util.UUID; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.validation.Errors; import com.globant.katari.email.application.EmailSender; import com.globant.katari.email.model.EmailModel; import com.globant.katari.registration.domain.EmailConfigurer; import com.globant.katari.registration.domain.RecoverPasswordRequest; import com.globant.katari.registration.domain.RecoverPasswordRequestFactory; 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 ResetPasswordCommandTest { private RequestForgotPasswordCommand requestCommand; private ResetPasswordCommand resetCommand; private RegisterUserCommand registrationCommand; private RegistrationRepository registrationRepository; private UserRepository userRepository; private EmailSender emailSender; private EmailConfigurer configurer; private DummySmtpServer smtpServer; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { smtpServer = createSmtpServer(); emailSender = createMock(EmailSender.class); emailSender.send(isA(EmailModel.class), isA(String.class)); replay(emailSender); configurer = new EmailConfigurer("emiliano.arango@globant.com", "reset", "template", "lol"); requestCommand = (RequestForgotPasswordCommand) getContext().getBean( "registration.requestForgotPasswordCommand"); registrationCommand = (RegisterUserCommand) getContext().getBean( "registration.registerUserCommand"); registrationRepository = (RegistrationRepository) getContext().getBean( "registration.registrationRepository"); userRepository = (UserRepository) getContext().getBean( "user.userRepository"); resetCommand = new ResetPasswordCommand(registrationRepository, userRepository, emailSender, configurer); } @After public void tearDown() { smtpServer.stop(); } @Test public void testExecute() { String email = UUID.randomUUID().toString() + "@globant.com"; String name = "waabox_" + UUID.randomUUID().toString(); registrationCommand.setEmail(email); registrationCommand.setName(name); registrationCommand.execute(); Errors errors = createMock(Errors.class); replay(errors); requestCommand.setEmail(email); requestCommand.setBaseUrl("http://baseurl"); requestCommand.validate(errors); requestCommand.execute(); User userFromEmail = userRepository.findUserByEmail(email); RecoverPasswordRequest request = null; request = (RecoverPasswordRequest) registrationRepository.getHibernateTemplate().find( "from RecoverPasswordRequest where userId = ?", userFromEmail.getId()).get(0); resetCommand.setUserId(userFromEmail.getId()); resetCommand.setToken(request.getToken()); User user = resetCommand.execute(); assertEquals(user.getEmail(), email); assertEquals(user.getName(), name); } @Test public void testExecute_Validate_invalid_date() { String email = UUID.randomUUID().toString() + "@globant.com"; String name = "waabox_" + UUID.randomUUID().toString(); registrationCommand.setEmail(email); registrationCommand.setName(name); registrationCommand.execute(); User user = userRepository.findUserByEmail(email); RecoverPasswordRequest request; request = RecoverPasswordRequestFactory.generate(user, new Date( System.currentTimeMillis() - 40 * 60 * 60 * 1000)); registrationRepository.saveRecoverPasswordRequest(request); resetCommand.setUserId(user.getId()); resetCommand.setToken(request.getToken()); user = resetCommand.execute(); assertNull("The user should be null!", user); } }