Files
portal/app/tests/Unit/Autopodbor/Study/AnchorGateTest.php
T
Дмитрий 0131ecfc47 fix(autopodbor): якорь по данным клиента на шаге 2 + параллельный разворот
Качество. Привязанные клиентом карточки 2ГИС/Яндекс теперь используются как
«земля» и якорь холдинга (раньше выбрасывались). Слепой поиск по имени берётся
только при наличии якоря; AnchorGate: пустой якорь → drop (было keep-всё — корень
шума). Без сайта чужие фирмы по широкому имени («Притяжение» → стоматология,
салоны, эротический магазин) больше не попадают в карточку конкурента. Доказано на
живых данных (Сибагропромстрой): свежий полный сбор — 0 салонов, только номера
застройщика.

Скорость (за флагом AUTOPODBOR_PHONE_REVERSE_PARALLEL, ВЫКЛ по умолчанию).
ParallelPhoneReverse крутит 2ГИС- и Яндекс-разворот ОДНОВРЕМЕННО (итог по времени
= max, не сумма; оба источника отрабатывают полностью — ничего не режется).
Сверка последовательно vs параллельно: данные один в один, потерь нет. Таймаут
подпроцесса 600с (драйвер process иначе берёт дефолт Symfony 60с и убивал разворот).

Тесты: AnchorGate (пустой якорь → drop; телефон-якорь режет чужое), якорь
привязанной карточки режет салоны, ParallelPhoneReverse (слияние на sync-драйвере).
Весь Autopodbor 464/464, Pint чист.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 08:54:48 +03:00

45 lines
2.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
use App\Services\Autopodbor\Agent\Study\AnchorGate;
use App\Services\Autopodbor\Agent\Study\DomainKinship;
function gate(): AnchorGate
{
return new AnchorGate(new DomainKinship);
}
it('сайт: seed — точно она', function () {
expect(gate()->siteVerified('kraslombard24.ru', 'kraslombard24.ru', '', [], ''))->toBeTrue();
});
it('сайт: близнец — точно она', function () {
// seedRaw = seed-домен (как в реальном вызове коллектора: siteVerified(..., $fp->seedDomain, ...));
// близнец красломбард.рф ↔ kraslombard24.ru распознаётся через DomainKinship.
expect(gate()->siteVerified('красломбард.рф', 'kraslombard24.ru', 'kraslombard24.ru', [], '<html></html>'))->toBeTrue();
});
it('сайт: чужой с якорным телефоном на странице — точно она', function () {
expect(gate()->siteVerified('other.ru', 'kraslombard24.ru', '', ['73912920000'], '...тел 8 (391) 292-00-00 = 73912920000...'))->toBeTrue();
});
it('сайт: чужой без якоря и без ссылки на seed — нет', function () {
expect(gate()->siteVerified('sberbank.ru', 'kraslombard24.ru', '', [], '<html>чужое</html>'))->toBeFalse();
});
it('карточка: сайт с seed — keep', function () {
expect(gate()->cardKept('http://kraslombard24.ru/?utm=2gis', '', 'kraslombard24.ru', []))->toBeTrue();
});
it('карточка: телефон-якорь — keep', function () {
expect(gate()->cardKept(null, '73912920000', 'kraslombard24.ru', ['73912920000' => true]))->toBeTrue();
});
it('карточка: чужая — drop', function () {
expect(gate()->cardKept('http://alien.ru', '79990000000', 'kraslombard24.ru', ['73912920000' => true]))->toBeFalse();
});
it('карточка: якоря нет совсем (ни seed, ни цифр) — drop (слепую находку не берём)', function () {
// Раньше тут был keep-всё — источник шума: без сайта фильтр пропускал стоматологию/салоны.
expect(gate()->cardKept(null, '', '', []))->toBeFalse()
->and(gate()->cardKept('http://alien.ru', '79990000000', '', []))->toBeFalse();
});
it('карточка: якорь только по телефону клиента (сайта нет) — держит своё, режет чужое', function () {
// Элемент без сайта, но клиент привязал карточку с номером 73912002005 → он в якоре.
$anchor = ['73912002005' => true];
expect(gate()->cardKept(null, '73912002005', '', $anchor))->toBeTrue() // своё
->and(gate()->cardKept('http://salon.ru', '73912303303', '', $anchor))->toBeFalse(); // чужой салон
});