7746ccc54d
Разбор реальной карточки филиала 2ГИС (/<город>/firm/<id>) в ResolvedCompetitor: имя из <title>, чистый сайт из contact_groups (url, не редирект link.2gis), телефоны type=phone (нормализованы к 7XXXXXXXXXX), город из title, описание из rubrics. Терпим к хвосту ?stat=. Пустая оболочка 2ГИС → null. Фикстура — реальная карточка КрасЛомбарда из живого прогона шага 2 (публичный бизнес-телефон конкурента, не клиентские ПДн); allowlist gitleaks для app/tests/fixtures/. Тесты: A2 3/3; модуль Автоподбора unit 64/64. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
41 lines
2.0 KiB
PHP
41 lines
2.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Services\Autopodbor\Agent\Resolve\TwoGisResolver;
|
|
|
|
function twoGisFixture(): string
|
|
{
|
|
return file_get_contents(base_path('tests/fixtures/autopodbor/2gis-firm-kraslombard.html'));
|
|
}
|
|
|
|
it('разбирает реальную карточку 2ГИС в карточку конкурента', function () {
|
|
// ?stat=… 2ГИС дописывает к ссылке firm — резолвер должен его терпеть и срезать
|
|
$url = 'https://2gis.ru/krasnoyarsk/firm/70000001040792812?stat=abc123';
|
|
$c = (new TwoGisResolver)->parse(twoGisFixture(), $url);
|
|
|
|
expect($c)->not->toBeNull();
|
|
expect($c->name)->toBe('КрасЛомбард'); // из <title>, первый сегмент
|
|
expect($c->siteUrl)->toBe('http://kraslombard24.ru'); // чистый url, НЕ редирект link.2gis
|
|
expect($c->phones)->toContain('73912920000'); // нормализован к 7XXXXXXXXXX
|
|
expect($c->region)->toBe('Красноярск'); // город — последний сегмент title
|
|
expect($c->description)->toContain('Ломбарды'); // рубрики
|
|
expect($c->source)->toBe('2ГИС');
|
|
expect($c->directoryUrl)->toBe('https://2gis.ru/krasnoyarsk/firm/70000001040792812'); // ?stat срезан
|
|
expect($c->isLocal())->toBeTrue();
|
|
expect($c->isFederal)->toBeFalse();
|
|
});
|
|
|
|
it('НЕ берёт редирект link.2gis как сайт конкурента', function () {
|
|
$url = 'https://2gis.ru/krasnoyarsk/firm/70000001040792812';
|
|
$c = (new TwoGisResolver)->parse(twoGisFixture(), $url);
|
|
|
|
expect($c->siteUrl)->not->toContain('link.2gis.ru');
|
|
});
|
|
|
|
it('возвращает null, когда в HTML нет данных карточки (пустая оболочка 2ГИС)', function () {
|
|
$c = (new TwoGisResolver)->parse('<html><head><title>2gis.ru</title></head><body></body></html>', 'https://2gis.ru/x/firm/1');
|
|
|
|
expect($c)->toBeNull();
|
|
});
|