Romain Mouillard 10 yıl önce
ebeveyn
işleme
15aaec95aa

+ 1 - 1
DependencyInjection/Configuration.php

@@ -100,7 +100,7 @@ class Configuration implements ConfigurationInterface
                                     ->ifArray()
                                     ->then(function($items) {
                                         if (isset($items['provider'])) {
-                                            $disallowedItems = array('items', 'label', 'label_catalogue');
+                                            $disallowedItems = array('items', 'label');
                                             foreach($disallowedItems as $item) {
                                                 if (isset($items[$item])) {
                                                     throw new \InvalidArgumentException(sprintf('The config value "%s" cannot be used alongside "provider" config value', $item));

+ 11 - 0
Tests/DependencyInjection/Compiler/AddDependencyCallsCompilerPassTest.php

@@ -106,6 +106,10 @@ class AddDependencyCallsCompilerPassTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(array('articleId' => 3) , $dashboardGroupsSettings['sonata_group_one']['items'][2]['route_params']);
         $this->assertContains('sonata_news_admin', $dashboardGroupsSettings['sonata_group_one']['item_adds']);
         $this->assertContains('ROLE_ONE', $dashboardGroupsSettings['sonata_group_one']['roles']);
+
+        $this->assertArrayHasKey('sonata_group_two', $dashboardGroupsSettings);
+        $this->assertArrayHasKey('provider', $dashboardGroupsSettings['sonata_group_two']);
+        $this->assertContains('my_menu', $dashboardGroupsSettings['sonata_group_two']['provider']);
     }
 
     /**
@@ -148,6 +152,10 @@ class AddDependencyCallsCompilerPassTest extends \PHPUnit_Framework_TestCase
         $this->assertFalse(in_array('sonata_article_admin', $adminGroups['sonata_group_one']['items']));
         $this->assertContains('ROLE_ONE', $adminGroups['sonata_group_one']['roles']);
 
+        $this->assertArrayHasKey('sonata_group_two', $adminGroups);
+        $this->assertArrayHasKey('provider', $adminGroups['sonata_group_two']);
+        $this->assertContains('my_menu', $adminGroups['sonata_group_two']['provider']);
+
         $this->assertArrayHasKey('Sonata\AdminBundle\Tests\DependencyInjection\Post', $adminClasses);
         $this->assertContains('sonata_post_admin', $adminClasses['Sonata\AdminBundle\Tests\DependencyInjection\Post']);
         $this->assertArrayHasKey('Sonata\AdminBundle\Tests\DependencyInjection\Article', $adminClasses);
@@ -286,6 +294,9 @@ class AddDependencyCallsCompilerPassTest extends \PHPUnit_Framework_TestCase
                         ),
                         'roles' => array('ROLE_ONE'),
                     ),
+                    'sonata_group_two' => array(
+                        'provider' => 'my_menu',
+                    ),
                 )
             ),
             'admin_services' => array(

+ 40 - 0
Tests/Twig/Extension/SonataAdminExtensionTest.php

@@ -11,6 +11,8 @@
 
 namespace Sonata\AdminBundle\Tests\Twig\Extension;
 
+use Knp\Menu\MenuFactory;
+use Knp\Menu\MenuItem;
 use Sonata\AdminBundle\Admin\Pool;
 use Sonata\AdminBundle\Admin\FieldDescriptionInterface;
 use Sonata\AdminBundle\Admin\AdminInterface;
@@ -95,7 +97,13 @@ class SonataAdminExtensionTest extends \PHPUnit_Framework_TestCase
 
         $this->logger = $this->getMock('Psr\Log\LoggerInterface');
 
+        $menu = new MenuItem('bar', new MenuFactory());
+        $menu->addChild('foo');
         $this->helper = $this->getMockBuilder('Knp\Menu\Twig\Helper')->disableOriginalConstructor()->getMock();
+        $this->helper->expects($this->any())
+            ->method('get')
+            ->with('my_menu')
+            ->willReturn($menu);
 
         $this->twigExtension = new SonataAdminExtension($this->pool, $this->router, $this->helper, $this->logger);
 
@@ -1041,4 +1049,36 @@ class SonataAdminExtensionTest extends \PHPUnit_Framework_TestCase
         $this->assertArrayNotHasKey('bar', $menu->getChildren());
         $this->assertCount(0, $menu->getChildren());
     }
+
+    public function testGetKnpMenuWithProvider()
+    {
+        $request = $this->getMock('Symfony\Component\HttpFoundation\Request');
+
+        $adminGroups = array(
+            "bar" => array(
+                "provider"        => 'my_menu',
+                "label_catalogue" => '',
+                "icon"            => '<i class="fa fa-edit"></i>',
+                "roles"           => array(),
+            ),
+        );
+        $this->pool->setAdminGroups($adminGroups);
+        $menu = $this->twigExtension->getKnpMenu($request);
+
+        $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());
+        }
+    }
 }