/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal; import java.util.HashSet; import org.junit.Before; import org.junit.Test; import junit.framework.TestCase; import com.enonic.cms.core.Path; import com.enonic.cms.core.content.ContentEntity; import com.enonic.cms.core.content.ContentKey; import com.enonic.cms.core.structure.SiteEntity; import com.enonic.cms.core.structure.SiteKey; import com.enonic.cms.core.structure.SitePath; import com.enonic.cms.core.structure.menuitem.ContentHomeEntity; import com.enonic.cms.core.structure.menuitem.MenuItemEntity; import com.enonic.cms.core.structure.menuitem.MenuItemKey; import com.enonic.cms.core.structure.menuitem.section.SectionContentEntity; import com.enonic.cms.core.structure.menuitem.section.SectionContentKey; import com.enonic.cms.store.dao.ContentDao; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** * Created by IntelliJ IDEA. * User: rmh * Date: Apr 13, 2010 * Time: 2:27:33 PM */ public class PageRequestContextResolverTest extends TestCase { SiteKey siteKey = new SiteKey( "1" ); SiteEntity site; ContentDao contentDao; @Before public void setUp() { site = mock( SiteEntity.class ); contentDao = mock( ContentDao.class ); when( site.getKey() ).thenReturn( new SiteKey( 0 ) ); } @Test public void testMenuItemRequest() { SitePath sitePath = new SitePath( siteKey, "/test/menuItem" ); SectionContentEntity sectionContent = createSectionContent( new ContentKey( 123 ), "contentName" ); MenuItemEntity menuItem = new MenuItemEntity(); addSectionContentToMenuItem( menuItem, sectionContent ); injectMenuItemToSiteEntityResolver( "/test/menuItem", menuItem ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNull( resolvedContentPath ); assertNotNull( resolvedContext.getRequestedMenuItem() ); assertTrue( resolvedContext.getPageRequestType().equals( PageRequestType.MENUITEM ) ); } @Test public void testContentRequest_root_without_content_key() { SitePath sitePath = new SitePath( siteKey, "/contentName" ); SectionContentEntity sectionContent = createSectionContent( new ContentKey( 123 ), "contentName" ); MenuItemEntity menuItem = new MenuItemEntity(); addSectionContentToMenuItem( menuItem, sectionContent ); injectMenuItemToSiteEntityResolver( "/", menuItem ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNull( resolvedContentPath ); assertNull( resolvedContext.getRequestedMenuItem() ); } @Test public void testContentRequest_root_with_content_key() { SitePath sitePath = new SitePath( siteKey, "/contentName--123" ); final ContentKey contentKey = new ContentKey( 123 ); ContentPath contentPath = new ContentPath( contentKey, "contentName", new Path( "/" ) ); sitePath.setContentPath( contentPath ); SectionContentEntity sectionContent = createSectionContent( contentKey, "contentName" ); MenuItemEntity menuItem = createMenuItem( "menuItem", site ); addSectionContentToMenuItem( menuItem, sectionContent ); injectContentIntoContentDao( contentKey, "contentName" ); injectMenuItemToSiteEntityResolver( "/", menuItem ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNull( resolvedContentPath ); } private MenuItemEntity createMenuItem( String menuItemName, SiteEntity site ) { MenuItemEntity menuItem = new MenuItemEntity(); menuItem.setName( "menuItemName" ); menuItem.setSite( site ); return menuItem; } @Test public void testContentRequest_with_content_key() { SitePath sitePath = new SitePath( siteKey, "/test/path/contentName--123" ); final ContentKey contentKey = new ContentKey( 123 ); ContentEntity content = createContent( contentKey, "contentName" ); MenuItemEntity menuItem = new MenuItemEntity(); menuItem.setSite( site ); content.addDirectMenuItemPlacement( menuItem ); content.addContentHome( createContentHome( site, menuItem ) ); injectContentIntoContentDao( content ); injectMenuItemToSiteEntityResolver( "/test", createMenuItem( "test", site ) ); injectMenuItemToSiteEntityResolver( "/test/path", menuItem ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNotNull( "Content path should not be null", resolvedContentPath ); assertEquals( "123", resolvedContentPath.getContentKey().toString() ); assertNotNull( resolvedContext.getRequestedMenuItem() ); assertTrue( resolvedContext.getPageRequestType().equals( PageRequestType.CONTENT ) ); } @Test public void testContentRequest_with_content_key_not_published_to_section() { SitePath sitePath = new SitePath( siteKey, "/test/path/contentName--123" ); final ContentKey contentKey = new ContentKey( 123 ); MenuItemEntity menuItem = new MenuItemEntity(); injectContentIntoContentDao( contentKey, "contentName" ); injectMenuItemToSiteEntityResolver( "/test/path", menuItem ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNull( "Content path should be null", resolvedContentPath ); assertTrue( resolvedContext.getPageRequestType().equals( PageRequestType.CONTENT ) ); } @Test public void testContentRequest_content_in_section() { SitePath sitePath = new SitePath( siteKey, "/test/path/contentName" ); SectionContentEntity sectionContent = createSectionContent( new ContentKey( 123 ), "contentName" ); MenuItemEntity menuItem = new MenuItemEntity(); addSectionContentToMenuItem( menuItem, sectionContent ); injectMenuItemToSiteEntityResolver( "/test/path", menuItem ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNotNull( resolvedContentPath ); assertEquals( "123", resolvedContentPath.getContentKey().toString() ); assertNotNull( resolvedContext.getRequestedMenuItem() ); assertTrue( resolvedContext.getPageRequestType().equals( PageRequestType.CONTENT ) ); } @Test public void testContentRequest_several_content_in_section() { SitePath sitePath = new SitePath( siteKey, "/test/path/contentName3" ); SectionContentEntity sectionContent = createSectionContent( new ContentKey( 123 ), "contentName1" ); SectionContentEntity sectionContent2 = createSectionContent( new ContentKey( 234 ), "contentName2" ); SectionContentEntity sectionContent3 = createSectionContent( new ContentKey( 345 ), "contentName3" ); SectionContentEntity sectionContent4 = createSectionContent( new ContentKey( 456 ), "contentName4" ); MenuItemEntity menuItem = new MenuItemEntity(); addSectionContentToMenuItem( menuItem, sectionContent ); addSectionContentToMenuItem( menuItem, sectionContent2 ); addSectionContentToMenuItem( menuItem, sectionContent3 ); addSectionContentToMenuItem( menuItem, sectionContent4 ); injectMenuItemToSiteEntityResolver( "/test/path", menuItem ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNotNull( resolvedContentPath ); assertEquals( "345", resolvedContentPath.getContentKey().toString() ); assertNotNull( resolvedContext.getRequestedMenuItem() ); assertTrue( resolvedContext.getPageRequestType().equals( PageRequestType.CONTENT ) ); } @Test public void testContentRequest_content_in_section_not_matching_name() { SitePath sitePath = new SitePath( siteKey, "/test/path/noMatchingContentName" ); SectionContentEntity sectionContent = createSectionContent( new ContentKey( 123 ), "contentName" ); MenuItemEntity menuItem = new MenuItemEntity(); addSectionContentToMenuItem( menuItem, sectionContent ); injectMenuItemToSiteEntityResolver( "/test/path", menuItem ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNull( resolvedContentPath ); assertNull( resolvedContext.getRequestedMenuItem() ); } @Test public void testContentRequest_contentOnRoot() { SitePath sitePath = new SitePath( siteKey, "/123/contentName" ); final ContentKey contentKey = new ContentKey( 123 ); final MenuItemEntity rootMenuItem = new MenuItemEntity(); rootMenuItem.setName( "" ); rootMenuItem.setKey( new MenuItemKey( 1 ) ); injectMenuItemToSiteEntityResolver( "/", rootMenuItem ); injectContentIntoContentDao( contentKey, "contentName" ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNotNull( resolvedContentPath ); assertNotNull( resolvedContext.getRequestedMenuItem() ); assertEquals( new ContentKey( "123" ), resolvedContentPath.getContentKey() ); assertEquals( "/", resolvedContentPath.getPathToMenuItem().getPathAsString() ); } @Test public void testContentRequest_contentOnRoot_extraElementInPath() { SitePath sitePath = new SitePath( siteKey, "/123/test/contentName" ); final ContentKey contentKey = new ContentKey( 123 ); final MenuItemEntity rootMenuItem = new MenuItemEntity(); rootMenuItem.setName( "" ); rootMenuItem.setKey( new MenuItemKey( 1 ) ); injectRootPageOnSite( rootMenuItem ); injectContentIntoContentDao( contentKey, "contentName" ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNull( resolvedContentPath ); } @Test public void testContentRequest_emptyPathYieldsNoException() { SitePath sitePath = new SitePath( siteKey, "" ); final ContentKey contentKey = new ContentKey( 123 ); final MenuItemEntity rootMenuItem = new MenuItemEntity(); rootMenuItem.setName( "" ); rootMenuItem.setKey( new MenuItemKey( 1 ) ); injectRootPageOnSite( rootMenuItem ); injectContentIntoContentDao( contentKey, "contentName" ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNull( resolvedContentPath ); } @Test public void testContentRequest_old_style_content_path() { ContentKey contentKey = new ContentKey( "123" ); ContentEntity content = createContent( contentKey, "contentName" ); SiteEntity site = new SiteEntity(); site.setKey( 1 ); site.setName( "mySite" ); MenuItemEntity menuItem = new MenuItemEntity(); menuItem.setName( "test" ); menuItem.setSite( site ); content.addContentHome( createContentHome( site, menuItem ) ); SitePath sitePath = new SitePath( siteKey, "/test/path/contentName." + contentKey.toString() + ".cms" ); injectContentIntoContentDao( content ); PageRequestContextResolver pageRequestContextResolver = new PageRequestContextResolver( contentDao ); PageRequestContext resolvedContext = pageRequestContextResolver.resolvePageRequestContext( site, sitePath ); ContentPath resolvedContentPath = resolvedContext.getContentPath(); assertNotNull( "Content path should not be null", resolvedContentPath ); assertEquals( "123", resolvedContentPath.getContentKey().toString() ); assertEquals( menuItem, resolvedContext.getRequestedMenuItem() ); assertTrue( resolvedContext.getPageRequestType().equals( PageRequestType.CONTENT ) ); } private SectionContentEntity createSectionContent( ContentKey contentKey, String contentName ) { ContentEntity content = createContent( contentKey, contentName ); SectionContentEntity sectionContent = new SectionContentEntity(); sectionContent.setKey( new SectionContentKey( contentKey.toString() ) ); sectionContent.setContent( content ); return sectionContent; } private ContentEntity createContent( ContentKey contentKey, String contentName ) { ContentEntity content = new ContentEntity(); content.setKey( contentKey ); content.setName( contentName ); return content; } private void addSectionContentToMenuItem( MenuItemEntity menuItem, SectionContentEntity sectionContent ) { if ( menuItem.getSectionContents() == null ) { menuItem.setSectionContent( new HashSet<SectionContentEntity>() ); } menuItem.getSectionContents().add( sectionContent ); } private void injectFirstMenuItem( MenuItemEntity firstMenuItem ) { when( site.getFirstMenuItem() ).thenReturn( firstMenuItem ); } private void injectRootPageOnSite( MenuItemEntity rootMenuItem ) { when( site.getFrontPage() ).thenReturn( rootMenuItem ); } private void injectMenuItemToSiteEntityResolver( String localPath, MenuItemEntity menuItem ) { when( site.resolveMenuItemByPath( new Path( localPath ) ) ).thenReturn( menuItem ); } private void injectContentIntoContentDao( ContentEntity content ) { when( contentDao.findByKey( content.getKey() ) ).thenReturn( content ); } private void injectContentIntoContentDao( ContentKey contentKey, String contentName ) { ContentEntity content = createContent( contentKey, contentName ); when( contentDao.findByKey( contentKey ) ).thenReturn( content ); } private ContentHomeEntity createContentHome( SiteEntity site, MenuItemEntity menuItem ) { ContentHomeEntity contentHome = new ContentHomeEntity(); contentHome.setSite( site ); contentHome.setMenuItem( menuItem ); return contentHome; } }