MixedTest.php #1

  • //
  • guest/
  • perforce_software/
  • chronicle/
  • main/
  • tests/
  • phpunit/
  • P4Cms/
  • Menu/
  • MixedTest.php
  • View
  • Commits
  • Open Download .zip Download (13 KB)
<?php
/**
 * Test the menu mixed model.
 *
 * @copyright   2011 Perforce Software. All rights reserved.
 * @license     Please see LICENSE.txt in top-level folder of this distribution.
 * @version     <release>/<patch>
 */
class P4Cms_Menu_MixedTest extends TestCase
{
    /**
     * Verify the ID is read only
     *
     * @expectedException P4Cms_Model_Exception
     */
    public function testSetId()
    {
        $mixed = new P4Cms_Menu_Mixed;
        $mixed->setId('foo');
    }

    /**
     * Verify getId correctly reflects menu/menuItem id
     */
    public function testGetId()
    {
        $mixed = new P4Cms_Menu_Mixed;

        $this->assertSame(
            null,
            $mixed->getId(),
            'Expected matching starting id'
        );

        $menuItem = new Zend_Navigation_Page_Uri;
        $menuItem->uuid = 'menuItemId';
        $mixed->setMenuItem($menuItem);
        
        $this->assertSame(
            null,
            $mixed->getId(),
            'Expected matching id with just a menu item set'
        );

        $menu = new P4Cms_Menu;
        $menu->setId('menuId');
        $mixed->setMenu($menu);

        $this->assertSame(
            'menuId/menuItemId',
            $mixed->getId(),
            'Expected matching id with menu and menu item'
        );

        $mixed->setMenuItem(null);

        $this->assertSame(
            'menuId',
            $mixed->getId(),
            'Expected matching id with just a menu'
        );
    }

    /**
     * Exercise the get/set Type methods
     */
    public function testGetSetType()
    {
        $mixed = new P4Cms_Menu_Mixed;

        $this->assertSame(
            null,
            $mixed->getType(),
            'Expected matching starting state'
        );
        
        $mixed->setMenuItem(new Zend_Navigation_Page_Uri);
    
        $this->assertSame(
            'Zend_Navigation_Page_Uri',
            $mixed->getType(),
            'Expected matching default after assigning menu item'
        );

        $mixed->setMenu(new P4Cms_Menu)->setMenuItem(null);
        $this->assertSame(
            'P4Cms_Menu',
            $mixed->getType(),
            'Expected set value even with no menu item'
        );
    }

    /**
     * Test the get/set Depth methods
     */
    public function testGetSetDepth()
    {
        $mixed = new P4Cms_Menu_Mixed;

        $this->assertSame(
            0,
            $mixed->getDepth(),
            'Expected matching default value'
        );

        $mixed = new P4Cms_Menu_Mixed(array('depth' => 10));

        $this->assertSame(
            10,
            $mixed->getDepth(),
            'Expected passing value to constructor to work'
        );

        $this->assertSame(
            2,
            $mixed->setDepth(2)->getDepth(),
            'Expected low value to work'
        );

        $this->assertSame(
            -2,
            $mixed->setDepth(-2)->getDepth(),
            'Expected negative value to work'
        );

        $this->assertSame(
            64,
            $mixed->setDepth(64)->getDepth(),
            'Expected larger value to work'
        );

        try {
            $mixed->setDepth('low');
            $this->fail('Expected InvalidArgumentException when setting invalid depth');
        }
        catch (InvalidArgumentException $e) {
            $this->assertEquals(
                $e->getMessage(),
                'Depth must be an int',
                'Expected exception message did not appear'
            );
        }
    }

    /**
     * Test bad call to setDepth
     *
     * @expectedException InvalidArgumentException
     */
    public function testBadSetDepth()
    {
        $mixed = new P4Cms_Menu_Mixed;
        $mixed->setDepth(false);
    }

