Spaces:
Sleeping
Sleeping
| use App\Models\User; | |
| use Illuminate\Support\Facades\RateLimiter; | |
| use Laravel\Fortify\Features; | |
| test('login screen can be rendered', function () { | |
| $response = $this->get(route('login')); | |
| $response->assertOk(); | |
| }); | |
| test('users can authenticate using the login screen', function () { | |
| $user = User::factory()->create(); | |
| $response = $this->post(route('login.store'), [ | |
| 'email' => $user->email, | |
| 'password' => 'password', | |
| ]); | |
| $this->assertAuthenticated(); | |
| $response->assertRedirect(route('dashboard', absolute: false)); | |
| }); | |
| test('users with two factor enabled are redirected to two factor challenge', function () { | |
| $this->skipUnlessFortifyHas(Features::twoFactorAuthentication()); | |
| Features::twoFactorAuthentication([ | |
| 'confirm' => true, | |
| 'confirmPassword' => true, | |
| ]); | |
| $user = User::factory()->create(); | |
| $user->forceFill([ | |
| 'two_factor_secret' => encrypt('test-secret'), | |
| 'two_factor_recovery_codes' => encrypt(json_encode(['code1', 'code2'])), | |
| 'two_factor_confirmed_at' => now(), | |
| ])->save(); | |
| $response = $this->post(route('login'), [ | |
| 'email' => $user->email, | |
| 'password' => 'password', | |
| ]); | |
| $response->assertRedirect(route('two-factor.login')); | |
| $response->assertSessionHas('login.id', $user->id); | |
| $this->assertGuest(); | |
| }); | |
| test('users can not authenticate with invalid password', function () { | |
| $user = User::factory()->create(); | |
| $this->post(route('login.store'), [ | |
| 'email' => $user->email, | |
| 'password' => 'wrong-password', | |
| ]); | |
| $this->assertGuest(); | |
| }); | |
| test('users can logout', function () { | |
| $user = User::factory()->create(); | |
| $response = $this->actingAs($user)->post(route('logout')); | |
| $this->assertGuest(); | |
| $response->assertRedirect(route('home')); | |
| }); | |
| test('users are rate limited', function () { | |
| $user = User::factory()->create(); | |
| RateLimiter::increment(md5('login'.implode('|', [$user->email, '127.0.0.1'])), amount: 5); | |
| $response = $this->post(route('login.store'), [ | |
| 'email' => $user->email, | |
| 'password' => 'wrong-password', | |
| ]); | |
| $response->assertTooManyRequests(); | |
| }); |