[TenantConfig::class], 'tenancy.bootstrappers' => [], ]); tenancy()->bootstrapFeatures(); }); afterEach(function () { TenantConfig::$storageToConfigMap = []; }); test('nested tenant values are merged', function () { expect(config('whitelabel.theme'))->toBeNull(); Event::listen(TenancyInitialized::class, BootstrapTenancy::class); Event::listen(TenancyEnded::class, RevertToCentralContext::class); TenantConfig::$storageToConfigMap = [ 'whitelabel.config.theme' => 'whitelabel.theme', ]; $tenant = Tenant::create([ 'whitelabel' => ['config' => ['theme' => 'dark']], ]); tenancy()->initialize($tenant); expect(config('whitelabel.theme'))->toBe('dark'); tenancy()->end(); }); test('config is merged and removed', function () { expect(config('services.paypal'))->toBe(null); Event::listen(TenancyInitialized::class, BootstrapTenancy::class); Event::listen(TenancyEnded::class, RevertToCentralContext::class); TenantConfig::$storageToConfigMap = [ 'paypal_api_public' => 'services.paypal.public', 'paypal_api_private' => 'services.paypal.private', ]; $tenant = Tenant::create([ 'paypal_api_public' => 'foo', 'paypal_api_private' => 'bar', ]); tenancy()->initialize($tenant); expect(config('services.paypal'))->toBe(['public' => 'foo', 'private' => 'bar']); tenancy()->end(); pest()->assertSame([ 'public' => null, 'private' => null, ], config('services.paypal')); }); test('the value can be set to multiple config keys', function () { expect(config('services.paypal'))->toBe(null); Event::listen(TenancyInitialized::class, BootstrapTenancy::class); Event::listen(TenancyEnded::class, RevertToCentralContext::class); TenantConfig::$storageToConfigMap = [ 'paypal_api_public' => [ 'services.paypal.public1', 'services.paypal.public2', ], 'paypal_api_private' => 'services.paypal.private', ]; $tenant = Tenant::create([ 'paypal_api_public' => 'foo', 'paypal_api_private' => 'bar', ]); tenancy()->initialize($tenant); pest()->assertSame([ 'public1' => 'foo', 'public2' => 'foo', 'private' => 'bar', ], config('services.paypal')); tenancy()->end(); pest()->assertSame([ 'public1' => null, 'public2' => null, 'private' => null, ], config('services.paypal')); });