Files
portal/app/tests/Unit/Autopodbor/Fetch/RoutingBatchFetcherTest.php
T

58 lines
2.1 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
use App\Services\Autopodbor\Agent\Fetch\BatchPageFetcher;
use App\Services\Autopodbor\Agent\Fetch\RoutingBatchFetcher;
// Роутер загрузки: по подстроке URL направляет к нужному фетчеру. Яндекс-карточки → локальный
// Playwright (надёжно достаёт сайт), 2ГИС и прочее → xfetch. Каждый фетчер тегает html, проверяем маршрут.
function tagFetcher(string $tag): BatchPageFetcher
{
return new class($tag) implements BatchPageFetcher
{
public function __construct(private string $tag) {}
public function html(string $url): string
{
return $this->tag.':'.$url;
}
public function htmlBatch(array $urls): array
{
$out = [];
foreach ($urls as $u) {
$out[$u] = $this->tag.':'.$u;
}
return $out;
}
};
}
it('htmlBatch: яндекс идёт в яндекс-фетчер, остальное — в дефолтный', function () {
$r = new RoutingBatchFetcher(tagFetcher('X'), ['yandex' => tagFetcher('PW')]);
$out = $r->htmlBatch([
'https://yandex.ru/maps/org/a/1',
'https://2gis.ru/krasnoyarsk/firm/2',
]);
expect($out['https://yandex.ru/maps/org/a/1'])->toBe('PW:https://yandex.ru/maps/org/a/1')
->and($out['https://2gis.ru/krasnoyarsk/firm/2'])->toBe('X:https://2gis.ru/krasnoyarsk/firm/2');
});
it('html(): одиночная загрузка тоже маршрутизируется', function () {
$r = new RoutingBatchFetcher(tagFetcher('X'), ['yandex' => tagFetcher('PW')]);
expect($r->html('https://yandex.ru/x'))->toBe('PW:https://yandex.ru/x')
->and($r->html('https://2gis.ru/y'))->toBe('X:https://2gis.ru/y');
});
it('без маршрутов всё идёт в дефолтный', function () {
$r = new RoutingBatchFetcher(tagFetcher('X'));
expect($r->htmlBatch(['https://yandex.ru/z']))->toBe(['https://yandex.ru/z' => 'X:https://yandex.ru/z']);
});