function it_does_nothing_if_promotion_amount_is_0(OrderInterface $order, PromotionInterface $promotion, ProportionalIntegerDistributorInterface $proportionalIntegerDistributor) { $order->countItems()->willReturn(0); $order->getPromotionSubjectTotal()->willReturn(1000); $proportionalIntegerDistributor->distribute(Argument::any())->shouldNotBeCalled(); $this->execute($order, ['amount' => 0], $promotion); }
function it_does_nothing_if_adjustment_amount_would_be_0(ProportionalIntegerDistributorInterface $distributor, OrderInterface $order, PromotionInterface $promotion) { $order->countItems()->willReturn(0); $order->getPromotionSubjectTotal()->willReturn(0); $distributor->distribute(Argument::any())->shouldNotBeCalled(); $this->execute($order, ['percentage' => 0.1], $promotion); }
function it_applies_percentage_discount_as_promotion_adjustment($adjustmentRepository, OrderInterface $order, AdjustmentInterface $adjustment, PromotionInterface $promotion) { $order->getPromotionSubjectTotal()->willReturn(10000); $adjustmentRepository->createNew()->willReturn($adjustment); $promotion->getDescription()->willReturn('promotion description'); $adjustment->setAmount(-2500)->shouldBeCalled(); $adjustment->setLabel(OrderInterface::PROMOTION_ADJUSTMENT)->shouldBeCalled(); $adjustment->setDescription('promotion description')->shouldBeCalled(); $order->addAdjustment($adjustment)->shouldBeCalled(); $configuration = array('percentage' => 0.25); $this->execute($order, $configuration, $promotion); }
function it_does_not_applies_bigger_discount_than_promotion_subject_total($adjustmentFactory, $originator, OrderInterface $order, AdjustmentInterface $adjustment, PromotionInterface $promotion) { $adjustmentFactory->createNew()->willReturn($adjustment); $promotion->getDescription()->willReturn('promotion description'); $order->getPromotionSubjectTotal()->willReturn(1000); $adjustment->setAmount(-1000)->shouldBeCalled(); $adjustment->setType(AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT)->shouldBeCalled(); $adjustment->setLabel('promotion description')->shouldBeCalled(); $originator->setOrigin($adjustment, $promotion)->shouldBeCalled(); $order->addAdjustment($adjustment)->shouldBeCalled(); $configuration = ['amount' => 1500]; $this->execute($order, $configuration, $promotion); }
function it_applies_percentage_discount_as_promotion_adjustment(FactoryInterface $adjustmentFactory, $originator, OrderInterface $order, AdjustmentInterface $adjustment, PromotionInterface $promotion) { $order->getPromotionSubjectTotal()->willReturn(10000); $adjustmentFactory->createNew()->willReturn($adjustment); $promotion->getName()->willReturn('Test promotion'); $adjustment->setAmount(-2500)->shouldBeCalled(); $adjustment->setType(AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT)->shouldBeCalled(); $adjustment->setLabel('Test promotion')->shouldBeCalled(); $originator->setOrigin($adjustment, $promotion)->shouldBeCalled(); $order->addAdjustment($adjustment)->shouldBeCalled(); $configuration = ['percentage' => 0.25]; $this->execute($order, $configuration, $promotion); }
function it_does_not_apply_discount_if_amount_for_order_channel_is_not_configured(ChannelInterface $channel, OrderInterface $order, PromotionInterface $promotion) { $order->getChannel()->willReturn($channel); $channel->getCode()->willReturn('WEB_US'); $order->countItems()->willReturn(1); $order->getPromotionSubjectTotal()->shouldNotBeCalled(); $this->execute($order, ['WEB_PL' => ['amount' => 1000]], $promotion)->shouldReturn(false); }