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/BootstrapperTest.php b/tests/BootstrapperTest.php index 8f5407bc..96afbc83 100644 --- a/tests/BootstrapperTest.php +++ b/tests/BootstrapperTest.php @@ -23,6 +23,8 @@ use Stancl\Tenancy\Bootstrappers\DatabaseTenancyBootstrapper; use Stancl\Tenancy\Bootstrappers\FilesystemTenancyBootstrapper; beforeEach(function () { + $this->mockConsoleOutput = false; + Event::listen( TenantCreated::class, JobPipeline::make([CreateDatabase::class])->send(function (TenantCreated $event) { 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(); diff --git a/tests/QueueTest.php b/tests/QueueTest.php index 938af39f..c1fa24b8 100644 --- a/tests/QueueTest.php +++ b/tests/QueueTest.php @@ -27,6 +27,8 @@ use Stancl\Tenancy\Bootstrappers\QueueTenancyBootstrapper; use Stancl\Tenancy\Bootstrappers\DatabaseTenancyBootstrapper; beforeEach(function () { + $this->mockConsoleOutput = false; + config([ 'tenancy.bootstrappers' => [ QueueTenancyBootstrapper::class,