laravel-shop/tests/Unit
Fabian @ Blax Software 0d9823df04 fix(orders): dispatch OrderPaid once; honour shop.models.order on webhook + service paths
OrderPaid was defined but never dispatched. Order::booted() now fires it from
the `updated` hook exactly when paid_at goes null -> value (recordPayment()
reaching amount_total, the Stripe checkout webhook, or a direct update). Later
saves of a paid order, partial payments and overpayments do not re-fire it, and
a host subclass configured via shop.models.order gets it with its own instance.

StripeWebhookController, ShopService and Cart::checkout used the base
Blax\Shop\Models\Order statically (createFromCart, find, where, scopes,
aggregates), so a host app's configured Order subclass — with its own boot
hooks — was bypassed on the real webhook path. They now resolve
config('shop.models.order') through a small orderModel() helper. Return types
are unchanged (subclass instances satisfy Order); Order::formatMoney stays a
pure static.

Tests: OrderPaidEventTest (once-only on recordPayment, partial payments,
direct paid_at update, host subclass) and StripeWebhookOrderModelTest
(handleCheckoutSessionCompleted builds the configured subclass and its boot
hook runs; webhook/ShopService/Cart finders return it). Suite: 1485 tests green.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 08:22:55 +02:00
..
Cart feat(cart): WS-first storefront primitives + shared cart/auth controllers 2026-09-17 10:53:28 +02:00
Enums I loanable product type, tiered pricing, lifecycle events, host helpers 2026-05-15 10:27:59 +02:00
Models I loanable product type, tiered pricing, lifecycle events, host helpers 2026-05-15 10:27:59 +02:00
Order fix(orders): dispatch OrderPaid once; honour shop.models.order on webhook + service paths 2026-09-24 08:22:55 +02:00
Product feat(pricing): percentage conditional prices + cheapest-effective resolver + authoring helper 2026-08-26 15:52:24 +02:00
Purchase I loanable product type, tiered pricing, lifecycle events, host helpers 2026-05-15 10:27:59 +02:00
Resources test: pin clock in loan-vocabulary test; docs: bump suite counts to 1400/3755 2026-06-02 09:48:26 +02:00
Stripe fix(orders): dispatch OrderPaid once; honour shop.models.order on webhook + service paths 2026-09-24 08:22:55 +02:00
HtmlDateTimeCastTest.php BFI cart single item 2025-12-24 19:40:10 +01:00
ShopServiceTest.php BFI cart / orders 2026-01-05 10:30:21 +01:00
StockManagementTest.php BF edgecases, R structure, A tests 2026-05-18 13:05:38 +02:00
StockTypeSafetyTest.php BF edgecases, R structure, A tests 2026-05-18 13:05:38 +02:00
TaxServiceTest.php feat(tax): configurable TaxService applied across every checkout path 2026-08-21 08:23:56 +02:00