package org.springframework.security.web.authentication;

import static org.junit.Assert.assertEquals;

import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.security.authentication.BadCredentialsException;

import javax.servlet.ServletException;
import java.io.IOException;
import java.util.HashMap;

/**
 * @author Luke Taylor
 */
public class ExceptionMappingAuthenticationFailureHandlerTests {

	@Test
	public void defaultTargetUrlIsUsedIfNoMappingExists() throws Exception {
		ExceptionMappingAuthenticationFailureHandler fh = new ExceptionMappingAuthenticationFailureHandler();
		fh.setDefaultFailureUrl("/failed");
		MockHttpServletResponse response = new MockHttpServletResponse();
		fh.onAuthenticationFailure(new MockHttpServletRequest(), response,
				new BadCredentialsException(""));

		assertEquals("/failed", response.getRedirectedUrl());
	}

	@Test
	public void exceptionMapIsUsedIfMappingExists() throws Exception {
		ExceptionMappingAuthenticationFailureHandler fh = new ExceptionMappingAuthenticationFailureHandler();
		HashMap<String, String> mapping = new HashMap<String, String>();
		mapping.put(
				"org.springframework.security.authentication.BadCredentialsException",
				"/badcreds");
		fh.setExceptionMappings(mapping);
		fh.setDefaultFailureUrl("/failed");
		MockHttpServletResponse response = new MockHttpServletResponse();
		fh.onAuthenticationFailure(new MockHttpServletRequest(), response,
				new BadCredentialsException(""));

		assertEquals("/badcreds", response.getRedirectedUrl());
	}

}
