/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.structure.menuitem;
import org.junit.Before;
import org.junit.Test;
import com.enonic.cms.core.structure.SiteEntity;
import static org.junit.Assert.*;
public class MenuItemKeysByPathResolverTest
{
private SiteEntity site_0;
@Before
public void before()
{
site_0 = createSite();
}
@Test
public void getPageKeyByPath_given_top_level_menu_item_with_no_children_when_path_is_top_level_menu_item_and_does_not_ends_with_slash_then_top_level_menu_item_is_returned()
{
// setup
MenuItemEntity menuItem_1 = createTopLevelMenuItem( 1, "menuItem-1" );
// exercise & verify
MenuItemKeysByPathResolver resolver = new MenuItemKeysByPathResolver( menuItem_1 );
assertEquals( menuItem_1.getKey().toString(), resolver.getPageKeyByPath( "/menuItem-1") );
}
@Test
public void getPageKeyByPath_given_top_level_menu_item_with_no_children_when_path_is_top_level_menu_item_and_ends_with_slash_then_empty_is_returned()
{
// setup
MenuItemEntity menuItem_1 = createTopLevelMenuItem( 1, "menuItem-1" );
// exercise & verify
MenuItemKeysByPathResolver resolver = new MenuItemKeysByPathResolver( menuItem_1 );
assertEquals( "", resolver.getPageKeysByPath( "/menuItem-1/" ) );
}
@Test
public void getPageKeyByPath_given_top_level_menu_item_with_two_children_when_path_is_top_level_menu_item_and_ends_with_slash_then_only_children_is_returned()
{
// setup
MenuItemEntity menuItem_1 = createTopLevelMenuItem( 1, "menuItem-1" );
createMenuItem( 2, "menuItem-1-1", menuItem_1 );
createMenuItem( 3, "menuItem-1-2", menuItem_1 );
// exercise & verify
MenuItemKeysByPathResolver resolver = new MenuItemKeysByPathResolver( menuItem_1 );
assertEquals( "2,3", resolver.getPageKeysByPath( "/menuItem-1/" ) );
}
@Test
public void getPageKeyByPath_given_top_level_menu_item_with_two_children_when_path_is_top_level_menu_item_and_does_not_ends_with_slash_then_only_menu_item_specified_by_path_is_returned()
{
// setup
MenuItemEntity menuItem_1 = createTopLevelMenuItem( 1, "menuItem-1" );
createMenuItem( 2, "menuItem-1-1", menuItem_1 );
createMenuItem( 3, "menuItem-1-2", menuItem_1 );
// exercise & verify
MenuItemKeysByPathResolver resolver = new MenuItemKeysByPathResolver( menuItem_1 );
assertEquals( "1", resolver.getPageKeyByPath( "/menuItem-1" ) );
}
@Test
public void getPageKeyByPath_grand_children_is_not_returned()
{
// setup
MenuItemEntity menuItem_1 = createTopLevelMenuItem( 1, "menuItem-1" );
createMenuItem( 2, "menuItem-1-1", menuItem_1 );
MenuItemEntity menuItem_1_2 = createMenuItem( 3, "menuItem-1-2", menuItem_1 );
createMenuItem( 4, "menuItem-1-2-1", menuItem_1_2 );
// exercise & verify
MenuItemKeysByPathResolver resolver = new MenuItemKeysByPathResolver( menuItem_1 );
assertEquals( "1", resolver.getPageKeyByPath( "/menuItem-1" ) );
}
@Test
public void getPageKeyByPath_given_root_slash_then_returns_top_level_menu_items()
{
// setup
MenuItemEntity news = createTopLevelMenuItem( 1, "news" );
createTopLevelMenuItem( 2, "health" );
MenuItemEntity news_world = createMenuItem( 3, "world", news );
createMenuItem( 4, "politics", news );
// exercise & verify
MenuItemKeysByPathResolver resolver = new MenuItemKeysByPathResolver( news_world );
assertEquals( "1,2", resolver.getPageKeysByPath( "/" ) );
}
@Test
public void getPageKeyByPath_given_dot_slash_then_returns_children_of_menu_item()
{
// setup
MenuItemEntity news = createTopLevelMenuItem( 1, "news" );
MenuItemEntity news_world = createMenuItem( 2, "world", news );
createMenuItem( 3, "africa", news_world );
createMenuItem( 4, "europe", news_world );
createMenuItem( 5, "asia", news_world );
createMenuItem( 6, "america", news_world );
createMenuItem( 7, "australia", news_world );
// exercise & verify
MenuItemKeysByPathResolver resolver = new MenuItemKeysByPathResolver( news_world );
assertEquals( "3,4,5,6,7", resolver.getPageKeysByPath( "./" ) );
}
@Test
public void getPageKeyByPath_is_case_in_sensitive()
{
// setup
MenuItemEntity news = createTopLevelMenuItem( 1, "news" );
MenuItemEntity news_world = createMenuItem( 2, "world", news );
createMenuItem( 3, "Politics", news );
// exercise & verify
MenuItemKeysByPathResolver resolver = new MenuItemKeysByPathResolver( news_world );
assertEquals( "3", resolver.getPageKeyByPath( "../politics" ) );
}
@Test
public void getPageKeyByPath_given_dot_slash_child_menu_item_as_path_when_menu_item_is_parent_then_child_is_returned()
{
// setup
MenuItemEntity news = createTopLevelMenuItem( 1, "news" );
createMenuItem( 2, "world", news );
// exercise & verify
MenuItemKeysByPathResolver resolver = new MenuItemKeysByPathResolver( news );
assertEquals( "2", resolver.getPageKeyByPath( "./world" ) );
}
@Test
public void testGetPageKeyByPath()
{
String keys;
MenuItemEntity topLevelMenuItem = createTopLevelMenuItem( 1, "Top menu-item" );
MenuItemEntity menuItem1 = createMenuItem( 2, "child menu-item 1", topLevelMenuItem );
createMenuItem( 3, "child menu-item 2", topLevelMenuItem );
MenuItemKeysByPathResolver resolver = new MenuItemKeysByPathResolver( topLevelMenuItem );
keys = resolver.getPageKeysByPath( "/" );
assertEquals( "1", keys );
keys = resolver.getPageKeyByPath( "/Top menu-item" );
assertEquals( "1", keys );
keys = resolver.getPageKeyByPath( "/Top menu-item/child menu-item 1" );
assertEquals( "2", keys );
keys = resolver.getPageKeyByPath( "/Top menu-item/child menu-item 2" );
assertEquals( "3", keys );
keys = resolver.getPageKeyByPath( "/Top menu-item/child menu-item 2/nope" );
assertEquals( "", keys );
keys = resolver.getPageKeysByPath( "/../" );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "/nope" );
assertEquals( "", keys );
keys = resolver.getPageKeysByPath( "/Top menu-item/" );
assertEquals( "2,3", keys );
keys = resolver.getPageKeyByPath( "." );
assertEquals( "1", keys );
keys = resolver.getPageKeysByPath( "./" );
assertEquals( "2,3", keys );
keys = resolver.getPageKeyByPath( "./child menu-item 2" );
assertEquals( "3", keys );
keys = resolver.getPageKeyByPath( "./../Top menu-item/child menu-item 2" );
assertEquals( "3", keys );
keys = resolver.getPageKeyByPath( "./../../Top menu-item/child menu-item 2" );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( ".." );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "../." );
assertEquals( "", keys );
keys = resolver.getPageKeysByPath( "../" );
assertEquals( "1", keys );
keys = resolver.getPageKeyByPath( "../nope" );
assertEquals( "", keys );
keys = resolver.getPageKeysByPath( "../../" );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "../.." );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "../../.." );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "nope" );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "./nope" );
assertEquals( "", keys );
resolver = new MenuItemKeysByPathResolver( menuItem1 );
keys = resolver.getPageKeyByPath( "." );
assertEquals( "2", keys );
keys = resolver.getPageKeyByPath( "./" );
assertEquals( "2", keys );
keys = resolver.getPageKeysByPath( "./" );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( ".." );
assertEquals( "1", keys );
keys = resolver.getPageKeyByPath( "../" );
assertEquals( "1", keys );
keys = resolver.getPageKeyByPath( "./.." );
assertEquals( "1", keys );
keys = resolver.getPageKeyByPath( "./../" );
assertEquals( "1", keys );
keys = resolver.getPageKeysByPath( "../" );
assertEquals( "2,3", keys );
keys = resolver.getPageKeysByPath( "./../" );
assertEquals( "2,3", keys );
keys = resolver.getPageKeysByPath( "./.././././" );
assertEquals( "2,3", keys );
keys = resolver.getPageKeysByPath( "./././.././././" );
assertEquals( "2,3", keys );
keys = resolver.getPageKeyByPath( "../child menu-item 1" );
assertEquals( "2", keys );
keys = resolver.getPageKeyByPath( "../child menu-item 2" );
assertEquals( "3", keys );
keys = resolver.getPageKeyByPath( "./../child menu-item 1" );
assertEquals( "2", keys );
keys = resolver.getPageKeyByPath( "./../child menu-item 2" );
assertEquals( "3", keys );
keys = resolver.getPageKeyByPath( "../../Top menu-item" );
assertEquals( "1", keys );
keys = resolver.getPageKeyByPath( "./../../Top menu-item" );
assertEquals( "1", keys );
keys = resolver.getPageKeyByPath( "../.." );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "../../.." );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "nope" );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "./nope" );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "./nope/." );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "./nope/.." );
assertEquals( "", keys );
keys = resolver.getPageKeyByPath( "../nope" );
assertEquals( "", keys );
}
private SiteEntity createSite()
{
SiteEntity site = new SiteEntity();
site.setName( "MySite" );
site.setKey( 0 );
return site;
}
private MenuItemEntity createTopLevelMenuItem( int key, String name )
{
MenuItemEntity menuItem = new MenuItemEntity();
menuItem.setKey( new MenuItemKey( key ) );
menuItem.setName( name );
menuItem.setParent( null );
menuItem.setSite( site_0 );
site_0.addTopMenuItem( menuItem );
return menuItem;
}
private MenuItemEntity createMenuItem( int key, String name, MenuItemEntity parent )
{
MenuItemEntity menuItem = new MenuItemEntity();
menuItem.setKey( new MenuItemKey( key ) );
menuItem.setName( name );
menuItem.setParent( parent );
parent.addChild( menuItem );
menuItem.setSite( site_0 );
return menuItem;
}
}