* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Tests\Bridge\Doctrine\DataCollector; use Doctrine\DBAL\Platforms\MySqlPlatform; use Symfony\Bridge\Doctrine\DataCollector\DoctrineDataCollector; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class DoctrineDataCollectorTest extends \PHPUnit_Framework_TestCase { public function testCollectConnections() { $c = $this->createCollector(array()); $c->collect(new Request(), new Response()); $this->assertEquals(array('default' => 'doctrine.dbal.default_connection'), $c->getConnections()); } public function testCollectManagers() { $c = $this->createCollector(array()); $c->collect(new Request(), new Response()); $this->assertEquals(array('default' => 'doctrine.orm.default_entity_manager'), $c->getManagers()); } public function testCollectQueryCount() { $c = $this->createCollector(array()); $c->collect(new Request(), new Response()); $this->assertEquals(0, $c->getQueryCount()); $queries = array( array('sql' => "SELECT * FROM table1", 'params' => array(), 'types' => array(), 'executionMS' => 0) ); $c = $this->createCollector($queries); $c->collect(new Request(), new Response()); $this->assertEquals(1, $c->getQueryCount()); } public function testCollectTime() { $c = $this->createCollector(array()); $c->collect(new Request(), new Response()); $this->assertEquals(0, $c->getTime()); $queries = array( array('sql' => "SELECT * FROM table1", 'params' => array(), 'types' => array(), 'executionMS' => 1) ); $c = $this->createCollector($queries); $c->collect(new Request(), new Response()); $this->assertEquals(1, $c->getTime()); $queries = array( array('sql' => "SELECT * FROM table1", 'params' => array(), 'types' => array(), 'executionMS' => 1), array('sql' => "SELECT * FROM table2", 'params' => array(), 'types' => array(), 'executionMS' => 2) ); $c = $this->createCollector($queries); $c->collect(new Request(), new Response()); $this->assertEquals(3, $c->getTime()); } /** * @dataProvider paramProvider */ public function testCollectQueries($param, $types, $expected, $explainable) { $queries = array( array('sql' => "SELECT * FROM table1 WHERE field1 = ?1", 'params' => array($param), 'types' => $types, 'executionMS' => 1) ); $c = $this->createCollector($queries); $c->collect(new Request(), new Response()); $collected_queries = $c->getQueries(); $this->assertEquals($expected, $collected_queries['default'][0]['params'][0]); $this->assertEquals($explainable, $collected_queries['default'][0]['explainable']); } /** * @dataProvider paramProvider */ public function testSerialization($param, $types, $expected, $explainable) { $queries = array( array('sql' => "SELECT * FROM table1 WHERE field1 = ?1", 'params' => array($param), 'types' => $types, 'executionMS' => 1) ); $c = $this->createCollector($queries); $c->collect(new Request(), new Response()); $c = unserialize(serialize($c)); $collected_queries = $c->getQueries(); $this->assertEquals($expected, $collected_queries['default'][0]['params'][0]); $this->assertEquals($explainable, $collected_queries['default'][0]['explainable']); } public function paramProvider() { return array( array('some value', array(), 'some value', true), array(1, array(), 1, true), array(true, array(), true, true), array(null, array(), null, true), array(new \DateTime('2011-09-11'), array('date'), '2011-09-11', true), array(fopen(__FILE__, 'r'), array(), 'Resource(stream)', false), array(new \SplFileInfo(__FILE__), array(), 'Object(SplFileInfo)', false), ); } private function createCollector($queries) { $connection = $this->getMockBuilder('Doctrine\DBAL\Connection') ->disableOriginalConstructor() ->getMock(); $connection->expects($this->any()) ->method('getDatabasePlatform') ->will($this->returnValue(new MySqlPlatform())); $registry = $this->getMock('Doctrine\Common\Persistence\ManagerRegistry'); $registry ->expects($this->any()) ->method('getConnectionNames') ->will($this->returnValue(array('default' => 'doctrine.dbal.default_connection'))); $registry ->expects($this->any()) ->method('getManagerNames') ->will($this->returnValue(array('default' => 'doctrine.orm.default_entity_manager'))); $registry->expects($this->any()) ->method('getConnection') ->will($this->returnValue($connection)); $logger = $this->getMock('Doctrine\DBAL\Logging\DebugStack'); $logger->queries = $queries; $collector = new DoctrineDataCollector($registry); $collector->addLogger('default', $logger); return $collector; } }