Rajout de doctrine/orm
[zf2.biz/application_blanche.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / Ticket / DDC742Test.php
diff --git a/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC742Test.php b/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC742Test.php
new file mode 100644 (file)
index 0000000..7e6e200
--- /dev/null
@@ -0,0 +1,130 @@
+<?php
+
+namespace Doctrine\Tests\ORM\Functional\Ticket;
+
+use Doctrine\Common\Collections\ArrayCollection;
+
+require_once __DIR__ . '/../../../TestInit.php';
+
+class DDC742Test extends \Doctrine\Tests\OrmFunctionalTestCase
+{
+    private $userCm;
+    private $commentCm;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        if (\extension_loaded('memcache')) {
+            $memcache = new \Memcache();
+            $memcache->addServer('localhost');
+            $memcache->flush();
+
+            $cacheDriver = new \Doctrine\Common\Cache\MemcacheCache();
+            $cacheDriver->setMemcache($memcache);
+
+            $this->_em->getMetadataFactory()->setCacheDriver($cacheDriver);
+        } else if (\extension_loaded('apc')) {
+            $this->_em->getMetadataFactory()->setCacheDriver(new \Doctrine\Common\Cache\ApcCache());
+        }
+
+        try {
+            $this->_schemaTool->createSchema(array(
+                $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC742User'),
+                $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC742Comment')
+            ));
+        } catch(\Exception $e) {
+
+        }
+
+        // make sure classes will be deserialized from caches
+        $this->_em->getMetadataFactory()->setMetadataFor(__NAMESPACE__ . '\DDC742User', null);
+        $this->_em->getMetadataFactory()->setMetadataFor(__NAMESPACE__ . '\DDC742Comment', null);
+    }
+
+    public function testIssue()
+    {
+        $user = new DDC742User();
+        $user->title = "Foo";
+        $user->favoriteComments = new ArrayCollection();
+
+        $comment1 = new DDC742Comment();
+        $comment1->content = "foo";
+
+        $comment2 = new DDC742Comment();
+        $comment2->content = "bar";
+
+        $comment3 = new DDC742Comment();
+        $comment3->content = "baz";
+
+        $user->favoriteComments->add($comment1);
+        $user->favoriteComments->add($comment2);
+
+        $this->_em->persist($user);
+        $this->_em->persist($comment1);
+        $this->_em->persist($comment2);
+        $this->_em->persist($comment3);
+        $this->_em->flush();
+        $this->_em->clear();
+
+        $user = $this->_em->find(get_class($user), $user->id);
+        $comment3 = $this->_em->find(get_class($comment3), $comment3->id);
+        $user->favoriteComments->add($comment3);
+        $this->_em->flush();
+    }
+}
+
+/**
+ * @Entity
+ * @Table(name="users")
+ */
+class DDC742User
+{
+    /**
+     * User Id
+     *
+     * @Id
+     * @GeneratedValue(strategy="AUTO")
+     * @Column(type="integer")
+     * @var integer
+     */
+    public $id;
+    /**
+     * @Column(length=100, type="string")
+     * @var string
+     */
+    public $title;
+    /**
+     * @ManyToMany(targetEntity="DDC742Comment", cascade={"persist"}, fetch="EAGER")
+     * @JoinTable(
+     *  name="user_comments",
+     *  joinColumns={@JoinColumn(name="user_id",referencedColumnName="id")},
+     *  inverseJoinColumns={@JoinColumn(name="comment_id", referencedColumnName="id")}
+     * )
+     *
+     * @var Doctrine\ORM\PersistentCollection
+     */
+    public $favoriteComments;
+}
+
+/**
+ * @Entity
+ * @Table(name="comments")
+ */
+class DDC742Comment
+{
+    /**
+     * User Id
+     *
+     * @Id
+     * @GeneratedValue(strategy="AUTO")
+     * @Column(type="integer")
+     * @var integer
+     */
+    public $id;
+    /**
+     * @Column(length=100, type="string")
+     * @var string
+     */
+    public $content;
+}