0131ecfc47
Качество. Привязанные клиентом карточки 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>
45 lines
2.8 KiB
PHP
45 lines
2.8 KiB
PHP
<?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(); // чужой салон
|
||
});
|