99 lines
2.7 KiB
PHP
99 lines
2.7 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace Tests\Browser;
|
||
|
|
|
||
|
|
use App\Models\User;
|
||
|
|
use Illuminate\Foundation\Testing\DatabaseTruncation;
|
||
|
|
use Laravel\Dusk\Browser;
|
||
|
|
use Tests\DuskTestCase;
|
||
|
|
|
||
|
|
class LoginTest extends DuskTestCase
|
||
|
|
{
|
||
|
|
use DatabaseTruncation;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Dusk test panel.
|
||
|
|
*/
|
||
|
|
private function createTestUser(string $email): User
|
||
|
|
{
|
||
|
|
return User::factory()->create([
|
||
|
|
'email' => $email,
|
||
|
|
'password' => bcrypt('password'),
|
||
|
|
'two_factor_secret' => null,
|
||
|
|
'two_factor_recovery_codes' => null,
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
private function loginUser(Browser $browser, User $user): void
|
||
|
|
{
|
||
|
|
$browser->visit('/login')
|
||
|
|
->type('email', $user->email)
|
||
|
|
->type('password', 'password')
|
||
|
|
->press('Log in')
|
||
|
|
->waitForLocation('/dashboard');
|
||
|
|
}
|
||
|
|
|
||
|
|
public function test_login(): void
|
||
|
|
{
|
||
|
|
$user = $this->createTestUser("login-test@example.com");
|
||
|
|
|
||
|
|
$this->browse(function (Browser $browser) use ($user) {
|
||
|
|
$this->loginUser($browser, $user);
|
||
|
|
try {
|
||
|
|
$browser->assertPathIs('/dashboard'); // Or wherever successful login redirects
|
||
|
|
} catch (\Exception $e) {
|
||
|
|
$browser->pause(10000); // Pause for 10 seconds on failure to debug
|
||
|
|
throw $e;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
public function test_invalid_login(): void
|
||
|
|
{
|
||
|
|
$user = $this->createTestUser("invalid-email@example.com");
|
||
|
|
|
||
|
|
|
||
|
|
$this->browse(function (Browser $browser) use ($user) {
|
||
|
|
$this->loginUser($browser, $user);
|
||
|
|
try {
|
||
|
|
$browser->visit('/admin')
|
||
|
|
->waitForLocation('/admin')
|
||
|
|
->assertPathIs('/admin')
|
||
|
|
->assertTitleContains('Dashboard')
|
||
|
|
->assertDontSee('Forbidden')
|
||
|
|
->pause(1000);
|
||
|
|
} catch (\Exception $e) {
|
||
|
|
$browser->pause(1000); // Pause for 1 second on failure to debug
|
||
|
|
throw $e;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
*/
|
||
|
|
|
||
|
|
public function test_access_admin_panel(): void
|
||
|
|
{
|
||
|
|
|
||
|
|
$user = $this->createTestUser("login-test@example.com");
|
||
|
|
|
||
|
|
$this->browse(function (Browser $browser) use ($user) {
|
||
|
|
$this->loginUser($browser, $user);
|
||
|
|
try {
|
||
|
|
$browser->visit('/admin')
|
||
|
|
->waitForLocation('/admin')
|
||
|
|
->assertPathIs('/admin')
|
||
|
|
->assertTitleContains('Dashboard')
|
||
|
|
->assertDontSee('Forbidden')
|
||
|
|
->pause(1000);
|
||
|
|
} catch (\Exception $e) {
|
||
|
|
$browser->pause(1000); // Pause for 1 second on failure to debug
|
||
|
|
throw $e;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|