diff --git a/src/TenancyBootstrappers/QueueTenancyBootstrapper.php b/src/TenancyBootstrappers/QueueTenancyBootstrapper.php index d37f9426..b2a0fbf2 100644 --- a/src/TenancyBootstrappers/QueueTenancyBootstrapper.php +++ b/src/TenancyBootstrappers/QueueTenancyBootstrapper.php @@ -4,7 +4,8 @@ declare(strict_types=1); namespace Stancl\Tenancy\TenancyBootstrappers; -use Illuminate\Contracts\Foundation\Application; +use Illuminate\Config\Repository; +use Illuminate\Queue\QueueManager; use Illuminate\Support\Testing\Fakes\QueueFake; use Stancl\Tenancy\Contracts\TenancyBootstrapper; use Stancl\Tenancy\Tenant; @@ -14,19 +15,18 @@ class QueueTenancyBootstrapper implements TenancyBootstrapper /** @var bool Has tenancy been started. */ public $started = false; - /** @var Application */ - protected $app; + /** @var Repository */ + protected $config; - public function __construct(Application $app) + public function __construct(Repository $config, QueueManager $queue) { - $this->app = $app; + $this->config = $config; $bootstrapper = &$this; - $queue = $this->app['queue']; if (! $queue instanceof QueueFake) { - $queue->createPayloadUsing(function () use (&$bootstrapper) { - return $bootstrapper->getPayload(); + $queue->createPayloadUsing(function ($connection) use (&$bootstrapper) { + return $bootstrapper->getPayload($connection); }); } } @@ -41,12 +41,16 @@ class QueueTenancyBootstrapper implements TenancyBootstrapper $this->started = false; } - public function getPayload() + public function getPayload(string $connection) { if (! $this->started) { return []; } + if ($this->config["queue.connections.$connection.central"]) { + return []; + } + $id = tenant('id'); return [ diff --git a/tests/QueueTest.php b/tests/QueueTest.php index 7d24fdc3..d657fc66 100644 --- a/tests/QueueTest.php +++ b/tests/QueueTest.php @@ -33,6 +33,19 @@ class QueueTest extends TestCase return $event->job->payload()['tenant_id'] === tenant('id'); }); } + + /** @test */ + public function tenancy_is_not_initialized_in_non_tenant_queues() + { + $this->loadLaravelMigrations(['--database' => 'tenant']); + Event::fake(); + + dispatch(new TestJob())->onConnection('central'); + + Event::assertDispatched(JobProcessing::class, function ($event) { + return ! isset($event->job->payload()['tenant_id']); + }); + } } class TestJob implements ShouldQueue diff --git a/tests/TenantStorageTest.php b/tests/TenantStorageTest.php index 88bd5823..5f955ab9 100644 --- a/tests/TenantStorageTest.php +++ b/tests/TenantStorageTest.php @@ -4,9 +4,7 @@ declare(strict_types=1); namespace Stancl\Tenancy\Tests; -use Stancl\Tenancy\StorageDrivers\Database\DatabaseStorageDriver; use Stancl\Tenancy\StorageDrivers\Database\TenantModel; -use Stancl\Tenancy\StorageDrivers\RedisStorageDriver; use Stancl\Tenancy\Tenant; class TenantStorageTest extends TestCase @@ -84,10 +82,12 @@ class TenantStorageTest extends TestCase /** @test */ public function correct_storage_driver_is_used() { - if (config('tenancy.storage_driver') == DatabaseStorageDriver::class) { + if (config('tenancy.storage_driver') == 'db') { $this->assertSame('DatabaseStorageDriver', class_basename(tenancy()->storage)); - } elseif (config('tenancy.storage_driver') == RedisStorageDriver::class) { + } elseif (config('tenancy.storage_driver') == 'redis') { $this->assertSame('RedisStorageDriver', class_basename(tenancy()->storage)); + } else { + dd(class_basename(config('tenancy.storage_driver'))); } } diff --git a/tests/TestCase.php b/tests/TestCase.php index 19b0a83f..8df82561 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -99,6 +99,10 @@ abstract class TestCase extends \Orchestra\Testbench\TestCase 'tenancy.migrations_directory' => database_path('../migrations'), 'tenancy.storage_drivers.db.connection' => 'central', 'tenancy.bootstrappers.redis' => \Stancl\Tenancy\TenancyBootstrappers\RedisTenancyBootstrapper::class, + 'queue.connections.central' => [ + 'driver' => 'sync', + 'central' => true, + ], ]); $app->singleton(\Stancl\Tenancy\TenancyBootstrappers\RedisTenancyBootstrapper::class);