Browse Source

Add BooleanFilterTest

Thomas Rabaix 13 years ago
parent
commit
8a8c084c11

+ 2 - 2
Filter/ORM/BooleanFilter.php

@@ -34,7 +34,7 @@ class BooleanFilter extends Filter
                    continue;
                 }
 
-                $values[] = $v ==  ((int)$value == BooleanType::TYPE_YES) ? 1 : 0;
+                $values[] = $v ==  ($value == BooleanType::TYPE_YES) ? 1 : 0;
             }
 
             if (count($values) == 0) {
@@ -50,7 +50,7 @@ class BooleanFilter extends Filter
             }
 
             $queryBuilder->andWhere(sprintf('%s.%s = :%s', $alias, $field, $this->getName()));
-            $queryBuilder->setParameter($this->getName(), ((int)$value == BooleanType::TYPE_YES) ? 1 : 0);
+            $queryBuilder->setParameter($this->getName(), ($value == BooleanType::TYPE_YES) ? 1 : 0);
         }
     }
 }

+ 88 - 0
Tests/Filter/ORM/BooleanFilterTest.php

@@ -0,0 +1,88 @@
+<?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\Filter\ORM;
+
+use Sonata\AdminBundle\Filter\ORM\BooleanFilter;
+use Sonata\AdminBundle\Form\Type\Filter\BooleanType;
+
+class BooleanFilterTest extends \PHPUnit_Framework_TestCase
+{
+    public function getFieldDescription(array $options)
+    {
+        $fieldDescription = $this->getMock('Sonata\AdminBundle\Admin\FieldDescriptionInterface');
+        $fieldDescription->expects($this->once())
+            ->method('getOptions')
+            ->will($this->returnValue($options));
+
+        $fieldDescription->expects($this->once())
+            ->method('getName')
+            ->will($this->returnValue('field_name'));
+
+        return $fieldDescription;
+    }
+
+    public function testFilterEmpty()
+    {
+        $filter = new BooleanFilter;
+        $filter->setFieldDescription($this->getFieldDescription(array('field_options' => array('class' => 'FooBar'))));
+
+        $builder = new QueryBuilder;
+
+        $filter->filter($builder, 'alias', 'field', null);
+        $filter->filter($builder, 'alias', 'field', '');
+        $filter->filter($builder, 'alias', 'field', 'test');
+        $filter->filter($builder, 'alias', 'field', false);
+
+        $filter->filter($builder, 'alias', 'field', array());
+        $filter->filter($builder, 'alias', 'field', array(null, 'test'));
+
+        $this->assertEquals(array(), $builder->query);
+    }
+
+    public function testFilterNo()
+    {
+        $filter = new BooleanFilter;
+        $filter->setFieldDescription($this->getFieldDescription(array('field_options' => array('class' => 'FooBar'))));
+
+        $builder = new QueryBuilder;
+
+        $filter->filter($builder, 'alias', 'field', BooleanType::TYPE_NO);
+
+        $this->assertEquals(array('alias.field = :field_name'), $builder->query);
+        $this->assertEquals(array('field_name' => 0), $builder->parameters);
+    }
+
+    public function testFilterYes()
+    {
+        $filter = new BooleanFilter;
+        $filter->setFieldDescription($this->getFieldDescription(array('field_options' => array('class' => 'FooBar'))));
+
+        $builder = new QueryBuilder;
+
+        $filter->filter($builder, 'alias', 'field', BooleanType::TYPE_YES);
+
+        $this->assertEquals(array('alias.field = :field_name'), $builder->query);
+        $this->assertEquals(array('field_name' => 1), $builder->parameters);
+    }
+
+    public function testFilterArray()
+    {
+        $filter = new BooleanFilter;
+        $filter->setFieldDescription($this->getFieldDescription(array('field_options' => array('class' => 'FooBar'))));
+
+        $builder = new QueryBuilder;
+
+        $filter->filter($builder, 'alias', 'field', array(BooleanType::TYPE_NO));
+
+        $this->assertEquals(array('in_alias.field', 'alias.field IN ("0")'), $builder->query);
+    }
+}

+ 13 - 0
Tests/Filter/ORM/QueryBuilder.php

@@ -29,4 +29,17 @@ class QueryBuilder
     {
         $this->query[] = $query;
     }
+
+    public function expr()
+    {
+        return $this;
+    }
+
+    public function in($name, $value)
+    {
+        $this->query[] = 'in_'.$name;
+        $this->parameters[] = 'in_'.$value;
+
+        return sprintf('%s IN ("%s")', $name, implode(',', $value));
+    }
 }