/** * @dataProvider getCountQueryBuilderDataProvider * * @param callback $queryBuilder * @param string $expectedDql */ public function testGetCountQueryBuilder($queryBuilder, $expectedDql) { $listener = new CountQueryOptimizationListener(); $eventDispatcher = new EventDispatcher(); $eventDispatcher->addListener(CountQueryOptimizationEvent::EVENT_NAME, [$listener, 'onOptimize']); $optimizer = new CountQueryBuilderOptimizer(); $optimizer->setEventDispatcher($eventDispatcher); $countQb = $optimizer->getCountQueryBuilder(call_user_func($queryBuilder, $this->em)); $this->assertInstanceOf('Doctrine\\ORM\\QueryBuilder', $countQb); // Check for expected DQL $this->assertEquals($expectedDql, $countQb->getQuery()->getDQL()); // Check that Optimized DQL can be converted to SQL $this->assertNotEmpty($countQb->getQuery()->getSQL()); }