From 9d7256aace79c6ece96772a72bd457caf69a7585 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Wed, 4 Feb 2015 13:49:51 -0500 Subject: [PATCH] Small code change thanks to the comments and adding a test --- .../ORM/Mapping/ClassMetadataFactory.php | 2 +- .../ORM/Mapping/ClassMetadataFactoryTest.php | 29 +++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index 1c53955d5..9156b6b85 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -577,7 +577,7 @@ class ClassMetadataFactory extends AbstractClassMetadataFactory private function getTargetPlatform() { - if ($this->targetPlatform === null) { + if (!$this->targetPlatform) { $this->targetPlatform = $this->em->getConnection()->getDatabasePlatform(); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php index 7f07af2ad..d865a886c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataFactoryTest.php @@ -192,15 +192,38 @@ class ClassMetadataFactoryTest extends \Doctrine\Tests\OrmTestCase $rootMetadata = $cmf->getMetadataFor('Doctrine\Tests\Models\JoinedInheritanceType\RootClass'); } - protected function _createEntityManager($metadataDriver) + public function testGetAllMetadataWorksWithBadConnection() + { + // DDC-3551 + $conn = $this->getMockBuilder('Doctrine\DBAL\Connection') + ->disableOriginalConstructor() + ->getMock(); + $mockDriver = new MetadataDriverMock(); + $em = $this->_createEntityManager($mockDriver, $conn); + + $conn->expects($this->any()) + ->method('getDatabasePlatform') + ->will($this->throwException(new \Exception('Exception thrown in test when calling getDatabasePlatform'))); + + $cmf = new ClassMetadataFactory(); + $cmf->setEntityManager($em); + + // getting all the metadata should work, even if get DatabasePlatform blows up + $metadata = $cmf->getAllMetadata(); + // this will just be an empty array - there was no error + $this->assertEquals(array(), $metadata); + } + + protected function _createEntityManager($metadataDriver, $conn = null) { $driverMock = new DriverMock(); $config = new \Doctrine\ORM\Configuration(); $config->setProxyDir(__DIR__ . '/../../Proxies'); $config->setProxyNamespace('Doctrine\Tests\Proxies'); $eventManager = new EventManager(); - $conn = new ConnectionMock(array(), $driverMock, $config, $eventManager); - $mockDriver = new MetadataDriverMock(); + if (!$conn) { + $conn = new ConnectionMock(array(), $driverMock, $config, $eventManager); + } $config->setMetadataDriverImpl($metadataDriver); return EntityManagerMock::create($conn, $config, $eventManager);