3711a92958
PhoneNormalizer (RU-телефон → 7XXXXXXXXXX) + Mailable RegisterEmailVerificationCode с 6-значным кодом + эндпоинты register/start|verify|resend: pending-регистрация в сессии (паттерн 2FA), email_verified_at=now() при verify, rate-limit на start + cooldown 60с на resend, лимит 5 попыток ввода кода. Телефон обязателен, нормализуется в 7XXXXXXXXXX. deptrac: разрешён Request→Service. Старый одношаговый register пока сохранён (удаляется отдельной задачей Task 6). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
19 lines
742 B
PHP
19 lines
742 B
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
use App\Services\PhoneNormalizer;
|
||
|
||
test('нормализует разные форматы RU-номера в 7XXXXXXXXXX', function (string $input, ?string $expected) {
|
||
expect(PhoneNormalizer::normalize($input))->toBe($expected);
|
||
})->with([
|
||
'маска +7' => ['+7 (912) 345-67-89', '79123456789'],
|
||
'через 8' => ['8 (912) 345-67-89', '79123456789'],
|
||
'голые 7+10' => ['79123456789', '79123456789'],
|
||
'голые 10' => ['9123456789', '79123456789'],
|
||
'с мусором' => ['тел: +7-912-345-67-89 ', '79123456789'],
|
||
'слишком коротко' => ['12345', null],
|
||
'слишком длинно' => ['791234567890123', null],
|
||
'пусто' => ['', null],
|
||
]);
|