diff --git a/tests/BroadcastingTest.php b/tests/BroadcastingTest.php index c3509426..69e7fb3b 100644 --- a/tests/BroadcastingTest.php +++ b/tests/BroadcastingTest.php @@ -52,6 +52,48 @@ test('bound broadcaster instance is the same before initializing tenancy and aft expect($originalBroadcaster)->toBe(app(BroadcasterContract::class)); }); +test('broadcasting config bootstrapper maps the config to broadcaster credentials correctly', function() { + config([ + 'broadcasting.default' => $driver = 'testing', + 'broadcasting.connections.testing.driver' => $driver, + 'broadcasting.connections.testing.key' => 'central_key', + 'tenancy.bootstrappers' => [ + BroadcastingConfigBootstrapper::class, + ], + ]); + + BroadcastingConfigBootstrapper::$credentialsMap['broadcasting.connections.testing.key'] = 'testing_key'; + + // Register the testing broadcaster + app(BroadcastManager::class)->extend('testing', fn($app, $config) => new TestingBroadcaster('testing', $config)); + + $tenant1 = Tenant::create(['testing_key' => 'tenant1_key']); + $tenant2 = Tenant::create(['testing_key' => 'tenant2_key']); + + expect(app(BroadcasterContract::class)->config['key'])->toBe('central_key'); + expect(Broadcast::driver()->config['key'])->toBe('central_key'); + + tenancy()->initialize($tenant1); + + // Switching to tenant context makes the currently bound Broadcaster instance use the tenant's config + expect(app(BroadcasterContract::class)->config['key'])->toBe('tenant1_key'); + // The Broadcast facade (used in BroadcastController::authenticate) uses the broadcaster with tenant config + // instead of the stale broadcaster instance resolved before tenancy was initialized + expect(Broadcast::driver()->config['key'])->toBe('tenant1_key'); + + tenancy()->initialize($tenant2); + + // Switching to another tenant context makes the current broadcaster use the new tenant's config + expect(app(BroadcasterContract::class)->config['key'])->toBe('tenant2_key'); + expect(Broadcast::driver()->config['key'])->toBe('tenant2_key'); + + tenancy()->end(); + + // Ending tenancy reverts the broadcaster changes + expect(app(BroadcasterContract::class)->config['key'])->toBe('central_key'); + expect(Broadcast::driver()->config['key'])->toBe('central_key'); +}); + test('new broadcasters get the channels from the previously bound broadcaster', function() { config(['tenancy.bootstrappers' => [BroadcastingConfigBootstrapper::class]]); config([ diff --git a/tests/Etc/TestingBroadcaster.php b/tests/Etc/TestingBroadcaster.php index 1a225887..0b923f8f 100644 --- a/tests/Etc/TestingBroadcaster.php +++ b/tests/Etc/TestingBroadcaster.php @@ -6,7 +6,8 @@ use Illuminate\Broadcasting\Broadcasters\Broadcaster; class TestingBroadcaster extends Broadcaster { public function __construct( - public string $message = 'nothing' + public string $message = 'nothing', + public array $config = [], ) {} public function auth($request)