    /**
     * Test the get parent id method
     */
    public function testGetParentId()
    {
        $mixed = new P4Cms_Menu_Mixed;

        $this->assertSame(
            null,
            $mixed->getParentId(),
            'Expected matching starting value'
        );

        $menuItem = new Zend_Navigation_Page_Uri;
        $menuItem->uuid = 'parentItem';
        $mixed->setParentMenuItem($menuItem);

        $this->assertSame(
            null,
            $mixed->getParentId(),
            'Expected matching value with just parent menu item'
        );

        $menu = new P4Cms_Menu;
        $menu->setId('menu');
        $mixed->setMenu($menu);

        $this->assertSame(
            'menu/parentItem',
            $mixed->getParentId(),
            'Expected matching value with menu and parent menu item'
        );

        $menuItem = new Zend_Navigation_Page_Uri;
        $menuItem->uuid = 'menuItem';
        $mixed->setMenuItem($menuItem);

        $this->assertSame(
            'menu/parentItem',
            $mixed->getParentId(),
            'Expected matching value with menu, menu item and parent menu item'
        );

        $mixed->setParentMenuItem();
        $this->assertSame(
            'menu',
            $mixed->getParentId(),
            'Expected matching value with just a menu and menu item'
        );

        $mixed->setMenuItem();
        $this->assertSame(
            null,
            $mixed->getParentId(),
            'Expected matching value with just a menu'
        );
    }

    /**
     * Test getting the parent container
     */
    public function testGetParentContainer()
    {
        $mixed = new P4Cms_Menu_Mixed;

        $this->assertSame(
            null,
            $mixed->getParentContainer(),
            'Expected null parent container'
        );

        $menuItem = new Zend_Navigation_Page_Uri;
        $menuItem->label = 'parentMenuItem';
        $mixed->setParentMenuItem($menuItem);

        // expect parent menu item
        $this->assertSame(
            'parentMenuItem',
            $mixed->getParentContainer()->getLabel(),
            'Expected matching label for parent container'
        );

        $menu = new P4Cms_Menu;
        $menu->setId('testMenu');
        $mixed->setMenu($menu);
        $mixed->setParentMenuItem(null);

        // expect default menu container
        $this->assertSame(
            'P4Cms_Navigation',
            get_class($mixed->getParentContainer()),
            'Expected parent container to be of class P4Cms_Navigation'
        );
    }

    /**
     * Test the get label method
     */
    public function testGetLabel()
    {
        $mixed = new P4Cms_Menu_Mixed;

        $this->assertSame(
            '',
            $mixed->getLabel(),
            'Expected matching starting value'
        );

        $menuItem = new Zend_Navigation_Page_Uri;
        $menuItem->label = 'parentMenuItem';
        $mixed->setParentMenuItem($menuItem);

        $this->assertSame(
            '',
            $mixed->getLabel(),
            'Expected matching value with just parent menu item'
        );

        $menu = new P4Cms_Menu;
        $mixed->setMenu($menu);

        $this->assertSame(
            '',
            $mixed->getLabel(),
            'Expected matching value with just parent menu item with no id'
        );

        $menu->setId('menu');
        $this->assertSame(
            'Menu',
            $mixed->getLabel(),
            'Expected matching value with menu and parent menu item'
        );

        $menuItem = new Zend_Navigation_Page_Uri;
        $menuItem->label = 'menuItem';
        $mixed->setMenuItem($menuItem);

        $this->assertSame(
            'menuItem',
            $mixed->getLabel(),
            'Expected matching value with menu, menu item and parent menu item'
        );
    }

    /**
     * test (get|set|has)Menu and getMenuId methods
     */
    public function testMenuMethods()
    {
        $mixed = new P4Cms_Menu_Mixed;

        $this->assertSame(
            null,
            $mixed->getMenu(),
            'Expected matching starting state'
        );

        $this->assertFalse(
            $mixed->hasMenu(),
            'Expected no menu to start'
        );

        $this->assertSame(
            null,
            $mixed->getMenuId(),
            'Expected matching starting id'
        );

        $menu = new P4Cms_Menu;
        $menu->setId("menu");
        $mixed->setMenu($menu);

        $this->assertTrue(
            $mixed->hasMenu(),
            'Expected menu after setting to be known'
        );

        $this->assertSame(
            'menu',
            $mixed->getMenu()->getId(),
            'Expected matching id from get menu'
        );

        $this->assertSame(
            'menu',
            $mixed->getMenuId(),
            'Expected matching id from get menu id'
        );

        $mixed->setMenu(null);

        $this->assertSame(
            null,
            $mixed->getMenu(),
            'Expected match after blanking menu'
        );
    }

