Files
portal/app/tests/Unit/Autopodbor/Resolve/TwoGisResolverTest.php
T
Дмитрий 7746ccc54d feat(автоподбор): шаг1 A2 — TwoGisResolver, разбор карточки 2ГИС
Разбор реальной карточки филиала 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>
2026-06-30 17:07:33 +03:00

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