Hugo Briand %!s(int64=11) %!d(string=hai) anos
pai
achega
9efa7f5e00
Modificáronse 2 ficheiros con 41 adicións e 1 borrados
  1. 2 1
      Admin/Admin.php
  2. 39 0
      Tests/Admin/AdminTest.php

+ 2 - 1
Admin/Admin.php

@@ -1005,6 +1005,7 @@ abstract class Admin implements AdminInterface, DomainObjectInterface
      */
      */
     public function getClass()
     public function getClass()
     {
     {
+        // see https://github.com/sonata-project/SonataCoreBundle/commit/247eeb0a7ca7211142e101754769d70bc402a5b4
         if ($this->hasSubject() && is_object($this->getSubject())) {
         if ($this->hasSubject() && is_object($this->getSubject())) {
             return ClassUtils::getClass($this->getSubject());
             return ClassUtils::getClass($this->getSubject());
         }
         }
@@ -1013,7 +1014,7 @@ abstract class Admin implements AdminInterface, DomainObjectInterface
             if (count($this->getSubClasses()) > 0) {
             if (count($this->getSubClasses()) > 0) {
                 $subject = $this->getSubject();
                 $subject = $this->getSubject();
 
 
-                if ($subject && is_object($this->getSubject())) {
+                if ($subject && is_object($subject)) {
                     return ClassUtils::getClass($subject);
                     return ClassUtils::getClass($subject);
                 }
                 }
             }
             }

+ 39 - 0
Tests/Admin/AdminTest.php

@@ -48,6 +48,45 @@ class AdminTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($baseControllerName, $admin->getBaseControllerName());
         $this->assertEquals($baseControllerName, $admin->getBaseControllerName());
     }
     }
 
 
+    public function testGetClass()
+    {
+        $class = 'Application\Sonata\NewsBundle\Entity\Post';
+        $baseControllerName = 'SonataNewsBundle:PostAdmin';
+
+        $admin = new PostAdmin('sonata.post.admin.post', $class, $baseControllerName);
+
+        $testObject = new \stdClass();
+        $admin->setSubject($testObject);
+        $this->assertEquals('stdClass', $admin->getClass());
+
+        $admin->setSubClasses(array('foo'));
+        $this->assertEquals('stdClass', $admin->getClass());
+
+        $admin->setSubject(null);
+        $admin->setSubClasses(array());
+        $this->assertEquals($class, $admin->getClass());
+
+        $admin->setSubClasses(array('foo' => 'bar'));
+        $admin->setRequest(new Request(array('subclass' => 'foo')));
+        $this->assertEquals('bar', $admin->getClass());
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     * @expectedExceptionMessage Feature not implemented: an embedded admin cannot have subclass
+     */
+    public function testGetClassException()
+    {
+        $class = 'Application\Sonata\NewsBundle\Entity\Post';
+        $baseControllerName = 'SonataNewsBundle:PostAdmin';
+
+        $admin = new PostAdmin('sonata.post.admin.post', $class, $baseControllerName);
+        $admin->setParentFieldDescription(new FieldDescription());
+        $admin->setSubClasses(array('foo' => 'bar'));
+        $admin->setRequest(new Request(array('subclass' => 'foo')));
+        $admin->getClass();
+    }
+
     public function testGetBreadCrumbs()
     public function testGetBreadCrumbs()
     {
     {
         $class = 'Application\Sonata\NewsBundle\Entity\Post';
         $class = 'Application\Sonata\NewsBundle\Entity\Post';