]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add temporary test for migrating int to string
authorJulius Härtl <jus@bitgrid.net>
Fri, 4 Dec 2020 07:23:12 +0000 (08:23 +0100)
committerJulius Härtl <jus@bitgrid.net>
Mon, 14 Dec 2020 10:10:59 +0000 (11:10 +0100)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
tests/lib/DB/MigratorTest.php

index b5021dcccf9ddbd43665726cc7027871793bb085..52b0b0ff03ed8eceb5a8fc6dc8cc6a0952dbba7d 100644 (file)
@@ -13,6 +13,7 @@ use Doctrine\DBAL\DBALException;
 use Doctrine\DBAL\Platforms\OraclePlatform;
 use Doctrine\DBAL\Schema\Schema;
 use Doctrine\DBAL\Schema\SchemaConfig;
+use OC\DB\SchemaWrapper;
 use OCP\IConfig;
 
 /**
@@ -94,6 +95,26 @@ class MigratorTest extends \Test\TestCase {
                return [$startSchema, $endSchema];
        }
 
+       /**
+        * @return \Doctrine\DBAL\Schema\Schema[]
+        */
+       private function getChangedTypeSchema($from, $to) {
+               $startSchema = new Schema([], [], $this->getSchemaConfig());
+               $table = $startSchema->createTable($this->tableName);
+               $table->addColumn('id', $from);
+               $table->addColumn('name', 'string');
+               $table->addIndex(['id'], $this->tableName . '_id');
+
+               $endSchema = new Schema([], [], $this->getSchemaConfig());
+               $table = $endSchema->createTable($this->tableName);
+               $table->addColumn('id', $to);
+               $table->addColumn('name', 'string');
+               $table->addIndex(['id'], $this->tableName . '_id');
+
+               return [$startSchema, $endSchema];
+       }
+
+
        private function getSchemaConfig() {
                $config = new SchemaConfig();
                $config->setName($this->connection->getDatabase());
@@ -123,6 +144,34 @@ class MigratorTest extends \Test\TestCase {
                $this->fail('checkMigrate should have failed');
        }
 
+       public function testChangeToString() {
+               list($startSchema, $endSchema) = $this->getChangedTypeSchema('integer', 'string');
+               $migrator = $this->manager->getMigrator();
+               $migrator->migrate($startSchema);
+               $schema = new SchemaWrapper($this->connection);
+               $table = $schema->getTable(substr($this->tableName, 3));
+               $this->assertEquals('integer', $table->getColumn('id')->getType()->getName());
+
+               $this->connection->insert($this->tableName, ['id' => 1, 'name' => 'foo']);
+               $this->connection->insert($this->tableName, ['id' => 2, 'name' => 'bar']);
+               $this->connection->insert($this->tableName, ['id' => 3, 'name' => 'qwerty']);
+
+               $migrator->checkMigrate($endSchema);
+               $migrator->migrate($endSchema);
+               $this->addToAssertionCount(1);
+
+               $qb = $this->connection->getQueryBuilder();
+               $result = $qb->select('*')->from(substr($this->tableName, 3))->execute();
+               $this->assertEquals([
+                       ['id' => 1, 'name' => 'foo'],
+                       ['id' => 2, 'name' => 'bar'],
+                       ['id' => 3, 'name' => 'qwerty']
+               ], $result->fetchAll());
+               $schema = new SchemaWrapper($this->connection);
+               $table = $schema->getTable(substr($this->tableName, 3));
+               $this->assertEquals('string', $table->getColumn('id')->getType()->getName());
+       }
+
        public function testUpgrade() {
                list($startSchema, $endSchema) = $this->getDuplicateKeySchemas();
                $migrator = $this->manager->getMigrator();