Rajout de doctrine/orm
[zf2.biz/application_blanche.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / Ticket / DDC618Test.php
diff --git a/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC618Test.php b/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC618Test.php
new file mode 100644 (file)
index 0000000..b51ed39
--- /dev/null
@@ -0,0 +1,185 @@
+<?php
+
+namespace Doctrine\Tests\ORM\Functional\Ticket;
+
+use DateTime;
+
+require_once __DIR__ . '/../../../TestInit.php';
+
+/**
+ * @group DDC-618
+ */
+class DDC618Test extends \Doctrine\Tests\OrmFunctionalTestCase
+{
+    protected function setUp()
+    {
+        parent::setUp();
+        try {
+            $this->_schemaTool->createSchema(array(
+                $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC618Author'),
+                $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC618Book')
+            ));
+
+            // Create author 10/Joe with two books 22/JoeA and 20/JoeB
+            $author = new DDC618Author();
+            $author->id = 10;
+            $author->name = 'Joe';
+            $this->_em->persist($author);
+
+            // Create author 11/Alice with two books 21/AliceA and 23/AliceB
+            $author = new DDC618Author();
+            $author->id = 11;
+            $author->name = 'Alice';
+            $author->addBook('In Wonderland');
+            $author->addBook('Reloaded');
+            $author->addBook('Test');
+
+            $this->_em->persist($author);
+
+            $this->_em->flush();
+            $this->_em->clear();
+        } catch(\Exception $e) {
+
+        }
+    }
+
+    public function testIndexByHydrateObject()
+    {
+        $dql = 'SELECT A FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Author A INDEX BY A.name ORDER BY A.name ASC';
+        $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT);
+
+        $joe    = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC618Author', 10);
+        $alice  = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC618Author', 11);
+
+        $this->assertArrayHasKey('Joe', $result, "INDEX BY A.name should return an index by the name of 'Joe'.");
+        $this->assertArrayHasKey('Alice', $result, "INDEX BY A.name should return an index by the name of 'Alice'.");
+    }
+
+    public function testIndexByHydrateArray()
+    {
+        $dql = 'SELECT A FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Author A INDEX BY A.name ORDER BY A.name ASC';
+        $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
+
+        $joe    = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC618Author', 10);
+        $alice  = $this->_em->find('Doctrine\Tests\ORM\Functional\Ticket\DDC618Author', 11);
+
+        $this->assertArrayHasKey('Joe', $result, "INDEX BY A.name should return an index by the name of 'Joe'.");
+        $this->assertArrayHasKey('Alice', $result, "INDEX BY A.name should return an index by the name of 'Alice'.");
+    }
+
+    /**
+     * @group DDC-1018
+     */
+    public function testIndexByJoin()
+    {
+        $dql = 'SELECT A, B FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Author A '.
+               'INNER JOIN A.books B INDEX BY B.title ORDER BY A.name ASC';
+        $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT);
+
+        $this->assertEquals(3, count($result[0]->books)); // Alice, Joe doesnt appear because he has no books.
+        $this->assertEquals('Alice', $result[0]->name);
+        $this->assertTrue( isset($result[0]->books["In Wonderland"] ), "Indexing by title should have books by title.");
+        $this->assertTrue( isset($result[0]->books["Reloaded"] ), "Indexing by title should have books by title.");
+        $this->assertTrue( isset($result[0]->books["Test"] ), "Indexing by title should have books by title.");
+
+        $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
+
+        $this->assertEquals(3, count($result[0]['books'])); // Alice, Joe doesnt appear because he has no books.
+        $this->assertEquals('Alice', $result[0]['name']);
+        $this->assertTrue( isset($result[0]['books']["In Wonderland"] ), "Indexing by title should have books by title.");
+        $this->assertTrue( isset($result[0]['books']["Reloaded"] ), "Indexing by title should have books by title.");
+        $this->assertTrue( isset($result[0]['books']["Test"] ), "Indexing by title should have books by title.");
+    }
+
+    /**
+     * @group DDC-1018
+     */
+    public function testIndexByToOneJoinSilentlyIgnored()
+    {
+        $dql = 'SELECT B, A FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Book B '.
+               'INNER JOIN B.author A INDEX BY A.name ORDER BY A.name ASC';
+        $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT);
+
+        $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC618Book', $result[0]);
+        $this->assertInstanceOf('Doctrine\Tests\ORM\Functional\Ticket\DDC618Author', $result[0]->author);
+
+        $dql = 'SELECT B, A FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Book B '.
+               'INNER JOIN B.author A INDEX BY A.name ORDER BY A.name ASC';
+        $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
+
+        $this->assertEquals("Alice", $result[0]['author']['name']);
+    }
+
+    /**
+     * @group DDC-1018
+     */
+    public function testCombineIndexBy()
+    {
+        $dql = 'SELECT A, B FROM Doctrine\Tests\ORM\Functional\Ticket\DDC618Author A INDEX BY A.id '.
+               'INNER JOIN A.books B INDEX BY B.title ORDER BY A.name ASC';
+        $result = $this->_em->createQuery($dql)->getResult(\Doctrine\ORM\Query::HYDRATE_OBJECT);
+
+        $this->assertArrayHasKey(11, $result); // Alice
+
+        $this->assertEquals(3, count($result[11]->books)); // Alice, Joe doesnt appear because he has no books.
+        $this->assertEquals('Alice', $result[11]->name);
+        $this->assertTrue( isset($result[11]->books["In Wonderland"] ), "Indexing by title should have books by title.");
+        $this->assertTrue( isset($result[11]->books["Reloaded"] ), "Indexing by title should have books by title.");
+        $this->assertTrue( isset($result[11]->books["Test"] ), "Indexing by title should have books by title.");
+    }
+}
+
+/**
+ * @Entity
+ */
+class DDC618Author
+{
+    /**
+     * @Id
+     * @Column(type="integer")
+     */
+    public $id;
+
+    /** @Column(type="string") */
+    public $name;
+
+    /**
+     * @OneToMany(targetEntity="DDC618Book", mappedBy="author", cascade={"persist"})
+     */
+    public $books;
+
+    public function __construct()
+    {
+        $this->books = new \Doctrine\Common\Collections\ArrayCollection;
+    }
+
+    public function addBook($title)
+    {
+        $book = new DDC618Book($title, $this);
+        $this->books[] = $book;
+    }
+}
+
+/**
+ * @Entity
+ */
+class DDC618Book
+{
+    /**
+     * @Id @GeneratedValue
+     * @Column(type="integer")
+     */
+    public $id;
+
+    /** @column(type="string") */
+    public $title;
+
+    /** @ManyToOne(targetEntity="DDC618Author", inversedBy="books") */
+    public $author;
+
+    function __construct($title, $author)
+    {
+        $this->title = $title;
+        $this->author = $author;
+    }
+}
\ No newline at end of file