Rajout de doctrine/orm
[zf2.biz/application_blanche.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Tools / SchemaToolTest.php
diff --git a/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php b/vendor/doctrine/orm/tests/Doctrine/Tests/ORM/Tools/SchemaToolTest.php
new file mode 100644 (file)
index 0000000..66093a3
--- /dev/null
@@ -0,0 +1,135 @@
+<?php
+
+namespace Doctrine\Tests\ORM\Tools;
+
+use Doctrine\ORM\Tools\SchemaTool;
+use Doctrine\ORM\Tools\ToolEvents;
+use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs;
+use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;
+
+require_once __DIR__ . '/../../TestInit.php';
+
+class SchemaToolTest extends \Doctrine\Tests\OrmTestCase
+{
+    public function testAddUniqueIndexForUniqueFieldAnnocation()
+    {
+        $em = $this->_getTestEntityManager();
+        $schemaTool = new SchemaTool($em);
+
+        $classes = array(
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsComment'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsEmployee'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsGroup'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'),
+        );
+
+        $schema = $schemaTool->getSchemaFromMetadata($classes);
+
+        $this->assertTrue($schema->hasTable('cms_users'), "Table cms_users should exist.");
+        $this->assertTrue($schema->getTable('cms_users')->columnsAreIndexed(array('username')), "username column should be indexed.");
+    }
+
+    public function testAnnotationOptionsAttribute()
+    {
+        $em = $this->_getTestEntityManager();
+        $schemaTool = new SchemaTool($em);
+
+        $classes = array(
+            $em->getClassMetadata(__NAMESPACE__ . '\\TestEntityWithAnnotationOptionsAttribute'),
+        );
+
+        $schema = $schemaTool->getSchemaFromMetadata($classes);
+
+        $expected = array('foo' => 'bar', 'baz' => array('key' => 'val'));
+        $this->assertEquals($expected, $schema->getTable('TestEntityWithAnnotationOptionsAttribute')->getOptions(), "options annotation are passed to the tables optionss");
+        $this->assertEquals($expected, $schema->getTable('TestEntityWithAnnotationOptionsAttribute')->getColumn('test')->getCustomSchemaOptions(), "options annotation are passed to the columns customSchemaOptions");
+    }
+
+    /**
+     * @group DDC-200
+     */
+    public function testPassColumnDefinitionToJoinColumn()
+    {
+        $customColumnDef = "MEDIUMINT(6) UNSIGNED NOT NULL";
+
+        $em = $this->_getTestEntityManager();
+        $schemaTool = new SchemaTool($em);
+
+        $avatar = $em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumAvatar');
+        $avatar->fieldMappings['id']['columnDefinition'] = $customColumnDef;
+        $user = $em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumUser');
+
+        $classes = array($avatar, $user);
+
+        $schema = $schemaTool->getSchemaFromMetadata($classes);
+
+        $this->assertTrue($schema->hasTable('forum_users'));
+        $table = $schema->getTable("forum_users");
+        $this->assertTrue($table->hasColumn('avatar_id'));
+        $this->assertEquals($customColumnDef, $table->getColumn('avatar_id')->getColumnDefinition());
+    }
+
+    /**
+     * @group DDC-283
+     */
+    public function testPostGenerateEvents()
+    {
+        $listener = new GenerateSchemaEventListener();
+
+        $em = $this->_getTestEntityManager();
+        $em->getEventManager()->addEventListener(
+            array(ToolEvents::postGenerateSchemaTable, ToolEvents::postGenerateSchema), $listener
+        );
+        $schemaTool = new SchemaTool($em);
+
+        $classes = array(
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsComment'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsEmployee'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsGroup'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
+            $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'),
+        );
+
+        $schema = $schemaTool->getSchemaFromMetadata($classes);
+
+        $this->assertEquals(count($classes), $listener->tableCalls);
+        $this->assertTrue($listener->schemaCalled);
+    }
+}
+
+/**
+ * @Entity
+ * @Table(options={"foo": "bar", "baz": {"key": "val"}})
+ */
+class TestEntityWithAnnotationOptionsAttribute
+{
+    /** @Id @Column */
+    private $id;
+
+    /**
+     * @Column(type="string", options={"foo": "bar", "baz": {"key": "val"}})
+     */
+    private $test;
+}
+
+class GenerateSchemaEventListener
+{
+    public $tableCalls = 0;
+    public $schemaCalled = false;
+
+    public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs)
+    {
+        $this->tableCalls++;
+    }
+
+    public function postGenerateSchema(GenerateSchemaEventArgs $eventArgs)
+    {
+        $this->schemaCalled = true;
+    }
+}
\ No newline at end of file