Skip to content

fix: проверка связи delivery/payment при оформлении заказа - #459

Merged
biz87 merged 1 commit into
betafrom
fix/issue-374-has-payment-validation
Aug 9, 2026
Merged

fix: проверка связи delivery/payment при оформлении заказа#459
biz87 merged 1 commit into
betafrom
fix/issue-374-has-payment-validation

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

Order::hasPayment() проверял связь через msDeliveryMember, но нигде не вызывался. OrderSubmitHandler принимал любой активный payment_id, даже если он не привязан к выбранной доставке.

Добавлены DeliveryService::isPaymentAvailableForDelivery() и getDeliveryPaymentPairError(). Проверка подключена на финальных gate’ах: web submit, order/add, manager create/update и finalize. Order::hasPayment() делегирует в DeliveryService.

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change
  • Рефакторинг
  • Документация

Связанные Issues

Closes #374

Как это было протестировано?

cd core/components/minishop3
php -l src/Services/Delivery/DeliveryService.php   # exit 0
php -l src/Services/Order/OrderSubmitHandler.php   # exit 0
php -l src/Services/Order/OrderFinalizeService.php # exit 0
php -l src/Services/Order/OrderFieldManager.php    # exit 0
php -l src/Controllers/Api/Manager/OrdersController.php # exit 0
composer ci:php                                    # exit 0 (15 smoke tests)
  • Ручное тестирование
  • Автоматические тесты (composer ci:php)
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: fix/issue-374-has-payment-validation
  • MODX: n/a (smoke без MODX)
  • PHP: 8.4

Чеклист

  • Код соответствует стилю проекта
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en) — ms3_order_err_payment_delivery
  • PHPStan
  • ESLint — Vue не затронут
  • CHANGELOG — по политике репозитория

Дополнительные заметки

  • Review: code-reviewer HIGH (формат ошибки в OrderFieldManager) исправлен; security-review — BLOCK/HIGH не найдено.
  • Order::hasPayment() сохранён как публичный API и делегирует в сервис (совместимость с miniShop2).

@Ibochkarev
Ibochkarev requested a review from biz87 July 28, 2026 05:15
@Ibochkarev Ibochkarev added bug Something isn't working priority: high Важно исправить в ближайшее время labels Jul 28, 2026
@Ibochkarev
Ibochkarev force-pushed the fix/issue-374-has-payment-validation branch 3 times, most recently from 80faefa to 0afd5bc Compare August 2, 2026 02:31
@Ibochkarev
Ibochkarev force-pushed the fix/issue-374-has-payment-validation branch 2 times, most recently from 5928cd3 to d761020 Compare August 7, 2026 18:40
Centralize msDeliveryMember checks in DeliveryService and enforce them
on web submit, checkout field updates, manager create/update, and finalize.

Closes #374
@Ibochkarev
Ibochkarev force-pushed the fix/issue-374-has-payment-validation branch from d761020 to 142a18f Compare August 7, 2026 18:45
@biz87
biz87 merged commit 8fbbc0f into beta Aug 9, 2026
3 checks passed
Ibochkarev added a commit that referenced this pull request Aug 9, 2026
… split

Port #459 validateDeliveryPaymentPair into ManagerOrderMutationService,
register ms3_payment_link_resolver in ServiceRegistryFactories (#458),
and point DeliveryPaymentAvailabilityTest at the mutation service.
Ibochkarev added a commit that referenced this pull request Aug 9, 2026
…arness

OrderFinalizeServiceTest doubles used xPDOSimpleObject for delivery and
omitted ms3_delivery_service, which broke after #448/#459 type checks and
pair validation on finalize.
Ibochkarev added a commit that referenced this pull request Aug 9, 2026
…arness

OrderFinalizeServiceTest doubles used xPDOSimpleObject for delivery and
omitted ms3_delivery_service, which broke after #448/#459 type checks and
pair validation on finalize.
Ibochkarev added a commit that referenced this pull request Aug 9, 2026
… split

Port #459 validateDeliveryPaymentPair into ManagerOrderMutationService,
register ms3_payment_link_resolver in ServiceRegistryFactories (#458),
and point DeliveryPaymentAvailabilityTest at the mutation service.
Ibochkarev added a commit that referenced this pull request Aug 9, 2026
…arness

OrderFinalizeServiceTest doubles used xPDOSimpleObject for delivery and
omitted ms3_delivery_service, which broke after #448/#459 type checks and
pair validation on finalize.
Ibochkarev added a commit that referenced this pull request Aug 10, 2026
…arness

OrderFinalizeServiceTest doubles used xPDOSimpleObject for delivery and
omitted ms3_delivery_service, which broke after #448/#459 type checks and
pair validation on finalize.
Ibochkarev added a commit that referenced this pull request Aug 10, 2026
… split

Port #459 validateDeliveryPaymentPair into ManagerOrderMutationService,
register ms3_payment_link_resolver in ServiceRegistryFactories (#458),
and point DeliveryPaymentAvailabilityTest at the mutation service.
biz87 pushed a commit that referenced this pull request Aug 10, 2026
* test(integration): deepen finalize validation and cart SQLite draft store

Cover delivery required_fields without skip_validation, and persist
cart add/change/remove through an in-memory SQLite order-product store.

* test(finalize): stub msDelivery and delivery service in integration harness

OrderFinalizeServiceTest doubles used xPDOSimpleObject for delivery and
omitted ms3_delivery_service, which broke after #448/#459 type checks and
pair validation on finalize.
Ibochkarev added a commit that referenced this pull request Aug 10, 2026
… split

Port #459 validateDeliveryPaymentPair into ManagerOrderMutationService,
register ms3_payment_link_resolver in ServiceRegistryFactories (#458),
and point DeliveryPaymentAvailabilityTest at the mutation service.
Ibochkarev added a commit that referenced this pull request Aug 10, 2026
… split

Port #459 validateDeliveryPaymentPair into ManagerOrderMutationService,
register ms3_payment_link_resolver in ServiceRegistryFactories (#458),
and point DeliveryPaymentAvailabilityTest at the mutation service.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working priority: high Важно исправить в ближайшее время

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] hasPayment не вызывается — submit принимает несовместимую оплату

2 participants