From afb2bbdffbda15103cec9962cb15492002421bd4 Mon Sep 17 00:00:00 2001 From: Saksham Gorey <90107977+sakshamgorey@users.noreply.github.com> Date: Mon, 5 Jan 2026 22:59:52 +0530 Subject: [PATCH] feat: Add explicit 'reverb' support to TenancyBroadcastManager --- src/Overrides/TenancyBroadcastManager.php | 2 +- tests/BroadcastingTest.php | 28 +++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/Overrides/TenancyBroadcastManager.php b/src/Overrides/TenancyBroadcastManager.php index 16e44a40..45812e8e 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 c3509426..d4835993 100644 --- a/tests/BroadcastingTest.php +++ b/tests/BroadcastingTest.php @@ -23,14 +23,14 @@ use function Stancl\Tenancy\Tests\withTenantDatabases; 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,27 @@ test('broadcasting channel helpers register channels correctly', function() { $foundChannelClosure = $getChannels()->first(fn ($closure, $name) => $name === 'global__' . $channelName); expect($foundChannelClosure)->not()->toBeNull(); }); + +test('reverb driver triggers tenant context binding', function() { + // Add reverb to the list of tenant broadcasters + \Stancl\Tenancy\Overrides\TenancyBroadcastManager::$tenantBroadcasters = ['pusher', 'ably', 'reverb']; + + $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'); +}); \ No newline at end of file