function it_does_nothing_if_target_quantity_is_below_0($orderItemUnitFactory, OrderItemInterface $orderItem) { $orderItem->getQuantity()->willReturn(3); $orderItemUnitFactory->createForItem(Argument::any())->shouldNotBeCalled(); $orderItem->addUnit(Argument::any())->shouldNotBeCalled(); $orderItem->removeUnit(Argument::any())->shouldNotBeCalled(); $this->modify($orderItem, -10); }
/** * @param OrderItemInterface $orderItem * @param int $decreaseBy */ private function decreaseUnitsNumber(OrderItemInterface $orderItem, $decreaseBy) { foreach ($orderItem->getUnits() as $unit) { if (0 >= $decreaseBy--) { break; } $orderItem->removeUnit($unit); } }
/** * @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 removeAdjustment(AdjustmentInterface $adjustment) { if ($adjustment->isLocked() || !$this->hasAdjustment($adjustment)) { return; } $this->adjustments->removeElement($adjustment); $this->subtractFromAdjustmentsTotal($adjustment); $this->orderItem->recalculateUnitsTotal(); $adjustment->setAdjustable(null); }
function it_merges_equal_items(OrderItemInterface $item1, OrderItemInterface $item2) { $item1->setOrder($this)->shouldBeCalled(); $item1->equals($item2)->willReturn(true); $item2->equals($item1)->willReturn(true); $item1->merge($item2, false)->willReturn($this)->shouldBeCalled(); $this->addItem($item1)->addItem($item2); $this->countItems()->shouldReturn(1); }
function it_calculates_correct_total_when_adjustment_is_bigger_than_cost(OrderItemInterface $item, AdjustmentInterface $adjustment) { $item->getTotal()->willReturn(45000); $item->equals(Argument::any())->willReturn(false); $item->setOrder($this)->shouldBeCalled(); $adjustment->isNeutral()->willReturn(false); $adjustment->getAmount()->willReturn(-100000); $adjustment->setAdjustable($this)->shouldBeCalled(); $this->addItem($item); $this->addAdjustment($adjustment); $this->getTotal()->shouldReturn(0); }
/** * {@inheritdoc} */ public function merge(OrderItemInterface $orderItem, $throwOnInvalid = true) { if ($throwOnInvalid && !$orderItem->equals($this)) { throw new \RuntimeException('Given item cannot be merged.'); } if ($this !== $orderItem) { $this->quantity += $orderItem->getQuantity(); } return $this; }
function it_recalculates_its_total_properly_after_adjustment_amount_change(AdjustmentInterface $adjustment1, AdjustmentInterface $adjustment2, OrderItemInterface $orderItem) { $orderItem->recalculateUnitsTotal()->shouldBeCalledTimes(2); $adjustment1->isNeutral()->willReturn(false); $adjustment1->setAdjustable($this)->shouldBeCalled(); $adjustment1->getAmount()->willReturn(100); $adjustment2->isNeutral()->willReturn(false); $adjustment2->setAdjustable($this)->shouldBeCalled(); $adjustment2->getAmount()->willReturn(50); $this->addAdjustment($adjustment1); $this->addAdjustment($adjustment2); $adjustment2->getAmount()->willReturn(150); $this->recalculateAdjustmentsTotal(); $this->getTotal()->shouldReturn(1250); }
function it_throws_exception_when_merging_unequal_item(OrderItemInterface $item) { $item->equals($this)->willReturn(false); $this->shouldThrow(new \RuntimeException('Given item cannot be merged.'))->duringMerge($item); }
/** * {@inheritdoc} */ public function clearAdjustments() { $this->adjustments->clear(); $this->recalculateAdjustmentsTotal(); $this->orderItem->recalculateUnitsTotal(); }
function it_recalculates_adjustments_on_adjustable_entity_on_amount_change(OrderInterface $order, OrderItemInterface $orderItem, OrderItemUnitInterface $orderItemUnit) { $order->addAdjustment($this->getWrappedObject())->shouldBeCalled(); $this->setAdjustable($order); $order->recalculateAdjustmentsTotal()->shouldBeCalled(); $this->setAmount(200); $order->removeAdjustment($this->getWrappedObject())->shouldBeCalled(); $orderItem->addAdjustment($this->getWrappedObject())->shouldBeCalled(); $this->setAdjustable($orderItem); $orderItem->recalculateAdjustmentsTotal()->shouldBeCalled(); $this->setAmount(300); $orderItem->removeAdjustment($this->getWrappedObject())->shouldBeCalled(); $orderItemUnit->addAdjustment($this->getWrappedObject())->shouldBeCalled(); $this->setAdjustable($orderItemUnit); $orderItemUnit->recalculateAdjustmentsTotal()->shouldBeCalled(); $this->setAmount(400); }
function it_restricts_max_item_quantity_to_the_stated_limit(OrderItemQuantityModifierInterface $itemQuantityModifier, OrderItemInterface $orderItem) { $orderItem->getQuantity()->willReturn(0); $itemQuantityModifier->modify($orderItem, 1000)->shouldBeCalled(); $this->modify($orderItem, 9999); }
public function equals(SyliusOrderItemInterface $item) { /** @var $item OrderItem */ return $this->product === $item->getProduct() || $this->product->getId() == $item->getProduct()->getId(); }
public function calculateTotal() { $this->calculateAdjustmentsTotal(); $this->total = $this->orderItem->getUnitPrice() + $this->adjustmentsTotal; }