Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Tools / SchemaToolTest.php
1 <?php
2
3 namespace Doctrine\Tests\ORM\Tools;
4
5 use Doctrine\ORM\Tools\SchemaTool;
6 use Doctrine\ORM\Tools\ToolEvents;
7 use Doctrine\ORM\Tools\Event\GenerateSchemaTableEventArgs;
8 use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;
9
10 require_once __DIR__ . '/../../TestInit.php';
11
12 class SchemaToolTest extends \Doctrine\Tests\OrmTestCase
13 {
14     public function testAddUniqueIndexForUniqueFieldAnnocation()
15     {
16         $em = $this->_getTestEntityManager();
17         $schemaTool = new SchemaTool($em);
18
19         $classes = array(
20             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress'),
21             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'),
22             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsComment'),
23             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsEmployee'),
24             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsGroup'),
25             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
26             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'),
27         );
28
29         $schema = $schemaTool->getSchemaFromMetadata($classes);
30
31         $this->assertTrue($schema->hasTable('cms_users'), "Table cms_users should exist.");
32         $this->assertTrue($schema->getTable('cms_users')->columnsAreIndexed(array('username')), "username column should be indexed.");
33     }
34
35     public function testAnnotationOptionsAttribute()
36     {
37         $em = $this->_getTestEntityManager();
38         $schemaTool = new SchemaTool($em);
39
40         $classes = array(
41             $em->getClassMetadata(__NAMESPACE__ . '\\TestEntityWithAnnotationOptionsAttribute'),
42         );
43
44         $schema = $schemaTool->getSchemaFromMetadata($classes);
45
46         $expected = array('foo' => 'bar', 'baz' => array('key' => 'val'));
47  
48         $this->assertEquals($expected, $schema->getTable('TestEntityWithAnnotationOptionsAttribute')->getOptions(), "options annotation are passed to the tables optionss");
49         $this->assertEquals($expected, $schema->getTable('TestEntityWithAnnotationOptionsAttribute')->getColumn('test')->getCustomSchemaOptions(), "options annotation are passed to the columns customSchemaOptions");
50     }
51
52     /**
53      * @group DDC-200
54      */
55     public function testPassColumnDefinitionToJoinColumn()
56     {
57         $customColumnDef = "MEDIUMINT(6) UNSIGNED NOT NULL";
58
59         $em = $this->_getTestEntityManager();
60         $schemaTool = new SchemaTool($em);
61
62         $avatar = $em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumAvatar');
63         $avatar->fieldMappings['id']['columnDefinition'] = $customColumnDef;
64         $user = $em->getClassMetadata('Doctrine\Tests\Models\Forum\ForumUser');
65
66         $classes = array($avatar, $user);
67
68         $schema = $schemaTool->getSchemaFromMetadata($classes);
69
70         $this->assertTrue($schema->hasTable('forum_users'));
71         $table = $schema->getTable("forum_users");
72         $this->assertTrue($table->hasColumn('avatar_id'));
73         $this->assertEquals($customColumnDef, $table->getColumn('avatar_id')->getColumnDefinition());
74     }
75
76     /**
77      * @group DDC-283
78      */
79     public function testPostGenerateEvents()
80     {
81         $listener = new GenerateSchemaEventListener();
82
83         $em = $this->_getTestEntityManager();
84         $em->getEventManager()->addEventListener(
85             array(ToolEvents::postGenerateSchemaTable, ToolEvents::postGenerateSchema), $listener
86         );
87         $schemaTool = new SchemaTool($em);
88
89         $classes = array(
90             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress'),
91             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsArticle'),
92             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsComment'),
93             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsEmployee'),
94             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsGroup'),
95             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
96             $em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'),
97         );
98
99         $schema = $schemaTool->getSchemaFromMetadata($classes);
100
101         $this->assertEquals(count($classes), $listener->tableCalls);
102         $this->assertTrue($listener->schemaCalled);
103     }
104 }
105
106 /**
107  * @Entity
108  * @Table(options={"foo": "bar", "baz": {"key": "val"}})
109  */
110 class TestEntityWithAnnotationOptionsAttribute
111 {
112     /** @Id @Column */
113     private $id;
114
115     /**
116      * @Column(type="string", options={"foo": "bar", "baz": {"key": "val"}})
117      */
118     private $test;
119 }
120
121 class GenerateSchemaEventListener
122 {
123     public $tableCalls = 0;
124     public $schemaCalled = false;
125
126     public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs)
127     {
128         $this->tableCalls++;
129     }
130
131     public function postGenerateSchema(GenerateSchemaEventArgs $eventArgs)
132     {
133         $this->schemaCalled = true;
134     }
135 }