Files
portal/app/tests/Unit/Autopodbor/AutopodborNormalizerTest.php
T
Дмитрий 5a65165114 feat(автоподбор): движок шага 1 пересобран под финал v4 (каналы А+В, EXA)
Замена вырожденного «одна фраза → одна страница» на §12/§11.3 финал:
- Шаг АНАЛИЗ (ChannelA\AitunnelQueryAnalyzer): описание → запросы-рубрики (мелкая модель).
- Канал А (ChannelA\CategoryScraper): скрейп категории 2ГИС с пагинацией → резолв карточек.
- Канал В (ChannelB\*): ОДНА модель sonar-reasoning-pro × 2 прохода → ТОЛЬКО имена
  федералов; стоп-лист = имена из А + примеры; сайт федерала через EXA (ExaSiteFinder),
  т.к. у федерала нет карточки в 2ГИС/Яндексе на регион.
- Оркестратор LiveFindCompetitors переписан: АНАЛИЗ→А→В→слияние→отсев→дедуп→похожесть→DTO.
- Провайдер перепрошит; config services.php +research_model/exa.
Похожесть — эмбеддер-модель (математически), резолвер/дедуп — без изменений.
Всё за тонкими границами, офлайн-тесты на фикстурах: модуль 130 unit + 74 feature зелёные.
Провайдер за флагом autopodbor.real_find; на проде не меняется.

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

29 lines
1.2 KiB
PHP

<?php
use App\Services\Autopodbor\AutopodborNormalizer;
it('нормализует домен в голову', function () {
$n = new AutopodborNormalizer;
expect($n->domainHead('https://www.Okna-Komfort.RU/contacts'))->toBe('okna-komfort.ru')
->and($n->domainHead('okna.pro'))->toBe('okna.pro')
->and($n->domainHead('http://site.ru:8080/path?x=1'))->toBe('site.ru');
});
it('нормализует телефон в 7xxxxxxxxxx', function () {
$n = new AutopodborNormalizer;
expect($n->phone('+7 (843) 200-11-22'))->toBe('78432001122')
->and($n->phone('8 843 2001122'))->toBe('78432001122');
});
it('строит dedup_key источника', function () {
$n = new AutopodborNormalizer;
expect($n->sourceKey('site', 'https://OKNA.ru/'))->toBe('site:okna.ru')
->and($n->sourceKey('call', '8-843-200-11-22'))->toBe('call:78432001122');
});
it('строит dedup_key конкурента', function () {
$n = new AutopodborNormalizer;
expect($n->competitorKey('Окна Комфорт', 'https://www.okna-komfort.ru/'))->toBe('site:okna-komfort.ru')
->and($n->competitorKey(' Окна Комфорт ', null))->toBe('name:окна комфорт');
});