Skip to content

Commit

Permalink
Check query builder in filter tests
Browse files Browse the repository at this point in the history
  • Loading branch information
franmomu committed Nov 20, 2019
1 parent 4fe8ef8 commit 3e4dba6
Show file tree
Hide file tree
Showing 7 changed files with 203 additions and 31 deletions.
23 changes: 23 additions & 0 deletions tests/Filter/BooleanFilterTest.php
Expand Up @@ -26,6 +26,11 @@ public function testFilterEmpty()

$builder = new ProxyQuery($this->getQueryBuilder());

$builder->getQueryBuilder()
->expects($this->never())
->method('field')
;

$filter->filter($builder, 'alias', 'field', null);
$filter->filter($builder, 'alias', 'field', '');
$filter->filter($builder, 'alias', 'field', 'test');
Expand All @@ -44,6 +49,12 @@ public function testFilterNo()

$builder = new ProxyQuery($this->getQueryBuilder());

$builder->getQueryBuilder()
->expects($this->once())
->method('equals')
->with(false)
;

$filter->filter($builder, 'alias', 'field', ['type' => null, 'value' => BooleanType::TYPE_NO]);

$this->assertTrue($filter->isActive());
Expand All @@ -56,6 +67,12 @@ public function testFilterYes()

$builder = new ProxyQuery($this->getQueryBuilder());

$builder->getQueryBuilder()
->expects($this->once())
->method('equals')
->with(true)
;

$filter->filter($builder, 'alias', 'field', ['type' => null, 'value' => BooleanType::TYPE_YES]);

$this->assertTrue($filter->isActive());
Expand All @@ -68,6 +85,12 @@ public function testFilterArray()

$builder = new ProxyQuery($this->getQueryBuilder());

$builder->getQueryBuilder()
->expects($this->once())
->method('in')
->with([false])
;

$filter->filter($builder, 'alias', 'field', ['type' => null, 'value' => [BooleanType::TYPE_NO]]);

$this->assertTrue($filter->isActive());
Expand Down
23 changes: 23 additions & 0 deletions tests/Filter/ChoiceFilterTest.php
Expand Up @@ -26,6 +26,11 @@ public function testFilterEmpty()

$builder = new ProxyQuery($this->getQueryBuilder());

$builder->getQueryBuilder()
->expects($this->never())
->method('field')
;

$filter->filter($builder, 'alias', 'field', null);
$filter->filter($builder, 'alias', 'field', 'all');
$filter->filter($builder, 'alias', 'field', []);
Expand All @@ -40,6 +45,12 @@ public function testFilterArray()

$builder = new ProxyQuery($this->getQueryBuilder());

$builder->getQueryBuilder()
->expects($this->once())
->method('in')
->with(['1', '2'])
;

$filter->filter($builder, 'alias', 'field', ['type' => ChoiceType::TYPE_CONTAINS, 'value' => ['1', '2']]);

$this->assertTrue($filter->isActive());
Expand All @@ -52,6 +63,12 @@ public function testFilterScalar()

$builder = new ProxyQuery($this->getQueryBuilder());

$builder->getQueryBuilder()
->expects($this->once())
->method('equals')
->with('1')
;

$filter->filter($builder, 'alias', 'field', ['type' => ChoiceType::TYPE_CONTAINS, 'value' => '1']);

$this->assertTrue($filter->isActive());
Expand All @@ -64,6 +81,12 @@ public function testFilterZero()

$builder = new ProxyQuery($this->getQueryBuilder());

$builder->getQueryBuilder()
->expects($this->once())
->method('equals')
->with('0')
;

$filter->filter($builder, 'alias', 'field', ['type' => ChoiceType::TYPE_CONTAINS, 'value' => 0]);

$this->assertTrue($filter->isActive());
Expand Down
8 changes: 2 additions & 6 deletions tests/Filter/FilterTest.php
Expand Up @@ -17,6 +17,7 @@
use Doctrine\ODM\MongoDB\Query\Builder;
use PHPUnit\Framework\TestCase;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Sonata\DoctrineMongoDBAdminBundle\Datagrid\ProxyQuery;
use Sonata\DoctrineMongoDBAdminBundle\Filter\Filter;
use Symfony\Component\Form\Extension\Core\Type\TextType;

Expand All @@ -32,7 +33,7 @@ class FilterTest_Filter extends Filter
*/
public function filter(ProxyQueryInterface $queryBuilder, $alias, $field, $value)
{
// TODO: Implement filter() method.
$queryBuilder->field($field)->equals($value);
}

