package org.appfuse.webapp.controller;
import org.appfuse.Constants;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpSession;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.subethamail.wiser.Wiser;
import javax.transaction.Transactional;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@Transactional
public class SignupControllerTest extends BaseControllerTestCase {
@Autowired
private SignupController controller;
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
}
@Test
public void testDisplayForm() throws Exception {
mockMvc.perform(get("/signup.html"))
.andExpect(status().isOk())
.andExpect(model().attributeExists("user"));
}
@Test
public void testSignupUser() throws Exception {
// start SMTP Server
Wiser wiser = startWiser(getSmtpPort());
ResultActions signup = mockMvc.perform(post("/signup.html")
.param("address.city", "Denver")
.param("address.province", "Colorado")
.param("address.country", "USA")
.param("address.postalCode", "80210")
.param("username", "self-registered")
.param("password", "Password1")
.param("confirmPassword", "Password1")
.param("firstName", "First")
.param("lastName", "Last")
.param("email", "self-registered@raibledesigns.com")
.param("website", "http://raibledesigns.com")
.param("passwordHint", "Password is one with you.")
)
.andExpect(status().is3xxRedirection())
.andExpect(model().hasNoErrors());
// verify an account information e-mail was sent
wiser.stop();
assertTrue(wiser.getMessages().size() == 1);
MvcResult result = signup.andReturn();
MockHttpSession session = (MockHttpSession) result.getRequest().getSession();
// verify that success messages are in the session
assertNotNull(session.getAttribute("successMessages"));
assertNotNull(session.getAttribute(Constants.REGISTERED));
SecurityContextHolder.getContext().setAuthentication(null);
}
}