diff --git a/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php b/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php new file mode 100644 index 000000000..66184a8a8 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php @@ -0,0 +1,103 @@ +_schemaTool->createSchema(array( + $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), + )); + } catch (\Exception $e) { + } + $this->user = new CmsUser(); + $this->user->username = 'ocramius'; + $this->user->name = 'Marco'; + $this->_em->persist($this->user); + $this->_em->flush(); + $this->_em->clear(); + } + + /** + * Verifies that a proxy can be successfully persisted and updated + */ + public function testPersistUpdate() + { + // Considering case (a) + $persister = $this->_em->getUnitOfWork()->getEntityPersister('Doctrine\Tests\Models\CMS\CmsUser'); + $proxy = new Proxy($persister, array()); + $proxy->__isInitialized__ = true; + $proxy->username = 'ocra'; + $proxy->name = 'Marco'; + $this->_em->persist($proxy); + $this->_em->flush(); + $this->assertNotNull($proxy->getId()); + $proxy->name = 'Marco Pivetta'; + $this + ->_em + ->getUnitOfWork() + ->computeChangeSet($this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'), $proxy); + $this->assertNotEmpty($this->_em->getUnitOfWork()->getEntityChangeSet($proxy)); + $this->assertEquals('Marco Pivetta', $this->_em->find('Doctrine\Tests\Models\CMS\CmsUser', $proxy->getId())->name); + $this->_em->remove($proxy); + $this->_em->flush(); + } + + public function testEntityWithIdentifier() + { + // Considering case (b) + $persister = $this->_em->getUnitOfWork()->getEntityPersister('Doctrine\Tests\Models\CMS\CmsUser'); + $uninitializedProxy = new Proxy($persister, array('id' => $this->user->getId())); + $uninitializedProxy->id = $this->user->getId(); + $uninitializedProxy->username = 'ocra'; + $uninitializedProxy->name = 'Marco Pivetta'; + $this->_em->persist($uninitializedProxy); + $this->_em->flush(); + $this->assertEquals($this->user->getId(), $uninitializedProxy->getId()); + $this->_em->remove($uninitializedProxy); + $this->_em->flush(); + } + + /** + * Verifying that proxies can be used without problems as query parameters + */ + public function testProxyAsDqlParameterPersist() + { + $persister = $this->_em->getUnitOfWork()->getEntityPersister('Doctrine\Tests\Models\CMS\CmsUser'); + $proxy = new Proxy($persister, array('id' => $this->user->getId())); + $proxy->id = $this->user->getId(); + $result = $this + ->_em + ->createQuery('SELECT u FROM Doctrine\Tests\Models\CMS\CmsUser u WHERE u = ?1') + ->setParameter(1, $proxy) + ->getSingleResult(); + $this->assertSame($this->user->getId(), $result->getId()); + $this->_em->remove($proxy); + $this->_em->flush(); + } + + protected function tearDown() + { + $this->_em->createQuery('DELETE FROM Doctrine\Tests\Models\CMS\CmsUser u')->execute(); + } +} \ No newline at end of file