1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2026-05-06 18:44:04 +00:00

BroadcastingConfigBootstrapper: test mapping credentials

Test that BroadcastingConfigBootstrapper correctly maps tenant properties to broadcasting config/credentials, and that the credentials don't leak when switching contexts. Also add the `$config` property to `TestingBroadcaster` so that we can access the credentials used by the broadcaster.
This commit is contained in:
lukinovec 2026-03-31 15:32:45 +02:00
parent fb654e7a6b
commit 7d749eb592
2 changed files with 44 additions and 1 deletions

View file

@ -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([