Browse Source

Added tests for Sonata\AdminBundle\Admin\Admin class

Fabien Pennequin 14 years ago
parent
commit
227e7f6cc3
2 changed files with 208 additions and 8 deletions
  1. 5 8
      Admin/Admin.php
  2. 203 0
      Tests/Admin/AdminTest.php

+ 5 - 8
Admin/Admin.php

@@ -305,7 +305,6 @@ abstract class Admin implements AdminInterface
      */
     protected function configureFormFields(FormMapper $form)
     {
-
     }
 
     /**
@@ -315,12 +314,10 @@ abstract class Admin implements AdminInterface
      */
     protected function configureListFields(ListMapper $list)
     {
-
     }
 
     protected function configureDatagridFilters(DatagridMapper $filter)
     {
-
     }
 
     /**
@@ -340,7 +337,7 @@ abstract class Admin implements AdminInterface
         
         if ($this->parentAssociationMapping) {
             if (!isset($this->getClassMetaData()->associationMappings[$this->parentAssociationMapping])) {
-                throw new \RuntimeException(sprintf('The value set to `relatedReflectionProperty` refer to a non existent association', $this->relatedReflectionProperty));
+                throw new \RuntimeException(sprintf('The value set to `parentAssociationMapping` refer to a non existent association', $this->parentAssociationMapping));
             }
             $this->parentAssociationMapping = $this->getClassMetaData()->associationMappings[$this->parentAssociationMapping];
         }
@@ -1367,14 +1364,14 @@ abstract class Admin implements AdminInterface
     }
 
     /**
-     * return true or false if an Admin child exists for the given $code
+     * Returns true or false if an Admin child exists for the given $code
      *
-     * @param string $code
-     * @return Admin|bool
+     * @param string $code Admin code
+     * @return bool True if child exist, false otherwise
      */
     public function hasChild($code)
     {
-        return isset($this->children[$code]) ? $this->children[$code] : false;
+        return isset($this->children[$code]);
     }
 
     /**

+ 203 - 0
Tests/Admin/AdminTest.php

@@ -0,0 +1,203 @@
+<?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\Admin;
+
+use Sonata\AdminBundle\Admin\Admin;
+
+class PostAdmin extends Admin
+{
+    protected $metadataClass = null;
+
+    public function setParentAssociationMapping($associationMapping)
+    {
+        $this->parentAssociationMapping = $associationMapping;
+    }
+
+    public function setClassMetaData($classMetaData)
+    {
+        $this->classMetaData = $classMetaData;
+    }
+
+    public function getClassMetaData()
+    {
+        if ($this->classMetaData) {
+            return $this->classMetaData;
+        }
+
+        return parent::getClassMetaData();
+    }
+}
+
+class CommentAdmin extends Admin
+{
+    public function setClassnameLabel($label)
+    {
+        $this->classnameLabel = $label;
+    }
+}
+
+class AdminTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @covers Sonata\AdminBundle\Admin\Admin::__construct
+     */
+    public function testConstructor()
+    {
+        $class = 'Application\Sonata\NewsBundle\Entity\Post';
+        $baseControllerName = 'SonataNewsBundle:PostAdmin';
+
+        $admin = new PostAdmin($class, $baseControllerName);
+        $this->assertInstanceOf('Sonata\AdminBundle\Admin\Admin', $admin);
+        $this->assertEquals($class, $admin->getClass());
+        $this->assertEquals($baseControllerName, $admin->getBaseControllerName());
+    }
+
+    /**
+     * @covers Sonata\AdminBundle\Admin\Admin::hasChild
+     * @covers Sonata\AdminBundle\Admin\Admin::addChild
+     * @covers Sonata\AdminBundle\Admin\Admin::getChild
+     * @covers Sonata\AdminBundle\Admin\Admin::isChild
+     * @covers Sonata\AdminBundle\Admin\Admin::hasChildren
+     * @covers Sonata\AdminBundle\Admin\Admin::getChildren
+     */
+    public function testChildren()
+    {
+        $postAdmin = new PostAdmin('Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+        $postAdmin->setCode('post');
+        $this->assertFalse($postAdmin->hasChildren());
+        $this->assertFalse($postAdmin->hasChild('comment'));
+
+        $commentAdmin = new CommentAdmin('Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
+        $postAdmin->addChild('comment', $commentAdmin);
+        $this->assertTrue($postAdmin->hasChildren());
+        $this->assertTrue($postAdmin->hasChild('comment'));
+
+        $this->assertEquals('comment', $postAdmin->getChild('comment')->getCode());
+        $this->assertEquals('post|comment', $postAdmin->getChild('comment')->getBaseCodeRoute());
+        $this->assertEquals($postAdmin, $postAdmin->getChild('comment')->getParent());
+
+        $this->assertFalse($postAdmin->isChild());
+        $this->assertTrue($commentAdmin->isChild());
+
+        $this->assertEquals(array('comment' => $commentAdmin), $postAdmin->getChildren());
+    }
+
+    /**
+     * @covers Sonata\AdminBundle\Admin\Admin::configure
+     */
+    public function testConfigure()
+    {
+        $admin = new PostAdmin('Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+        $this->assertTrue($admin->getUniqid() == "");
+
+        $admin->configure();
+        $this->assertFalse($admin->getUniqid() == "");
+        $this->assertEquals('post', $admin->getClassnameLabel());
+
+
+        $admin = new CommentAdmin('Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
+        $admin->setClassnameLabel('postcomment');
+
+        $admin->configure();
+        $this->assertEquals('postcomment', $admin->getClassnameLabel());
+    }
+
+    public function testConfigureWithValidParentAssociationMapping()
+    {
+        $admin = new PostAdmin('Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+        $admin->setParentAssociationMapping('Category');
+
+        $parentAssociationMapping = 'Application\Sonata\NewsBundle\Entity\Category';
+        $metadataClass = new \stdClass();
+        $metadataClass->associationMappings = array('Category' => $parentAssociationMapping);
+        $admin->setClassMetaData($metadataClass);
+
+        $admin->configure();
+        $this->assertEquals($parentAssociationMapping, $admin->getParentAssociationMapping());
+    }
+
+    /**
+     * @expectedException RuntimeException
+     */
+    public function testConfigureWithInvalidParentAssociationMapping()
+    {
+        $admin = new PostAdmin('Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+        $admin->setParentAssociationMapping('Category');
+        $admin->setClassMetaData(new \stdClass());
+
+        $admin->configure();
+    }
+
+
+    public function testGetBaseRoutePattern()
+    {
+        $admin = new PostAdmin('Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+        $this->assertEquals('/sonata/news/post', $admin->getBaseRoutePattern());
+    }
+
+    public function testGetBaseRoutePatternWithChildAdmin()
+    {
+        $postAdmin = new PostAdmin('Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+        $commentAdmin = new CommentAdmin('Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
+        $commentAdmin->setParent($postAdmin);
+
+        $this->assertEquals('/sonata/news/post/{id}/comment', $commentAdmin->getBaseRoutePattern());
+    }
+
+    /**
+     * @expectedException RuntimeException
+     */
+    public function testGetBaseRoutePatternWithUnreconizedClassname()
+    {
+        $admin = new PostAdmin('NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+        $admin->getBaseRoutePattern();
+    }
+
+
+    public function testGetBaseRouteName()
+    {
+        $admin = new PostAdmin('Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+        $this->assertEquals('admin_sonata_news_post', $admin->getBaseRouteName());
+    }
+
+    public function testGetBaseRouteNameWithChildAdmin()
+    {
+        $postAdmin = new PostAdmin('Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+        $commentAdmin = new CommentAdmin('Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
+        $commentAdmin->setParent($postAdmin);
+
+        $this->assertEquals('admin_sonata_news_post_comment', $commentAdmin->getBaseRouteName());
+    }
+
+    /**
+     * @expectedException RuntimeException
+     */
+    public function testGetBaseRouteNameWithUnreconizedClassname()
+    {
+        $admin = new PostAdmin('NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+        $admin->getBaseRouteName();
+    }
+
+    /**
+     * @covers Sonata\AdminBundle\Admin\Admin::setUniqid
+     * @covers Sonata\AdminBundle\Admin\Admin::getUniqid
+     */
+    public function testUniqid()
+    {
+        $admin = new PostAdmin('NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
+
+        $uniqid = uniqid();
+        $admin->setUniqid($uniqid);
+
+        $this->assertEquals($uniqid, $admin->getUniqid());
+    }
+}