43 lines
1.9 KiB
PHP
43 lines
1.9 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
use App\Services\Autopodbor\Agent\Fetch\PageFetcher;
|
||
|
|
use App\Services\Autopodbor\Agent\Fetch\XfetchDirectoryFetcher;
|
||
|
|
|
||
|
|
/** @param array<string,string> $pages */
|
||
|
|
function fakePages(array $pages): PageFetcher
|
||
|
|
{
|
||
|
|
return new class($pages) implements PageFetcher
|
||
|
|
{
|
||
|
|
/** @param array<string,string> $pages */
|
||
|
|
public function __construct(private array $pages) {}
|
||
|
|
|
||
|
|
public function html(string $url): string
|
||
|
|
{
|
||
|
|
return $this->pages[$url] ?? '';
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
it('обходит список 2ГИС и собирает карточки филиалов с адресом', function () {
|
||
|
|
$fake = fakePages([
|
||
|
|
'https://2gis.ru/krasnoyarsk/search/X' => '<a href="/krasnoyarsk/firm/111">ф1</a><a href="/krasnoyarsk/firm/222">ф2</a>',
|
||
|
|
'https://2gis.ru/krasnoyarsk/firm/111' => '<title>КрасЛомбард, улица Весны, 7, Красноярск — 2ГИС</title><a href="tel:+73912550000">x</a>',
|
||
|
|
'https://2gis.ru/krasnoyarsk/firm/222' => '<title>КрасЛомбард, проспект Мира, 10, Красноярск — 2ГИС</title><a href="tel:+73912920000">x</a>',
|
||
|
|
]);
|
||
|
|
|
||
|
|
$cards = (new XfetchDirectoryFetcher($fake))->directory('https://2gis.ru/krasnoyarsk/search/X');
|
||
|
|
|
||
|
|
expect($cards)->toHaveCount(2);
|
||
|
|
$byNum = collect($cards)->keyBy('number');
|
||
|
|
expect($byNum['+73912550000']->office)->toBe('улица Весны, 7');
|
||
|
|
expect($byNum['+73912550000']->source)->toBe('2ГИС');
|
||
|
|
expect($byNum['+73912920000']->office)->toBe('проспект Мира, 10');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('site() тянет HTML конкурента через тот же загрузчик', function () {
|
||
|
|
$fake = fakePages(['https://k.ru' => '<a href="tel:+73912920000">x</a>']);
|
||
|
|
$site = (new XfetchDirectoryFetcher($fake))->site('https://k.ru');
|
||
|
|
expect($site->url)->toBe('https://k.ru')
|
||
|
|
->and($site->rawHtml)->toContain('tel:+73912920000');
|
||
|
|
});
|