Files
portal/app/tests/Unit/Autopodbor/Search/SearchResultsParserTest.php
T
Дмитрий 0d5e06e895 feat(автоподбор): шаг1 B (офлайн) — парсер выдачи 2ГИС/Яндекс (канал А)
SearchResultsParser: страница категория-поиска → список фирм/организаций {ссылка, имя-подсказка}.
2ГИС — путь /<город>/firm/<id> + имя из вложенного span; Яндекс — /maps/org/<seo>/<id> + aria-label.
Дедуп по ссылке. Авторитетное имя/поля даёт резолвер (под-блок A), открывая каждую карточку.
Пагинация/мульти-запрос — живая часть (блок H/живой прогон).

Фикстуры — реальные сниппеты выдачи (Красломбард, Красноярск): 2ГИС через xfetch, Яндекс
локальным Playwright.

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

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

40 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
use App\Services\Autopodbor\Agent\Search\SearchResultsParser;
// autopodborFixture() — глобальный хелпер из tests/Pest.php.
it('вытаскивает фирмы из реальной выдачи 2ГИС (ссылка + имя-подсказка)', function () {
$items = (new SearchResultsParser)->twoGis(autopodborFixture('2gis-search-kraslombard.html'));
expect(count($items))->toBe(4);
foreach ($items as $it) {
expect($it['path'])->toMatch('#^/[a-z0-9_-]+/firm/\d+$#');
expect($it['name'])->toBe('КрасЛомбард');
}
// ссылки уникальны
$paths = array_column($items, 'path');
expect($paths)->toBe(array_values(array_unique($paths)));
});
it('вытаскивает организации из реальной выдачи Яндекса (ссылка + имя)', function () {
$items = (new SearchResultsParser)->yandex(autopodborFixture('yandex-search-kraslombard.html'));
expect(count($items))->toBe(5);
$names = array_column($items, 'name');
expect($names)->toContain('КрасЛомбард')->toContain('Сибломбард')->toContain('Енисейская скупка золота');
foreach ($items as $it) {
expect($it['url'])->toMatch('#^/maps/org/[a-z0-9_-]+/\d+$#');
}
$urls = array_column($items, 'url');
expect($urls)->toBe(array_values(array_unique($urls)));
});
it('пустая/неподходящая страница → пустой список', function () {
$p = new SearchResultsParser;
expect($p->twoGis('<html><body>ничего</body></html>'))->toBe([]);
expect($p->yandex('<html><body>ничего</body></html>'))->toBe([]);
});