package com.tddinaction.j2ee.web.controller.servlet;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import com.tddinaction.j2ee.web.controller.authenticator.Authenticator;
import com.tddinaction.j2ee.web.controller.authenticator.MockAuthenticator;
public class TestLoginServlet {
private static final String CORRECT_PASSWORD = "correctpassword";
private static final String VALID_USERNAME = "validuser";
private LoginServlet servlet;
private MockAuthenticator authenticator;
private MockHttpServletRequest request;
private MockHttpServletResponse response;
@Before
public void setUp() {
authenticator = new MockAuthenticator();
authenticator.addUser(VALID_USERNAME, CORRECT_PASSWORD);
servlet = new LoginServlet() {
@Override
protected Authenticator getAuthenticator() {
return authenticator;
}
};
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
}
@Test
public void wrongPasswordShouldRedirectToErrorPage()
throws Exception {
request.addParameter("j_username", VALID_USERNAME);
request.addParameter("j_password", "wrongpassword");
servlet.service(request, response);
assertUserEndedUpOnPage("/invalidlogin");
}
@Test
public void validLoginForwardsToFrontPageAndStoresUsername()
throws Exception {
request.addParameter("j_username", VALID_USERNAME);
request.addParameter("j_password", CORRECT_PASSWORD);
servlet.service(request, response);
assertUserEndedUpOnPage("/frontpage");
assertEquals(VALID_USERNAME, request.getSession()
.getAttribute("username"));
}
private void assertUserEndedUpOnPage(String expected) {
String actual = response.getRedirectedUrl();
if (actual == null) {
actual = response.getForwardedUrl();
}
assertEquals(expected, actual);
}
}