package org.appfuse.webapp.action;
import org.appfuse.Constants;
import org.appfuse.model.Address;
import org.appfuse.model.User;
import org.appfuse.service.MailEngine;
import org.appfuse.service.RoleManager;
import org.appfuse.service.UserManager;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.security.core.context.SecurityContextHolder;
import org.subethamail.wiser.Wiser;
import static org.junit.Assert.*;
public class SignupFormTest extends BasePageTestCase {
private SignupForm bean;
@Autowired
private ApplicationContext applicationContext;
@Override
@Before
public void onSetUp() {
super.onSetUp();
bean = new SignupForm();
bean.setUserManager((UserManager) applicationContext.getBean("userManager"));
bean.setRoleManager((RoleManager) applicationContext.getBean("roleManager"));
bean.setMessage((SimpleMailMessage) applicationContext.getBean("mailMessage"));
bean.setMailEngine((MailEngine) applicationContext.getBean("mailEngine"));
bean.setTemplateName("accountCreated.vm");
}
@Test
public void testExecute() throws Exception {
User user = new User("self-registered");
user.setPassword("Password1");
user.setConfirmPassword("Password1");
user.setFirstName("First");
user.setLastName("Last");
Address address = new Address();
address.setCity("Denver");
address.setProvince("CO");
address.setCountry("USA");
address.setPostalCode("80210");
user.setAddress(address);
user.setEmail("self-registered@raibledesigns.com");
user.setWebsite("http://raibledesigns.com");
user.setPasswordHint("Password is one with you.");
bean.setUser(user);
// start SMTP Server
final Wiser wiser = startWiser(getSmtpPort());
assertEquals("home", bean.save());
assertFalse(bean.hasErrors());
// verify an account information e-mail was sent
wiser.stop();
assertTrue(wiser.getMessages().size() == 1);
// verify that success messages are in the session
assertNotNull(bean.getSession().getAttribute(Constants.REGISTERED));
SecurityContextHolder.getContext().setAuthentication(null);
}
}