Files
portal/app/tests/Unit/Autopodbor/Resolve/YandexResolverTest.php
T
Дмитрий fc907c2564 feat(автоподбор): шаг1 A3 — YandexResolver + общий DirectoryFields
Разбор реальной org-карточки Яндекс.Карт (/maps/org/<seo>/<id>) в ResolvedCompetitor:
имя/город из <title>, чистый сайт из business-urls (itemprop=url, без utm),
телефоны type=phone (→7XXXXXXXXXX), описание из categories[].name. Отбраковка
чужой фирмы того же имени: имя и город обязаны совпасть с ожидаемыми, иначе null.

Рефактор: общие извлекатели имя+город и телефоны вынесены в DirectoryFields
(используют и 2ГИС, и Яндекс) — без дублирования.

Фикстура — реальная карточка КрасЛомбарда, снята локальным Playwright (render-page.cjs).

Тесты: модуль Автоподбора unit 68/68; Pint чисто.

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

56 lines
2.9 KiB
PHP

<?php
declare(strict_types=1);
use App\Services\Autopodbor\Agent\Resolve\YandexResolver;
function yandexFixture(): string
{
return file_get_contents(base_path('tests/fixtures/autopodbor/yandex-org-kraslombard.html'));
}
it('разбирает реальную org-карточку Яндекс.Карт в карточку конкурента', function () {
// хвост ?ll=… Яндекс дописывает к /maps/org/<seo>/<id> — резолвер его терпит и срезает
$url = 'https://yandex.ru/maps/org/kraslombard/175852236692/?ll=92.8%2C56.0&z=16';
$c = (new YandexResolver)->parse(yandexFixture(), $url, expectName: 'КрасЛомбард', city: 'Красноярск');
expect($c)->not->toBeNull();
expect($c->name)->toBe('КрасЛомбард'); // первый сегмент title
expect($c->siteUrl)->toBe('http://kraslombard24.ru'); // чистый сайт (itemprop=url), без utm
expect($c->siteUrl)->not->toContain('utm_');
expect($c->phones)->not->toBeEmpty();
expect($c->phones)->toContain('73912828585'); // нормализован к 7XXXXXXXXXX
expect($c->region)->toBe('Красноярск'); // город — последний сегмент title
expect($c->description)->toContain('Ломбард'); // categories[].name
expect($c->source)->toBe('Яндекс.Карты');
expect($c->directoryUrl)->toBe('https://yandex.ru/maps/org/kraslombard/175852236692'); // ?ll срезан, слеш убран
expect($c->isLocal())->toBeTrue();
expect($c->isFederal)->toBeFalse();
});
it('отбраковывает карточку из другого города (чужая фирма того же имени)', function () {
$url = 'https://yandex.ru/maps/org/kraslombard/175852236692/';
// имя совпало, но искали в Москве, а карточка — в Красноярске → не наша
$c = (new YandexResolver)->parse(yandexFixture(), $url, expectName: 'КрасЛомбард', city: 'Москва');
expect($c)->toBeNull();
});
it('отбраковывает карточку с чужим именем', function () {
$url = 'https://yandex.ru/maps/org/kraslombard/175852236692/';
$c = (new YandexResolver)->parse(yandexFixture(), $url, expectName: 'Совсем Другая Фирма', city: 'Красноярск');
expect($c)->toBeNull();
});
it('возвращает null на пустой оболочке без данных карточки', function () {
$c = (new YandexResolver)->parse(
'<html><head><title>Яндекс Карты</title></head><body></body></html>',
'https://yandex.ru/maps/org/x/1',
expectName: 'X',
city: 'Красноярск',
);
expect($c)->toBeNull();
});