Java tutorial
/** * Licensed to Jasig under one or more contributor license * agreements. See the NOTICE file distributed with this work * for additional information regarding copyright ownership. * Jasig licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a * copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.jasig.portal.portlet.container.services; import java.util.Date; import java.util.HashSet; import java.util.Map; import java.util.Set; import javax.servlet.http.Cookie; import org.apache.commons.lang.time.DateUtils; import org.easymock.EasyMock; import org.jasig.portal.portlet.dao.IPortletCookieDao; import org.jasig.portal.portlet.om.IPortalCookie; import org.jasig.portal.portlet.om.IPortletCookie; import org.jasig.portal.portlet.om.IPortletWindowId; import org.joda.time.DateTime; import org.junit.Assert; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; /** * Tests for {@link PortletCookieServiceImpl}. * * @author Nicholas Blair * @version $Id$ */ public class PortletCookieServiceImplTest { /** * Control test invocation of {@link PortletCookieServiceImpl#updatePortalCookie(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)}. */ @Test public void testUpdatePortletCookieControl() { IPortletCookieDao portletCookieDao = EasyMock.createMock(IPortletCookieDao.class); MockPortalCookie portalCookie = new MockPortalCookie(); portalCookie.setValue("ABCDEF"); EasyMock.expect(portletCookieDao.createPortalCookie(PortletCookieServiceImpl.DEFAULT_MAX_AGE)) .andReturn(portalCookie); EasyMock.expect(portletCookieDao.updatePortalCookieExpiration(portalCookie, PortletCookieServiceImpl.DEFAULT_MAX_AGE)).andReturn(portalCookie); EasyMock.replay(portletCookieDao); PortletCookieServiceImpl cookieService = new PortletCookieServiceImpl(); cookieService.setPortletCookieDao(portletCookieDao); MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); cookieService.updatePortalCookie(request, response); Cookie[] cookies = response.getCookies(); Assert.assertNotNull(cookies); Assert.assertEquals(1, cookies.length); EasyMock.verify(portletCookieDao); } /** * Test {@link PortletCookieServiceImpl#getOrCreatePortalCookie(javax.servlet.http.HttpServletRequest)}. * that results in creating a new PortalCookie. */ @Test public void testGetOrCreatePortalCookieCreate() { IPortletCookieDao portletCookieDao = EasyMock.createMock(IPortletCookieDao.class); MockPortalCookie portalCookie = new MockPortalCookie(); portalCookie.setValue("ABCDEF"); EasyMock.expect(portletCookieDao.createPortalCookie(PortletCookieServiceImpl.DEFAULT_MAX_AGE)) .andReturn(portalCookie); EasyMock.replay(portletCookieDao); PortletCookieServiceImpl cookieService = new PortletCookieServiceImpl(); cookieService.setPortletCookieDao(portletCookieDao); MockHttpServletRequest request = new MockHttpServletRequest(); cookieService.getOrCreatePortalCookie(request); EasyMock.verify(portletCookieDao); } /** * Test {@link PortletCookieServiceImpl#getOrCreatePortalCookie(javax.servlet.http.HttpServletRequest)}. * that results in returning an existing portalcookie from the request cookies */ @Test public void testGetOrCreatePortalCookieGetExistingFromRequestCookies() { IPortletCookieDao portletCookieDao = EasyMock.createMock(IPortletCookieDao.class); MockPortalCookie portalCookie = new MockPortalCookie(); portalCookie.setValue("ABCDEF"); EasyMock.expect(portletCookieDao.getPortalCookie("ABCDEF")).andReturn(portalCookie); EasyMock.replay(portletCookieDao); PortletCookieServiceImpl cookieService = new PortletCookieServiceImpl(); cookieService.setPortletCookieDao(portletCookieDao); MockHttpServletRequest request = new MockHttpServletRequest(); Cookie[] cookies = new Cookie[1]; Cookie cookie = new Cookie(IPortletCookieService.DEFAULT_PORTAL_COOKIE_NAME, "ABCDEF"); cookies[0] = cookie; request.setCookies(cookies); IPortalCookie result = cookieService.getOrCreatePortalCookie(request); Assert.assertEquals(portalCookie, result); EasyMock.verify(portletCookieDao); } /** * Test {@link PortletCookieServiceImpl#getOrCreatePortalCookie(javax.servlet.http.HttpServletRequest)}. * that results in returning an existing portalcookie from the id stored in the session. */ @Test public void testGetOrCreatePortalCookieGetExistingFromSession() { IPortletCookieDao portletCookieDao = EasyMock.createMock(IPortletCookieDao.class); MockPortalCookie portalCookie = new MockPortalCookie(); portalCookie.setValue("ABCDEF"); EasyMock.expect(portletCookieDao.getPortalCookie("ABCDEF")).andReturn(portalCookie); EasyMock.replay(portletCookieDao); PortletCookieServiceImpl cookieService = new PortletCookieServiceImpl(); cookieService.setPortletCookieDao(portletCookieDao); MockHttpServletRequest request = new MockHttpServletRequest(); request.getSession().setAttribute(PortletCookieServiceImpl.SESSION_ATTRIBUTE__PORTAL_COOKIE_ID, "ABCDEF"); IPortalCookie result = cookieService.getOrCreatePortalCookie(request); Assert.assertEquals(portalCookie, result); EasyMock.verify(portletCookieDao); } /** * Control test for adding a portlet cookie: no existing portalCookie, portlet cookie requires persistence. */ @Test public void testAddCookieControl() { Cookie portletCookie = new Cookie("somePortletCookieName", "somePortletCookieValue"); // max age will trigger persistence portletCookie.setMaxAge(360); IPortletCookieDao portletCookieDao = EasyMock.createMock(IPortletCookieDao.class); MockPortalCookie portalCookie = new MockPortalCookie(); portalCookie.setValue("ABCDEF"); EasyMock.expect(portletCookieDao.createPortalCookie(PortletCookieServiceImpl.DEFAULT_MAX_AGE)) .andReturn(portalCookie); EasyMock.expect(portletCookieDao.addOrUpdatePortletCookie(portalCookie, portletCookie)) .andReturn(portalCookie); PortletCookieServiceImpl cookieService = new PortletCookieServiceImpl(); cookieService.setPortletCookieDao(portletCookieDao); IPortletWindowId mockWindowId = EasyMock.createMock(IPortletWindowId.class); EasyMock.replay(portletCookieDao, mockWindowId); MockHttpServletRequest request = new MockHttpServletRequest(); cookieService.addCookie(request, mockWindowId, portletCookie); EasyMock.verify(portletCookieDao, mockWindowId); } /** * Control test for removing a portlet cookie. * Logic is nearly identical to create, as both {@link IPortletCookieDao#addOrUpdatePortletCookie(IPortalCookie, Cookie)} is used * in both scenarios. */ @Test public void testAddCookieRemove() { Cookie portletCookie = new Cookie("somePortletCookieName", "somePortletCookieValue"); // max age will trigger persistence removal portletCookie.setMaxAge(0); IPortletCookieDao portletCookieDao = EasyMock.createMock(IPortletCookieDao.class); MockPortalCookie portalCookie = new MockPortalCookie(); portalCookie.setValue("ABCDEF"); EasyMock.expect(portletCookieDao.createPortalCookie(PortletCookieServiceImpl.DEFAULT_MAX_AGE)) .andReturn(portalCookie); EasyMock.expect(portletCookieDao.addOrUpdatePortletCookie(portalCookie, portletCookie)) .andReturn(portalCookie); PortletCookieServiceImpl cookieService = new PortletCookieServiceImpl(); cookieService.setPortletCookieDao(portletCookieDao); IPortletWindowId mockWindowId = EasyMock.createMock(IPortletWindowId.class); EasyMock.replay(portletCookieDao, mockWindowId); MockHttpServletRequest request = new MockHttpServletRequest(); cookieService.addCookie(request, mockWindowId, portletCookie); EasyMock.verify(portletCookieDao, mockWindowId); } /** * Control test for adding a portlet cookie with maxAge == -1, which results in a session-only cookie. */ @Test public void testAddCookieSessionOnly() { Cookie portletCookie = new Cookie("somePortletCookieName", "somePortletCookieValue"); // max age will trigger persistence portletCookie.setMaxAge(-1); IPortletCookieDao portletCookieDao = EasyMock.createMock(IPortletCookieDao.class); MockPortalCookie portalCookie = new MockPortalCookie(); portalCookie.setValue("ABCDEF"); EasyMock.expect(portletCookieDao.createPortalCookie(PortletCookieServiceImpl.DEFAULT_MAX_AGE)) .andReturn(portalCookie); PortletCookieServiceImpl cookieService = new PortletCookieServiceImpl(); cookieService.setPortletCookieDao(portletCookieDao); IPortletWindowId mockWindowId = EasyMock.createMock(IPortletWindowId.class); EasyMock.replay(portletCookieDao, mockWindowId); MockHttpServletRequest request = new MockHttpServletRequest(); cookieService.addCookie(request, mockWindowId, portletCookie); Map<String, SessionOnlyPortletCookieImpl> sessionOnlyMap = cookieService .getSessionOnlyPortletCookieMap(request); SessionOnlyPortletCookieImpl sessionOnlyCookie = sessionOnlyMap.get("somePortletCookieName"); Assert.assertNotNull(sessionOnlyCookie); Assert.assertEquals(-1, sessionOnlyCookie.getMaxAge()); Assert.assertEquals("somePortletCookieValue", sessionOnlyCookie.getValue()); EasyMock.verify(portletCookieDao, mockWindowId); } /** * Mock {@link IPortalCookie} used in these tests. * * @author Nicholas Blair * @version $Id$ */ class MockPortalCookie implements IPortalCookie { private DateTime created = DateTime.now(); private DateTime expires = DateTime.now().plusHours(1); private Set<IPortletCookie> portletCookies = new HashSet<IPortletCookie>(); private String value; @Override public DateTime getCreated() { return this.created; } @Override public DateTime getExpires() { return this.expires; } @Override public Set<IPortletCookie> getPortletCookies() { return this.portletCookies; } @Override public String getValue() { return this.value; } @Override public void setExpires(DateTime expires) { this.expires = expires; } public void setCreated(DateTime created) { this.created = created; } public void setPortletCookies(Set<IPortletCookie> portletCookies) { this.portletCookies = portletCookies; } public void setValue(String value) { this.value = value; } } }