package com.github.ebnew.ki4so.web.action;
import java.io.IOException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpSession;
import junit.framework.Assert;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;
import com.github.ebnew.ki4so.core.service.Ki4soService;
import com.github.ebnew.ki4so.web.utils.WebConstants;
/**
* 登出测试类。
* @author burgess yang
*
*/
public class LogoutActionTest {
@Autowired
private LogoutAction logoutAction;
@Before
public void setUp() throws Exception {
logoutAction = new LogoutAction();
}
@After
public void tearDown() throws Exception {
}
@Test
public void testLogoutWithoutCredential() throws IOException {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
HttpSession session = request.getSession();
CredentialResolver credentialResolver = Mockito.mock(CredentialResolver.class);
logoutAction.setCredentialResolver(credentialResolver);
Ki4soService ki4soService = Mockito.mock(Ki4soService.class);
logoutAction.setKi4soService(ki4soService);
//测试没有cookie的情况。即要登出的凭据不存在的情况。则返回默认的登出成功页面。
ModelAndView mv = logoutAction.logout(request, response, session);
Assert.assertEquals(0, response.getCookies().length);
Assert.assertEquals("logoutSucess", mv.getViewName());
}
@Test
public void testLogoutWithCredentialButNoService() throws IOException {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
HttpSession session = request.getSession();
CredentialResolver credentialResolver = Mockito.mock(CredentialResolver.class);
logoutAction.setCredentialResolver(credentialResolver);
Ki4soService ki4soService = Mockito.mock(Ki4soService.class);
logoutAction.setKi4soService(ki4soService);
//测试存在cookie,登出后要清除cookie值,但是service参数的值是null的情况。
request.setCookies(new Cookie(WebConstants.KI4SO_SERVER_ENCRYPTED_CREDENTIAL_COOKIE_KEY, "dddsd"));
ModelAndView mv = logoutAction.logout(request, response,session);
Assert.assertEquals(1, response.getCookies().length);
Assert.assertEquals(0, response.getCookies()[0].getMaxAge());
Assert.assertEquals("logoutSucess", mv.getViewName());
}
@Test
public void testLogoutWithCredentialAndService() throws IOException {
String servce = "http://app.com/logoutSucess.do";
MockHttpServletRequest request = new MockHttpServletRequest();
request.setParameter(WebConstants.SERVICE_PARAM_NAME, servce);
MockHttpServletResponse response = new MockHttpServletResponse();
HttpSession session = request.getSession();
CredentialResolver credentialResolver = Mockito.mock(CredentialResolver.class);
logoutAction.setCredentialResolver(credentialResolver);
Ki4soService ki4soService = Mockito.mock(Ki4soService.class);
logoutAction.setKi4soService(ki4soService);
//测试存在cookie,登出后要清除cookie值,但是service参数的值是null的情况。
request.setCookies(new Cookie(WebConstants.KI4SO_SERVER_ENCRYPTED_CREDENTIAL_COOKIE_KEY, "dddsd"));
ModelAndView mv = logoutAction.logout(request, response,session);
Assert.assertEquals(1, response.getCookies().length);
Assert.assertEquals(0, response.getCookies()[0].getMaxAge());
RedirectView view = (RedirectView) mv.getView();
Assert.assertEquals(servce, view.getUrl());
}
}