From 30f0a2b134ea2a24d2e19932f4894d655c4a58e3 Mon Sep 17 00:00:00 2001 From: "j.stein" Date: Tue, 18 Jan 2022 18:19:40 +0100 Subject: [PATCH] Add readied events --- assets/TenancyServiceProvider.stub.php | 6 ++++++ src/Database/Concerns/WithReadied.php | 13 ++++++++++++- src/Events/PullingReadiedTenant.php | 9 +++++++++ src/Events/ReadiedTenantPulled.php | 9 +++++++++ src/Events/ReadyingTenant.php | 9 +++++++++ src/Events/TenantReadied.php | 9 +++++++++ tests/ReadiedTenantsTest.php | 26 ++++++++++++++++++++++++++ 7 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 src/Events/PullingReadiedTenant.php create mode 100644 src/Events/ReadiedTenantPulled.php create mode 100644 src/Events/ReadyingTenant.php create mode 100644 src/Events/TenantReadied.php diff --git a/assets/TenancyServiceProvider.stub.php b/assets/TenancyServiceProvider.stub.php index 1d15f418..c2fcdd94 100644 --- a/assets/TenancyServiceProvider.stub.php +++ b/assets/TenancyServiceProvider.stub.php @@ -49,6 +49,12 @@ class TenancyServiceProvider extends ServiceProvider })->shouldBeQueued(false), // `false` by default, but you probably want to make this `true` for production. ], + // Readied events + Events\ReadyingTenant::class => [], + Events\TenantReadied::class => [], + Events\PullingReadiedTenant::class => [], + Events\ReadiedTenantPulled::class => [], + // Domain events Events\CreatingDomain::class => [], Events\DomainCreated::class => [], diff --git a/src/Database/Concerns/WithReadied.php b/src/Database/Concerns/WithReadied.php index 96dc689c..d8397405 100644 --- a/src/Database/Concerns/WithReadied.php +++ b/src/Database/Concerns/WithReadied.php @@ -4,8 +4,11 @@ declare(strict_types=1); namespace Stancl\Tenancy\Database\Concerns; -use Carbon\Carbon; use Stancl\Tenancy\Contracts\Tenant; +use Stancl\Tenancy\Events\PullingReadiedTenant; +use Stancl\Tenancy\Events\ReadiedTenantPulled; +use Stancl\Tenancy\Events\ReadyingTenant; +use Stancl\Tenancy\Events\TenantReadied; /** * @property null|Carbon $readied @@ -51,11 +54,15 @@ trait WithReadied { $tenant = static::create($attributes); + event(new ReadyingTenant($tenant)); + // We add the readied value only after the model has then been created. // this ensures the model is not marked as readied until the migrations, seeders, etc. are done $tenant->update([ 'readied' => now()->timestamp ]); + + event(new TenantReadied($tenant)); } public static function pullReadiedTenant(bool $firstOrCreate = false): ?Tenant @@ -70,10 +77,14 @@ trait WithReadied // At this point we can guarantee a readied tenant is free and can be called $tenant = static::onlyReadied()->first(); + event(new PullingReadiedTenant($tenant)); + $tenant->update([ 'readied' => null ]); + event(new ReadiedTenantPulled($tenant)); + return $tenant; } } diff --git a/src/Events/PullingReadiedTenant.php b/src/Events/PullingReadiedTenant.php new file mode 100644 index 00000000..fd71b21f --- /dev/null +++ b/src/Events/PullingReadiedTenant.php @@ -0,0 +1,9 @@ +assertCount(1, Tenant::all()); Tenant::all(); } + + /** @test */ + public function readied_events_are_triggerred() + { + Event::fake([ + ReadyingTenant::class, + TenantReadied::class, + PullingReadiedTenant::class, + ReadiedTenantPulled::class, + ]); + + Tenant::createReadied(); + + Event::assertDispatched(ReadyingTenant::class); + Event::assertDispatched(TenantReadied::class); + + Tenant::pullReadiedTenant(); + + Event::assertDispatched(PullingReadiedTenant::class); + Event::assertDispatched(ReadiedTenantPulled::class); + } }