create(); WebauthnCredential::create(['user_id' => $u->id, 'name' => 'k', 'credential_id' => 'cid', 'public_key' => '{}', 'sign_count' => 0]); return $u->fresh(); } public function test_key_only_user_has_no_totp_field_but_a_backup_code_works(): void { $user = $this->keyOnlyUser(); $codes = $user->replaceRecoveryCodes(); session(['2fa.user' => $user->id, '2fa.remember' => false]); Livewire::test(TwoFactorChallenge::class) ->assertSet('pendingHasTotp', false) ->assertDontSee('000000') ->assertSee(__('auth.challenge_backup_label')) ->set('code', $codes[0]) ->call('verify') ->assertRedirect(route('dashboard')); $this->assertAuthenticatedAs($user); } public function test_totp_user_sees_the_field(): void { $user = User::factory()->create(['two_factor_secret' => 'S', 'two_factor_confirmed_at' => now()]); session(['2fa.user' => $user->id, '2fa.remember' => false]); Livewire::test(TwoFactorChallenge::class)->assertSet('pendingHasTotp', true); } }