Files
portal/app/tests/Unit/Autopodbor/ChannelB/ResearcherParserTest.php
T

49 lines
2.1 KiB
PHP
Raw Normal View History

<?php
declare(strict_types=1);
use App\Services\Autopodbor\Agent\ChannelB\ResearcherParser;
// Канал В, ФИНАЛ (ZAFIKSIROVANO §0-БИС + §11.3): ИИ даёт ТОЛЬКО НАЗВАНИЯ (+ тип), без сайтов/карточек.
// Якоря (сайт/2ГИС/Яндекс/телефоны) добывает ПОТОМ Firecrawl/резолвер. Парсер вытаскивает имена
// из сырого ответа модели (часто JSON в markdown-обёртке). Чистая логика, без сети.
beforeEach(function () {
$this->parser = new ResearcherParser;
});
it('разбирает чистый JSON в имена + тип', function () {
$raw = '[{"name":"CarMoney","type":"федеральная"},{"name":"Ваш инвестор","type":"региональная"}]';
$out = $this->parser->parse($raw);
expect($out)->toHaveCount(2)
->and($out[0]['name'])->toBe('CarMoney')
->and($out[0]['type'])->toBe('федеральная')
->and($out[1]['name'])->toBe('Ваш инвестор');
});
it('вытаскивает JSON из markdown-обёртки и текста вокруг', function () {
$raw = "Вот названия:\n```json\n".'[{"name":"Финео","type":"федеральная"}]'."\n```\nГотово.";
$out = $this->parser->parse($raw);
expect($out)->toHaveCount(1)->and($out[0]['name'])->toBe('Финео');
});
it('пропускает элемент без имени; тип может отсутствовать', function () {
$raw = '[{"name":"","type":"региональная"},{"name":"Голд Авто Инвест"}]';
$out = $this->parser->parse($raw);
expect($out)->toHaveCount(1)
->and($out[0]['name'])->toBe('Голд Авто Инвест')
->and($out[0]['type'])->toBeNull();
});
it('пустой массив и мусор дают []', function () {
expect($this->parser->parse('[]'))->toBe([])
->and($this->parser->parse('извините, ничего'))->toBe([])
->and($this->parser->parse(''))->toBe([]);
});