/** * @param OrderInterface $order * @param OrderItemInterface $item */ private function resolveOrderItem(OrderInterface $order, OrderItemInterface $item) { foreach ($order->getItems() as $existingItem) { if ($item->equals($existingItem)) { $this->orderItemQuantityModifier->modify($existingItem, $existingItem->getQuantity() + $item->getQuantity()); return; } } $order->addItem($item); }
function it_changes_quantity_of_an_item_if_same_order_item_already_exists(OrderInterface $order, OrderItemInterface $existingItem, OrderItemInterface $newItem, OrderItemQuantityModifierInterface $orderItemQuantityModifier, OrderProcessorInterface $orderProcessor) { $order->getItems()->willReturn([$existingItem]); $newItem->equals($existingItem)->willReturn(true); $existingItem->getQuantity()->willReturn(2); $newItem->getQuantity()->willReturn(3); $order->addItem($existingItem)->shouldNotBeCalled(); $orderItemQuantityModifier->modify($existingItem, 5)->shouldBeCalled(); $orderProcessor->process($order)->shouldBeCalled(); $this->addToOrder($order, $newItem); }
/** * {@inheritdoc} */ public function setOrder(OrderInterface $order = null) { $currentOrder = $this->getOrder(); if ($currentOrder === $order) { return; } $this->order = null; if (null !== $currentOrder) { $currentOrder->removeItem($this); } if (null === $order) { return; } $this->order = $order; if (!$order->hasItem($this)) { $order->addItem($this); } }