Files
librenms-librenms/tests/Browser/LoginTest.php
Tony Murray 66d0a34f40 Dusk: improve speed and safety (#13370)
* Dusk: improve speed
Instead of refreshing the database between tests, just cleanup all side effects.
Update UserFactory to upstream so hash never has to be generated for default

* Actually, migrate, but not fresh
2021-10-18 10:01:07 +02:00

87 lines
2.5 KiB
PHP

<?php
namespace LibreNMS\Tests\Browser;
use App\Models\User;
use App\Models\UserPref;
use Hash;
use Laravel\Dusk\Browser;
use LibreNMS\Config;
use LibreNMS\Tests\Browser\Pages\LoginPage;
use LibreNMS\Tests\Browser\Pages\TwoFactorPage;
use LibreNMS\Tests\DuskTestCase;
/**
* Class LoginTest
*
* @group browser
*/
class LoginTest extends DuskTestCase
{
protected function setUp(): void
{
parent::setUp();
$this->artisan('migrate');
}
/**
* @throws \Throwable
*/
public function testUserCanLogin()
{
$this->browse(function (Browser $browser) {
$password = 'some_password';
$user = User::factory()->create([
'password' => Hash::make($password),
]); /** @var User $user */
$browser->visit(new LoginPage())
->type('username', $user->username)
->type('password', 'wrong_password')
->press('@login')
->assertPathIs('/login')
->type('username', $user->username)
->type('password', $password)
->press('@login')
->assertPathIs('/')
->logout();
$user->delete();
});
}
/**
* @throws \Throwable
*/
public function test2faLogin()
{
$this->browse(function (Browser $browser) {
$password = 'another_password';
$user = User::factory()->create([
'password' => Hash::make($password),
]); /** @var User $user */
Config::persist('twofactor', true); // set to db
UserPref::setPref($user, 'twofactor', [
'key' => '5P3FLXBX7NU3ZBFOTWZL2GL5MKFEWBOA', // known key: 634456, 613687, 064292
'fails' => 0,
'last' => 0,
'counter' => 1,
]);
$browser->visit(new LoginPage())
->type('username', $user->username)
->type('password', $password)
->press('#login')
->on(new TwoFactorPage())
->assertFocused('@input')
->keys('@input', '999999', '{enter}') // try the wrong code first
->assertPathIs('/2fa')
->keys('@input', '634456', '{enter}')
->assertPathIs('/')
->logout();
$user->delete();
\App\Models\Config::where('config_name', 'twofactor')->delete();
});
}
}