From ee73ac5dce810159243cc00196d6c3b65f08eec0 Mon Sep 17 00:00:00 2001 From: Chris Brown Date: Thu, 17 Oct 2019 12:17:07 -0400 Subject: [PATCH] Add auto-seeder tests --- src/Jobs/QueuedTenantDatabaseSeeder.php | 2 +- src/TenantManager.php | 9 +++--- tests/TenantManagerTest.php | 39 +++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/Jobs/QueuedTenantDatabaseSeeder.php b/src/Jobs/QueuedTenantDatabaseSeeder.php index 609c9b71..63883439 100644 --- a/src/Jobs/QueuedTenantDatabaseSeeder.php +++ b/src/Jobs/QueuedTenantDatabaseSeeder.php @@ -22,7 +22,7 @@ class QueuedTenantDatabaseSeeder implements ShouldQueue /** @var array */ protected $seederClassParameter = []; - public function __construct(Tenant $tenant, $seederClassName = '') + public function __construct(Tenant $tenant, string $seederClassName) { $this->tenantId = $tenant->id; $this->seederClassParameter = ! empty($seederClassName) ? ['--class' => $seederClassName] : []; diff --git a/src/TenantManager.php b/src/TenantManager.php index 3b31e92a..78929816 100644 --- a/src/TenantManager.php +++ b/src/TenantManager.php @@ -10,6 +10,7 @@ use Illuminate\Support\Collection; use Stancl\Tenancy\Contracts\TenantCannotBeCreatedException; use Stancl\Tenancy\Exceptions\TenantCouldNotBeIdentifiedException; use Stancl\Tenancy\Jobs\QueuedTenantDatabaseMigrator; +use Stancl\Tenancy\Jobs\QueuedTenantDatabaseSeeder; /** * @internal Class is subject to breaking changes in minor and patch versions. @@ -67,7 +68,7 @@ class TenantManager $afterCreating = []; if ($this->shouldMigrateAfterCreation()) { - $afterCreating += $this->databaseCreationQueued() ? [ + $afterCreating = array_merge($afterCreating, $this->databaseCreationQueued() ? [ new QueuedTenantDatabaseMigrator($tenant), ] : [ function () use ($tenant) { @@ -75,13 +76,13 @@ class TenantManager '--tenants' => [$tenant['id']], ]); }, - ]; + ]); if ($this->shouldSeedAfterMigration()) { $seederClassName = $this->getSeederRootClass(); $seederClassParameter = ! empty($seederClassName) ? ['--class' => $seederClassName] : []; - $afterCreating += $this->databaseCreationQueued() ? [ + $afterCreating = array_merge($afterCreating, $this->databaseCreationQueued() ? [ new QueuedTenantDatabaseSeeder($tenant, $seederClassName), ] : [ function () use ($tenant, $seederClassParameter) { @@ -89,7 +90,7 @@ class TenantManager '--tenants' => [$tenant['id']], ] + $seederClassParameter); }, - ]; + ]); } } diff --git a/tests/TenantManagerTest.php b/tests/TenantManagerTest.php index 64a7ac5a..cbc1d578 100644 --- a/tests/TenantManagerTest.php +++ b/tests/TenantManagerTest.php @@ -12,6 +12,7 @@ use Stancl\Tenancy\Exceptions\TenantDoesNotExistException; use Stancl\Tenancy\Exceptions\TenantWithThisIdAlreadyExistsException; use Stancl\Tenancy\Jobs\QueuedTenantDatabaseCreator; use Stancl\Tenancy\Jobs\QueuedTenantDatabaseMigrator; +use Stancl\Tenancy\Jobs\QueuedTenantDatabaseSeeder; use Stancl\Tenancy\Tenant; use Stancl\Tenancy\TenantManager; @@ -235,6 +236,25 @@ class TenantManagerTest extends TestCase $tenant2 = Tenant::create(['bar.localhost']); tenancy()->initialize($tenant2); $this->assertTrue(\Schema::hasTable('users')); + $this->assertCount(0, \DB::select('select * from users')); + } + + /** @test */ + public function automatic_seeding_works() + { + $tenant = Tenant::create(['foo.localhost']); + tenancy()->initialize($tenant); + $this->assertFalse(\Schema::hasTable('users')); + + config([ + 'tenancy.migrate_after_creation' => true, + 'tenancy.seed_after_migration' => true, + 'tenancy.seeder_class' => \Stancl\Tenancy\Tests\Etc\ExampleSeeder::class, + ]); + $tenant2 = Tenant::create(['bar.localhost']); + tenancy()->initialize($tenant2); + $this->assertTrue(\Schema::hasTable('users')); + $this->assertCount(1, \DB::select('select * from users')); } /** @test */ @@ -272,6 +292,25 @@ class TenantManagerTest extends TestCase // $this->assertTrue(\Schema::hasTable('users')); } + /** @test */ + public function auto_seeding_is_queued_when_enabled() + { + Queue::fake(); + + config([ + 'tenancy.queue_database_creation' => true, + 'tenancy.migrate_after_creation' => true, + 'tenancy.seed_after_migration' => true, + ]); + + $tenant = Tenant::new()->save(); + + Queue::assertPushedWithChain(QueuedTenantDatabaseCreator::class, [ + QueuedTenantDatabaseMigrator::class, + QueuedTenantDatabaseSeeder::class, + ]); + } + /** @test */ public function TenantDoesNotExistException_is_thrown_when_find_is_called_on_an_id_that_does_not_belong_to_any_tenant() {