Browse Source

fix issue with persistent parameters

Thomas Rabaix 11 years ago
parent
commit
54310ffa28
3 changed files with 48 additions and 2 deletions
  1. 7 1
      Admin/Admin.php
  2. 3 1
      Admin/AdminExtension.php
  3. 38 0
      Tests/Admin/AdminTest.php

+ 7 - 1
Admin/Admin.php

@@ -1923,7 +1923,13 @@ abstract class Admin implements AdminInterface, DomainObjectInterface
     {
         $parameters = array();
         foreach ($this->getExtensions() as $extension) {
-            $parameters = array_merge($parameters, $extension->getPersistentParameters($this));
+            $params = $extension->getPersistentParameters($this);
+
+            if (!is_array($params)) {
+                throw new \RuntimeException(sprintf('The %s::getPersistentParameters must return an array', get_class($extension)));
+            }
+
+            $parameters = array_merge($parameters, $params);
         }
 
         return $parameters;

+ 3 - 1
Admin/AdminExtension.php

@@ -87,7 +87,9 @@ abstract class AdminExtension implements AdminExtensionInterface
      * {@inheritdoc}
      */
     public function getPersistentParameters(AdminInterface $admin)
-    {}
+    {
+        return array();
+    }
 
     /**
      * {@inheritdoc}

+ 38 - 0
Tests/Admin/AdminTest.php

@@ -1025,4 +1025,42 @@ class AdminTest extends \PHPUnit_Framework_TestCase
         $admin->setModelManager($modelManager);
         $this->assertSame(array('foo', 'bar'), $admin->getExportFields());
     }
+
+    public function testGetPersistentParametersWithNoExtension()
+    {
+        $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+
+        $this->assertEmpty($admin->getPersistentParameters());
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testGetPersistentParametersWithInvalidExtension()
+    {
+        $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+
+        $extension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
+        $extension->expects($this->once())->method('getPersistentParameters')->will($this->returnValue(null));
+
+        $admin->addExtension($extension);
+
+        $admin->getPersistentParameters();
+    }
+
+    public function testGetPersistentParametersWithValidExtension()
+    {
+        $expected = array(
+            'context' => 'foobar'
+        );
+
+        $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+
+        $extension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
+        $extension->expects($this->once())->method('getPersistentParameters')->will($this->returnValue($expected));
+
+        $admin->addExtension($extension);
+
+        $this->assertEquals($expected, $admin->getPersistentParameters());
+    }
 }