public function incrementCouponUsage(OrderInterface $order) { $coupon = $order->getPromotionCoupon(); if (null !== $coupon) { $coupon->incrementUsed(); } }
function it_decrements_a_usage_of_promotions_and_promotion_coupon_applied_on_order(OrderInterface $order, PromotionInterface $firstPromotion, PromotionInterface $secondPromotion, PromotionCouponInterface $promotionCoupon) { $order->getPromotions()->willReturn([$firstPromotion, $secondPromotion]); $order->getPromotionCoupon()->willReturn($promotionCoupon); $firstPromotion->decrementUsed()->shouldBeCalled(); $secondPromotion->decrementUsed()->shouldBeCalled(); $promotionCoupon->decrementUsed()->shouldBeCalled(); $this->decrement($order); }
function it_returns_false_if_subject_coupon_is_eligible_to_promotion_and_number_of_usages_is_bigger_than_coupon_usage_limit(OrderRepositoryInterface $orderRepository, OrderInterface $subject, PromotionInterface $promotion, CouponInterface $coupon, CustomerInterface $customer) { $subject->getPromotionCoupon()->willReturn($coupon); $promotion->isCouponBased()->willReturn(true); $subject->getCustomer()->willReturn($customer); $coupon->getPromotion()->willReturn($promotion); $coupon->getPerCustomerUsageLimit()->willReturn(5); $orderRepository->countByCustomerAndCoupon($customer, $coupon)->willReturn(6); $this->isEligible($subject, $promotion)->shouldReturn(false); }
function it_dispatches_event_and_returns_false_if_subject_coupon_is_eligible_to_promotion_and_number_of_usages_is_bigger_than_coupon_usage_limit(CouponInterface $coupon, CustomerInterface $customer, EventDispatcherInterface $eventDispatcher, OrderInterface $subject, OrderRepositoryInterface $orderRepository, PromotionInterface $promotion) { $subject->getPromotionCoupon()->willReturn($coupon); $coupon->getPromotion()->willReturn($promotion); $subject->getCustomer()->willReturn($customer); $coupon->getPerCustomerUsageLimit()->willReturn(5); $orderRepository->countByCustomerAndCoupon($customer, $coupon)->willReturn(6); $eventDispatcher->dispatch(SyliusPromotionEvents::COUPON_NOT_ELIGIBLE, Argument::type(GenericEvent::class))->shouldBeCalled(); $this->isEligible($subject, $promotion)->shouldReturn(false); }
/** * {@inheritdoc} */ public function decrement(OrderInterface $order) { foreach ($order->getPromotions() as $promotion) { $promotion->decrementUsed(); } $promotionCoupon = $order->getPromotionCoupon(); if (null !== $promotionCoupon) { $promotionCoupon->decrementUsed(); } }
public function it_recognizes_subject_as_not_eligible_if_user_not_linked_to_order(OrderInterface $subject, PromotionInterface $promotion, CouponInterface $coupon) { $subject->getUser()->willReturn(null); $coupon->getCode()->willReturn('D0003'); $coupon->getPerUserUsageLimit()->willReturn(1); $coupon->getPromotion()->willReturn($promotion); $subject->getPromotionCoupon()->willReturn($coupon); $promotion->getRules()->willReturn(array()); $promotion->getStartsAt()->willReturn(null); $promotion->getEndsAt()->willReturn(null); $promotion->isCouponBased()->willReturn(true); $promotion->hasCoupons()->willReturn(true); $promotion->hasCoupon($coupon)->willReturn(true); $promotion->getUsageLimit()->willReturn(null); $promotion->getCoupons()->willReturn(array($coupon)); $this->isEligible($subject, $promotion)->shouldReturn(false); }
public function it_recognizes_subject_as_eligible_if_customer_not_linked_to_order_and_coupon_not_restricted_by_customer(OrderInterface $subject, PromotionInterface $promotion, CouponInterface $coupon) { $subject->getCustomer()->willReturn(null); $coupon->getCode()->willReturn('D0003'); $coupon->getPerCustomerUsageLimit()->willReturn(0); $coupon->getPromotion()->willReturn($promotion); $subject->getPromotionCoupon()->willReturn($coupon); $promotion->hasRules()->willReturn(false); $promotion->getStartsAt()->willReturn(null); $promotion->getEndsAt()->willReturn(null); $promotion->isCouponBased()->willReturn(true); $promotion->hasCoupons()->willReturn(true); $promotion->hasCoupon($coupon)->willReturn(true); $promotion->getUsageLimit()->willReturn(null); $promotion->getCoupons()->willReturn([$coupon]); $this->isEligible($subject, $promotion)->shouldReturn(true); }
function it_increments_coupon_usage_if_coupon_was_set(OrderInterface $order, CouponInterface $coupon) { $order->getPromotionCoupon()->willReturn($coupon); $coupon->incrementUsed()->shouldBeCalled(); $this->incrementCouponUsage($order); }