From 524530c8d5982d70c1b0c5d2ae1759f0e1b2b97d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Tue, 17 Sep 2019 18:57:19 +0200 Subject: [PATCH] TenantDatabaseManagerTest fully passes now --- assets/config.php | 1 + src/DatabaseManager.php | 8 +++++--- src/Facades/TenantFacade.php | 1 + src/Tenant.php | 2 +- src/TenantManager.php | 5 +++++ test | 2 +- tests/TenantDatabaseManagerTest.php | 19 +++++++++++-------- tests/TenantManagerTest.php | 14 +++----------- 8 files changed, 28 insertions(+), 24 deletions(-) diff --git a/assets/config.php b/assets/config.php index 6e2b4c2c..2e92e3d6 100644 --- a/assets/config.php +++ b/assets/config.php @@ -70,6 +70,7 @@ return [ 'Stancl\Tenancy\Features\TenantRedirect', ], 'migrate_after_creation' => false, // run migrations after creating a tenant + 'delete_database_after_tenant_deletion' => false, // delete tenant's database after deleting him 'queue_database_creation' => false, 'queue_database_deletion' => false, 'unique_id_generator' => 'Stancl\Tenancy\UUIDGenerator', diff --git a/src/DatabaseManager.php b/src/DatabaseManager.php index 68f7747b..864152c1 100644 --- a/src/DatabaseManager.php +++ b/src/DatabaseManager.php @@ -10,6 +10,7 @@ use Stancl\Tenancy\Contracts\TenantDatabaseManager; use Stancl\Tenancy\Exceptions\DatabaseManagerNotRegisteredException; use Stancl\Tenancy\Exceptions\TenantDatabaseAlreadyExistsException; use Stancl\Tenancy\Jobs\QueuedTenantDatabaseCreator; +use Stancl\Tenancy\Jobs\QueuedTenantDatabaseDeleter; class DatabaseManager { @@ -108,7 +109,7 @@ class DatabaseManager $manager = $this->getTenantDatabaseManager($tenant); if ($this->app['config']['tenancy.queue_database_creation'] ?? false) { - QueuedTenantDatabaseCreator::dispatch($manager, $database, 'create'); + QueuedTenantDatabaseCreator::dispatch($manager, $database); } else { return $manager->createDatabase($database); } @@ -119,8 +120,8 @@ class DatabaseManager $database = $tenant->getDatabaseName(); $manager = $this->getTenantDatabaseManager($tenant); - if ($this->app['config']['tenancy.queue_database_creation'] ?? false) { - QueuedTenantDatabaseCreator::dispatch($manager, $database, 'delete'); + if ($this->app['config']['tenancy.queue_database_deletion'] ?? false) { + QueuedTenantDatabaseDeleter::dispatch($manager, $database); } else { return $manager->deleteDatabase($database); } @@ -128,6 +129,7 @@ class DatabaseManager protected function getTenantDatabaseManager(Tenant $tenant): TenantDatabaseManager { + // todo this shouldn't have to create a connection $this->createTenantConnection($tenant->getDatabaseName(), $tenant->getConnectionName()); $driver = $this->getDriver($tenant->getConnectionName()); diff --git a/src/Facades/TenantFacade.php b/src/Facades/TenantFacade.php index a2a06b57..dcde0d92 100644 --- a/src/Facades/TenantFacade.php +++ b/src/Facades/TenantFacade.php @@ -7,6 +7,7 @@ namespace Stancl\Tenancy\Facades; use Illuminate\Support\Facades\Facade; use Stancl\Tenancy\Tenant as Tenant; +// todo rename to CurrentTenant? class TenantFacade extends Facade { protected static function getFacadeAccessor() diff --git a/src/Tenant.php b/src/Tenant.php index a8194276..ac35d4de 100644 --- a/src/Tenant.php +++ b/src/Tenant.php @@ -174,7 +174,7 @@ class Tenant implements ArrayAccess public function delete(): self { if ($this->persisted) { - $this->tenantManager->deleteTenant($this); + $this->manager->deleteTenant($this); $this->persisted = false; } diff --git a/src/TenantManager.php b/src/TenantManager.php index 6d4ea67c..dad6196d 100644 --- a/src/TenantManager.php +++ b/src/TenantManager.php @@ -253,6 +253,11 @@ class TenantManager return $this->app['config']['tenancy.migrate_after_creation'] ?? false; } + public function shouldDeleteDatabase(): bool + { + return $this->app['config']['tenancy.delete_database_after_tenant_deletion'] ?? false; + } + /** * Add an event listener. * diff --git a/test b/test index 52437596..52b0072d 100755 --- a/test +++ b/test @@ -6,5 +6,5 @@ docker-compose up -d printf "Variant 1\n\n" docker-compose exec test env TENANCY_TEST_STORAGE_DRIVER=redis vendor/bin/phpunit --coverage-php coverage/1.cov "$@" printf "Variant 2\n\n" -docker-compose exec test env TENANCY_TEST_STORAGE_DRIVER=db vendor/bin/phpunit --coverage-php coverage/3.cov "$@" +docker-compose exec test env TENANCY_TEST_STORAGE_DRIVER=db vendor/bin/phpunit --coverage-php coverage/2.cov "$@" docker-compose exec test vendor/bin/phpcov merge --clover clover.xml coverage/ diff --git a/tests/TenantDatabaseManagerTest.php b/tests/TenantDatabaseManagerTest.php index 45de453b..130dd51c 100644 --- a/tests/TenantDatabaseManagerTest.php +++ b/tests/TenantDatabaseManagerTest.php @@ -4,11 +4,10 @@ declare(strict_types=1); namespace Stancl\Tenancy\Tests; -use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Queue; -use Stancl\Tenancy\DatabaseManager; use Stancl\Tenancy\Jobs\QueuedTenantDatabaseCreator; use Stancl\Tenancy\Jobs\QueuedTenantDatabaseDeleter; +use Stancl\Tenancy\Tenant; use Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager; use Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager; use Stancl\Tenancy\TenantDatabaseManagers\SQLiteDatabaseManager; @@ -74,9 +73,10 @@ class TenantDatabaseManagerTest extends TestCase { Queue::fake(); - config()->set('tenancy.queue_database_creation', true); - $db_name = 'testdatabase' . $this->randomString(10) . '.sqlite'; - app(DatabaseManager::class)->create($db_name, 'sqlite'); + config()->set([ + 'tenancy.queue_database_creation' => true, + ]); + Tenant::create(['test2.localhost']); Queue::assertPushed(QueuedTenantDatabaseCreator::class); } @@ -86,9 +86,12 @@ class TenantDatabaseManagerTest extends TestCase { Queue::fake(); - config()->set('tenancy.queue_database_deletion', true); - $db_name = 'testdatabase' . $this->randomString(10) . '.sqlite'; - app(DatabaseManager::class)->delete($db_name, 'sqlite'); + $tenant = Tenant::create(['test2.localhost']); + config()->set([ + 'tenancy.queue_database_deletion' => true, + 'tenancy.delete_database_after_tenant_deletion' => true, + ]); + $tenant->delete(); Queue::assertPushed(QueuedTenantDatabaseDeleter::class); } diff --git a/tests/TenantManagerTest.php b/tests/TenantManagerTest.php index f7f7a716..35874b65 100644 --- a/tests/TenantManagerTest.php +++ b/tests/TenantManagerTest.php @@ -49,14 +49,14 @@ class TenantManagerTest extends TestCase { $tenant = Tenant::new()->withDomains(['foo.localhost'])->save(); - $this->assertSame($tenant, tenant()->findByDomain('foo.localhost')); + $this->assertSame($tenant, tenancy()->findByDomain('foo.localhost')); } /** @test */ public function getIdByDomain_works() { $tenant = Tenant::new()->withDomains(['foo.localhost'])->save(); - $this->assertSame(tenant()->getTenantIdByDomain('foo.localhost'), tenant()->getIdByDomain('foo.localhost')); + $this->assertSame(tenant()->getTenantIdByDomain('foo.localhost'), tenancy()->getIdByDomain('foo.localhost')); } /** @test */ @@ -65,7 +65,7 @@ class TenantManagerTest extends TestCase Tenant::new()->withDomains(['dev.localhost'])->save(); tenancy()->init('dev.localhost'); - $this->assertSame(tenant()->tenant, tenant()->find(tenant('id'))); + $this->assertSame(tenant(), tenancy()->find(tenant('id'))); } /** @test */ @@ -76,14 +76,6 @@ class TenantManagerTest extends TestCase $this->assertSame($tenant, tenancy()->getTenantById($tenant['id'])); } - /** @test */ - public function create_returns_the_supplied_domain() - { - $domain = 'foo.localhost'; - - $this->assertSame($domain, Tenant::new()->withDomains([$domain])->save()['domain']); - } - /** @test */ public function findByDomain_throws_an_exception_when_an_unused_domain_is_supplied() {