diff --git a/src/Overrides/TenancyBroadcastManager.php b/src/Overrides/TenancyBroadcastManager.php index 16e44a400..51c497a45 100644 --- a/src/Overrides/TenancyBroadcastManager.php +++ b/src/Overrides/TenancyBroadcastManager.php @@ -18,7 +18,7 @@ class TenancyBroadcastManager extends BroadcastManager * The reason for recreating the broadcasters is * to make your app use the correct broadcaster credentials when tenancy is initialized. */ - public static array $tenantBroadcasters = ['pusher', 'ably']; + public static array $tenantBroadcasters = ['pusher', 'ably', 'reverb']; /** * Override the get method so that the broadcasters in $tenantBroadcasters diff --git a/tests/BroadcastingTest.php b/tests/BroadcastingTest.php index c3509426b..3c008271f 100644 --- a/tests/BroadcastingTest.php +++ b/tests/BroadcastingTest.php @@ -23,14 +23,14 @@ beforeEach(function () { withTenantDatabases(); - TenancyBroadcastManager::$tenantBroadcasters = ['pusher', 'ably']; + TenancyBroadcastManager::$tenantBroadcasters = ['pusher', 'ably', 'reverb']; Event::listen(TenancyInitialized::class, BootstrapTenancy::class); Event::listen(TenancyEnded::class, RevertToCentralContext::class); }); afterEach(function () { - TenancyBroadcastManager::$tenantBroadcasters = ['pusher', 'ably']; + TenancyBroadcastManager::$tenantBroadcasters = ['pusher', 'ably', 'reverb']; }); test('bound broadcaster instance is the same before initializing tenancy and after ending it', function() { @@ -172,3 +172,24 @@ $foundChannelClosure = $getChannels()->first(fn ($closure, $name) => $name === 'global__' . $channelName); expect($foundChannelClosure)->not()->toBeNull(); }); + +test('reverb driver triggers tenant context binding', function() { + $manager = new \Stancl\Tenancy\Overrides\TenancyBroadcastManager(app()); + + $manager->extend('reverb', function() { + return new \Stancl\Tenancy\Tests\Etc\TestingBroadcaster('tenant_instance'); + }); + + // Bind a "central" broadcaster to the container + $centralBroadcaster = new \Stancl\Tenancy\Tests\Etc\TestingBroadcaster('central_instance'); + app()->instance(\Illuminate\Contracts\Broadcasting\Broadcaster::class, $centralBroadcaster); + + // Resolve the reverb driver + $manager->driver('reverb'); + + $currentBroadcaster = app(\Illuminate\Contracts\Broadcasting\Broadcaster::class); + + // Assert the broadcaster instance was swapped + expect($currentBroadcaster)->not->toBe($centralBroadcaster); + expect($currentBroadcaster->message)->toBe('tenant_instance'); +});