1
0
Fork 0
mirror of synced 2024-06-02 10:54:44 +12:00

test(migration): run fixing method twice

This commit is contained in:
Torsten Dittmann 2021-01-19 09:54:19 +01:00
parent ac3e908c04
commit fbcfa00856
3 changed files with 82 additions and 70 deletions

View file

@ -0,0 +1,39 @@
<?php
namespace Appwrite\Tests;
use Appwrite\Database\Document;
use Appwrite\Migration\Migration;
use PHPUnit\Framework\TestCase;
use ReflectionMethod;
abstract class MigrationTest extends TestCase
{
/**
* @var PDO
*/
protected \PDO $pdo;
/**
* @var Migration
*/
protected Migration $migration;
/**
* @var ReflectionMethod
*/
protected ReflectionMethod $method;
/**
* Runs every document fix twice, to prevent corrupted data on multiple migrations.
*
* @param Document $document
*/
protected function fixDocument(Document $document)
{
return $this->method->invokeArgs($this->migration, [
$this->method->invokeArgs($this->migration, [$document])
]);
}
}

View file

@ -6,39 +6,29 @@ use ReflectionClass;
use Appwrite\Migration\Version\V05;
use Appwrite\Database\Database;
use Appwrite\Database\Document;
use PHPUnit\Framework\TestCase;
use Utopia\Config\Config;
class MigrationV05Test extends TestCase
class MigrationV05Test extends MigrationTest
{
/**
* @var PDO
*/
protected \PDO $pdo;
public function setUp(): void
{
Config::load('providers', __DIR__ . '/../../../app/config/providers.php');
$this->pdo = new \PDO('sqlite::memory:');
$this->migration = new V05($this->pdo);
$reflector = new ReflectionClass('Appwrite\Migration\Version\V05');
$this->method = $reflector->getMethod('fixDocument');
$this->method->setAccessible(true);
}
public function testMigration()
{
Config::load('providers', __DIR__ . '/../../../app/config/providers.php');
$v05 = new V05($this->pdo);
$reflector = new ReflectionClass('Appwrite\Migration\Version\V05');
$method = $reflector->getMethod('fixDocument');
$method->setAccessible(true);
$document = $method->invokeArgs($v05, [
new Document([
'$uid' => 'unique',
'$collection' => Database::SYSTEM_COLLECTION_PROJECTS,
'usersOauthGithubAppid' => 123,
'usersOauthGithubSecret' => 456
])
]);
$document = $this->fixDocument(new Document([
'$uid' => 'unique',
'$collection' => Database::SYSTEM_COLLECTION_PROJECTS,
'usersOauthGithubAppid' => 123,
'usersOauthGithubSecret' => 456
]));
$this->assertEquals($document->getAttribute('$uid', null), null);
$this->assertEquals($document->getAttribute('$id', null), 'unique');
@ -51,27 +41,23 @@ class MigrationV05Test extends TestCase
$this->assertEquals($document->getAttribute('security', true), false);
$document = $method->invokeArgs($v05, [
new Document([
'$uid' => 'unique',
'$collection' => Database::SYSTEM_COLLECTION_TASKS
])
]);
$document = $this->fixDocument(new Document([
'$uid' => 'unique',
'$collection' => Database::SYSTEM_COLLECTION_TASKS
]));
$this->assertEquals($document->getAttribute('$uid', null), null);
$this->assertEquals($document->getAttribute('$id', null), 'unique');
$this->assertEquals($document->getAttribute('security', true), false);
$document = $method->invokeArgs($v05, [
new Document([
'$uid' => 'unique',
'$collection' => Database::SYSTEM_COLLECTION_USERS,
'oauthGithub' => 'id',
'oauthGithubAccessToken' => 'token',
'confirm' => false
])
]);
$document = $this->fixDocument(new Document([
'$uid' => 'unique',
'$collection' => Database::SYSTEM_COLLECTION_USERS,
'oauthGithub' => 'id',
'oauthGithubAccessToken' => 'token',
'confirm' => false
]));
$this->assertEquals($document->getAttribute('$uid', null), null);
$this->assertEquals($document->getAttribute('$id', null), 'unique');
@ -85,13 +71,11 @@ class MigrationV05Test extends TestCase
$this->assertEquals($document->getAttribute('oauthGithubAccessToken', null), null);
$this->assertEquals($document->getAttribute('oauth2GithubAccessToken', null), 'token');
$document = $method->invokeArgs($v05, [
new Document([
'$uid' => 'unique',
'$collection' => Database::SYSTEM_COLLECTION_PLATFORMS,
'url' => 'https://appwrite.io'
])
]);
$document = $this->fixDocument(new Document([
'$uid' => 'unique',
'$collection' => Database::SYSTEM_COLLECTION_PLATFORMS,
'url' => 'https://appwrite.io'
]));
$this->assertEquals($document->getAttribute('$uid', null), null);
$this->assertEquals($document->getAttribute('$id', null), 'unique');

View file

@ -6,54 +6,43 @@ use ReflectionClass;
use Appwrite\Migration\Version\V06;
use Appwrite\Database\Database;
use Appwrite\Database\Document;
use PHPUnit\Framework\TestCase;
class MigrationV06Test extends TestCase
class MigrationV06Test extends MigrationTest
{
/**
* @var PDO
*/
protected \PDO $pdo;
public function setUp(): void
{
$this->pdo = new \PDO('sqlite::memory:');
$this->migration = new V06($this->pdo);
$reflector = new ReflectionClass('Appwrite\Migration\Version\V06');
$this->method = $reflector->getMethod('fixDocument');
$this->method->setAccessible(true);
}
public function testMigration()
{
$v06 = new V06($this->pdo);
$reflector = new ReflectionClass('Appwrite\Migration\Version\V06');
$method = $reflector->getMethod('fixDocument');
$method->setAccessible(true);
$document = $method->invokeArgs($v06, [
new Document([
'$id' => uniqid(),
'$collection' => Database::SYSTEM_COLLECTION_USERS,
'password-update' => 123
])
]);
$document = $this->fixDocument(new Document([
'$id' => uniqid(),
'$collection' => Database::SYSTEM_COLLECTION_USERS,
'password-update' => 123
]));
$this->assertEquals($document->getAttribute('password-update', null), null);
$this->assertEquals($document->getAttribute('passwordUpdate', null), 123);
$document = $method->invokeArgs($v06, [
$document = $this->fixDocument(
new Document([
'$id' => uniqid(),
'$collection' => Database::SYSTEM_COLLECTION_KEYS,
'secret' => 123
])
]);
);
$encrypted = json_decode($document->getAttribute('secret', null));
$this->assertObjectHasAttribute('data', $encrypted);
$this->assertObjectHasAttribute('method', $encrypted);
$this->assertObjectHasAttribute('iv', $encrypted);
$this->assertObjectHasAttribute('tag', $encrypted);
$this->assertObjectHasAttribute('version', $encrypted);
$document = $method->invokeArgs($v06, [$document]);
$this->assertEquals($document->getAttribute('secret', null), json_encode($encrypted));
}
}