diff --git a/src/Features/UniversalRoutes.php b/src/Features/UniversalRoutes.php index 6b729962..c73a5304 100644 --- a/src/Features/UniversalRoutes.php +++ b/src/Features/UniversalRoutes.php @@ -23,11 +23,17 @@ class UniversalRoutes implements Feature public function bootstrap(Tenancy $tenancy): void { foreach (static::$identificationMiddlewares as $middleware) { - $middleware::$onFail = function ($exception, $request, $next) { + $originalOnFail = $middleware::$onFail; + + $middleware::$onFail = function ($exception, $request, $next) use ($originalOnFail) { if (static::routeHasMiddleware($request->route(), static::$middlewareGroup)) { return $next($request); } + if ($originalOnFail) { + return $originalOnFail($exception, $request, $next); + } + throw $exception; }; } diff --git a/tests/DomainTest.php b/tests/DomainTest.php index 006faef9..594270e1 100644 --- a/tests/DomainTest.php +++ b/tests/DomainTest.php @@ -8,6 +8,7 @@ use Stancl\Tenancy\Database\Models; use Stancl\Tenancy\Database\Models\Domain; use Stancl\Tenancy\Exceptions\DomainOccupiedByOtherTenantException; use Stancl\Tenancy\Exceptions\TenantCouldNotBeIdentifiedOnDomainException; +use Stancl\Tenancy\Features\UniversalRoutes; use Stancl\Tenancy\Middleware\InitializeTenancyByDomain; use Stancl\Tenancy\Resolvers\DomainTenantResolver; @@ -88,6 +89,17 @@ test('onfail logic can be customized', function () { ->assertSee('foo'); }); +test('throw correct exception when onFail is null and universal routes are enabled', function () { + // un-define onFail logic + InitializeTenancyByDomain::$onFail = null; + + // Enable UniversalRoute feature + Route::middlewareGroup('universal', []); + config(['tenancy.features' => [UniversalRoutes::class]]); + + $this->withoutExceptionHandling()->get('http://foo.localhost/foo/abc/xyz'); +})->throws(TenantCouldNotBeIdentifiedOnDomainException::class);; + test('domains are always lowercase', function () { $tenant = DomainTenant::create();