From de2d1d39ca1bab501a7ffde60ed28c7945fa695f Mon Sep 17 00:00:00 2001 From: ildyria Date: Wed, 17 Jun 2026 09:10:15 +0200 Subject: [PATCH] Add middleware to check if feature is enabled --- app/Exceptions/FeatureDisabledException.php | 19 ++++++ app/Http/Kernel.php | 1 + app/Http/Middleware/FeatureEnabled.php | 48 +++++++++++++++ tests/Unit/Middleware/FeatureEnabledTest.php | 65 ++++++++++++++++++++ 4 files changed, 133 insertions(+) create mode 100644 app/Exceptions/FeatureDisabledException.php create mode 100644 app/Http/Middleware/FeatureEnabled.php create mode 100644 tests/Unit/Middleware/FeatureEnabledTest.php diff --git a/app/Exceptions/FeatureDisabledException.php b/app/Exceptions/FeatureDisabledException.php new file mode 100644 index 00000000000..2edd2e62b22 --- /dev/null +++ b/app/Exceptions/FeatureDisabledException.php @@ -0,0 +1,19 @@ + \App\Http\Middleware\Caching\ResponseCache::class, 'album_cache_refresher' => \App\Http\Middleware\Caching\AlbumRouteCacheRefresher::class, 'legacy_id_redirect' => \App\Http\Middleware\LegacyLocalIdRedirect::class, + 'feature' => \App\Http\Middleware\FeatureEnabled::class, ]; } diff --git a/app/Http/Middleware/FeatureEnabled.php b/app/Http/Middleware/FeatureEnabled.php new file mode 100644 index 00000000000..f864299b9a8 --- /dev/null +++ b/app/Http/Middleware/FeatureEnabled.php @@ -0,0 +1,48 @@ + true]); + + $request = $this->mock(Request::class); + $middleware = new FeatureEnabled(); + + self::assertEquals(1, $middleware->handle($request, fn () => 1, 'some_feature')); + } + + public function testFeatureDisabled(): void + { + config(['features.some_feature' => false]); + + $request = $this->mock(Request::class); + $middleware = new FeatureEnabled(); + + $this->assertThrows( + fn () => $middleware->handle($request, fn () => 1, 'some_feature'), + FeatureDisabledException::class + ); + } + + public function testFeatureNotDefined(): void + { + $request = $this->mock(Request::class); + $middleware = new FeatureEnabled(); + + $this->assertThrows( + fn () => $middleware->handle($request, fn () => 1, 'undefined_feature'), + ConfigurationKeyMissingException::class + ); + } +}