1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 14:14:04 +00:00

[4.x] Set app.url config in UrlTenancyBootstrapper (#1068)

* Set `app.url` config in UrlTenancyBootstrapper

* Add assertions

* Set base app URL in config

* Make UrlTenancyBootstrapper a singleton
This commit is contained in:
lukinovec 2023-02-18 13:01:17 +01:00 committed by GitHub
parent 617e9a7a73
commit fbdb13f392
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 8 deletions

View file

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Stancl\Tenancy\Bootstrappers; namespace Stancl\Tenancy\Bootstrappers;
use Closure; use Closure;
use Illuminate\Config\Repository;
use Illuminate\Contracts\Routing\UrlGenerator; use Illuminate\Contracts\Routing\UrlGenerator;
use Stancl\Tenancy\Contracts\TenancyBootstrapper; use Stancl\Tenancy\Contracts\TenancyBootstrapper;
use Stancl\Tenancy\Contracts\Tenant; use Stancl\Tenancy\Contracts\Tenant;
@ -16,6 +17,7 @@ class UrlTenancyBootstrapper implements TenancyBootstrapper
public function __construct( public function __construct(
protected UrlGenerator $urlGenerator, protected UrlGenerator $urlGenerator,
protected Repository $config,
) { ) {
} }
@ -24,12 +26,16 @@ class UrlTenancyBootstrapper implements TenancyBootstrapper
$this->originalRootUrl = $this->urlGenerator->to('/'); $this->originalRootUrl = $this->urlGenerator->to('/');
if (static::$rootUrlOverride) { if (static::$rootUrlOverride) {
$this->urlGenerator->forceRootUrl((static::$rootUrlOverride)($tenant)); $newRootUrl = (static::$rootUrlOverride)($tenant);
$this->urlGenerator->forceRootUrl($newRootUrl);
$this->config->set('app.url', $newRootUrl);
} }
} }
public function revert(): void public function revert(): void
{ {
$this->urlGenerator->forceRootUrl($this->originalRootUrl); $this->urlGenerator->forceRootUrl($this->originalRootUrl);
$this->config->set('app.url', $this->originalRootUrl);
} }
} }

View file

@ -396,6 +396,7 @@ test('url bootstrapper overrides the root url when tenancy gets initialized and
}); });
$baseUrl = url(route('home')); $baseUrl = url(route('home'));
config(['app.url' => $baseUrl]);
$rootUrlOverride = function (Tenant $tenant) use ($baseUrl) { $rootUrlOverride = function (Tenant $tenant) use ($baseUrl) {
$scheme = str($baseUrl)->before('://'); $scheme = str($baseUrl)->before('://');
@ -413,14 +414,17 @@ test('url bootstrapper overrides the root url when tenancy gets initialized and
expect(url(route('home')))->toBe($baseUrl); expect(url(route('home')))->toBe($baseUrl);
expect(URL::to('/'))->toBe($baseUrl); expect(URL::to('/'))->toBe($baseUrl);
expect(config('app.url'))->toBe($baseUrl);
tenancy()->initialize($tenant); tenancy()->initialize($tenant);
expect(url(route('home')))->toBe($tenantUrl); expect(url(route('home')))->toBe($tenantUrl);
expect(URL::to('/'))->toBe($tenantUrl); expect(URL::to('/'))->toBe($tenantUrl);
expect(config('app.url'))->toBe($tenantUrl);
tenancy()->end(); tenancy()->end();
expect(url(route('home')))->toBe($baseUrl); expect(url(route('home')))->toBe($baseUrl);
expect(URL::to('/'))->toBe($baseUrl); expect(URL::to('/'))->toBe($baseUrl);
expect(config('app.url'))->toBe($baseUrl);
}); });

View file

@ -4,17 +4,17 @@ declare(strict_types=1);
namespace Stancl\Tenancy\Tests; namespace Stancl\Tenancy\Tests;
use Dotenv\Dotenv;
use Illuminate\Foundation\Application;
use Illuminate\Support\Facades\Redis;
use PDO; use PDO;
use Stancl\Tenancy\Bootstrappers\BatchTenancyBootstrapper; use Dotenv\Dotenv;
use Stancl\Tenancy\Bootstrappers\RedisTenancyBootstrapper;
use Stancl\Tenancy\Facades\GlobalCache;
use Stancl\Tenancy\Facades\Tenancy; use Stancl\Tenancy\Facades\Tenancy;
use Stancl\Tenancy\TenancyServiceProvider;
use Stancl\Tenancy\Tests\Etc\Tenant; use Stancl\Tenancy\Tests\Etc\Tenant;
use Illuminate\Support\Facades\Redis;
use Illuminate\Foundation\Application;
use Stancl\Tenancy\Facades\GlobalCache;
use Stancl\Tenancy\TenancyServiceProvider;
use Stancl\Tenancy\Bootstrappers\UrlTenancyBootstrapper;
use Stancl\Tenancy\Bootstrappers\MailTenancyBootstrapper; use Stancl\Tenancy\Bootstrappers\MailTenancyBootstrapper;
use Stancl\Tenancy\Bootstrappers\RedisTenancyBootstrapper;
abstract class TestCase extends \Orchestra\Testbench\TestCase abstract class TestCase extends \Orchestra\Testbench\TestCase
{ {
@ -106,6 +106,7 @@ abstract class TestCase extends \Orchestra\Testbench\TestCase
], ],
'tenancy.bootstrappers.redis' => RedisTenancyBootstrapper::class, // todo1 change this to []? two tests in TenantDatabaseManagerTest are failing with that 'tenancy.bootstrappers.redis' => RedisTenancyBootstrapper::class, // todo1 change this to []? two tests in TenantDatabaseManagerTest are failing with that
'tenancy.bootstrappers.mail' => MailTenancyBootstrapper::class, 'tenancy.bootstrappers.mail' => MailTenancyBootstrapper::class,
'tenancy.bootstrappers.url' => UrlTenancyBootstrapper::class,
'queue.connections.central' => [ 'queue.connections.central' => [
'driver' => 'sync', 'driver' => 'sync',
'central' => true, 'central' => true,
@ -116,6 +117,7 @@ abstract class TestCase extends \Orchestra\Testbench\TestCase
$app->singleton(RedisTenancyBootstrapper::class); // todo (Samuel) use proper approach eg config for singleton registration $app->singleton(RedisTenancyBootstrapper::class); // todo (Samuel) use proper approach eg config for singleton registration
$app->singleton(MailTenancyBootstrapper::class); $app->singleton(MailTenancyBootstrapper::class);
$app->singleton(UrlTenancyBootstrapper::class);
} }
protected function getPackageProviders($app) protected function getPackageProviders($app)