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 + ); + } +}