3ab8b2cbff
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
31 lines
1.7 KiB
PHP
31 lines
1.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Support\PhoneNormalizer;
|
|
|
|
it('normalizes russian phones to +7XXXXXXXXXX', function (string $input, ?string $expected) {
|
|
expect(PhoneNormalizer::normalize($input))->toBe($expected);
|
|
})->with([
|
|
['+7 (915) 123-45-67', '+79151234567'],
|
|
['8 915 123 45 67', '+79151234567'],
|
|
['9151234567', '+79151234567'],
|
|
['7(915)1234567', '+79151234567'],
|
|
['123', null],
|
|
['+1 202 555 0143', null], // 11 цифр, но начинается не с 7/8
|
|
['', null],
|
|
]);
|
|
|
|
it('чистит список контактных телефонов: нормализует к 79…, дубли схлопывает, неизвестное не теряет', function (array $input, array $expected) {
|
|
expect(PhoneNormalizer::cleanContactList($input))->toBe($expected);
|
|
})->with([
|
|
'десять цифр → 79' => [['9135191264'], ['79135191264']],
|
|
'одиннадцать с 8 → 79' => [['89135191264'], ['79135191264']],
|
|
'форматированный с +7 → 79' => [['+7 913 519-12-64'], ['79135191264']],
|
|
'три формы одного номера → один' => [['9135191264', '89135191264', '+7 913 519-12-64'], ['79135191264']],
|
|
'порядок первого вхождения сохраняется' => [['9135191264', '9991112233'], ['79135191264', '79991112233']],
|
|
'нераспознанное — оставляем как ввёл' => [['12345'], ['12345']],
|
|
'пустые строки отбрасываются' => [['', ' ', '9135191264'], ['79135191264']],
|
|
'нераспознанное дедуп по цифрам' => [['12345', '12345'], ['12345']],
|
|
]);
|