fix(web-api): normalize options JSON string in cart/change-option - #638
Conversation
…change-option Conflict resolution: keep PR 633 cart/add JSON-string tests alongside PR 638 change-option tests (both sets retained).
|
Этот PR включён в тестовую интеграционную сборку всех открытых PR MiniShop3: AgelxNash/MiniShop3, ветка Сборка нужна, чтобы проверить совместимость взаимозависимых серий PR до их мержа — при последовательном слиянии они конфликтуют друг с другом. Это не ревью и не конкурирующий PR: авторство сохранено (1 PR = 1 коммит с исходным автором), ветка пересобирается по мере обновления PR. Как вошёл в сборку: Ветка PR не содержала тестов из #633 (cart/add JSON-string), поэтому в интеграционной ветке сохранены оба набора: cart/add от #633 и change-option от #638 ( |
|
Удачи с PR! Пусть дойдёт до релиза как можно скорее — спасибо за вклад в MiniShop3! 🚀 |
|
PR проверен и к вливанию годен — возвращаю только на ребейз, содержательных претензий нет.
Что проверено локально, на ветке с домердженной актуальной
Что нужно сделать при ребейзе1. Два конфликта в тестах — механический union. Оба PR вставили свои тест-методы в одну точку:
Разрешается сохранением тел с обеих сторон, семантика не пересекается. 2. Дубль лексикона, который git не поймает. Оба PR добавляют ключ
Значения одинаковые, поэтому функционально безвредно — последнее определение побеждает. Но это четыре мёртвых дубля, и убрать их надо руками: ребейз сам этого не сделает. Мелочь на усмотрение
После ребейза с убранным дублем — вливаем. |
3c7fd34 to
c5bd17b
Compare
|
Rebased onto current
Замечание про прямой вызов |
Описание
POST /api/v1/cart/change-optionпринимаетoptionsкак JSON-строку (например"{\"size\":\"L\"}"), а не только как объект. Нормализация черезCartItemManager::normalizeOptions()на HTTP-границе, по тому же принципу, что иcart/addв #632/#633.Невалидный PHP-тип (
42,true) → 400 сms3_err_cart_options. Пустая карта после decode → 400 сms3_cart_change_options_error(как раньше).Тип изменений
Связанные Issues
Closes #635
Связано: #632, #633 (симметрия
cart/add).Как это было протестировано?
Новые тесты в
HeadlessStorefrontErrorsTest:testChangeOptionJsonStringOptionsReturns200testChangeOptionInvalidOptionsTypeReturns400Ручное тестирование
Автоматические тесты (
composer ci:php/composer test,npm run lint:ci,composer stan/ GitHub Actions CI)Тестирование на разных версиях PHP/MODX
Конфигурация тестирования:
fix/issue-635-cart-change-option-options-stringСкриншоты (если применимо)
Не применимо (API).
Чеклист
composer stan/ CI jobPHPStan)npm run lint:ciдля Vue)Дополнительные заметки
CartItemManager::normalizeOptions()сделанstatic, чтобы контроллер мог вызывать его без инстансаMiniShop3(в journey-тестахJourneyMs3не наследуетMiniShop3).CartMutationHandler::addпо-прежнему вызывает$this->itemManager->normalizeOptions()— DI-подменаms3_cart_item_managerсохраняется.Невалидная JSON-строка (
"{bad") по-прежнему даёт пустой map иms3_cart_change_options_error— поведение как у пустого[], в scope issue не менялось.