Files
portal/app/tests/Unit/Autopodbor/RegionAreaCodeTest.php
T
Дмитрий efdb3ee2c3 feat(автоподбор): запасная достройка короткого номера по коду города региона
Если на сайте конкурента короткий локальный номер без кода города И на странице
нет ни одного полного номера, движок берёт код по региону конкурента. Основной
путь прежний — код со страницы; региональный код лишь запасной.

- RegionAreaCode: субъект РФ → телефонный код адм. центра, только уверенные
  3-значные коды миллионников, ключ по имени из RussianRegions, неизвестный → null
- RealCompetitorAgent резолвит regionCode и пробрасывает в CandidateBuilder→HtmlPhoneScanner
- ограничение задокументировано: код центра, не выдумываем при отсутствии в карте
- тесты карты и сквозной достройки; бэкенд автоподбора 130/130

НЕ на проде, воркстри avtopodbor.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 16:10:00 +03:00

32 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
use App\Support\RegionAreaCode;
use App\Support\RussianRegions;
/** Код субъекта по каноничному имени — чтобы тест не зависел от номера строки в справочнике. */
function subjectCode(string $name): int
{
return RussianRegions::nameToCode()[$name];
}
it('отдаёт телефонный код столицы по коду субъекта', function () {
expect(RegionAreaCode::forSubject(subjectCode('Красноярский край')))->toBe('391');
expect(RegionAreaCode::forSubject(subjectCode('Новосибирская область')))->toBe('383');
expect(RegionAreaCode::forSubject(subjectCode('Свердловская область')))->toBe('343');
expect(RegionAreaCode::forSubject(subjectCode('Республика Татарстан')))->toBe('843');
expect(RegionAreaCode::forSubject(subjectCode('Москва')))->toBe('495');
expect(RegionAreaCode::forSubject(subjectCode('Санкт-Петербург')))->toBe('812');
});
it('возвращает null для региона без уверенного кода (не выдумываем)', function () {
// Еврейская АО в карту намеренно не внесена — код столицы длинный/неоднозначный.
expect(RegionAreaCode::forSubject(subjectCode('Еврейская автономная область')))->toBeNull();
});
it('возвращает null для неизвестного/нулевого кода', function () {
expect(RegionAreaCode::forSubject(0))->toBeNull();
expect(RegionAreaCode::forSubject(999))->toBeNull();
});