/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.category;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import junit.framework.TestCase;
import static org.junit.Assert.assertArrayEquals;
public class CategoryEntityTest
extends TestCase
{
public void testGetAllChildrenWithNullChildren()
{
CategoryEntity root = createCategory( 0, "root", null );
List<CategoryEntity> actualChildren = root.getDescendants();
assertNotNull( actualChildren );
assertEquals( 0, actualChildren.size() );
}
public void testAllChildrenWithOneChild()
{
CategoryEntity root = createCategory( 0, "root", null );
CategoryEntity cat_1 = createCategory( 1, "0.1", root );
Set<CategoryEntity> expectedChildren = new HashSet<CategoryEntity>();
expectedChildren.add( cat_1 );
List<CategoryEntity> actualChildren = root.getDescendants();
assertNotNull( actualChildren );
assertArrayEquals( expectedChildren.toArray( new CategoryEntity[expectedChildren.size()] ),
actualChildren.toArray( new CategoryEntity[actualChildren.size()] ) );
}
public void testGetAllChildren()
{
CategoryEntity root = createCategory( 0, "root", null );
CategoryEntity cat_1 = createCategory( 1, "0.1", root );
CategoryEntity cat_1_1 = createCategory( 2, "0.1.1", cat_1 );
CategoryEntity cat_1_2 = createCategory( 3, "0.1.2", cat_1 );
CategoryEntity cat_1_2_1 = createCategory( 4, "0.1.2.1", cat_1_2 );
CategoryEntity cat_2 = createCategory( 5, "0.2", root );
CategoryEntity cat_2_1 = createCategory( 6, "0.2", cat_2 );
List<CategoryEntity> expectedChildren = new ArrayList<CategoryEntity>();
expectedChildren.add( cat_1 );
expectedChildren.add( cat_1_1 );
expectedChildren.add( cat_1_2 );
expectedChildren.add( cat_1_2_1 );
expectedChildren.add( cat_2 );
expectedChildren.add( cat_2_1 );
List<CategoryEntity> actualChildren = root.getDescendants();
assertNotNull( actualChildren );
assertArrayEquals( expectedChildren.toArray( new CategoryEntity[expectedChildren.size()] ),
actualChildren.toArray( new CategoryEntity[actualChildren.size()] ) );
}
public void testGetAllChildren2()
{
CategoryEntity root = createCategory( 0, "root", null );
CategoryEntity cat_1 = createCategory( 1, "0.1", root );
CategoryEntity cat_1_1 = createCategory( 2, "0.1.1", cat_1 );
CategoryEntity cat_1_2 = createCategory( 3, "0.1.2", cat_1 );
CategoryEntity cat_1_2_1 = createCategory( 4, "0.1.2.1", cat_1_2 );
CategoryEntity cat_2 = createCategory( 5, "0.2", root );
CategoryEntity cat_2_1 = createCategory( 6, "0.2", cat_2 );
List<CategoryEntity> expectedChildren = new ArrayList<CategoryEntity>();
expectedChildren.add( cat_1_1 );
expectedChildren.add( cat_1_2 );
expectedChildren.add( cat_1_2_1 );
List<CategoryEntity> actualChildren = cat_1.getDescendants();
assertNotNull( actualChildren );
assertArrayEquals( expectedChildren.toArray( new CategoryEntity[expectedChildren.size()] ),
actualChildren.toArray( new CategoryEntity[actualChildren.size()] ) );
}
public void testSetUnitOnDescendants()
{
UnitKey unitKey1 = new UnitKey( 1 );
UnitKey unitKey2 = new UnitKey( 2 );
UnitEntity unit1 = new UnitEntity();
unit1.setKey( unitKey1 );
CategoryEntity root = createCategory( 0, "root", null, unit1 );
CategoryEntity cat_1 = createCategory( 1, "0.1", root, unit1 );
CategoryEntity cat_1_1 = createCategory( 2, "0.1.1", cat_1, unit1 );
CategoryEntity cat_1_2 = createCategory( 3, "0.1.2", cat_1_1, unit1 );
CategoryEntity cat_1_2_1 = createCategory( 4, "0.1.2.1", cat_1_2, unit1 );
assertEquals( unitKey1, root.getUnit().getKey() );
assertEquals( unitKey1, cat_1_2_1.getUnit().getKey() );
assertEquals( unitKey1, cat_1.getUnit().getKey() );
UnitEntity unit2 = new UnitEntity();
unit2.setKey( unitKey2 );
cat_1_1.setUnitOnDescendants( unit2 );
assertEquals( unitKey1, root.getUnit().getKey() );
assertEquals( unitKey1, cat_1.getUnit().getKey() );
assertEquals( unitKey2, cat_1_1.getUnit().getKey() );
assertEquals( unitKey2, cat_1_2.getUnit().getKey() );
assertEquals( unitKey2, cat_1_2_1.getUnit().getKey() );
}
public void testIsSubCategory()
{
CategoryEntity root = createCategory( 0, "root", null );
CategoryEntity cat_1 = createCategory( 1, "0.1", root );
CategoryEntity cat_1_1 = createCategory( 2, "0.1.1", cat_1 );
CategoryEntity cat_1_2 = createCategory( 3, "0.1.2", cat_1 );
CategoryEntity cat_1_2_1 = createCategory( 4, "0.1.2.1", cat_1_2 );
CategoryEntity cat_2 = createCategory( 5, "0.2", root );
CategoryEntity cat_2_1 = createCategory( 6, "0.2", cat_2 );
assertFalse( root.isSubCategoryOf( cat_1 ) );
assertTrue( cat_1.isSubCategoryOf( root ) );
assertTrue( cat_1_2_1.isSubCategoryOf( cat_1 ) );
assertFalse( cat_1_2_1.isSubCategoryOf( cat_1_1 ) );
assertTrue( cat_2_1.isSubCategoryOf( root ) );
assertTrue( cat_2_1.isSubCategoryOf( root ) );
assertFalse( cat_2_1.isSubCategoryOf( cat_1 ) );
}
private CategoryEntity createCategory( int key, String name, CategoryEntity parent )
{
return createCategory( key, name, parent, null );
}
private CategoryEntity createCategory( int key, String name, CategoryEntity parent, UnitEntity unit )
{
CategoryEntity cat = new CategoryEntity();
cat.setKey( new CategoryKey( key ) );
cat.setName( name );
cat.setUnit( unit );
if ( parent != null )
{
cat.setParent( parent );
}
return cat;
}
}