/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.structure; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.web.util.UrlPathHelper; import junit.framework.TestCase; import com.enonic.cms.core.MockSitePropertiesService; import com.enonic.cms.core.UrlPathHelperManager; public class SitePathResolverTest extends TestCase { private UrlPathHelper urlPathHelper; private SitePathResolver sitePathResolver; private MockHttpServletRequest httpServletRequest; private UrlPathHelperManager urlPathHelperManager; private MockSitePropertiesService sitePropertiesService; private SiteKey siteKey_1 = new SiteKey( 1 ); private SiteKey siteKey_123 = new SiteKey( 123 ); protected void setUp() throws Exception { super.setUp(); urlPathHelper = new UrlPathHelper(); urlPathHelper.setUrlDecode( true ); urlPathHelper.setDefaultEncoding( "UTF-8" ); sitePropertiesService = new MockSitePropertiesService(); urlPathHelperManager = new UrlPathHelperManager(); urlPathHelperManager.setCharacterEncoding( "UTF-8" ); sitePathResolver = new SitePathResolver(); sitePathResolver.setSitePathPrefix( "/site" ); sitePathResolver.setUrlPathHelperManager( urlPathHelperManager ); httpServletRequest = new MockHttpServletRequest(); //httpServletRequest.setCharacterEncoding("ISO-8859-1"); } public void testResolveSimpleSitePath1() { httpServletRequest.setRequestURI( "/site/1/Frontpage" ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_1, sitePath.getSiteKey() ); assertEquals( "/Frontpage", sitePath.getLocalPath().toString() ); } public void testResolveSimpleSitePathWithNoLocalPath() { httpServletRequest.setCharacterEncoding( "ISO-8859-1" ); httpServletRequest.setRequestURI( "/site/123/" ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_123, sitePath.getSiteKey() ); assertEquals( "/", sitePath.getLocalPath().toString() ); } public void testResolveSimpleSitePathWithNoLocalPathAndNoEndSlash() { httpServletRequest.setCharacterEncoding( "ISO-8859-1" ); httpServletRequest.setRequestURI( "/site/123" ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_123, sitePath.getSiteKey() ); assertEquals( "", sitePath.getLocalPath().toString() ); } public void testResolveSimpleSitePath123() { httpServletRequest.setCharacterEncoding( "ISO-8859-1" ); httpServletRequest.setRequestURI( "/site/123/Frontpage/" ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_123, sitePath.getSiteKey() ); assertEquals( "/Frontpage/", sitePath.getLocalPath().toString() ); } public void testResolveLongSitePath1() { httpServletRequest.setRequestURI( "/site/1/About/Jobs/" ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_1, sitePath.getSiteKey() ); assertEquals( "/About/Jobs/", sitePath.getLocalPath().toString() ); } public void testResolveSitePathWithNoPrefix() { sitePathResolver.setSitePathPrefix( "" ); httpServletRequest.setRequestURI( "/1/" ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_1, sitePath.getSiteKey() ); assertEquals( "/", sitePath.getLocalPath().toString() ); } public void testResolveSitePathExceptionSitePathPrefixNotFoundInPath() { sitePathResolver.setSitePathPrefix( "/y" ); httpServletRequest.setRequestURI( "/x/1/" ); try { sitePathResolver.resolveSitePath( httpServletRequest ); fail( "Exception expected" ); } catch ( IllegalStateException e ) { assertTrue( e.getMessage().startsWith( "sitePathPrefix '/y' not found in path: /x/1/" ) ); } } public void xtestNorwegianSitePath_With_ISO_8859_1() { httpServletRequest.setRequestURI( "/site/1/B%E5t/" ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_1, sitePath.getSiteKey() ); assertEquals( "/Båt/", sitePath.getLocalPath().toString() ); } public void xtestSweedishSitePath_With_ISO_8859_1() { httpServletRequest.setRequestURI( "/site/1/B%F6t/" ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_1, sitePath.getSiteKey() ); assertEquals( "/Böt/", sitePath.getLocalPath().toString() ); } public void xtestRussianSitePath_WithDefaultCharacterEncoding_UTF_8() { httpServletRequest.setRequestURI( "/site/1/Services%D0%BB/" ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_1, sitePath.getSiteKey() ); assertEquals( "/Servicesл/", sitePath.getLocalPath().toString() ); } public void testResolveIncludePath() { httpServletRequest.setAttribute( "javax.servlet.include.request_uri", "/site/1/About/Jobs/" ); httpServletRequest.setRequestURI( "/About/Jobs/" ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_1, sitePath.getSiteKey() ); assertEquals( "/About/Jobs/", sitePath.getLocalPath().toString() ); } public void testGetParam() { httpServletRequest.setRequestURI( "/site/1/Frontpage" ); httpServletRequest.setParameter( "param1", "value1" ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_1, sitePath.getSiteKey() ); assertEquals( "/Frontpage", sitePath.getLocalPath().toString() ); assertEquals( "value1", sitePath.getParam( "param1" ) ); } public void testGetParamWithMultipleValues() { httpServletRequest.setRequestURI( "/site/1/Frontpage" ); httpServletRequest.setParameter( "param1", new String[]{"value0", "value1"} ); SitePath sitePath = sitePathResolver.resolveSitePath( httpServletRequest ); assertEquals( siteKey_1, sitePath.getSiteKey() ); assertEquals( "/Frontpage", sitePath.getLocalPath().toString() ); assertEquals( "value0", sitePath.getParam( "param1" ) ); } }