mirror of
https://github.com/archtechx/tenancy.git
synced 2025-12-12 10:54:04 +00:00
TenantDatabaseManagerTest fully passes now
This commit is contained in:
parent
5e9b421aa6
commit
524530c8d5
8 changed files with 28 additions and 24 deletions
|
|
@ -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',
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
2
test
|
|
@ -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/
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue