mirror of
https://github.com/archtechx/tenancy.git
synced 2025-12-12 15:54:03 +00:00
* feat: add support for nested tenant config override * test: ensure nested tenant values are mapped
118 lines
3.5 KiB
PHP
118 lines
3.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Stancl\Tenancy\Tests\Features;
|
|
|
|
use Illuminate\Support\Facades\Event;
|
|
use Stancl\Tenancy\Events\TenancyEnded;
|
|
use Stancl\Tenancy\Events\TenancyInitialized;
|
|
use Stancl\Tenancy\Features\TenantConfig;
|
|
use Stancl\Tenancy\Listeners\BootstrapTenancy;
|
|
use Stancl\Tenancy\Listeners\RevertToCentralContext;
|
|
use Stancl\Tenancy\Tests\Etc\Tenant;
|
|
use Stancl\Tenancy\Tests\TestCase;
|
|
|
|
class TenantConfigTest extends TestCase
|
|
{
|
|
public function tearDown(): void
|
|
{
|
|
TenantConfig::$storageToConfigMap = [];
|
|
|
|
parent::tearDown();
|
|
}
|
|
|
|
/** @test */
|
|
public function nested_tenant_values_are_merged()
|
|
{
|
|
$this->assertSame(null, config('whitelabel.theme'));
|
|
config([
|
|
'tenancy.features' => [TenantConfig::class],
|
|
'tenancy.bootstrappers' => [],
|
|
]);
|
|
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);
|
|
$this->assertSame('dark', config('whitelabel.theme'));
|
|
tenancy()->end();
|
|
}
|
|
|
|
/** @test */
|
|
public function config_is_merged_and_removed()
|
|
{
|
|
$this->assertSame(null, config('services.paypal'));
|
|
config([
|
|
'tenancy.features' => [TenantConfig::class],
|
|
'tenancy.bootstrappers' => [],
|
|
]);
|
|
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);
|
|
$this->assertSame(['public' => 'foo', 'private' => 'bar'], config('services.paypal'));
|
|
|
|
tenancy()->end();
|
|
$this->assertSame([
|
|
'public' => null,
|
|
'private' => null,
|
|
], config('services.paypal'));
|
|
}
|
|
|
|
/** @test */
|
|
public function the_value_can_be_set_to_multiple_config_keys()
|
|
{
|
|
$this->assertSame(null, config('services.paypal'));
|
|
config([
|
|
'tenancy.features' => [TenantConfig::class],
|
|
'tenancy.bootstrappers' => [],
|
|
]);
|
|
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);
|
|
$this->assertSame([
|
|
'public1' => 'foo',
|
|
'public2' => 'foo',
|
|
'private' => 'bar',
|
|
], config('services.paypal'));
|
|
|
|
tenancy()->end();
|
|
$this->assertSame([
|
|
'public1' => null,
|
|
'public2' => null,
|
|
'private' => null,
|
|
], config('services.paypal'));
|
|
}
|
|
}
|