浏览代码

Merge pull request #348 from l3l0/add-tests

Add some unit tests
Thomas 13 年之前
父节点
当前提交
e0c3caf105
共有 3 个文件被更改,包括 264 次插入9 次删除
  1. 5 4
      Admin/Pool.php
  2. 228 3
      Tests/Admin/FieldDescriptionTest.php
  3. 31 2
      Tests/Admin/PoolTest.php

+ 5 - 4
Admin/Pool.php

@@ -46,9 +46,10 @@ class Pool
         $groups = $this->adminGroups;
 
         foreach ($this->adminGroups as $name => $adminGroup) {
-
-            foreach ($adminGroup['items'] as $key => $id) {
-                $groups[$name]['items'][$key] = $this->container->get($id);
+            if (isset($adminGroup['items'])) {
+                foreach ($adminGroup['items'] as $key => $id) {
+                    $groups[$name]['items'][$key] = $this->getInstance($id);
+                }
             }
 
             if (empty($groups[$name])) {
@@ -141,4 +142,4 @@ class Pool
     {
         return $this->adminClasses;
     }
-}
+}

+ 228 - 3
Tests/Admin/FieldDescriptionTest.php

@@ -25,7 +25,6 @@ class FieldDescriptionTest extends \PHPUnit_Framework_TestCase
             'misc'     => 'foobar',
         ));
 
-
         // test method shortcut
         $this->assertEquals(null, $field->getOption('template'));
         $this->assertEquals(null, $field->getOption('type'));
@@ -43,8 +42,8 @@ class FieldDescriptionTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(array('key1' => 'key_1', 'key2' => 'key_2'), $field->getOption('array'));
 
         $field->mergeOption('non_existant', array('key1' => 'key_1', 'key2' => 'key_2'));
-        $this->assertEquals(array('key1' => 'key_1', 'key2' => 'key_2'), $field->getOption('array'));
 
+        $this->assertEquals(array('key1' => 'key_1', 'key2' => 'key_2'), $field->getOption('array'));
 
         $field->mergeOptions(array('array' => array('key3' => 'key_3')));
 
@@ -110,9 +109,235 @@ class FieldDescriptionTest extends \PHPUnit_Framework_TestCase
 
     public function testCamelize()
     {
-
         $this->assertEquals('FooBar', FieldDescription::camelize('foo_bar'));
         $this->assertEquals('FooBar', FieldDescription::camelize('foo bar'));
         $this->assertEquals('FOoBar', FieldDescription::camelize('fOo bar'));
     }
