adrema/modules/Auth/Components/LoginFormTest.php

71 lines
2.0 KiB
PHP

<?php
namespace Modules\Auth\Components;
use App\User;
use Illuminate\Auth\Events\Lockout;
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Support\Facades\Event;
use Livewire\Livewire;
uses(TestCase::class);
uses(DatabaseTransactions::class);
it('redirects to login', function () {
test()->get('/')->assertRedirect('/login');
});
it('displays component', function () {
test()->get('/login')->assertSeeLivewire(LoginForm::class)->assertDontSee('Dashboard');
});
it('displays form', function () {
Livewire::test(LoginForm::class)
->assertSee('Login')
->assertSee('Passwort vergessen')
->assertSee(route('password.request'));
});
it('loggs in', function () {
User::factory()->loginData('admin@example.com', 'secret')->create();
Livewire::test(LoginForm::class)
->set('email', 'admin@example.com')
->set('password', 'secret')
->call('submit')
->assertRedirect('/');
$this->assertEquals('admin@example.com', auth()->user()->email);
});
it('displays failed login response', function () {
Livewire::test(LoginForm::class)
->set('email', 'admin@example.com')
->set('password', 'secret')
->call('submit')
->assertHasErrors(['email' => 'Login fehlgeschlagen.']);
});
it('increments login attempts', function () {
Event::fake([Lockout::class]);
Livewire::test(LoginForm::class)
->set('email', 'admin@example.com')
->set('password', 'secret')
->call('submit')
->call('submit')
->call('submit')
->call('submit')
->call('submit')
->call('submit');
Event::assertDispatchedTimes(Lockout::class);
});
it('requires email and password', function () {
User::factory()->loginData('admin@example.com', 'secret')->create();
Livewire::test(LoginForm::class)
->set('email', '')
->set('password', '')
->call('submit')
->assertHasErrors(['email', 'password']);
});