Add temporary test for migrating int to string

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl 2020-12-04 08:23:12 +01:00
parent 3cf7041c94
commit ace90466d6
No known key found for this signature in database
GPG Key ID: 4C614C6ED2CDE6DF
1 changed files with 49 additions and 0 deletions

View File

@ -13,6 +13,7 @@ use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Platforms\OraclePlatform; use Doctrine\DBAL\Platforms\OraclePlatform;
use Doctrine\DBAL\Schema\Schema; use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Schema\SchemaConfig; use Doctrine\DBAL\Schema\SchemaConfig;
use OC\DB\SchemaWrapper;
use OCP\IConfig; use OCP\IConfig;
/** /**
@ -94,6 +95,26 @@ class MigratorTest extends \Test\TestCase {
return [$startSchema, $endSchema]; 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() { private function getSchemaConfig() {
$config = new SchemaConfig(); $config = new SchemaConfig();
$config->setName($this->connection->getDatabase()); $config->setName($this->connection->getDatabase());
@ -123,6 +144,34 @@ class MigratorTest extends \Test\TestCase {
$this->fail('checkMigrate should have failed'); $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() { public function testUpgrade() {
list($startSchema, $endSchema) = $this->getDuplicateKeySchemas(); list($startSchema, $endSchema) = $this->getDuplicateKeySchemas();
$migrator = $this->manager->getMigrator(); $migrator = $this->manager->getMigrator();