Failed Conditions
Pull Request — master (#6485)
by Alessandro
12:30
created

CountOutputWalkerTest   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 67
Duplicated Lines 32.84 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
lcom 1
cbo 5
dl 22
loc 67
rs 10
c 1
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A testCountQuery() 0 11 1
A testCountQuery_MixedResultsWithName() 0 11 1
A testCountQueryOrderBySqlServer() 0 16 2
A testCountQuery_GroupBy() 11 11 1
A testCountQuery_Having() 11 11 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace Doctrine\Tests\ORM\Tools\Pagination;
4
5
use Doctrine\ORM\Query;
6
use Doctrine\ORM\Tools\Pagination\CountOutputWalker;
7
8
class CountOutputWalkerTest extends PaginationTestCase
9
{
10
    public function testCountQuery()
11
    {
12
        $query = $this->entityManager->createQuery(
13
            'SELECT p, c, a FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p JOIN p.category c JOIN p.author a');
14
        $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class);
15
        $query->setFirstResult(null)->setMaxResults(null);
16
17
        $this->assertEquals(
18
            "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.id AS id_0, c1_.id AS id_1, a2_.id AS id_2, a2_.name AS name_3, b0_.author_id AS author_id_4, b0_.category_id AS category_id_5 FROM BlogPost b0_ INNER JOIN Category c1_ ON b0_.category_id = c1_.id INNER JOIN Author a2_ ON b0_.author_id = a2_.id) dctrn_result) dctrn_table", $query->getSQL()
19
        );
20
    }
21
22
    public function testCountQuery_MixedResultsWithName()
23
    {
24
        $query = $this->entityManager->createQuery(
25
            'SELECT a, sum(a.name) as foo FROM Doctrine\Tests\ORM\Tools\Pagination\Author a');
26
        $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class);
27
        $query->setFirstResult(null)->setMaxResults(null);
28
29
        $this->assertEquals(
30
            "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT a0_.id AS id_0, a0_.name AS name_1, sum(a0_.name) AS sclr_2 FROM Author a0_) dctrn_result) dctrn_table", $query->getSQL()
31
        );
32
    }
33
34 View Code Duplication
    public function testCountQuery_GroupBy(): void
35
    {
36
        $query = $this->entityManager->createQuery(
37
            'SELECT p.name FROM Doctrine\Tests\ORM\Tools\Pagination\Person p GROUP BY p.name');
38
        $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class);
39
        $query->setFirstResult(null)->setMaxResults(null);
40
41
        $this->assertSame(
42
            "SELECT COUNT(*) AS dctrn_count FROM (SELECT p0_.name AS name_0 FROM Person p0_ GROUP BY p0_.name) dctrn_table", $query->getSQL()
43
        );
44
    }
45
46 View Code Duplication
    public function testCountQuery_Having(): void
47
    {
48
        $query = $this->entityManager->createQuery(
49
            'SELECT g, u, count(u.id) AS userCount FROM Doctrine\Tests\ORM\Tools\Pagination\Group g LEFT JOIN g.users u GROUP BY g.id HAVING userCount > 0');
50
        $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class);
51
        $query->setFirstResult(null)->setMaxResults(null);
52
53
        $this->assertSame(
54
            "SELECT COUNT(*) AS dctrn_count FROM (SELECT count(u0_.id) AS sclr_0, g1_.id AS id_1, u0_.id AS id_2 FROM groups g1_ LEFT JOIN user_group u2_ ON g1_.id = u2_.group_id LEFT JOIN User u0_ ON u0_.id = u2_.user_id GROUP BY g1_.id HAVING sclr_0 > 0) dctrn_table", $query->getSQL()
55
        );
56
    }
57
58
    public function testCountQueryOrderBySqlServer()
59
    {
60
        if ($this->entityManager->getConnection()->getDatabasePlatform()->getName() !== "mssql") {
61
            $this->markTestSkipped('SQLServer only test.');
62
        }
63
64
        $query = $this->entityManager->createQuery(
65
            'SELECT p FROM Doctrine\Tests\ORM\Tools\Pagination\BlogPost p ORDER BY p.id');
66
        $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class);
67
        $query->setFirstResult(null)->setMaxResults(null);
68
69
        $this->assertEquals(
70
            "SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT id_0 FROM (SELECT b0_.id AS id_0, b0_.author_id AS author_id_1, b0_.category_id AS category_id_2 FROM BlogPost b0_) dctrn_result) dctrn_table",
71
            $query->getSQL()
72
        );
73
    }
74
}
75
76