123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- <?php
-
- namespace Doctrine\Tests\DBAL\Schema;
-
- require_once __DIR__ . '/../../TestInit.php';
-
- use Doctrine\DBAL\Schema\Schema;
- use Doctrine\DBAL\Schema\Table;
- use Doctrine\DBAL\Schema\Sequence;
-
- class SchemaTest extends \PHPUnit_Framework_TestCase
- {
- public function testAddTable()
- {
- $tableName = "foo";
- $table = new Table($tableName);
-
- $schema = new Schema(array($table));
-
- $this->assertTrue($schema->hasTable($tableName));
-
- $tables = $schema->getTables();
- $this->assertTrue( isset($tables[$tableName]) );
- $this->assertSame($table, $tables[$tableName]);
- $this->assertSame($table, $schema->getTable($tableName));
- $this->assertTrue($schema->hasTable($tableName));
- }
-
- public function testTableMatchingCaseInsenstive()
- {
- $table = new Table("Foo");
-
- $schema = new Schema(array($table));
- $this->assertTrue($schema->hasTable("foo"));
- $this->assertTrue($schema->hasTable("FOO"));
-
- $this->assertSame($table, $schema->getTable('FOO'));
- $this->assertSame($table, $schema->getTable('foo'));
- $this->assertSame($table, $schema->getTable('Foo'));
- }
-
- public function testGetUnknownTableThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $schema = new Schema();
- $schema->getTable("unknown");
- }
-
- public function testCreateTableTwiceThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $tableName = "foo";
- $table = new Table($tableName);
- $tables = array($table, $table);
-
- $schema = new Schema($tables);
- }
-
- public function testRenameTable()
- {
- $tableName = "foo";
- $table = new Table($tableName);
- $schema = new Schema(array($table));
-
- $this->assertTrue($schema->hasTable("foo"));
- $schema->renameTable("foo", "bar");
- $this->assertFalse($schema->hasTable("foo"));
- $this->assertTrue($schema->hasTable("bar"));
- $this->assertSame($table, $schema->getTable("bar"));
- }
-
- public function testDropTable()
- {
- $tableName = "foo";
- $table = new Table($tableName);
- $schema = new Schema(array($table));
-
- $this->assertTrue($schema->hasTable("foo"));
-
- $schema->dropTable("foo");
-
- $this->assertFalse($schema->hasTable("foo"));
- }
-
- public function testCreateTable()
- {
- $schema = new Schema();
-
- $this->assertFalse($schema->hasTable("foo"));
-
- $table = $schema->createTable("foo");
-
- $this->assertInstanceOf('Doctrine\DBAL\Schema\Table', $table);
- $this->assertEquals("foo", $table->getName());
- $this->assertTrue($schema->hasTable("foo"));
- }
-
- public function testAddSequences()
- {
- $sequence = new Sequence("a_seq", 1, 1);
-
- $schema = new Schema(array(), array($sequence));
-
- $this->assertTrue($schema->hasSequence("a_seq"));
- $this->assertInstanceOf('Doctrine\DBAL\Schema\Sequence', $schema->getSequence("a_seq"));
-
- $sequences = $schema->getSequences();
- $this->assertArrayHasKey('a_seq', $sequences);
- }
-
- public function testSequenceAccessCaseInsensitive()
- {
- $sequence = new Sequence("a_Seq");
-
- $schema = new Schema(array(), array($sequence));
- $this->assertTrue($schema->hasSequence('a_seq'));
- $this->assertTrue($schema->hasSequence('a_Seq'));
- $this->assertTrue($schema->hasSequence('A_SEQ'));
-
- $this->assertEquals($sequence, $schema->getSequence('a_seq'));
- $this->assertEquals($sequence, $schema->getSequence('a_Seq'));
- $this->assertEquals($sequence, $schema->getSequence('A_SEQ'));
- }
-
- public function testGetUnknownSequenceThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $schema = new Schema();
- $schema->getSequence("unknown");
- }
-
- public function testCreateSequence()
- {
- $schema = new Schema();
- $sequence = $schema->createSequence('a_seq', 10, 20);
-
- $this->assertEquals('a_seq', $sequence->getName());
- $this->assertEquals(10, $sequence->getAllocationSize());
- $this->assertEquals(20, $sequence->getInitialValue());
-
- $this->assertTrue($schema->hasSequence("a_seq"));
- $this->assertInstanceOf('Doctrine\DBAL\Schema\Sequence', $schema->getSequence("a_seq"));
-
- $sequences = $schema->getSequences();
- $this->assertArrayHasKey('a_seq', $sequences);
- }
-
- public function testDropSequence()
- {
- $sequence = new Sequence("a_seq", 1, 1);
-
- $schema = new Schema(array(), array($sequence));
-
- $schema->dropSequence("a_seq");
- $this->assertFalse($schema->hasSequence("a_seq"));
- }
-
- public function testAddSequenceTwiceThrowsException()
- {
- $this->setExpectedException("Doctrine\DBAL\Schema\SchemaException");
-
- $sequence = new Sequence("a_seq", 1, 1);
-
- $schema = new Schema(array(), array($sequence, $sequence));
- }
-
- public function testConfigMaxIdentifierLength()
- {
- $schemaConfig = new \Doctrine\DBAL\Schema\SchemaConfig();
- $schemaConfig->setMaxIdentifierLength(5);
-
- $schema = new Schema(array(), array(), $schemaConfig);
- $table = $schema->createTable("smalltable");
- $table->addColumn('long_id', 'integer');
- $table->addIndex(array('long_id'));
-
- $index = current($table->getIndexes());
- $this->assertEquals(5, strlen($index->getName()));
- }
-
- public function testDeepClone()
- {
- $schema = new Schema();
- $sequence = $schema->createSequence('baz');
-
- $tableA = $schema->createTable('foo');
- $tableA->addColumn('id', 'integer');
-
- $tableB = $schema->createTable('bar');
- $tableB->addColumn('id', 'integer');
- $tableB->addColumn('foo_id', 'integer');
- $tableB->addForeignKeyConstraint($tableA, array('foo_id'), array('id'));
-
- $schemaNew = clone $schema;
-
- $this->assertNotSame($sequence, $schemaNew->getSequence('baz'));
-
- $this->assertNotSame($tableA, $schemaNew->getTable('foo'));
- $this->assertNotSame($tableA->getColumn('id'), $schemaNew->getTable('foo')->getColumn('id'));
-
- $this->assertNotSame($tableB, $schemaNew->getTable('bar'));
- $this->assertNotSame($tableB->getColumn('id'), $schemaNew->getTable('bar')->getColumn('id'));
-
- $fk = $schemaNew->getTable('bar')->getForeignKeys();
- $fk = current($fk);
- $this->assertSame($schemaNew->getTable('bar'), $this->readAttribute($fk, '_localTable'));
- }
- }
|