From a4dff9c1596177620542e0267724b77d856cb1ff Mon Sep 17 00:00:00 2001 From: David Palomares Date: Fri, 24 Sep 2021 13:31:52 +0200 Subject: [PATCH] Added tests --- tests/Feature/Auth/RequestPasswordTest.php | 24 +++++++++++++++ tests/Feature/Auth/ResetPasswordTest.php | 36 +++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/tests/Feature/Auth/RequestPasswordTest.php b/tests/Feature/Auth/RequestPasswordTest.php index 76fa7ba329..1d4d6996a8 100644 --- a/tests/Feature/Auth/RequestPasswordTest.php +++ b/tests/Feature/Auth/RequestPasswordTest.php @@ -6,6 +6,7 @@ use Filament\Http\Livewire\Auth\RequestPassword; use Filament\Models\User; use Filament\Tests\TestCase; use Illuminate\Auth\Notifications\ResetPassword as ResetPasswordNotification; +use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Notification; use Livewire\Livewire; @@ -27,6 +28,29 @@ class RequestPasswordTest extends TestCase Notification::assertSentTo($user, ResetPasswordNotification::class); } + /** @test */ + public function can_request_password_reset_with_web_guard() + { + Notification::fake(); + + // Configure filament to use default Laravel's auth guard + Config::set('filament.auth.guard', 'web'); + + // Set Laravel's default user model to filament's one, so it has filament's attributes + // and uses 'IsFilamentUser' trait (needed to send the notification) + Config::set('auth.providers.users.model', User::class); + + $user = User::factory()->create(); + + Livewire::test(RequestPassword::class) + ->set('email', $user->email) + ->call('submit') + ->assertHasNoErrors() + ->assertDispatchedBrowserEvent('notify'); + + Notification::assertSentTo($user, ResetPasswordNotification::class); + } + /** @test */ public function can_view_password_reset_request_page() { diff --git a/tests/Feature/Auth/ResetPasswordTest.php b/tests/Feature/Auth/ResetPasswordTest.php index 3270517489..aed9b76a46 100644 --- a/tests/Feature/Auth/ResetPasswordTest.php +++ b/tests/Feature/Auth/ResetPasswordTest.php @@ -6,6 +6,7 @@ use Filament\Filament; use Filament\Http\Livewire\Auth\ResetPassword; use Filament\Models\User; use Filament\Tests\TestCase; +use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Password; use Illuminate\Support\Facades\URL; use Illuminate\Support\Str; @@ -37,6 +38,36 @@ class ResetPasswordTest extends TestCase ])); } + /** @test */ + public function can_reset_password_with_web_guard() + { + // Configure filament to use default Laravel's auth guard + Config::set('filament.auth.guard', 'web'); + + // Set Laravel's default user model to filament's one, so it has filament's attributes + Config::set('auth.providers.users.model', User::class); + + $user = User::factory()->create(); + $newPassword = Str::random(); + + Livewire::test(ResetPassword::class, [ + 'token' => $this->generateToken($user) + ]) + ->set('email', $user->email) + ->set('password', $newPassword) + ->set('passwordConfirmation', $newPassword) + ->call('submit') + ->assertHasNoErrors() + ->assertRedirect(route('filament.dashboard')); + + $this->assertAuthenticatedAs($user, config('filament.auth.guard')); + + $this->assertTrue(Filament::auth()->attempt([ + 'email' => $user->email, + 'password' => $newPassword, + ])); + } + /** @test */ public function can_view_password_reset_page() { @@ -137,6 +168,9 @@ class ResetPasswordTest extends TestCase $user = User::factory()->create(); } - return Password::broker('filament_users')->createToken($user); + // Use filament_users broker only when we're using filament guard. Otherwise, use Laravel's default + $broker = config('filament.auth.guard') === 'filament' ? 'filament_users' : null; + + return Password::broker($broker)->createToken($user); } }