    /**
     * test (get|set|has)MenuItem and getMenuItemId methods
     */
    public function testMenuItemMethods()
    {
        $mixed = new P4Cms_Menu_Mixed;

        $this->assertSame(
            null,
            $mixed->getMenuItem(),
            'Expected matching starting state'
        );

        $this->assertFalse(
            $mixed->hasMenuItem(),
            'Expected no menu item to start'
        );

        $this->assertSame(
            null,
            $mixed->getMenuItemId(),
            'Expected matching starting id'
        );

        $menuItem = new Zend_Navigation_Page_Uri;
        $menuItem->uuid = "menuItem";
        $mixed->setMenuItem($menuItem);

        $this->assertTrue(
            $mixed->hasMenuItem(),
            'Expected menu item after setting to be known'
        );

        $this->assertSame(
            'menuItem',
            $mixed->getMenuItem()->uuid,
            'Expected matching id from get menu item'
        );

        $this->assertSame(
            'menuItem',
            $mixed->getMenuItemId(),
            'Expected matching id from get menu item id'
        );

        $mixed->setMenuItem(null);

        $this->assertSame(
            null,
            $mixed->getMenuItem(),
            'Expected match after blanking menu item'
        );

        $adapter = new P4Cms_Record_Adapter;
        $adapter->setConnection($this->p4)
                ->setBasePath("//depot/records");
        P4Cms_Record::setDefaultAdapter($adapter);

        $menu = new P4Cms_Menu;
        $menu->setId('test');

        $container = new P4Cms_Navigation;
        $container->addPage(
            array(
                'label'      => 'Users',
                'uri'        => 'http://google.com',
                'uuid'       => 'usersItem',
                'pages'      => array(
                    array(
                        'label'     => 'Users Sub 0',
                        'uri'       => 'http://google.com?q=0',
                        'uuid'      => 'usersSubItem0',
                    ),
                    array(
                        'label'     => 'Users Sub 1',
                        'uri'       => 'http://google.com?q=1',
                        'uuid'      => 'usersSubItem1',
                    )
                )
            )
        );
        
        $menu->setContainer($container)->save();

        $mixed = P4Cms_Menu::fetchMixed();
        $item  = $mixed->search('id', 'test/usersSubItem0', array(P4Cms_Model_Iterator::FILTER_COPY))->first();

        $this->assertSame(
            $item->getPreviousMenuItem(),
            null,
            'Expected null id for previous menu item'
        );

        // get the latter of the two items
        $item = $item->getNextMenuItem();

        $this->assertSame(
            $item->getId(),
            'test/usersSubItem1',
            'Expected matching id for next menu item'
        );

        $this->assertSame(
            $item->getNextMenuItem(),
            null,
            'Expected null id for next menu item'
        );

        $this->assertSame(
            $item->getPreviousMenuItem()->getId(),
            'test/usersSubItem0',
            'Expected matching id for previous menu item'
        );
    }

    /**
     * test (get|set|has)ParentMenuItem methods
     */
    public function testParentMenuItemMethods()
    {
        $mixed = new P4Cms_Menu_Mixed;

        $this->assertSame(
            null,
            $mixed->getParentMenuItem(),
            'Expected matching starting state'
        );

        $this->assertFalse(
            $mixed->hasParentMenuItem(),
            'Expected no parent menu item to start'
        );

        $menuItem = new Zend_Navigation_Page_Uri;
        $menuItem->uuid = "menuItem";
        $mixed->setParentMenuItem($menuItem);

        $this->assertTrue(
            $mixed->hasParentMenuItem(),
            'Expected parent menu item after setting to be known'
        );

        $this->assertSame(
            'menuItem',
            $mixed->getParentMenuItem()->uuid,
            'Expected matching id from get parent menu item'
        );

        $mixed->setParentMenuItem(null);

        $this->assertSame(
            null,
            $mixed->getParentMenuItem(),
            'Expected match after blanking parent menu item'
        );

        $page = new P4Cms_Navigation_Page_Dynamic;
        $page->setLabel('testPage');
        $mixed->setParentMenuItem($page);

        $this->assertSame(
            'testPage',
            $mixed->getParentContainer()->getLabel(),
            'Expecting matching id from parent container'
        );
    }
}
# Change User Description Committed
#1 16170 perforce_software Move Chronicle files to follow new path scheme for branching.
//guest/perforce_software/chronicle/tests/phpunit/P4Cms/Menu/MixedTest.php
#1 8972 Matt Attaway Initial add of the Chronicle source code