create([ 'two_factor_secret' => (new Google2FA)->generateSecretKey(), 'two_factor_confirmed_at' => now(), ]); } public function test_recovery_code_logs_in_and_is_consumed(): void { $user = $this->enrolledUser(); $code = $user->replaceRecoveryCodes()[0]; session()->put('2fa.user', $user->id); Livewire::test(TwoFactorChallenge::class) ->set('code', $code) ->call('verify'); $this->assertAuthenticatedAs($user); $this->assertFalse($user->fresh()->useRecoveryCode($code)); // consumed } public function test_invalid_code_fails(): void { $user = $this->enrolledUser(); $user->replaceRecoveryCodes(); session()->put('2fa.user', $user->id); Livewire::test(TwoFactorChallenge::class) ->set('code', '000000') ->call('verify') ->assertHasErrors('code'); $this->assertGuest(); } }