package br.gov.servicos.editor.security; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.security.core.Authentication; import org.springframework.security.web.RedirectStrategy; import org.springframework.security.web.savedrequest.RequestCache; import org.springframework.security.web.savedrequest.SavedRequest; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import static org.mockito.Mockito.*; @RunWith(MockitoJUnitRunner.class) public class CustomLoginSuccessHandlerTest { public static final String DEFAULT_REDIRECT_URL = "/editar"; public static final String LOGIN_URL = "/editar/autenticar"; @Mock RequestCache requestCache; @Mock RedirectStrategy redirectStrategy; @Mock private HttpServletRequest request; @Mock private HttpServletResponse response; @Mock private Authentication authentication; CustomLoginSuccessHandler successHandler; @Before public void setUp() throws Exception { successHandler = new CustomLoginSuccessHandler(DEFAULT_REDIRECT_URL, LOGIN_URL); successHandler.setRedirectStrategy(redirectStrategy); } @Test public void deveRedirecionarParaUrlPadrãoSeSavedRequestForNull() throws ServletException, IOException { when(requestCache.getRequest(any(), any())).thenReturn(null); successHandler.onAuthenticationSuccess(request, response, authentication); verify(redirectStrategy).sendRedirect(request, response, DEFAULT_REDIRECT_URL); } @Test public void deveRedirecionarParaUrlPadrãoSeUrlAnteriorForAutenticar() throws ServletException, IOException { SavedRequest savedRequest = mock(SavedRequest.class); when(savedRequest.getRedirectUrl()).thenReturn(LOGIN_URL); when(requestCache.getRequest(any(), any())).thenReturn(savedRequest); successHandler.setRequestCache(requestCache); successHandler.onAuthenticationSuccess(request, response, authentication); verify(redirectStrategy).sendRedirect(request, response, DEFAULT_REDIRECT_URL); } @Test public void deveRedirecionarParaUrlAnteriorSeForDiferenteDaUrlDoLogin() throws ServletException, IOException { SavedRequest savedRequest = mock(SavedRequest.class); String outraUrl = "/editar/outro"; when(savedRequest.getRedirectUrl()).thenReturn(outraUrl); when(requestCache.getRequest(any(), any())).thenReturn(savedRequest); successHandler.setRequestCache(requestCache); successHandler.onAuthenticationSuccess(request, response, authentication); verify(redirectStrategy).sendRedirect(request, response, outraUrl); } }