Files
portal/app/tests/Unit/Autopodbor/CompetitorElementsHelperTest.php
T
Дмитрий 2130cd74e9 feat(autopodbor): формы создания/правки конкурента через элементы - правка не теряет карточки
Бэк: хелпер CompetitorElements нормализует элементы и выводит легаси site_url/directory_urls
из ВСЕХ карточек. Ручки manual/update принимают elements.
Фронт: компонент CompetitorElementsEditor встроен в формы создания и правки на экранах
Поле и Предложения. Прежний баг - пересбор directory_urls из двух полей - закрыт.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 18:32:16 +03:00

46 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
use App\Services\Autopodbor\CompetitorElements;
it('normalize тримит, выкидывает пустые строки и пустые элементы', function () {
$in = [
['name' => ' Нанжуль ', 'sites' => [' nanzhul.ru ', ''], 'cards' => ['https://2gis.ru/x/firm/1']],
['name' => '', 'sites' => [], 'cards' => []], // пустой — отбросить
['name' => 'Плодово', 'sites' => [], 'cards' => []], // только имя — оставить
'мусор', // не массив — пропустить
];
expect(CompetitorElements::normalize($in))->toBe([
['name' => 'Нанжуль', 'sites' => ['nanzhul.ru'], 'cards' => ['https://2gis.ru/x/firm/1']],
['name' => 'Плодово', 'sites' => [], 'cards' => []],
]);
});
it('normalize на не-массиве отдаёт пустой список', function () {
expect(CompetitorElements::normalize(null))->toBe([])
->and(CompetitorElements::normalize('строка'))->toBe([]);
});
it('deriveLegacy: site_url = первый сайт, directory_urls = все карточки уникальные', function () {
$elements = [
['name' => 'A', 'sites' => ['a.ru'], 'cards' => ['card1', 'card2']],
['name' => 'B', 'sites' => ['b.ru'], 'cards' => ['card2', 'card3']],
];
expect(CompetitorElements::deriveLegacy($elements))->toBe([
'site_url' => 'a.ru',
'directory_urls' => ['card1', 'card2', 'card3'],
]);
});
it('deriveLegacy без сайтов даёт site_url = null', function () {
$elements = [['name' => 'A', 'sites' => [], 'cards' => ['c1']]];
expect(CompetitorElements::deriveLegacy($elements))->toBe([
'site_url' => null,
'directory_urls' => ['c1'],
]);
});