Rajout de doctrine/orm
[zf2.biz/application_blanche.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / ProxiesLikeEntitiesTest.php
diff --git a/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php b/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php
new file mode 100644 (file)
index 0000000..52ac8f5
--- /dev/null
@@ -0,0 +1,133 @@
+<?php
+
+namespace Doctrine\Tests\ORM\Functional;
+
+use Doctrine\Common\Util\ClassUtils,
+    Doctrine\Tests\Models\CMS\CmsUser,
+    Doctrine\Tests\Proxies\__CG__\Doctrine\Tests\Models\CMS\CmsUser as Proxy;
+
+/**
+ * Test that Doctrine ORM correctly works with proxy instances exactly like with ordinary Entities
+ *
+ * The test considers two possible cases:
+ *  a) __initialized__ = true and no identifier set in proxy
+ *  b) __initialized__ = false and identifier set in proxy and in property
+ * @todo All other cases would cause lazy loading issues
+ */
+class ProxiesLikeEntitiesTest extends \Doctrine\Tests\OrmFunctionalTestCase
+{
+    /**
+     * @var CmsUser
+     */
+    protected $user;
+
+    protected function setUp()
+    {
+        parent::setUp();
+        try {
+            $this->_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();
+    }
+
+    /**
+     * Verifying that proxies can be used without problems as query parameters
+     */
+    public function testFindWithProxyName()
+    {
+        $result = $this
+            ->_em
+            ->find('Doctrine\Tests\Proxies\__CG__\Doctrine\Tests\Models\CMS\CmsUser', $this->user->getId());
+        $this->assertSame($this->user->getId(), $result->getId());
+        $this->_em->clear();
+        $result = $this
+            ->_em
+            ->getReference('Doctrine\Tests\Proxies\__CG__\Doctrine\Tests\Models\CMS\CmsUser', $this->user->getId());
+        $this->assertSame($this->user->getId(), $result->getId());
+        $this->_em->clear();
+        $result = $this
+            ->_em
+            ->getRepository('Doctrine\Tests\Proxies\__CG__\Doctrine\Tests\Models\CMS\CmsUser')
+            ->findOneBy(array('username' => $this->user->username));
+        $this->assertSame($this->user->getId(), $result->getId());
+        $this->_em->clear();
+        $result = $this
+            ->_em
+            ->createQuery('SELECT u FROM Doctrine\Tests\Proxies\__CG__\Doctrine\Tests\Models\CMS\CmsUser u WHERE u.id = ?1')
+            ->setParameter(1, $this->user->getId())
+            ->getSingleResult();
+        $this->assertSame($this->user->getId(), $result->getId());
+        $this->_em->clear();
+    }
+
+    protected function tearDown()
+    {
+        $this->_em->createQuery('DELETE FROM Doctrine\Tests\Models\CMS\CmsUser u')->execute();
+    }
+}
\ No newline at end of file