From 10e3407ed1f67c143ddc1453dd4a9e1e9264758d Mon Sep 17 00:00:00 2001 From: romanb Date: Wed, 28 Oct 2009 22:12:45 +0000 Subject: [PATCH] [2.0][DDC-70] Added some EntityManager tests provided by beberlei. --- lib/Doctrine/ORM/EntityManager.php | 2 + .../Doctrine/Tests/ORM/EntityManagerTest.php | 121 +++++++++++++++++- 2 files changed, 122 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 3d44d1f14..63cdc9ef5 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -449,6 +449,7 @@ class EntityManager */ public function merge($entity) { + $this->_errorIfClosed(); return $this->_unitOfWork->merge($entity); } @@ -461,6 +462,7 @@ class EntityManager */ public function copy($entity, $deep = false) { + $this->_errorIfClosed(); throw DoctrineException::notImplemented(__FUNCTION__, __CLASS__); } diff --git a/tests/Doctrine/Tests/ORM/EntityManagerTest.php b/tests/Doctrine/Tests/ORM/EntityManagerTest.php index 9c59615d9..e905c6d70 100644 --- a/tests/Doctrine/Tests/ORM/EntityManagerTest.php +++ b/tests/Doctrine/Tests/ORM/EntityManagerTest.php @@ -22,5 +22,124 @@ class EntityManagerTest extends \Doctrine\Tests\OrmTestCase $this->fail("Setting invalid flushmode did not trigger exception."); } catch (\Doctrine\ORM\EntityManagerException $expected) {} $this->_em->setFlushMode($prev); - } + } + + public function testGetConnection() + { + $this->assertType('\Doctrine\DBAL\Connection', $this->_em->getConnection()); + } + + public function testGetMetadataFactory() + { + $this->assertType('\Doctrine\ORM\Mapping\ClassMetadataFactory', $this->_em->getMetadataFactory()); + } + + public function testGetConfiguration() + { + $this->assertType('\Doctrine\ORM\Configuration', $this->_em->getConfiguration()); + } + + public function testGetUnitOfWork() + { + $this->assertType('\Doctrine\ORM\UnitOfWork', $this->_em->getUnitOfWork()); + } + + public function testGetProxyFactory() + { + $this->assertType('\Doctrine\ORM\Proxy\ProxyFactory', $this->_em->getProxyFactory()); + } + + public function testGetEventManager() + { + $this->assertType('\Doctrine\Common\EventManager', $this->_em->getEventManager()); + } + + public function testGetDefaultFlushMode_OnCommit() + { + $this->assertEquals(\Doctrine\ORM\EntityManager::FLUSHMODE_COMMIT, $this->_em->getFlushMode()); + } + + public function testCommit_FlushModeOnCommit_FlushUnitOfWork() + { + $this->markTestSkipped('_unitOfWork is private, but EntityManager does not use getUnitofWork() all the time'); + + $uow = $this->getMock('\Doctrine\ORM\UnitOfWork', array(), array(), '', false); + $uow->expects($this->once()) + ->method('flush'); + + $this->_em->setUnitOfWork($uow); + $this->_em->setFlushMode(\Doctrine\ORM\EntityManager::FLUSHMODE_COMMIT); + + $this->assertSame($uow, $this->_em->getUnitOfWork()); + + $this->_em->beginTransaction(); + $this->_em->commit(); + } + + + public function testCommit_FlushModeAuto_FlushUnitOfWork() + { + $this->markTestSkipped('_unitOfWork is private, but EntityManager does not use getUnitofWork() all the time'); + + $uow = $this->getMock('\Doctrine\ORM\UnitOfWork', array(), array(), '', false); + $uow->expects($this->once()) + ->method('flush'); + + $this->_em->setUnitOfWork($uow); + $this->_em->setFlushMode(\Doctrine\ORM\EntityManager::FLUSHMODE_AUTO); + + $this->assertSame($uow, $this->_em->getUnitOfWork()); + + $this->_em->beginTransaction(); + $this->_em->commit(); + } + + public function testCreateNativeQuery() + { + $rsm = new \Doctrine\ORM\Query\ResultSetMapping(); + $query = $this->_em->createNativeQuery('SELECT foo', $rsm); + + $this->assertSame('SELECT foo', $query->getSql()); + } + + public function testCreateQueryBuilder() + { + $this->assertType('\Doctrine\ORM\QueryBuilder', $this->_em->createQueryBuilder()); + } + + public function testCreateQuery_DqlIsOptional() + { + $this->assertType('\Doctrine\ORM\Query', $this->_em->createQuery()); + } + + public function testCreateQuery() + { + $q = $this->_em->createQuery('SELECT 1'); + $this->assertType('\Doctrine\ORM\Query', $q); + $this->assertEquals('SELECT 1', $q->getDql()); + } + + static public function dataAffectedByErrorIfClosedException() + { + return array( + array('flush'), + array('persist'), + array('remove'), + array('merge'), + array('refresh'), + array('copy'), + ); + } + + /** + * @dataProvider dataAffectedByErrorIfClosedException + * @param string $methodName + */ + public function testAffectedByErrorIfClosedException($methodName) + { + $this->setExpectedException('Doctrine\ORM\EntityManagerException', 'Closed'); + + $this->_em->close(); + $this->_em->$methodName(new \stdClass()); + } } \ No newline at end of file