WARN  Your XML configuration validates against a deprecated schema. Migrate your XML configuration using "--migrate-configuration"! PASS Tests\Feature\RegistrationTest ✓ register start generates otp successfully 3.24s ✓ register start with invalid phone 0.65s ✓ register start with existing email 0.87s ✓ register verify creates user successfully 1.02s ✓ register verify with invalid otp 0.73s ✓ register verify with expired otp 0.72s ✓ register start rate limiting 0.87s ✓ register verify with duplicate username 0.76s ✓ user can access protected endpoint with token 0.87s PASS Tests\Unit\OtpServiceTest ✓ generate and send otp creates token 0.25s ✓ generate otp with invalid phone 0.20s ✓ verify otp with correct code 0.31s ✓ verify otp with incorrect code 0.33s ✓ verify otp with expired token 0.27s ✓ verify otp rate limit exceeded 0.23s ✓ otp code format 0.25s ✓ phone number formatting 0.34s ✓ phone masking 0.17s ✓ cleanup expired tokens 0.26s PASS Tests\Unit\RecaptchaV3ServiceTest ✓ verify returns array structure 0.04s ✓ is valid with high score 0.04s ✓ get and set threshold 0.04s ✓ invalid threshold throws exception 0.03s ✓ verify with different actions 0.04s FAIL Tests\Unit\PasswordResetServiceTest ✓ email exists 0.27s ✓ username exists 0.31s ✓ phone exists 0.26s ⨯ send reset link for existing email 1.42s ✓ send reset link for nonexistent email 0.21s ──────────────────────────────────────────────────────────────────────────── FAILED Tests\Unit\PasswordResetServiceTest > send reset link for existin… Failed asserting that false is true. at tests\Unit\PasswordResetServiceTest.php:106 102▕ ]); 103▕ 104▕ $result = $this->service->sendResetLink('test@example.com'); 105▕ ➜ 106▕ $this->assertTrue($result['success']); 107▕ $this->assertStringContainsString('password reset', strtolower($result['message'])); 108▕ } 109▕ 110▕ /** 1 tests\Unit\PasswordResetServiceTest.php:106 Tests: 1 failed, 28 passed (94 assertions) Duration: 15.19s