X-Git-Url: http://git.inspyration.org/?a=blobdiff_plain;f=vendor%2Fdoctrine%2Form%2Ftests%2FDoctrine%2FTests%2FORM%2FFunctional%2FPaginationTest.php;fp=vendor%2Fdoctrine%2Form%2Ftests%2FDoctrine%2FTests%2FORM%2FFunctional%2FPaginationTest.php;h=0a284558264e7c59cef56c6b1de19d3496ebfe63;hb=8b04b2d11798dee4f3e1358e4f43e97a6df851f6;hp=0000000000000000000000000000000000000000;hpb=73568cf05a785a45f94ca3f2351d9e07bf917958;p=zf2.biz%2Fapplication_blanche.git diff --git a/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php b/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php new file mode 100644 index 0000000..0a28455 --- /dev/null +++ b/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/PaginationTest.php @@ -0,0 +1,168 @@ +useModelSet('cms'); + parent::setUp(); + $this->populate(); + } + + /** + * @dataProvider useOutputWalkers + */ + public function testCountSimpleWithoutJoin($useOutputWalkers) + { + $dql = "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u"; + $query = $this->_em->createQuery($dql); + + $paginator = new Paginator($query); + $paginator->setUseOutputWalkers($useOutputWalkers); + $this->assertCount(3, $paginator); + } + + /** + * @dataProvider useOutputWalkers + */ + public function testCountWithFetchJoin($useOutputWalkers) + { + $dql = "SELECT u,g FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.groups g"; + $query = $this->_em->createQuery($dql); + + $paginator = new Paginator($query); + $paginator->setUseOutputWalkers($useOutputWalkers); + $this->assertCount(3, $paginator); + } + + public function testCountComplexWithOutputWalker() + { + $dql = "SELECT g, COUNT(u.id) AS userCount FROM Doctrine\Tests\Models\CMS\CmsGroup g LEFT JOIN g.users u GROUP BY g HAVING COUNT(u.id) > 0"; + $query = $this->_em->createQuery($dql); + + $paginator = new Paginator($query); + $paginator->setUseOutputWalkers(true); + $this->assertCount(9, $paginator); + } + + /** + * @dataProvider useOutputWalkers + */ + public function testIterateSimpleWithoutJoinFetchJoinHandlingOff($useOutputWalkers) + { + $dql = "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u"; + $query = $this->_em->createQuery($dql); + + $paginator = new Paginator($query, false); + $paginator->setUseOutputWalkers($useOutputWalkers); + $this->assertCount(3, $paginator->getIterator()); + } + + /** + * @dataProvider useOutputWalkers + */ + public function testIterateSimpleWithoutJoinFetchJoinHandlingOn($useOutputWalkers) + { + $dql = "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u"; + $query = $this->_em->createQuery($dql); + + $paginator = new Paginator($query, true); + $paginator->setUseOutputWalkers($useOutputWalkers); + $this->assertCount(3, $paginator->getIterator()); + } + + /** + * @dataProvider useOutputWalkers + */ + public function testIterateWithFetchJoin($useOutputWalkers) + { + $dql = "SELECT u,g FROM Doctrine\Tests\Models\CMS\CmsUser u JOIN u.groups g"; + $query = $this->_em->createQuery($dql); + + $paginator = new Paginator($query, true); + $paginator->setUseOutputWalkers($useOutputWalkers); + $this->assertCount(3, $paginator->getIterator()); + } + + public function testIterateComplexWithOutputWalker() + { + $dql = "SELECT g, COUNT(u.id) AS userCount FROM Doctrine\Tests\Models\CMS\CmsGroup g LEFT JOIN g.users u GROUP BY g HAVING COUNT(u.id) > 0"; + $query = $this->_em->createQuery($dql); + + $paginator = new Paginator($query); + $paginator->setUseOutputWalkers(true); + $this->assertCount(9, $paginator->getIterator()); + } + + public function testDetectOutputWalker() + { + // This query works using the output walkers but causes an exception using the TreeWalker + $dql = "SELECT g, COUNT(u.id) AS userCount FROM Doctrine\Tests\Models\CMS\CmsGroup g LEFT JOIN g.users u GROUP BY g HAVING COUNT(u.id) > 0"; + $query = $this->_em->createQuery($dql); + + // If the Paginator detects the custom output walker it should fall back to using the + // Tree walkers for pagination, which leads to an exception. If the query works, the output walkers were used + $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'Doctrine\ORM\Query\SqlWalker'); + $paginator = new Paginator($query); + + $this->setExpectedException( + 'RuntimeException', + 'Cannot count query that uses a HAVING clause. Use the output walkers for pagination' + ); + + count($paginator); + } + + public function testCloneQuery() + { + $dql = "SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u"; + $query = $this->_em->createQuery($dql); + + $paginator = new Paginator($query); + $paginator->getIterator(); + + $this->assertTrue($query->getParameters()->isEmpty()); + } + + public function populate() + { + for ($i = 0; $i < 3; $i++) { + $user = new CmsUser(); + $user->name = "Name$i"; + $user->username = "username$i"; + $user->status = "active"; + $this->_em->persist($user); + + for ($j = 0; $j < 3; $j++) {; + $group = new CmsGroup(); + $group->name = "group$j"; + $user->addGroup($group); + $this->_em->persist($group); + } + } + $this->_em->flush(); + } + + public function useOutputWalkers() + { + return array( + array(true), + array(false), + ); + } +}