49 lines
1.5 KiB
PHP
49 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature;
|
|
|
|
use App\Livewire\Auth\TwoFactorChallenge;
|
|
use App\Models\User;
|
|
use App\Models\WebauthnCredential;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Livewire\Livewire;
|
|
use Tests\TestCase;
|
|
|
|
class ChallengeFactorAdaptTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
private function keyOnlyUser(): User
|
|
{
|
|
$u = User::factory()->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);
|
|
}
|
|
}
|