From fe0a322b87969f42031c411a48479046bd54fb8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Tue, 25 Oct 2022 12:53:31 +0200 Subject: [PATCH] add public connection() method to the Tenant DB manager interface --- .../StatefulTenantDatabaseManager.php | 22 +++++++++++++++++++ .../Contracts/TenantDatabaseManager.php | 9 -------- src/Database/DatabaseConfig.php | 4 +++- .../TenantDatabaseManager.php | 6 ++--- tests/DatabasePreparationTest.php | 4 +--- tests/TenantDatabaseManagerTest.php | 6 ++++- 6 files changed, 34 insertions(+), 17 deletions(-) create mode 100644 src/Database/Contracts/StatefulTenantDatabaseManager.php diff --git a/src/Database/Contracts/StatefulTenantDatabaseManager.php b/src/Database/Contracts/StatefulTenantDatabaseManager.php new file mode 100644 index 00000000..36a08db2 --- /dev/null +++ b/src/Database/Contracts/StatefulTenantDatabaseManager.php @@ -0,0 +1,22 @@ +setConnection($this->getTemplateConnectionName()); + if ($databaseManager instanceof Contracts\StatefulTenantDatabaseManager) { + $databaseManager->setConnection($this->getTemplateConnectionName()); + } return $databaseManager; } diff --git a/src/Database/TenantDatabaseManagers/TenantDatabaseManager.php b/src/Database/TenantDatabaseManagers/TenantDatabaseManager.php index b7dd15fa..87916088 100644 --- a/src/Database/TenantDatabaseManagers/TenantDatabaseManager.php +++ b/src/Database/TenantDatabaseManagers/TenantDatabaseManager.php @@ -6,15 +6,15 @@ namespace Stancl\Tenancy\Database\TenantDatabaseManagers; use Illuminate\Database\Connection; use Illuminate\Support\Facades\DB; -use Stancl\Tenancy\Database\Contracts\TenantDatabaseManager as Contract; +use Stancl\Tenancy\Database\Contracts\StatefulTenantDatabaseManager; use Stancl\Tenancy\Database\Exceptions\NoConnectionSetException; -abstract class TenantDatabaseManager implements Contract // todo better naming? +abstract class TenantDatabaseManager implements StatefulTenantDatabaseManager { /** The database connection to the server. */ protected string $connection; - protected function database(): Connection + public function database(): Connection { if (! isset($this->connection)) { throw new NoConnectionSetException(static::class); diff --git a/tests/DatabasePreparationTest.php b/tests/DatabasePreparationTest.php index e31fac9b..d5641af4 100644 --- a/tests/DatabasePreparationTest.php +++ b/tests/DatabasePreparationTest.php @@ -22,9 +22,7 @@ test('database can be created after tenant creation', function () { })->toListener()); $tenant = Tenant::create(); - - $manager = app(MySQLDatabaseManager::class); - $manager->setConnection('mysql'); + $manager = $tenant->database()->manager(); expect($manager->databaseExists($tenant->database()->getName()))->toBeTrue(); }); diff --git a/tests/TenantDatabaseManagerTest.php b/tests/TenantDatabaseManagerTest.php index b16c06b6..33a3158f 100644 --- a/tests/TenantDatabaseManagerTest.php +++ b/tests/TenantDatabaseManagerTest.php @@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Schema; use Illuminate\Support\Str; use Stancl\JobPipeline\JobPipeline; use Stancl\Tenancy\Bootstrappers\DatabaseTenancyBootstrapper; +use Stancl\Tenancy\Database\Contracts\StatefulTenantDatabaseManager; use Stancl\Tenancy\Database\DatabaseManager; use Stancl\Tenancy\Events\TenancyEnded; use Stancl\Tenancy\Events\TenancyInitialized; @@ -36,7 +37,10 @@ test('databases can be created and deleted', function ($driver, $databaseManager $name = 'db' . pest()->randomString(); $manager = app($databaseManager); - $manager->setConnection($driver); + + if ($manager instanceof StatefulTenantDatabaseManager) { + $manager->setConnection($driver); + } expect($manager->databaseExists($name))->toBeFalse();