Browse Source

Use admin entry as service ID (#3903)

In df42796fde5d850f04440fb344cac25caad25268, the admin groups variable was
changed from containing only service IDs to containing an array of options
per item.

To get the service ID, the 'admin' entry should be used.
Wouter J 9 năm trước cách đây
mục cha
commit
c7e103c45b
2 tập tin đã thay đổi với 45 bổ sung16 xóa
  1. 2 2
      Admin/Pool.php
  2. 43 14
      Tests/Admin/PoolTest.php

+ 2 - 2
Admin/Pool.php

@@ -169,8 +169,8 @@ class Pool
             return $admins;
         }
 
-        foreach ($this->adminGroups[$group]['items'] as $id) {
-            $admins[] = $this->getInstance($id);
+        foreach ($this->adminGroups[$group]['items'] as $item) {
+            $admins[] = $this->getInstance($item['admin']);
         }
 
         return $admins;

+ 43 - 14
Tests/Admin/PoolTest.php

@@ -35,7 +35,7 @@ class PoolTest extends \PHPUnit_Framework_TestCase
 
         $expectedOutput = array(
             'adminGroup1' => array(
-                'sonata.user.admin.group1' => 'adminUserClass',
+                'sonata.user.admin.group1' => 'sonata_user_admin_group1_AdminClass',
             ),
         );
 
@@ -74,13 +74,13 @@ class PoolTest extends \PHPUnit_Framework_TestCase
 
         $pool->setAdminGroups(array(
             'adminGroup1' => array(
-                'items' => array('itemKey' => array('admin' => 'sonata.user.admin.group1', 'label' => '', 'route' => '', 'route_params' => array())),
+                'items' => array('itemKey' => $this->getItemArray('sonata.user.admin.group1')),
             ),
             'adminGroup2' => array(
-                'items' => array('itemKey' => array('admin' => 'sonata.user.admin.group2', 'label' => '', 'route' => '', 'route_params' => array())),
+                'items' => array('itemKey' => $this->getItemArray('sonata.user.admin.group2')),
             ),
             'adminGroup3' => array(
-                'items' => array('itemKey' => array('admin' => 'sonata.user.admin.group3', 'label' => '', 'route' => '', 'route_params' => array())),
+                'items' => array('itemKey' => $this->getItemArray('sonata.user.admin.group3')),
             ),
         ));
 
@@ -115,12 +115,22 @@ class PoolTest extends \PHPUnit_Framework_TestCase
     {
         $this->pool->setAdminServiceIds(array('sonata.admin1', 'sonata.admin2', 'sonata.admin3'));
         $this->pool->setAdminGroups(array(
-            'adminGroup1' => array('items' => array('sonata.admin1', 'sonata.admin2')),
-            'adminGroup2' => array('items' => array('sonata.admin3')),
+            'adminGroup1' => array(
+                'items' => array(
+                    $this->getItemArray('sonata.admin1'),
+                    $this->getItemArray('sonata.admin2'),
+                ),
+            ),
+            'adminGroup2' => array(
+                'items' => array($this->getItemArray('sonata.admin3')),
+            ),
         ));
 
-        $this->assertCount(2, $this->pool->getAdminsByGroup('adminGroup1'));
-        $this->assertCount(1, $this->pool->getAdminsByGroup('adminGroup2'));
+        $this->assertEquals(array(
+            'sonata_admin1_AdminClass',
+            'sonata_admin2_AdminClass',
+        ), $this->pool->getAdminsByGroup('adminGroup1'));
+        $this->assertEquals(array('sonata_admin3_AdminClass'), $this->pool->getAdminsByGroup('adminGroup2'));
     }
 
     public function testGetAdminForClassWhenAdminClassIsNotSet()
@@ -146,17 +156,23 @@ class PoolTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetAdminForClassWithTooManyRegisteredAdmin()
     {
-        $this->pool->setAdminClasses(array('someclass' => array('sonata.user.admin.group1', 'sonata.user.admin.group2')));
+        $this->pool->setAdminClasses(array(
+            'someclass' => array('sonata.user.admin.group1', 'sonata.user.admin.group2'),
+        ));
+
         $this->assertTrue($this->pool->hasAdminByClass('someclass'));
-        $this->assertSame('adminUserClass', $this->pool->getAdminByClass('someclass'));
+        $this->pool->getAdminByClass('someclass');
     }
 
     public function testGetAdminForClassWhenAdminClassIsSet()
     {
         $this->pool->setAdminServiceIds(array('sonata.user.admin.group1'));
-        $this->pool->setAdminClasses(array('someclass' => array('sonata.user.admin.group1')));
+        $this->pool->setAdminClasses(array(
+            'someclass' => array('sonata.user.admin.group1'),
+        ));
+
         $this->assertTrue($this->pool->hasAdminByClass('someclass'));
-        $this->assertSame('adminUserClass', $this->pool->getAdminByClass('someclass'));
+        $this->assertSame('sonata_user_admin_group1_AdminClass', $this->pool->getAdminByClass('someclass'));
     }
 
     /**
@@ -171,7 +187,8 @@ class PoolTest extends \PHPUnit_Framework_TestCase
     public function testGetAdminByAdminCode()
     {
         $this->pool->setAdminServiceIds(array('sonata.news.admin.post'));
-        $this->assertSame('adminUserClass', $this->pool->getAdminByAdminCode('sonata.news.admin.post'));
+
+        $this->assertSame('sonata_news_admin_post_AdminClass', $this->pool->getAdminByAdminCode('sonata.news.admin.post'));
     }
 
     public function testGetAdminByAdminCodeForChildClass()
@@ -261,8 +278,20 @@ class PoolTest extends \PHPUnit_Framework_TestCase
         $containerMock = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
         $containerMock->expects($this->any())
             ->method('get')
-            ->will($this->returnValue('adminUserClass'));
+            ->will($this->returnCallback(function ($serviceId) {
+                return str_replace('.', '_', $serviceId).'_AdminClass';
+            }));
 
         return $containerMock;
     }
+
+    private function getItemArray($serviceId)
+    {
+        return array(
+            'admin' => $serviceId,
+            'label' => '',
+            'route' => '',
+            'route_params' => array(),
+        );
+    }
 }