[RootUrlBootstrapper::class]]); Route::group([ 'middleware' => InitializeTenancyBySubdomain::class, ], function () { Route::get('/', function () { return true; })->name('home'); }); $baseUrl = url(route('home')); config(['app.url' => $baseUrl]); $rootUrlOverride = function (Tenant $tenant) use ($baseUrl) { $scheme = str($baseUrl)->before('://'); $hostname = str($baseUrl)->after($scheme . '://'); return $scheme . '://' . $tenant->getTenantKey() . '.' . $hostname; }; RootUrlBootstrapper::$rootUrlOverride = $rootUrlOverride; $tenant = Tenant::create(); $tenantUrl = $rootUrlOverride($tenant); expect($tenantUrl)->not()->toBe($baseUrl); expect(url(route('home')))->toBe($baseUrl); expect(URL::to('/'))->toBe($baseUrl); expect(config('app.url'))->toBe($baseUrl); tenancy()->initialize($tenant); expect(url(route('home')))->toBe($tenantUrl); expect(URL::to('/'))->toBe($tenantUrl); expect(config('app.url'))->toBe($tenantUrl); tenancy()->end(); expect(url(route('home')))->toBe($baseUrl); expect(URL::to('/'))->toBe($baseUrl); expect(config('app.url'))->toBe($baseUrl); }); test('root url bootstrapper can be used with url generator bootstrapper', function() { config(['tenancy.bootstrappers' => [UrlGeneratorBootstrapper::class, RootUrlBootstrapper::class]]); TenancyUrlGenerator::$prefixRouteNames = true; TenancyUrlGenerator::$passTenantParameterToRoutes = true; Route::get('/', function () { return true; })->name('home'); Route::get('/{tenant}', function () { return true; })->name('tenant.home')->middleware(InitializeTenancyByPath::class); $rootUrlOverride = function (Tenant $tenant) { return 'http://localhost/' . $tenant->getTenantKey(); }; $tenant = Tenant::create(['id' => 'acme']); RootUrlBootstrapper::$rootUrlOverride = $rootUrlOverride; expect(route('home'))->toBe('http://localhost'); tenancy()->initialize($tenant); expect(route('home'))->toBe('http://localhost/acme'); expect(url('/'))->toBe('http://localhost/acme'); });