123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <?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 testColumnAnnotationOptionsAttribute()
- {
- $em = $this->_getTestEntityManager();
- $schemaTool = new SchemaTool($em);
- $classes = array(
- $em->getClassMetadata(__NAMESPACE__ . '\\TestEntityWithColumnAnnotationOptionsAttribute'),
- );
- $schema = $schemaTool->getSchemaFromMetadata($classes);
- $expected = array('foo' => 'bar', 'baz' => array('key' => 'val'));
- $this->assertEquals($expected, $schema->getTable('TestEntityWithColumnAnnotationOptionsAttribute')->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
- */
- class TestEntityWithColumnAnnotationOptionsAttribute
- {
- /** @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;
- }
- }
|