public function getDefaultOptions()
Expand All @@ -47,11 +48,6 @@ public function getRenderSettings()
'options' => $this->getFieldOptions(),
]];
}

public function testAssociation(ProxyQueryInterface $queryBuilder, $value)
{
return $this->association($queryBuilder, $value);
}
}

class FilterTest extends TestCase
Expand Down
17 changes: 8 additions & 9 deletions tests/Filter/FilterWithQueryBuilderTest.php
Expand Up @@ -14,29 +14,28 @@
namespace Sonata\DoctrineMongoDBAdminBundle\Tests\Filter;

use Doctrine\ODM\MongoDB\Query\Builder;
use Doctrine\ODM\MongoDB\Query\Expr;
use PHPUnit\Framework\TestCase;

abstract class FilterWithQueryBuilderTest extends TestCase
{
private $queryBuilder = null;
private $expr = null;
private $queryBuilder;
private $expr;

public function setUp()
{
$this->queryBuilder = $this->createMock('Doctrine\ODM\MongoDB\Query\Builder');
$this->queryBuilder = $this->createMock(Builder::class);
$this->queryBuilder
->expects($this->any())
->method('field')
->willReturnSelf()
->method('field')
->with('field')
->willReturnSelf()
;
$this->expr = $this->createMock('Doctrine\ODM\MongoDB\Query\Expr');
$this->expr = $this->createMock(Expr::class);
$this->expr
->expects($this->any())
->method('field')
->willReturnSelf()
;
$this->queryBuilder
->expects($this->any())
->method('expr')
->willReturn($this->expr)
;
Expand Down
76 changes: 63 additions & 13 deletions tests/Filter/ModelFilterTest.php
Expand Up @@ -14,22 +14,37 @@
namespace Sonata\DoctrineMongoDBAdminBundle\Tests\Filter;

use Doctrine\ODM\MongoDB\Mapping\ClassMetadata;
use MongoDB\BSON\ObjectId;
use Doctrine\ODM\MongoDB\Query\Builder;
use PHPUnit\Framework\TestCase;
use Sonata\AdminBundle\Admin\FieldDescriptionInterface;
use Sonata\DoctrineMongoDBAdminBundle\Datagrid\ProxyQuery;
use Sonata\DoctrineMongoDBAdminBundle\Filter\ModelFilter;
use Sonata\Form\Type\EqualType;

class DocumentStub
{
private $id;

public function __construct()
{
$this->id = new \MongoId();
}

public function getId()
{
return decbin(random_int(0, getrandmax()));
return (string) ($this->id);
}
}

class ModelFilterTest extends FilterWithQueryBuilderTest
class ModelFilterTest extends TestCase
{
private $queryBuilder;

protected function setUp()
{
$this->queryBuilder = $this->createMock(Builder::class);
}

/**
* @return \Sonata\AdminBundle\Admin\FieldDescriptionInterface
*/
Expand All @@ -47,7 +62,12 @@ public function testFilterEmpty()
$filter = new ModelFilter();
$filter->initialize('field_name', ['field_options' => ['class' => 'FooBar']]);

$builder = new ProxyQuery($this->getQueryBuilder());
$builder = new ProxyQuery($this->queryBuilder);

$builder->getQueryBuilder()
->expects($this->never())
->method('field')
;

$filter->filter($builder, 'alias', 'field', null);
$filter->filter($builder, 'alias', 'field', []);
Expand All @@ -60,14 +80,29 @@ public function testFilterArray()
$filter = new ModelFilter();
$filter->initialize('field_name', ['field_options' => ['class' => 'FooBar'], 'field_mapping' => true]);

$builder = new ProxyQuery($this->getQueryBuilder());
$builder = new ProxyQuery($this->queryBuilder);

$builder->getQueryBuilder()
->expects($this->once())
->method('field')
->with('field.$id')
->willReturnSelf()
;

$oneDocument = new DocumentStub();
$otherDocument = new DocumentStub();

$builder->getQueryBuilder()
->expects($this->once())
->method('in')
->with([new \MongoId($oneDocument->getId()), new \MongoId($otherDocument->getId())])
;

$filter->filter($builder, 'alias', 'field', [
'type' => EqualType::TYPE_IS_EQUAL,
'value' => [new DocumentStub(), new DocumentStub()],
'value' => [$oneDocument, $otherDocument],
]);

// the alias is now computer by the entityJoin method
$this->assertTrue($filter->isActive());
}

Expand All @@ -76,9 +111,24 @@ public function testFilterScalar()
$filter = new ModelFilter();
$filter->initialize('field_name', ['field_options' => ['class' => 'FooBar'], 'field_mapping' => true]);

$builder = new ProxyQuery($this->getQueryBuilder());
$builder = new ProxyQuery($this->queryBuilder);

$builder->getQueryBuilder()
->expects($this->once())
->method('field')
->with('field.$id')
->willReturnSelf()
;

$document1 = new DocumentStub();

$builder->getQueryBuilder()
->expects($this->once())
->method('equals')
->with(new \MongoId($document1->getId()))
;

$filter->filter($builder, 'alias', 'field', ['type' => EqualType::TYPE_IS_EQUAL, 'value' => new DocumentStub()]);
$filter->filter($builder, 'alias', 'field', ['type' => EqualType::TYPE_IS_EQUAL, 'value' => $document1]);

$this->assertTrue($filter->isActive());
}
Expand All @@ -90,7 +140,7 @@ public function testAssociationWithInvalidMapping()
$filter = new ModelFilter();
$filter->initialize('field_name', ['mapping_type' => 'foo', 'field_mapping' => true]);

$builder = new ProxyQuery($this->getQueryBuilder());
$builder = new ProxyQuery($this->queryBuilder);

$filter->apply($builder, 'asd');
}
Expand All @@ -102,7 +152,7 @@ public function testAssociationWithValidMappingAndEmptyFieldName()
$filter = new ModelFilter();
$filter->initialize('field_name', ['mapping_type' => ClassMetadata::ONE, 'field_mapping' => true]);

