123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- <?php
- /*
- * This file is part of the Sonata package.
- *
- * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Sonata\AdminBundle\Tests\Twig\Extension;
- use Knp\Menu\MenuFactory;
- use Sonata\AdminBundle\Menu\MenuBuilder;
- class MenuBuilderTest extends \PHPUnit_Framework_TestCase
- {
- private $pool;
- private $provider;
- private $factory;
- private $builder;
- protected function setUp()
- {
- $this->pool = $this->getMockBuilder('Sonata\AdminBundle\Admin\Pool')->disableOriginalConstructor()->getMock();
- $this->provider = $this->getMock('Knp\Menu\Provider\MenuProviderInterface');
- $this->factory = new MenuFactory();
- $this->builder = new MenuBuilder($this->pool, $this->factory, $this->provider);
- }
- public function testGetKnpMenu()
- {
- $adminGroups = array(
- "bar" => array(
- "label" => "foo",
- "icon" => '<i class="fa fa-edit"></i>',
- "label_catalogue" => 'SonataAdminBundle',
- "items" => array(
- array(
- "admin" => "",
- "label" => "fooLabel",
- "route" => "FooRoute",
- "route_params" => array("foo" => "bar"),
- ),
- ),
- "item_adds" => array(),
- "roles" => array(),
- ),
- );
- $this->preparePool($adminGroups);
- $menu = $this->builder->createSidebarMenu();
- $this->assertInstanceOf('Knp\Menu\ItemInterface', $menu);
- $this->assertArrayHasKey('bar', $menu->getChildren());
- foreach ($menu->getChildren() as $key => $child) {
- $this->assertInstanceOf('Knp\Menu\MenuItem', $child);
- $this->assertEquals("bar", $child->getName());
- $this->assertEquals($adminGroups["bar"]["label"], $child->getLabel());
- // menu items
- $children = $child->getChildren();
- $this->assertCount(1, $children);
- $this->assertArrayHasKey('fooLabel', $children);
- $this->assertInstanceOf('Knp\Menu\MenuItem', $child['fooLabel']);
- $this->assertEquals('fooLabel', $child['fooLabel']->getLabel());
- }
- }
- public function testGetKnpMenuWithAdmin()
- {
- $adminGroups = array(
- 'bar' => array(
- 'label' => 'foo',
- 'icon' => '<i class="fa fa-edit"></i>',
- 'label_catalogue' => 'SonataAdminBundle',
- 'items' => array(
- array(
- 'admin' => 'sonata_admin_foo_service',
- 'label' => 'fooLabel',
- ),
- ),
- 'item_adds' => array(),
- 'roles' => array(),
- ),
- );
- $admin = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
- $admin->expects($this->once())
- ->method('hasRoute')
- ->with($this->equalTo('list'))
- ->will($this->returnValue(true))
- ;
- $admin->expects($this->any())
- ->method('isGranted')
- ->with($this->equalTo('LIST'))
- ->will($this->returnValue(true))
- ;
- $admin->expects($this->once())
- ->method('getLabel')
- ->will($this->returnValue('foo_admin_label'))
- ;
- $admin->expects($this->once())
- ->method('generateMenuUrl')
- ->will($this->returnValue(array()))
- ;
- $this->preparePool($adminGroups, $admin);
- $menu = $this->builder->createSidebarMenu();
- $this->assertInstanceOf('Knp\Menu\ItemInterface', $menu);
- $this->assertArrayHasKey('bar', $menu->getChildren());
- foreach ($menu->getChildren() as $key => $child) {
- $this->assertInstanceOf('Knp\Menu\MenuItem', $child);
- $this->assertEquals('bar', $child->getName());
- $this->assertEquals($adminGroups['bar']['label'], $child->getLabel());
- // menu items
- $children = $child->getChildren();
- $this->assertCount(1, $children);
- $this->assertArrayHasKey('foo_admin_label', $children);
- $this->assertInstanceOf('Knp\Menu\MenuItem', $child['foo_admin_label']);
- $this->assertEquals('foo_admin_label', $child['foo_admin_label']->getLabel());
- }
- }
- public function testGetKnpMenuWithNoListRoute()
- {
- $adminGroups = array(
- 'bar' => array(
- 'label' => 'foo',
- 'icon' => '<i class="fa fa-edit"></i>',
- 'label_catalogue' => 'SonataAdminBundle',
- 'items' => array(
- array(
- 'admin' => 'sonata_admin_foo_service',
- 'label' => 'fooLabel',
- ),
- ),
- 'item_adds' => array(),
- 'roles' => array(),
- ),
- );
- $admin = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
- $admin->expects($this->once())
- ->method('hasRoute')
- ->with($this->equalTo('list'))
- ->will($this->returnValue(false))
- ;
- $this->preparePool($adminGroups, $admin);
- $menu = $this->builder->createSidebarMenu();
- $this->assertInstanceOf('Knp\Menu\ItemInterface', $menu);
- $this->assertArrayNotHasKey('bar', $menu->getChildren());
- $this->assertCount(0, $menu->getChildren());
- }
- public function testGetKnpMenuWithNotGrantedList()
- {
- $adminGroups = array(
- 'bar' => array(
- 'label' => 'foo',
- 'icon' => '<i class="fa fa-edit"></i>',
- 'label_catalogue' => 'SonataAdminBundle',
- 'items' => array(
- array(
- 'admin' => 'sonata_admin_foo_service',
- 'label' => 'fooLabel',
- ),
- ),
- 'item_adds' => array(),
- 'roles' => array(),
- ),
- );
- $admin = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
- $admin->expects($this->once())
- ->method('hasRoute')
- ->with($this->equalTo('list'))
- ->will($this->returnValue(true))
- ;
- $admin->expects($this->any())
- ->method('isGranted')
- ->with($this->equalTo('LIST'))
- ->will($this->returnValue(false))
- ;
- $this->preparePool($adminGroups, $admin);
- $menu = $this->builder->createSidebarMenu();
- $this->assertInstanceOf('Knp\Menu\ItemInterface', $menu);
- $this->assertArrayNotHasKey('bar', $menu->getChildren());
- $this->assertCount(0, $menu->getChildren());
- }
- public function testGetKnpMenuWithProvider()
- {
- $adminGroups = array(
- "bar" => array(
- "provider" => 'my_menu',
- "label_catalogue" => '',
- "icon" => '<i class="fa fa-edit"></i>',
- "roles" => array(),
- ),
- );
- $this->provider
- ->expects($this->once())
- ->method('get')
- ->with('my_menu')
- ->will($this->returnValue($this->factory->createItem('bar')->addChild('foo')->getParent()))
- ;
- $this->preparePool($adminGroups);
- $menu = $this->builder->createSidebarMenu();
- $this->assertInstanceOf('Knp\Menu\ItemInterface', $menu);
- $this->assertArrayHasKey('bar', $menu->getChildren());
- foreach ($menu->getChildren() as $key => $child) {
- $this->assertInstanceOf('Knp\Menu\MenuItem', $child);
- $this->assertEquals("bar", $child->getName());
- $this->assertEquals("bar", $child->getLabel());
- // menu items
- $children = $child->getChildren();
- $this->assertCount(1, $children);
- $this->assertArrayHasKey('foo', $children);
- $this->assertInstanceOf('Knp\Menu\MenuItem', $child['foo']);
- $this->assertEquals('foo', $child['foo']->getLabel());
- }
- }
- private function preparePool($adminGroups, $admin = null)
- {
- $this->pool->expects($this->once())
- ->method('getAdminGroups')
- ->will($this->returnValue($adminGroups))
- ;
- if (null !== $admin) {
- $this->pool->expects($this->once())
- ->method('getInstance')
- ->with($this->equalTo('sonata_admin_foo_service'))
- ->will($this->returnValue($admin))
- ;
- }
- }
- }
|