CallbackFilterTest.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. /*
  3. * This file is part of the Sonata package.
  4. *
  5. * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Sonata\DoctrineORMAdminBundle\Tests\Filter;
  11. use Sonata\DoctrineORMAdminBundle\Filter\CallbackFilter;
  12. use Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery;
  13. class CallbackFilterTest extends \PHPUnit_Framework_TestCase
  14. {
  15. public function testFilterClosure()
  16. {
  17. $builder = new ProxyQuery(new QueryBuilder);
  18. $filter = new CallbackFilter;
  19. $filter->initialize('field_name', array(
  20. 'callback' => function($builder, $alias, $field, $value) {
  21. $builder->andWhere(sprintf('CUSTOM QUERY %s.%s', $alias, $field));
  22. $builder->setParameter('value', $value);
  23. return true;
  24. }
  25. ));
  26. $filter->filter($builder, 'alias', 'field', 'myValue');
  27. $this->assertEquals(array('CUSTOM QUERY alias.field'), $builder->query);
  28. $this->assertEquals(array('value' => 'myValue'), $builder->parameters);
  29. $this->assertEquals(true, $filter->isActive());
  30. }
  31. public function testFilterMethod()
  32. {
  33. $builder = new ProxyQuery(new QueryBuilder);
  34. $filter = new CallbackFilter;
  35. $filter->initialize('field_name', array(
  36. 'callback' => array($this, 'customCallback')
  37. ));
  38. $filter->filter($builder, 'alias', 'field', 'myValue');
  39. $this->assertEquals(array('CUSTOM QUERY alias.field'), $builder->query);
  40. $this->assertEquals(array('value' => 'myValue'), $builder->parameters);
  41. $this->assertEquals(true, $filter->isActive());
  42. }
  43. public function customCallback($builder, $alias, $field, $value) {
  44. $builder->andWhere(sprintf('CUSTOM QUERY %s.%s', $alias, $field));
  45. $builder->setParameter('value', $value);
  46. return true;
  47. }
  48. /**
  49. * @expectedException RuntimeException
  50. */
  51. public function testFilterException()
  52. {
  53. $builder = new ProxyQuery(new QueryBuilder);
  54. $filter = new CallbackFilter;
  55. $filter->initialize('field_name', array());
  56. $filter->filter($builder, 'alias', 'field', 'myValue');
  57. }
  58. }