browse(function (Browser $browser) { $password = 'some_password'; $user = User::factory()->create([ 'password' => password_hash($password, PASSWORD_DEFAULT), ]); /** @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' => password_hash($password, PASSWORD_DEFAULT), ]); /** @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(); }); } }