Esempio n. 1
0
 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);
 }
Esempio n. 4
0
 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);
 }