Files
portal/app/tests/Unit/Autopodbor/Resolve/YandexResolverTest.php
T

56 lines
2.9 KiB
PHP
Raw Normal View History

<?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();
});