+
+    public function testSetName()
+    {
+        $field = new FieldDescription();
+        $field->setName('New field description name');
+
+        $this->assertEquals($field->getName(), 'New field description name');
+    }
+
+    public function testSetNameSetFieldNameToo()
+    {
+        $field = new FieldDescription();
+        $field->setName('New field description name');
+
+        $this->assertEquals($field->getFieldName(), 'New field description name');
+    }
+
+    public function testSetNameDoesNotSetFieldNameWhenSetBefore()
+    {
+        $field = new FieldDescription();
+        $field->setFieldName('field name');
+        $field->setName('New field description name');
+
+        $this->assertEquals($field->getFieldName(), 'field name');
+    }
+
+    public function testGetParent()
+    {
+        $adminMock = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
+        $field = new FieldDescription();
+        $field->setParent($adminMock);
+
+        $this->assertSame($adminMock, $field->getParent());
+    }
+
+    public function testGetHelp()
+    {
+        $field = new FieldDescription();
+        $field->setHelp('help message');
+
+        $this->assertEquals($field->getHelp(), 'help message');
+    }
+
+    public function testGetAdmin()
+    {
+        $adminMock = $this->getMock('Sonata\AdminBundle\Admin\AdminInterface');
+        $field = new FieldDescription();
+        $field->setAdmin($adminMock);
+
+        $this->assertSame($adminMock, $field->getAdmin());
+    }
+
+    public function testGetAssociationAdmin()
+    {
+        $adminMock = $this->getMockBuilder('Sonata\AdminBundle\Admin\Admin')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $adminMock->expects($this->once())
+            ->method('setParentFieldDescription')
+            ->with($this->isInstanceOf('Sonata\AdminBundle\Admin\FieldDescriptionInterface'));
+
+        $field = new FieldDescription();
+        $field->setAssociationAdmin($adminMock);
+
+        $this->assertSame($adminMock, $field->getAssociationAdmin());
+    }
+
+    public function testHasAssociationAdmin()
+    {
+        $adminMock = $this->getMockBuilder('Sonata\AdminBundle\Admin\Admin')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $adminMock->expects($this->once())
+            ->method('setParentFieldDescription')
+            ->with($this->isInstanceOf('Sonata\AdminBundle\Admin\FieldDescriptionInterface'));
+
+        $field = new FieldDescription();
+
+        $this->assertFalse($field->hasAssociationAdmin());
+
+        $field->setAssociationAdmin($adminMock);
+
+        $this->assertTrue($field->hasAssociationAdmin());
+    }
+
+    public function testGetValue()
+    {
+        $mockedObject = $this->getMock('MockedTestObject', array('myMethod'));
+        $mockedObject->expects($this->once())
+            ->method('myMethod')
+            ->will($this->returnValue('myMethodValue'));
+
+        $field = new FieldDescription();
+        $field->setOption('code', 'myMethod');
+
+        $this->assertEquals($field->getValue($mockedObject), 'myMethodValue');
+    }
+
+    /**
+     * @expectedException Sonata\AdminBundle\Admin\NoValueException
+     */
+    public function testGetValueWhenCannotRetrieve()
+    {
+        $mockedObject = $this->getMock('MockedTestObject', array('myMethod'));
+        $mockedObject->expects($this->never())
+            ->method('myMethod')
+            ->will($this->returnValue('myMethodValue'));
+
+        $field = new FieldDescription();
+
+        $this->assertEquals($field->getValue($mockedObject), 'myMethodValue');
+    }
+
+    public function testGetAssociationMapping()
+    {
+        $assocationMapping = array(
+            'type'      => 'integer',
+            'fieldName' => 'position'
+        );
+
+        $field = new FieldDescription();
+        $field->setAssociationMapping($assocationMapping);
+
+        $this->assertEquals($assocationMapping, $field->getAssociationMapping());
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testSetAssociationMappingAllowOnlyForArray()
+    {
+        $field = new FieldDescription();
+        $field->setAssociationMapping('test');
+    }
+
+    /**
+     * @expectedException \RuntimeException
+     */
+    public function testSetFieldMappingAllowOnlyForArray()
+    {
+        $field = new FieldDescription();
+        $field->setFieldMapping('test');
+    }
+
+    public function testSetFieldMappingSetType()
+    {
+        $fieldMapping = array(
+            'type'         => 'integer',
+            'fieldName'    => 'position'
+        );
+
+        $field = new FieldDescription();
+        $field->setFieldMapping($fieldMapping);
+
+        $this->assertEquals('integer', $field->getType());
+    }
+
+    public function testSetFieldMappingSetMappingType()
+    {
+        $fieldMapping = array(
+            'type'         => 'integer',
+            'fieldName'    => 'position'
+        );
+
+        $field = new FieldDescription();
+        $field->setFieldMapping($fieldMapping);
+
+        $this->assertEquals('integer', $field->getMappingType());
+    }
+
+    public function testSetFieldMappingSetFieldName()
+    {
+        $fieldMapping = array(
+            'type'         => 'integer',
+            'fieldName'    => 'position'
+        );
+
+        $field = new FieldDescription();
+        $field->setFieldMapping($fieldMapping);
+
+        $this->assertEquals('position', $field->getFieldName());
+    }
+
+    public function testGetTargetEntity()
+    {
+        $assocationMapping = array(
+            'type'         => 'integer',
+            'fieldName'    => 'position',
+            'targetEntity' => 'someValue'
+        );
+
+        $field = new FieldDescription();
+
+        $this->assertNull($field->getTargetEntity());
+
+        $field->setAssociationMapping($assocationMapping);
+
+        $this->assertEquals('someValue', $field->getTargetEntity());
+    }
+
+    public function testIsIdentifierFromFieldMapping()
+    {
+        $fieldMapping = array(
+            'type'      => 'integer',
+            'fieldName' => 'position',
+            'id'        => 'someId' 
+        );
+
+        $field = new FieldDescription();
+        $field->setFieldMapping($fieldMapping);
+
+        $this->assertEquals('someId', $field->isIdentifier());
+    }
+
+    public function testGetFieldMapping()
+    {
+        $fieldMapping = array(
+            'type'      => 'integer',
+            'fieldName' => 'position',
+            'id'        => 'someId' 
+        );
+
+        $field = new FieldDescription();
+        $field->setFieldMapping($fieldMapping);
+
+        $this->assertEquals($fieldMapping, $field->getFieldMapping());
+    }
 }

+ 31 - 2
Tests/Admin/PoolTest.php

@@ -45,7 +45,8 @@ class PoolTest extends \PHPUnit_Framework_TestCase
         $this->pool->setAdminGroups(array(
             'adminGroup1' => array(
                 'items' => array('itemKey' => 'sonata.user.admin.group1')
-            )
+            ),
+            'adminGroup2' => array()
         ));
 
         $expectedOutput = array(
@@ -71,7 +72,30 @@ class PoolTest extends \PHPUnit_Framework_TestCase
 
     public function testGetAdminByAdminCode()
     {
-        $this->assertEquals('adminUserClass', $this->pool->getAdminByAdminCode('sonata.user.admin.group1'));
+        $this->assertEquals('adminUserClass', $this->pool->getAdminByAdminCode('sonata.news.admin.post'));
+    }
+
+    public function testGetAdminByAdminCodeForChildClass()
+    {
+        $adminMock = $this->getMockBuilder('Sonata\AdminBundle\Admin\Admin')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $adminMock->expects($this->any())
+            ->method('hasChild')
+            ->will($this->returnValue(true));
+        $adminMock->expects($this->once())
+            ->method('getChild')
+            ->with($this->equalTo('sonata.news.admin.comment'))
+            ->will($this->returnValue('commentAdminClass'));
+
+        $containerMock = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
+        $containerMock->expects($this->any())
+            ->method('get')
+            ->will($this->returnValue($adminMock));
+
+        $this->pool = new Pool($containerMock);
+
+        $this->assertEquals('commentAdminClass', $this->pool->getAdminByAdminCode('sonata.news.admin.post|sonata.news.admin.comment'));
     }
 
     public function testGetAdminClasses()
@@ -92,6 +116,11 @@ class PoolTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(array('sonata.user.admin.group1', 'sonata.user.admin.group2'), $this->pool->getAdminServiceIds());
     }
 
+    public function testGetContainer()
+    {
+        $this->assertInstanceOf('Symfony\Component\DependencyInjection\ContainerInterface', $this->pool->getContainer());
+    }
+
     /**
      * @return Symfony\Component\DependencyInjection\ContainerInterface - the mock of container interface
      */