/** * {@inheritdoc} */ public function createForPromotion(PromotionInterface $promotion) { Assert::true($promotion->isCouponBased(), sprintf('Promotion with name %s is not coupon based.', $promotion->getName())); $coupon = $this->factory->createNew(); $coupon->setPromotion($promotion); return $coupon; }
function it_creates_a_coupon_and_assigns_a_promotion_to_id(FactoryInterface $factory, PromotionInterface $promotion, PromotionCouponInterface $coupon) { $factory->createNew()->willReturn($coupon); $promotion->getName()->willReturn('Christmas sale'); $promotion->isCouponBased()->willReturn(true); $coupon->setPromotion($promotion)->shouldBeCalled(); $this->createForPromotion($promotion)->shouldReturn($coupon); }
/** * @param PromotionInterface $promotion * @param string $type * * @return AdjustmentInterface */ protected function createAdjustment(PromotionInterface $promotion, $type = AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT) { $adjustment = $this->adjustmentFactory->createNew(); $adjustment->setType($type); $adjustment->setLabel($promotion->getName()); $this->originator->setOrigin($adjustment, $promotion); return $adjustment; }
/** * @param PromotionInterface $promotion * @param string $type * * @return AdjustmentInterface */ protected function createAdjustment(PromotionInterface $promotion, $type = AdjustmentInterface::ORDER_SHIPPING_PROMOTION_ADJUSTMENT) { /** @var AdjustmentInterface $adjustment */ $adjustment = $this->adjustmentFactory->createNew(); $adjustment->setType($type); $adjustment->setLabel($promotion->getName()); $adjustment->setOriginCode($promotion->getCode()); return $adjustment; }
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); }
/** * @param PromotionInterface $promotion * @param OrderItemUnitInterface $unit * @param int $amount */ private function addAdjustment(PromotionInterface $promotion, OrderItemUnitInterface $unit, $amount) { $adjustment = $this->adjustmentFactory->createWithData(AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT, $promotion->getName(), $amount); $adjustment->setOriginCode($promotion->getCode()); $unit->addAdjustment($adjustment); }
function it_does_not_distribute_0_amount_to_unit_even_if_its_middle_element(AdjustmentFactoryInterface $adjustmentFactory, AdjustmentInterface $adjustment, IntegerDistributorInterface $distributor, OrderInterface $order, OrderItemInterface $coltItem, OrderItemUnitInterface $firstColtUnit, OrderItemUnitInterface $secondColtUnit, PromotionInterface $promotion) { $order->countItems()->willReturn(1); $order->getItems()->willReturn(new ArrayCollection([$coltItem->getWrappedObject()])); $coltItem->getQuantity()->willReturn(2); $distributor->distribute(1, 2)->willReturn([1, 0]); $coltItem->getUnits()->willReturn(new ArrayCollection([$firstColtUnit->getWrappedObject(), $secondColtUnit->getWrappedObject()])); $promotion->getName()->willReturn('Winter guns promotion!'); $promotion->getCode()->willReturn('WINTER_GUNS_PROMOTION'); $adjustmentFactory->createWithData(AdjustmentInterface::ORDER_PROMOTION_ADJUSTMENT, 'Winter guns promotion!', 1)->willReturn($adjustment); $adjustment->setOriginCode('WINTER_GUNS_PROMOTION')->shouldBeCalled(); $firstColtUnit->addAdjustment($adjustment)->shouldBeCalled(); $secondColtUnit->addAdjustment(Argument::any())->shouldNotBeCalled(); $this->apply($order, $promotion, [1]); }
function it_gets_promotion_by_its_name(PromotionRepositoryInterface $promotionRepository, PromotionInterface $promotion) { $promotion->getName()->willReturn('Best Promotion'); $promotionRepository->findOneBy(['name' => 'Best Promotion'])->willReturn($promotion); $this->getPromotionByName('Best Promotion'); }