diff --git a/tests/RunForMultipleTest.php b/tests/RunForMultipleTest.php new file mode 100644 index 00000000..aa8b48b5 --- /dev/null +++ b/tests/RunForMultipleTest.php @@ -0,0 +1,73 @@ +send(function (TenantCreated $event) { + return $event->tenant; + })->toListener()); + + config(['tenancy.bootstrappers' => [ + DatabaseTenancyBootstrapper::class, + ]]); +}); + +test('runForMultiple runs the passed closure for the right tenants', function() { + $tenants = [Tenant::create(), Tenant::create(), Tenant::create()]; + + $createUser = fn ($username) => function () use ($username) { + User::create(['name' => $username, 'email' => Str::random(8) . '@example.com', 'password' => bcrypt('password')]); + }; + + // tenancy()->runForMultiple([], ...) shouldn't do anything + // No users should be created -- the closure should not be run at all + tenancy()->runForMultiple([], $createUser('none')); + // Try the same with an empty collection -- the result should be the same for any traversable + tenancy()->runForMultiple(collect(), $createUser('none')); + + foreach ($tenants as $tenant) { + $tenant->run(function() { + expect(User::count())->toBe(0); + }); + } + + // tenancy()->runForMultiple(['foo', 'bar'], ...) should run the closure only for the passed tenants + tenancy()->runForMultiple([$tenants[0]->getTenantKey(), $tenants[1]->getTenantKey()], $createUser('user')); + + // User should be created for tenants[0] and tenants[1], but not for tenants[2] + foreach ($tenants as $tenant) { + $tenant->run(function() use ($tenants) { + if (tenant()->getTenantKey() !== $tenants[2]->getTenantKey()) { + expect(User::first()->name)->toBe('user'); + } else { + expect(User::count())->toBe(0); + } + }); + } + + // tenancy()->runForMultiple(null, ...) should run the closure for all tenants + tenancy()->runForMultiple(null, $createUser('new_user')); + + foreach ($tenants as $tenant) { + $tenant->run(function() { + expect(User::all()->pluck('name'))->toContain('new_user'); + }); + } +});