From 24c94af952b47f063c71c2f5a4274d9260818e68 Mon Sep 17 00:00:00 2001 From: Constantin Graf Date: Thu, 11 Jun 2026 10:17:56 +0200 Subject: [PATCH] Add option to enable email verification locally for testing --- app/Http/Middleware/EnsureEmailIsVerified.php | 2 +- config/app.php | 2 ++ .../EnsureEmailIsVerifiedMiddlewareTest.php | 35 ++++++++++++++++++- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/app/Http/Middleware/EnsureEmailIsVerified.php b/app/Http/Middleware/EnsureEmailIsVerified.php index 809ac05d..ec2caf6c 100644 --- a/app/Http/Middleware/EnsureEmailIsVerified.php +++ b/app/Http/Middleware/EnsureEmailIsVerified.php @@ -17,7 +17,7 @@ class EnsureEmailIsVerified */ public function handle(Request $request, Closure $next, ?string $redirectToRoute = null): Response { - if (! app()->isLocal()) { + if (! app()->isLocal() || config('app.local_email_verification')) { if ($request->user() === null || (! $request->user()->hasVerifiedEmail())) { return $request->expectsJson() diff --git a/config/app.php b/config/app.php index b6acb40d..9c72624a 100644 --- a/config/app.php +++ b/config/app.php @@ -81,6 +81,8 @@ return [ 'enable_registration' => (bool) env('APP_ENABLE_REGISTRATION', false), + 'local_email_verification' => (bool) env('APP_LOCAL_EMAIL_VERIFICATION', false), + /* |-------------------------------------------------------------------------- | Application Timezone diff --git a/tests/Unit/Middleware/EnsureEmailIsVerifiedMiddlewareTest.php b/tests/Unit/Middleware/EnsureEmailIsVerifiedMiddlewareTest.php index 4a3108b1..8455bfb4 100644 --- a/tests/Unit/Middleware/EnsureEmailIsVerifiedMiddlewareTest.php +++ b/tests/Unit/Middleware/EnsureEmailIsVerifiedMiddlewareTest.php @@ -73,13 +73,14 @@ class EnsureEmailIsVerifiedMiddlewareTest extends MiddlewareTestAbstract $response->assertOk(); } - public function test_users_with_unverified_email_can_access_route_in_local_environment(): void + public function test_users_with_unverified_email_can_access_route_in_local_environment_if_local_email_verification_is_disabled(): void { // Arrange $user = User::factory()->unverified()->create(); $route = $this->createTestRoute(); $this->actingAs($user); $this->app->detectEnvironment(fn () => 'local'); + config(['app.local_email_verification' => false]); // Act $response = $this->get($route); @@ -87,4 +88,36 @@ class EnsureEmailIsVerifiedMiddlewareTest extends MiddlewareTestAbstract // Assert $response->assertOk(); } + + public function tests_users_with_unverified_email_are_redirected_in_non_local_environment_even_if_local_email_verification_is_disabled(): void + { + // Arrange + $user = User::factory()->unverified()->create(); + $route = $this->createTestRoute(); + $this->actingAs($user); + $this->assertSame('testing', config('app.env')); + config(['app.local_email_verification' => false]); + + // Act + $response = $this->get($route); + + // Assert + $response->assertRedirect(route('verification.notice')); + } + + public function test_users_with_unverified_email_are_redirected_in_local_environment_if_local_email_verification_is_enabled(): void + { + // Arrange + $user = User::factory()->unverified()->create(); + $route = $this->createTestRoute(); + $this->actingAs($user); + $this->app->detectEnvironment(fn () => 'local'); + config(['app.local_email_verification' => true]); + + // Act + $response = $this->get($route); + + // Assert + $response->assertRedirect(route('verification.notice')); + } }