From 7a98f0874b23bf55eddf17325b27adeb3a6a322e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Sat, 29 Jun 2019 13:40:28 +0200 Subject: [PATCH] Add PostgreSQL DB driver --- .travis.yml | 1 + .../PostgreSQLDatabaseManager.php | 19 +++++++++ src/config/tenancy.php | 1 + tests/TenantDatabaseManagerTest.php | 41 +++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 src/TenantDatabaseManagers/PostgreSQLDatabaseManager.php diff --git a/.travis.yml b/.travis.yml index f92d5e2c..644ee8ef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ php: services: - mysql + - postgresql - redis-server before_install: diff --git a/src/TenantDatabaseManagers/PostgreSQLDatabaseManager.php b/src/TenantDatabaseManagers/PostgreSQLDatabaseManager.php new file mode 100644 index 00000000..66d6f60d --- /dev/null +++ b/src/TenantDatabaseManagers/PostgreSQLDatabaseManager.php @@ -0,0 +1,19 @@ + [ 'sqlite' => 'Stancl\Tenancy\TenantDatabaseManagers\SQLiteDatabaseManager', 'mysql' => 'Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager', + 'pgsql' => 'Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager', ], 'queue_database_creation' => false, 'queue_database_deletion' => false, diff --git a/tests/TenantDatabaseManagerTest.php b/tests/TenantDatabaseManagerTest.php index 8d25913a..cf813d88 100644 --- a/tests/TenantDatabaseManagerTest.php +++ b/tests/TenantDatabaseManagerTest.php @@ -78,6 +78,47 @@ class TenantDatabaseManagerTest extends TestCase $this->assertEmpty(DB::select("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$db_name'")); } + /** @test */ + public function pgsql_database_can_be_created_and_deleted() + { + if (! $this->isTravis()) { + $this->markTestSkipped('As to not bloat your PostgreSQL instance with test databases, this test is not run by default.'); + } + + config()->set('database.default', 'pgsql'); + + $db_name = 'testdatabase' . $this->randomString(10); + app(DatabaseManager::class)->create($db_name, 'pgsql'); + $this->assertNotEmpty(DB::select("SELECT datname FROM pg_catalog.pg_database WHERE datname = '$db_name'")); + + app(DatabaseManager::class)->delete($db_name, 'pgsql'); + $this->assertEmpty(DB::select("SELECT datname FROM pg_catalog.pg_database WHERE datname = '$db_name'")); + } + + /** @test */ + public function pgsql_database_can_be_created_and_deleted_using_queued_commands() + { + if (! $this->isTravis()) { + $this->markTestSkipped('As to not bloat your PostgreSQL instance with test databases, this test is not run by default.'); + } + + config()->set('database.default', 'pgsql'); + + $db_name = 'testdatabase' . $this->randomString(10); + + $databaseManagers = config('tenancy.database_managers'); + $job = new QueuedTenantDatabaseCreator(app($databaseManagers['pgsql']), $db_name); + $job->handle(); + + $this->assertNotEmpty(DB::select("SELECT datname FROM pg_catalog.pg_database WHERE datname = '$db_name'")); + + $databaseManagers = config('tenancy.database_managers'); + $job = new QueuedTenantDatabaseDeleter(app($databaseManagers['pgsql']), $db_name); + $job->handle(); + + $this->assertEmpty(DB::select("SELECT datname FROM pg_catalog.pg_database WHERE datname = '$db_name'")); + } + /** @test */ public function database_creation_can_be_queued() {