/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.portal;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.Sets;
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.ContentHomeKey;
import com.enonic.cms.core.structure.menuitem.MenuItemEntity;
import com.enonic.cms.core.structure.menuitem.MenuItemKey;
import com.enonic.cms.core.structure.menuitem.MenuItemType;
import com.enonic.cms.core.structure.menuitem.section.SectionContentEntity;
import com.enonic.cms.core.structure.menuitem.section.SectionContentKey;
import com.enonic.cms.store.dao.SectionContentDao;
import static org.mockito.Mockito.isA;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
* Created by IntelliJ IDEA.
* User: rmh
* Date: Nov 2, 2010
* Time: 2:09:08 PM
*/
public class PathToContentResolverTest
extends TestCase
{
SectionContentDao sectionContentDao = mock( SectionContentDao.class );
PathToContentResolver pathToContentResolver;
@Before
public void setUp()
{
pathToContentResolver = new PathToContentResolver( sectionContentDao );
}
@Test
public void testResolvePathToContent_noHome()
{
ContentEntity content = new ContentEntity();
content.setName( "contentName" );
content.setKey( new ContentKey( "123" ) );
SiteKey siteKey = new SiteKey( 1 );
Path resolvedContentPath = pathToContentResolver.resolveContentUrlLocalPath( content, siteKey );
assertEquals( "/123/contentName", resolvedContentPath.getPathAsString() );
}
@Test
public void testResolvePathToContent_hasSetHome_HomeButNoSection()
{
SiteEntity site = new SiteEntity();
site.setKey( 1 );
when( sectionContentDao.getCountNamedContentsInSection( isA( MenuItemKey.class ), isA( String.class ) ) ).thenReturn( 1 );
ContentEntity content = new ContentEntity();
content.setName( "contentName" );
content.setKey( new ContentKey( "123" ) );
MenuItemEntity menuItem = new MenuItemEntity();
menuItem.setKey( new MenuItemKey( 1 ) );
menuItem.setName( "test" );
menuItem.setSite( site );
ContentHomeEntity contentHome = new ContentHomeEntity();
contentHome.setContent( content );
contentHome.setMenuItem( menuItem );
contentHome.setSite( site );
contentHome.setKey( new ContentHomeKey( new SiteKey( 1 ), content.getKey() ) );
content.addContentHome( contentHome );
SectionContentEntity sectionContentEntity = new SectionContentEntity();
sectionContentEntity.setMenuItem( menuItem );
sectionContentEntity.setContent( content );
menuItem.setSectionContent( Sets.<SectionContentEntity>newHashSet( sectionContentEntity ) );
SiteKey siteKey = new SiteKey( 1 );
Path resolvedContentPath = pathToContentResolver.resolveContentUrlLocalPath( content, siteKey );
assertEquals( "/test/contentName" + PathToContentResolver.CONTENT_PATH_SEPARATOR + content.getKey().toString(),
resolvedContentPath.getPathAsString() );
}
@Test
public void testResolvePathToContent_uniqueInSection()
{
when( sectionContentDao.getCountNamedContentsInSection( isA( MenuItemKey.class ), isA( String.class ) ) ).thenReturn( 1 );
SiteKey siteKey = new SiteKey( 1 );
ContentEntity content = createContentWithContentHomeAndInSection();
Path resolvedContentPath = pathToContentResolver.resolveContentUrlLocalPath( content, siteKey );
assertEquals( "/test/contentName", resolvedContentPath.getPathAsString() );
}
@Test
public void testResolvePathToContent_notUniqueInSection()
{
when( sectionContentDao.getCountNamedContentsInSection( isA( MenuItemKey.class ), isA( String.class ) ) ).thenReturn( 2 );
SiteKey siteKey = new SiteKey( 1 );
ContentEntity content = createContentWithContentHomeAndInSection();
Path resolvedContentPath = pathToContentResolver.resolveContentUrlLocalPath( content, siteKey );
assertEquals( "/test/contentName--123", resolvedContentPath.getPathAsString() );
}
@Test
public void testResolvePathToContent_permalink()
{
ContentEntity content = new ContentEntity();
content.setName( "contentName" );
content.setKey( new ContentKey( "123" ) );
SiteKey siteKey = new SiteKey( 1 );
SitePath sitePath = new SitePath( siteKey, "234/blabla" );
Path resolvedContentPath = pathToContentResolver.resolveContentUrlLocalPathForPermalink( content, sitePath );
assertEquals( "/123/contentName", resolvedContentPath.getPathAsString() );
}
@Test
public void testResolvePathToContent_permalink_with_windowurl()
{
ContentEntity content = new ContentEntity();
content.setName( "contentName" );
content.setKey( new ContentKey( "123" ) );
SiteKey siteKey = new SiteKey( 1 );
SitePath sitePath = new SitePath( siteKey, "234/blabla/_window/features%3A+xslt+functions%3A+createwindowurl+-+content+page" );
Path resolvedContentPath = pathToContentResolver.resolveContentUrlLocalPathForPermalink( content, sitePath );
assertEquals( "/123/contentName/_window/features%3A+xslt+functions%3A+createwindowurl+-+content+page",
resolvedContentPath.getPathAsString() );
}
private ContentEntity createContentWithContentHomeAndInSection()
{
SiteEntity site = new SiteEntity();
site.setKey( 1 );
site.setName( "testSite" );
ContentEntity content = new ContentEntity();
content.setName( "contentName" );
content.setKey( new ContentKey( "123" ) );
MenuItemEntity menuItem = new MenuItemEntity();
menuItem.setKey( new MenuItemKey( 1 ) );
menuItem.setName( "test" );
menuItem.setSite( site );
menuItem.setType( MenuItemType.SECTION );
ContentHomeEntity contentHome = new ContentHomeEntity();
contentHome.setContent( content );
contentHome.setMenuItem( menuItem );
contentHome.setSite( site );
contentHome.setKey( new ContentHomeKey( new SiteKey( 1 ), content.getKey() ) );
content.addContentHome( contentHome );
SectionContentEntity sectionContent = new SectionContentEntity();
sectionContent.setMenuItem( menuItem );
sectionContent.setContent( content );
sectionContent.setKey( new SectionContentKey( 1 ) );
sectionContent.setApproved( true );
content.addSectionContent( sectionContent );
menuItem.setSectionContent( Sets.<SectionContentEntity>newHashSet( sectionContent ) );
return content;
}
}