function it_applies_percentage_discount_on_every_unit_in_order(FactoryInterface $adjustmentFactory, FilterInterface $priceRangeFilter, FilterInterface $taxonFilter, FilterInterface $productFilter, AdjustmentInterface $promotionAdjustment1, AdjustmentInterface $promotionAdjustment2, Collection $originalItems, Collection $units, OrderInterface $order, OrderItemInterface $orderItem1, OrderItemUnitInterface $unit1, OrderItemUnitInterface $unit2, PromotionInterface $promotion) { $order->getItems()->willReturn($originalItems); $originalItems->toArray()->willReturn([$orderItem1]); $priceRangeFilter->filter([$orderItem1], ['percentage' => 0.2])->willReturn([$orderItem1]); $taxonFilter->filter([$orderItem1], ['percentage' => 0.2])->willReturn([$orderItem1]); $productFilter->filter([$orderItem1], ['percentage' => 0.2])->willReturn([$orderItem1]); $orderItem1->getQuantity()->willReturn(2); $orderItem1->getUnits()->willReturn($units); $units->getIterator()->willReturn(new \ArrayIterator([$unit1->getWrappedObject(), $unit2->getWrappedObject()])); $orderItem1->getUnitPrice()->willReturn(500); $promotion->getName()->willReturn('Test promotion'); $promotion->getCode()->willReturn('TEST_PROMOTION'); $adjustmentFactory->createNew()->willReturn($promotionAdjustment1, $promotionAdjustment2); $promotionAdjustment1->setType(AdjustmentInterface::ORDER_UNIT_PROMOTION_ADJUSTMENT)->shouldBeCalled(); $promotionAdjustment1->setLabel('Test promotion')->shouldBeCalled(); $promotionAdjustment1->setAmount(-100)->shouldBeCalled(); $promotionAdjustment1->setOriginCode('TEST_PROMOTION')->shouldBeCalled(); $promotionAdjustment2->setType(AdjustmentInterface::ORDER_UNIT_PROMOTION_ADJUSTMENT)->shouldBeCalled(); $promotionAdjustment2->setLabel('Test promotion')->shouldBeCalled(); $promotionAdjustment2->setAmount(-100)->shouldBeCalled(); $promotionAdjustment2->setOriginCode('TEST_PROMOTION')->shouldBeCalled(); $unit1->addAdjustment($promotionAdjustment1)->shouldBeCalled(); $unit2->addAdjustment($promotionAdjustment2)->shouldBeCalled(); $this->execute($order, ['percentage' => 0.2], $promotion); }
function it_returns_regular_price_of_discount_order_item(OrderItemInterface $orderItem) { $orderItem->getQuantity()->willReturn(2); $orderItem->getUnitPrice()->willReturn(1000); $orderItem->getAdjustmentsTotalRecursively(AdjustmentInterface::TAX_ADJUSTMENT)->willReturn(1000); $this->getRegularPrice($orderItem)->shouldReturn(3000); }
function let(OrderItemInterface $orderItem) { $orderItem->getUnitPrice()->willReturn(1000); $orderItem->addUnit(Argument::type(OrderItemUnitInterface::class))->shouldBeCalled(); $this->beConstructedWith($orderItem); }
/** * @param OrderItemInterface $orderItem * * @return int */ public function getRegularPrice(OrderItemInterface $orderItem) { return $orderItem->getUnitPrice() * $orderItem->getQuantity() + $orderItem->getAdjustmentsTotalRecursively(AdjustmentInterface::TAX_ADJUSTMENT); }