package com.github.ebnew.ki4so.web.action; import java.util.HashMap; import java.util.Map; import javax.servlet.http.Cookie; import org.junit.Assert; import org.junit.Test; 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.authentication.AuthenticationImpl; import com.github.ebnew.ki4so.core.authentication.AuthenticationPostHandler; import com.github.ebnew.ki4so.core.exception.InvalidCredentialException; import com.github.ebnew.ki4so.core.message.MessageUtils; import com.github.ebnew.ki4so.core.service.LoginResult; import com.github.ebnew.ki4so.web.utils.WebConstants; /** * 对类DefaultLoginResultToView的单元测试类。 * @author burgess yang * */ public class DefaultLoginResultToViewTest { private DefaultLoginResultToView loginResultToView = new DefaultLoginResultToView(); /** * 测试被测类对应的方法。 */ @Test public void testLoginResultToView(){ /** * 测试输入null的情况。 */ Assert.assertNotNull(loginResultToView.loginResultToView(null, null, null, null)); /** * 测试输入null的情况。 */ Assert.assertNotNull(loginResultToView.loginResultToView(new ModelAndView(), null, null, null)); /** * 测试输入null的情况。 */ Assert.assertNotNull(loginResultToView.loginResultToView(new ModelAndView(), new LoginResult(), null, null)); /** * 测试输入null的情况。 */ Assert.assertNotNull(loginResultToView.loginResultToView(new ModelAndView(), new LoginResult(), new MockHttpServletRequest(), null)); /** * 测试登录失败的情况。 */ //准备测试输入数据。 ModelAndView mv = new ModelAndView(); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); LoginResult result = new LoginResult(); result.setSuccess(false); result.setCode(InvalidCredentialException.CODE); result.setMsgKey(InvalidCredentialException.MSG_KEY); request.setCookies(new Cookie(WebConstants.KI4SO_SERVER_ENCRYPTED_CREDENTIAL_COOKIE_KEY, "test")); ModelAndView mvResult = loginResultToView.loginResultToView(mv, result, request, response); //检查输出结果。 Assert.assertNotNull(mvResult); Assert.assertEquals(InvalidCredentialException.CODE, mvResult.getModel().get("code")); Assert.assertEquals(MessageUtils.getMessage(InvalidCredentialException.MSG_KEY), mvResult.getModel().get("msg")); Assert.assertEquals("test", response.getCookie(WebConstants.KI4SO_SERVER_ENCRYPTED_CREDENTIAL_COOKIE_KEY).getValue()); /** * 测试登录成功的情况,不存在service参数的情况。 */ //准备测试输入数据。 mv = new ModelAndView(); request = new MockHttpServletRequest(); response = new MockHttpServletResponse(); result = new LoginResult(); request.getSession().setAttribute(WebConstants.KI4SO_SERVICE_KEY_IN_SESSION, "service"); result.setSuccess(true); AuthenticationImpl authentication = new AuthenticationImpl(); Map<String, Object> attributes = new HashMap<String, Object>(); authentication.setAttributes(attributes); attributes.put(AuthenticationPostHandler.KI4SO_SERVER_EC_KEY, "ki4so-sever-key"); result.setAuthentication(authentication); mvResult = loginResultToView.loginResultToView(mv, result, request, response); //检查输出结果。 Assert.assertNotNull(mvResult); Assert.assertNull(request.getSession().getAttribute(WebConstants.KI4SO_SERVICE_KEY_IN_SESSION)); Assert.assertEquals("loginSucess", mvResult.getViewName()); Assert.assertEquals(authentication, mvResult.getModel().get("authentication")); Assert.assertEquals("ki4so-sever-key", response.getCookie(WebConstants.KI4SO_SERVER_ENCRYPTED_CREDENTIAL_COOKIE_KEY).getValue()); /** * 测试登录成功的情况,结果中存在service参数,则应该跳转到该地址去。 */ mv = new ModelAndView(); request = new MockHttpServletRequest(); response = new MockHttpServletResponse(); result = new LoginResult(); result.setSuccess(true); authentication = new AuthenticationImpl(); attributes = new HashMap<String, Object>(); authentication.setAttributes(attributes); attributes.put(AuthenticationPostHandler.KI4SO_SERVER_EC_KEY, "ki4so-sever-key"); attributes.put(AuthenticationPostHandler.KI4SO_CLIENT_EC_KEY, "ki4so-client-key"); attributes.put(WebConstants.SERVICE_PARAM_NAME, "htpp://localhost:8080/space-web/hello.jsp"); result.setAuthentication(authentication); mvResult = loginResultToView.loginResultToView(mv, result, request, response); //检查输出结果。 Assert.assertNotNull(mvResult); Assert.assertNull(request.getSession().getAttribute(WebConstants.KI4SO_SERVICE_KEY_IN_SESSION)); Assert.assertTrue(mvResult.getView() instanceof RedirectView); RedirectView view = (RedirectView)mvResult.getView(); Assert.assertEquals("htpp://localhost:8080/space-web/hello.jsp?"+WebConstants.KI4SO_CLIENT_ENCRYPTED_CREDENTIAL_COOKIE_KEY+"=ki4so-client-key",view.getUrl()); Assert.assertEquals(authentication, mvResult.getModel().get("authentication")); Assert.assertEquals("ki4so-sever-key", response.getCookie(WebConstants.KI4SO_SERVER_ENCRYPTED_CREDENTIAL_COOKIE_KEY).getValue()); /** * 测试登录成功的情况,结果中存在service参数,且URL地址中是带"?"的。 */ mv = new ModelAndView(); request = new MockHttpServletRequest(); response = new MockHttpServletResponse(); result = new LoginResult(); result.setSuccess(true); authentication = new AuthenticationImpl(); attributes = new HashMap<String, Object>(); authentication.setAttributes(attributes); attributes.put(AuthenticationPostHandler.KI4SO_SERVER_EC_KEY, "ki4so-sever-key"); attributes.put(AuthenticationPostHandler.KI4SO_CLIENT_EC_KEY, "ki4so-client-key"); attributes.put(WebConstants.SERVICE_PARAM_NAME, "htpp://localhost:8080/space-web/hello.jsp?hello=word"); result.setAuthentication(authentication); mvResult = loginResultToView.loginResultToView(mv, result, request, response); //检查输出结果。 Assert.assertNotNull(mvResult); Assert.assertNull(request.getSession().getAttribute(WebConstants.KI4SO_SERVICE_KEY_IN_SESSION)); Assert.assertTrue(mvResult.getView() instanceof RedirectView); view = (RedirectView)mvResult.getView(); Assert.assertEquals("htpp://localhost:8080/space-web/hello.jsp?hello=word&"+WebConstants.KI4SO_CLIENT_ENCRYPTED_CREDENTIAL_COOKIE_KEY+"=ki4so-client-key",view.getUrl()); Assert.assertEquals(authentication, mvResult.getModel().get("authentication")); Assert.assertEquals("ki4so-sever-key", response.getCookie(WebConstants.KI4SO_SERVER_ENCRYPTED_CREDENTIAL_COOKIE_KEY).getValue()); } }