You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
После CI-гейта (#337 / #394) следующий шаг по покрытию: подключить PHPUnit (или Pest) в core/components/minishop3 и перенести/добавить 2–3 unit-теста на чистые функции без MODX/MySQL. Smoke-скрипты в tests/*Test.php остаются; PHPUnit — параллельный слой с нормальными assertions и автодискавери.
Проблема, которую решает
Standalone smoke-скрипты дублируют $fail / assertSame и плохо масштабируются.
Горячие пути (Cart/Order/auth/ImportCSV) почти без покрытия; сразу PHPUnit «на всё» дорого.
Dev-зависимость PHPUnit 10+/11+ в core/components/minishop3/composer.json (+ phpunit.xml.dist).
Каталог tests/Unit/ (или tests/unit/) с PSR-4 autoload-dev.
Первые тесты (выбрать 2–3 из списка; остальное — follow-up):
Utils::parseImportedOptionValue — уже есть smoke; перенести кейсы в PHPUnit.
ms3PhinxExtractDsnCharset / ms3PhinxNormalizeMysqlCharset / ms3PhinxDefaultMysqlCollation — чистые функции в phinx.php (сейчас косвенно через full require).
EmailVerificationService::buildDefaultVerifyRequestUrl — уже есть smoke; перенести.
CI: job/step composer test / vendor/bin/phpunit рядом с composer ci:php (или внутри ci:php).
Не трогать Cart/Order/ImportCSV в этом PR.
Альтернативные варианты
Pest вместо PHPUnit — ок, если команде удобнее; критерий тот же (F.I.R.S.T., без MODX).
Только обернуть smoke в PHPUnit без новых кейсов — слабее, но разблокирует каркас.
Сразу интеграционные тесты с MySQL — нет; отдельный трек.
Примеры использования
cd core/components/minishop3
composer install
vendor/bin/phpunit
# или
composer test
Критерии приёмки
PHPUnit (или Pest) ставится через Composer, конфиг в репо.
≥2 unit-теста на чистые функции; проходят без MODX/MySQL.
CI падает при падении PHPUnit.
Документирован локальный запуск (PR template / комментарий в composer.json scripts).
Существующие smoke (composer test:smoke / ci:php) не ломаются; план миграции smoke→Unit можно описать в PR, не обязан завершиться в первом PR.
Дополнительный контекст
Связь: follow-up к #337. Дальше расширять список: парсеры CSV, filter keys, затем сервисы с тонкими стабами (не полный e2e).
F.I.R.S.T.: Fast / Independent / Repeatable / Self-validating / Timely.
Описание функции
После CI-гейта (#337 / #394) следующий шаг по покрытию: подключить PHPUnit (или Pest) в
core/components/minishop3и перенести/добавить 2–3 unit-теста на чистые функции без MODX/MySQL. Smoke-скрипты вtests/*Test.phpостаются; PHPUnit — параллельный слой с нормальными assertions и автодискавери.Проблема, которую решает
$fail/assertSameи плохо масштабируются.Предлагаемое решение
Минимальный каркас (отдельный PR, без e2e MODX):
core/components/minishop3/composer.json(+phpunit.xml.dist).tests/Unit/(илиtests/unit/) с PSR-4 autoload-dev.Utils::parseImportedOptionValue— уже есть smoke; перенести кейсы в PHPUnit.ms3PhinxExtractDsnCharset/ms3PhinxNormalizeMysqlCharset/ms3PhinxDefaultMysqlCollation— чистые функции вphinx.php(сейчас косвенно через full require).EmailVerificationService::buildDefaultVerifyRequestUrl— уже есть smoke; перенести.composer test/vendor/bin/phpunitрядом сcomposer ci:php(или внутриci:php).Альтернативные варианты
Примеры использования
Критерии приёмки
composer.jsonscripts).composer test:smoke/ci:php) не ломаются; план миграции smoke→Unit можно описать в PR, не обязан завершиться в первом PR.Дополнительный контекст
Связь: follow-up к #337. Дальше расширять список: парсеры CSV, filter keys, затем сервисы с тонкими стабами (не полный e2e).
F.I.R.S.T.: Fast / Independent / Repeatable / Self-validating / Timely.