1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 13:54:03 +00:00

TenantDatabaseManagerTest fully passes now

This commit is contained in:
Samuel Štancl 2019-09-17 18:57:19 +02:00
parent 5e9b421aa6
commit 524530c8d5
8 changed files with 28 additions and 24 deletions

View file

@ -70,6 +70,7 @@ return [
'Stancl\Tenancy\Features\TenantRedirect', 'Stancl\Tenancy\Features\TenantRedirect',
], ],
'migrate_after_creation' => false, // run migrations after creating a tenant '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_creation' => false,
'queue_database_deletion' => false, 'queue_database_deletion' => false,
'unique_id_generator' => 'Stancl\Tenancy\UUIDGenerator', 'unique_id_generator' => 'Stancl\Tenancy\UUIDGenerator',

View file

@ -10,6 +10,7 @@ use Stancl\Tenancy\Contracts\TenantDatabaseManager;
use Stancl\Tenancy\Exceptions\DatabaseManagerNotRegisteredException; use Stancl\Tenancy\Exceptions\DatabaseManagerNotRegisteredException;
use Stancl\Tenancy\Exceptions\TenantDatabaseAlreadyExistsException; use Stancl\Tenancy\Exceptions\TenantDatabaseAlreadyExistsException;
use Stancl\Tenancy\Jobs\QueuedTenantDatabaseCreator; use Stancl\Tenancy\Jobs\QueuedTenantDatabaseCreator;
use Stancl\Tenancy\Jobs\QueuedTenantDatabaseDeleter;
class DatabaseManager class DatabaseManager
{ {
@ -108,7 +109,7 @@ class DatabaseManager
$manager = $this->getTenantDatabaseManager($tenant); $manager = $this->getTenantDatabaseManager($tenant);
if ($this->app['config']['tenancy.queue_database_creation'] ?? false) { if ($this->app['config']['tenancy.queue_database_creation'] ?? false) {
QueuedTenantDatabaseCreator::dispatch($manager, $database, 'create'); QueuedTenantDatabaseCreator::dispatch($manager, $database);
} else { } else {
return $manager->createDatabase($database); return $manager->createDatabase($database);
} }
@ -119,8 +120,8 @@ class DatabaseManager
$database = $tenant->getDatabaseName(); $database = $tenant->getDatabaseName();
$manager = $this->getTenantDatabaseManager($tenant); $manager = $this->getTenantDatabaseManager($tenant);
if ($this->app['config']['tenancy.queue_database_creation'] ?? false) { if ($this->app['config']['tenancy.queue_database_deletion'] ?? false) {
QueuedTenantDatabaseCreator::dispatch($manager, $database, 'delete'); QueuedTenantDatabaseDeleter::dispatch($manager, $database);
} else { } else {
return $manager->deleteDatabase($database); return $manager->deleteDatabase($database);
} }
@ -128,6 +129,7 @@ class DatabaseManager
protected function getTenantDatabaseManager(Tenant $tenant): TenantDatabaseManager protected function getTenantDatabaseManager(Tenant $tenant): TenantDatabaseManager
{ {
// todo this shouldn't have to create a connection
$this->createTenantConnection($tenant->getDatabaseName(), $tenant->getConnectionName()); $this->createTenantConnection($tenant->getDatabaseName(), $tenant->getConnectionName());
$driver = $this->getDriver($tenant->getConnectionName()); $driver = $this->getDriver($tenant->getConnectionName());

View file

@ -7,6 +7,7 @@ namespace Stancl\Tenancy\Facades;
use Illuminate\Support\Facades\Facade; use Illuminate\Support\Facades\Facade;
use Stancl\Tenancy\Tenant as Tenant; use Stancl\Tenancy\Tenant as Tenant;
// todo rename to CurrentTenant?
class TenantFacade extends Facade class TenantFacade extends Facade
{ {
protected static function getFacadeAccessor() protected static function getFacadeAccessor()

View file

@ -174,7 +174,7 @@ class Tenant implements ArrayAccess
public function delete(): self public function delete(): self
{ {
if ($this->persisted) { if ($this->persisted) {
$this->tenantManager->deleteTenant($this); $this->manager->deleteTenant($this);
$this->persisted = false; $this->persisted = false;
} }

View file

@ -253,6 +253,11 @@ class TenantManager
return $this->app['config']['tenancy.migrate_after_creation'] ?? false; 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. * Add an event listener.
* *

2
test
View file

@ -6,5 +6,5 @@ docker-compose up -d
printf "Variant 1\n\n" printf "Variant 1\n\n"
docker-compose exec test env TENANCY_TEST_STORAGE_DRIVER=redis vendor/bin/phpunit --coverage-php coverage/1.cov "$@" docker-compose exec test env TENANCY_TEST_STORAGE_DRIVER=redis vendor/bin/phpunit --coverage-php coverage/1.cov "$@"
printf "Variant 2\n\n" 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/ docker-compose exec test vendor/bin/phpcov merge --clover clover.xml coverage/

View file

@ -4,11 +4,10 @@ declare(strict_types=1);
namespace Stancl\Tenancy\Tests; namespace Stancl\Tenancy\Tests;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Queue; use Illuminate\Support\Facades\Queue;
use Stancl\Tenancy\DatabaseManager;
use Stancl\Tenancy\Jobs\QueuedTenantDatabaseCreator; use Stancl\Tenancy\Jobs\QueuedTenantDatabaseCreator;
use Stancl\Tenancy\Jobs\QueuedTenantDatabaseDeleter; use Stancl\Tenancy\Jobs\QueuedTenantDatabaseDeleter;
use Stancl\Tenancy\Tenant;
use Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager; use Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager;
use Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager; use Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager;
use Stancl\Tenancy\TenantDatabaseManagers\SQLiteDatabaseManager; use Stancl\Tenancy\TenantDatabaseManagers\SQLiteDatabaseManager;
@ -74,9 +73,10 @@ class TenantDatabaseManagerTest extends TestCase
{ {
Queue::fake(); Queue::fake();
config()->set('tenancy.queue_database_creation', true); config()->set([
$db_name = 'testdatabase' . $this->randomString(10) . '.sqlite'; 'tenancy.queue_database_creation' => true,
app(DatabaseManager::class)->create($db_name, 'sqlite'); ]);
Tenant::create(['test2.localhost']);
Queue::assertPushed(QueuedTenantDatabaseCreator::class); Queue::assertPushed(QueuedTenantDatabaseCreator::class);
} }
@ -86,9 +86,12 @@ class TenantDatabaseManagerTest extends TestCase
{ {
Queue::fake(); Queue::fake();
config()->set('tenancy.queue_database_deletion', true); $tenant = Tenant::create(['test2.localhost']);
$db_name = 'testdatabase' . $this->randomString(10) . '.sqlite'; config()->set([
app(DatabaseManager::class)->delete($db_name, 'sqlite'); 'tenancy.queue_database_deletion' => true,
'tenancy.delete_database_after_tenant_deletion' => true,
]);
$tenant->delete();
Queue::assertPushed(QueuedTenantDatabaseDeleter::class); Queue::assertPushed(QueuedTenantDatabaseDeleter::class);
} }

View file

@ -49,14 +49,14 @@ class TenantManagerTest extends TestCase
{ {
$tenant = Tenant::new()->withDomains(['foo.localhost'])->save(); $tenant = Tenant::new()->withDomains(['foo.localhost'])->save();
$this->assertSame($tenant, tenant()->findByDomain('foo.localhost')); $this->assertSame($tenant, tenancy()->findByDomain('foo.localhost'));
} }
/** @test */ /** @test */
public function getIdByDomain_works() public function getIdByDomain_works()
{ {
$tenant = Tenant::new()->withDomains(['foo.localhost'])->save(); $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 */ /** @test */
@ -65,7 +65,7 @@ class TenantManagerTest extends TestCase
Tenant::new()->withDomains(['dev.localhost'])->save(); Tenant::new()->withDomains(['dev.localhost'])->save();
tenancy()->init('dev.localhost'); tenancy()->init('dev.localhost');
$this->assertSame(tenant()->tenant, tenant()->find(tenant('id'))); $this->assertSame(tenant(), tenancy()->find(tenant('id')));
} }
/** @test */ /** @test */
@ -76,14 +76,6 @@ class TenantManagerTest extends TestCase
$this->assertSame($tenant, tenancy()->getTenantById($tenant['id'])); $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 */ /** @test */
public function findByDomain_throws_an_exception_when_an_unused_domain_is_supplied() public function findByDomain_throws_an_exception_when_an_unused_domain_is_supplied()
{ {