From 36e4fb4a13d648a936f76837bf5c6072427d8b89 Mon Sep 17 00:00:00 2001 From: Ibes Date: Sun, 13 Oct 2024 18:49:39 +0200 Subject: [PATCH] issue #261 fix, thanks to @TalkMarc --- .../CommandHandler/AddItemToCartHandler.php | 18 ++++++++++++++++-- .../AddItemToCartHandlerTest.php | 1 - 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/Api/CommandHandler/AddItemToCartHandler.php b/src/Api/CommandHandler/AddItemToCartHandler.php index 22652031..2cdf6c9e 100644 --- a/src/Api/CommandHandler/AddItemToCartHandler.php +++ b/src/Api/CommandHandler/AddItemToCartHandler.php @@ -43,10 +43,13 @@ public function __invoke(SyliusAddItemToCart $addItemToCart): OrderInterface $cartItem = $this->cartItemFactory->createNew(); $cartItem->setVariant($productVariant); - if ($addItemToCart instanceof SetonoSyliusGiftCardAddItemToCart) { + if ($this->isGiftCard($addItemToCart, $productVariant)) { /** @var ProductInterface $product */ $product = $productVariant->getProduct(); if ($product->isGiftCardAmountConfigurable()) { + /** @var SetonoSyliusGiftCardAddItemToCart $addItemToCart */ + $addItemToCart = $addItemToCart; + /** @var int|null $giftCardAmount */ $giftCardAmount = $addItemToCart->getAmount(); Assert::notNull($giftCardAmount); $cartItem->setUnitPrice($giftCardAmount); @@ -57,10 +60,12 @@ public function __invoke(SyliusAddItemToCart $addItemToCart): OrderInterface $this->orderItemQuantityModifier->modify($cartItem, $addItemToCart->quantity); $this->orderModifier->addToOrder($cart, $cartItem); - if ($addItemToCart instanceof SetonoSyliusGiftCardAddItemToCart) { + if ($this->isGiftCard($addItemToCart, $productVariant)) { /** @var OrderItemUnitInterface $unit */ foreach ($cartItem->getUnits() as $unit) { $giftCard = $this->giftCardFactory->createFromOrderItemUnitAndCart($unit, $cart); + /** @var SetonoSyliusGiftCardAddItemToCart $addItemToCart */ + $addItemToCart = $addItemToCart; $giftCard->setCustomMessage($addItemToCart->getCustomMessage()); // As the common flow for any add to cart action will flush later. Do not flush here. @@ -70,4 +75,13 @@ public function __invoke(SyliusAddItemToCart $addItemToCart): OrderInterface return $cart; } + + private function isGiftCard(SyliusAddItemToCart $addItemToCart, ProductVariantInterface $productVariant): bool + { + $product = $productVariant->getProduct(); + + return $addItemToCart instanceof SetonoSyliusGiftCardAddItemToCart && + $product instanceof ProductInterface && + $product->isGiftCard(); + } } diff --git a/tests/Unit/Api/CommandHandler/AddItemToCartHandlerTest.php b/tests/Unit/Api/CommandHandler/AddItemToCartHandlerTest.php index ea9c923d..d833b44b 100644 --- a/tests/Unit/Api/CommandHandler/AddItemToCartHandlerTest.php +++ b/tests/Unit/Api/CommandHandler/AddItemToCartHandlerTest.php @@ -146,7 +146,6 @@ public function it_adds_simple_item_to_cart(): void ->createNew() ->willReturn($cartItem); - $productVariant->getProduct()->shouldNotBeCalled(); $orderItemQuantityModifier->modify($cartItem, 1)->shouldBeCalled(); $orderModifier->addToOrder($cart, $cartItem)->shouldBeCalled();