Completed
Pull Request — 3.x (#996)
by Peter
01:53
created

PagerTest::entityClassDataProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Sonata Project package.
7
 *
8
 * (c) Thomas Rabaix <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Sonata\DoctrineORMAdminBundle\Tests\Datagrid;
15
16
use Doctrine\ORM\AbstractQuery;
17
use Doctrine\ORM\Tools\SchemaTool;
18
use PHPUnit\Framework\TestCase;
19
use Sonata\DoctrineORMAdminBundle\Datagrid\Pager;
20
use Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery;
21
use Sonata\DoctrineORMAdminBundle\Tests\Filter\QueryBuilder;
22
use Sonata\DoctrineORMAdminBundle\Tests\Fixtures\Entity\ORM\User;
23
use Sonata\DoctrineORMAdminBundle\Tests\Fixtures\Entity\ORM\UserBrowser;
24
use Symfony\Bridge\Doctrine\Test\DoctrineTestHelper;
25
26
class PagerTest extends TestCase
27
{
28
    public function entityClassDataProvider(): array
29
    {
30
        return [
31
            [User::class], // single identifier
32
            [UserBrowser::class], // composite identifier
33
        ];
34
    }
35
36
    /**
37
     * @dataProvider entityClassDataProvider
38
     */
39
    public function testComputeNbResultForCompositeId(string $className): void
40
    {
41
        $em = DoctrineTestHelper::createTestEntityManager();
42
        $classes = [
43
            $em->getClassMetadata($className),
44
        ];
45
        $schemaTool = new SchemaTool($em);
46
        $schemaTool->createSchema($classes);
47
48
        $qb = $em->createQueryBuilder()
49
            ->select('e')
50
            ->from($className, 'e');
51
        $pq = new ProxyQuery($qb);
52
        $pager = new Pager();
53
        $pager->setCountColumn($em->getClassMetadata($className)->getIdentifierFieldNames());
54
        $pager->setQuery($pq);
55
        $this->assertSame(0, $pager->computeNbResult());
56
    }
57
58
    public function dataGetComputeNbResult(): array
59
    {
60
        return [
61
            [true],
62
            [false],
63
        ];
64
    }
65
66
    /**
67
     * @dataProvider dataGetComputeNbResult
68
     */
69
    public function testComputeNbResult(bool $distinct): void
70
    {
71
        $query = $this->getMockBuilder(AbstractQuery::class)
72
            ->disableOriginalConstructor()
73
            ->setMethods(['getResult'])
74
            ->getMockForAbstractClass();
75
76
        $query->expects($this->once())
77
            ->method('getResult')
78
            ->willReturn([['cnt' => 1], ['cnt' => 2]]);
79
80
        $queryBuilder = $this->getMockBuilder(QueryBuilder::class)
81
            ->disableOriginalConstructor()
82
            ->setMethods(['getQuery', 'select', 'resetDQLPart'])
83
            ->getMock();
84
85
        $queryBuilder->expects($this->once())
86
            ->method('getQuery')
87
            ->willReturn($query);
88
89
        $queryBuilder->expects($this->once())
90
            ->method('select');
91
92
        $proxyQuery = new ProxyQuery($queryBuilder);
93
        $proxyQuery->setDistinct($distinct);
94
95
        $queryBuilder->expects($this->once())
96
            ->method('resetDQLPart')
97
            ->willReturn($proxyQuery);
98
99
        $pager = new Pager();
100
        $pager->setQuery($proxyQuery);
101
        $pager->computeNbResult();
102
    }
103
}
104