$builder = new ProxyQuery($this->getQueryBuilder());
$builder = new ProxyQuery($this->queryBuilder);

$filter->apply($builder, 'asd');
$this->assertTrue($filter->isActive());
Expand All @@ -119,7 +169,7 @@ public function testAssociationWithValidMapping()
], 'field_mapping' => true,
]);

$builder = new ProxyQuery($this->getQueryBuilder());
$builder = new ProxyQuery($this->queryBuilder);

$filter->apply($builder, ['type' => EqualType::TYPE_IS_EQUAL, 'value' => new DocumentStub()]);

Expand All @@ -145,7 +195,7 @@ public function testAssociationWithValidParentAssociationMappings()
], 'field_mapping' => true,
]);

$builder = new ProxyQuery($this->getQueryBuilder());
$builder = new ProxyQuery($this->queryBuilder);

$filter->apply($builder, ['type' => EqualType::TYPE_IS_EQUAL, 'value' => new DocumentStub()]);

Expand Down
40 changes: 40 additions & 0 deletions tests/Filter/NumberFilterTest.php
Expand Up @@ -26,6 +26,11 @@ public function testFilterEmpty()

$builder = new ProxyQuery($this->getQueryBuilder());

$builder->getQueryBuilder()
->expects($this->never())
->method('field')
;

$filter->filter($builder, 'alias', 'field', null);
$filter->filter($builder, 'alias', 'field', 'asds');

Expand All @@ -39,6 +44,11 @@ public function testFilterInvalidOperator()

$builder = new ProxyQuery($this->getQueryBuilder());

$builder->getQueryBuilder()
->expects($this->never())
->method('field')
;

$filter->filter($builder, 'alias', 'field', ['type' => 'foo']);

$this->assertFalse($filter->isActive());
Expand All @@ -51,6 +61,36 @@ public function testFilter()

$builder = new ProxyQuery($this->getQueryBuilder());

$builder->getQueryBuilder()
->expects($this->exactly(2))
->method('equals')
->with('42')
;

$builder->getQueryBuilder()
->expects($this->once())
->method('gte')
->with('42')
;

$builder->getQueryBuilder()
->expects($this->once())
->method('gt')
->with('42')
;

$builder->getQueryBuilder()
->expects($this->once())
->method('lte')
->with('42')
;

$builder->getQueryBuilder()
->expects($this->once())
->method('lt')
->with('42')
;

$filter->filter($builder, 'alias', 'field', ['type' => NumberType::TYPE_EQUAL, 'value' => 42]);
$filter->filter($builder, 'alias', 'field', ['type' => NumberType::TYPE_GREATER_EQUAL, 'value' => 42]);
$filter->filter($builder, 'alias', 'field', ['type' => NumberType::TYPE_GREATER_THAN, 'value' => 42]);
Expand Down

0 comments on commit 3e4dba6

Please sign in to comment.