Completed
Pull Request — master (#268)
by
unknown
02:19
created

testAdapterCount()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Pagerfanta\Tests\Adapter;
4
5
use Doctrine\DBAL\Query\QueryBuilder;
6
use Doctrine\ORM\Query\ResultSetMappingBuilder;
7
8
use Doctrine\ORM\Tools\SchemaTool;
9
use Pagerfanta\Adapter\DoctrineORMNativeQueryAdapter;
10
use Pagerfanta\Tests\Adapter\DoctrineORM\DoctrineORMTestCase;
11
use Pagerfanta\Tests\Adapter\DoctrineORM\User;
12
use Pagerfanta\Tests\Adapter\DoctrineORM\Group;
13
use Pagerfanta\Tests\Adapter\DoctrineORM\Person;
14
15
class DoctrineORMNativeQueryAdapterTest extends DoctrineORMTestCase
16
{
17
    private $user1;
18
    private $user2;
19
20
    public function setUp()
21
    {
22
        parent::setUp();
23
24
        $schemaTool = new SchemaTool($this->entityManager);
25
        $schemaTool->createSchema(array(
26
            $this->entityManager->getClassMetadata('Pagerfanta\Tests\Adapter\DoctrineORM\User'),
27
            $this->entityManager->getClassMetadata('Pagerfanta\Tests\Adapter\DoctrineORM\Group'),
28
            $this->entityManager->getClassMetadata('Pagerfanta\Tests\Adapter\DoctrineORM\Person'),
29
        ));
30
31
        $this->user1 = $user = new User();
32
        $this->user2 = $user2 = new User();
33
        $group1 = new Group();
34
        $group2 = new Group();
35
        $group3 = new Group();
36
        $user->groups[] = $group1;
37
        $user->groups[] = $group2;
38
        $user->groups[] = $group3;
39
        $user2->groups[] = $group1;
40
        $author1 = new Person();
41
        $author1->name = 'Foo';
42
        $author1->biography = 'Baz bar';
43
        $author2 = new Person();
44
        $author2->name = 'Bar';
45
        $author2->biography = 'Bar baz';
46
47
        $this->entityManager->persist($user);
48
        $this->entityManager->persist($user2);
49
        $this->entityManager->persist($group1);
50
        $this->entityManager->persist($group2);
51
        $this->entityManager->persist($group3);
52
        $this->entityManager->persist($author1);
53
        $this->entityManager->persist($author2);
54
        $this->entityManager->flush();
55
    }
56
57
    protected function getUserEntityAdapter()
58
    {
59
        $rsm = new ResultSetMappingBuilder($this->entityManager);
60
        $rsm->addRootEntityFromClassMetadata('Pagerfanta\Tests\Adapter\DoctrineORM\User', 'u');
61
62
        $query = new QueryBuilder($this->entityManager->getConnection());
63
        $query->select($rsm->generateSelectClause(['u' => 'U']));
64
        $query->from('user', 'U');
65
66
        return new DoctrineORMNativeQueryAdapter($query, $this->entityManager, $rsm, function($query){
67
            $query->select('COUNT(U.id) AS user_count')->setMaxResults(1);
68
        });
69
    }
70
71
    protected function getUserGroupJoinedEntityAdapter()
72
    {
73
        $rsm = new ResultSetMappingBuilder($this->entityManager);
74
        $rsm->addRootEntityFromClassMetadata('Pagerfanta\Tests\Adapter\DoctrineORM\User', 'u');
75
        $rsm->addJoinedEntityFromClassMetadata('Pagerfanta\Tests\Adapter\DoctrineORM\Group', 'g', 'u', 'groups', [
76
            'id' => 'group_id_x']);
77
78
        $query = new QueryBuilder($this->entityManager->getConnection());
79
        $query->select($rsm->generateSelectClause(['u' => 'U', 'g' => 'G']));
80
        $query->from('user', 'U');
81
        $query->innerJoin('U', 'user_group', 'UG', 'U.id = UG.user_id');
82
        $query->innerJoin('UG', 'groups', 'G', 'G.id = UG.group_id');
83
84
        return new DoctrineORMNativeQueryAdapter($query, $this->entityManager, $rsm, function($query){
85
            $query->select('COUNT(DISTINCT U.id) AS user_count')->setMaxResults(1);
86
        });
87
    }
88
89
    public function testAdapterCount()
90
    {
91
        $this->assertEquals(2, $this->getUserEntityAdapter()->getNbResults());
92
    }
93
94
    public function testAdapterCountFetchJoin()
95
    {
96
        $this->assertEquals(2, $this->getUserGroupJoinedEntityAdapter()->getNbResults());
97
    }
98
99
    public function testGetSlice()
100
    {
101
        $adapter = $this->getUserEntityAdapter();
102
        $this->assertEquals(1, count( $adapter->getSlice(0, 1)) );
103
        $this->assertEquals(2, count( $adapter->getSlice(0, 10)) );
104
        $this->assertEquals(1, count( $adapter->getSlice(1, 1)) );
105
    }
106
107
    public function testGetSliceFetchJoin()
108
    {
109
        $adapter = $this->getUserGroupJoinedEntityAdapter();
110
        $this->assertEquals(1, count( $adapter->getSlice(0, 1)) );
111
        $this->assertEquals(2, count( $adapter->getSlice(0, 10)) );
112
        $this->assertEquals(1, count( $adapter->getSlice(1, 1)) );
113
    }
114
115
}