Completed
Pull Request — 3.x (#996)
by Peter
01:48
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
     * @param string $class_name
40
     */
41
    public function testComputeNbResultFoCompositeId(string $class_name): void
42
    {
43
        $em = DoctrineTestHelper::createTestEntityManager();
44
        $classes = [
45
            $em->getClassMetadata($class_name),
46
        ];
47
        $schemaTool = new SchemaTool($em);
48
        $schemaTool->createSchema($classes);
49
50
        $qb = $em->createQueryBuilder()
51
            ->select('e')
52
            ->from($class_name, 'e');
53
        $pq = new ProxyQuery($qb);
54
        $pager = new Pager();
55
        $pager->setCountColumn($em->getClassMetadata($class_name)->getIdentifierFieldNames());
56
        $pager->setQuery($pq);
57
        $this->assertSame(0, $pager->computeNbResult());
58
    }
59
60
    public function dataGetComputeNbResult(): array
61
    {
62
        return [
63
            [true],
64
            [false],
65
        ];
66
    }
67
68
    /**
69
     * @dataProvider dataGetComputeNbResult
70
     *
71
     * @param bool $distinct
72
     */
73
    public function testComputeNbResult($distinct): void
74
    {
75
        $query = $this->getMockBuilder(AbstractQuery::class)
76
            ->disableOriginalConstructor()
77
            ->setMethods(['getResult'])
78
            ->getMockForAbstractClass();
79
80
        $query->expects($this->once())
81
            ->method('getResult')
82
            ->willReturn([['cnt' => 1], ['cnt' => 2]]);
83
84
        $queryBuilder = $this->getMockBuilder(QueryBuilder::class)
85
            ->disableOriginalConstructor()
86
            ->setMethods(['getQuery', 'select', 'resetDQLPart'])
87
            ->getMock();
88
89
        $queryBuilder->expects($this->once())
90
            ->method('getQuery')
91
            ->willReturn($query);
92
93
        $queryBuilder->expects($this->once())
94
            ->method('select');
95
96
        $proxyQuery = new ProxyQuery($queryBuilder);
97
        $proxyQuery->setDistinct($distinct);
98
99
        $queryBuilder->expects($this->once())
100
            ->method('resetDQLPart')
101
            ->willReturn($proxyQuery);
102
103
        $pager = new Pager();
104
        $pager->setQuery($proxyQuery);
105
        $pager->computeNbResult();
106
    }
107
}
108