function it_should_revert_promotions_that_are_not_eligible_anymore($activePromotionsProvider, $checker, $applicator, PromotionSubjectInterface $subject, PromotionInterface $promotion) { $subject->getPromotions()->shouldBeCalled()->willReturn([$promotion]); $activePromotionsProvider->getPromotions($subject)->willReturn([$promotion]); $checker->isEligible($subject, $promotion)->shouldBeCalled()->willReturn(false); $applicator->apply($subject, $promotion)->shouldNotBeCalled(); $applicator->revert($subject, $promotion)->shouldBeCalled(); $this->process($subject); }
function it_reverts_promotions_that_are_not_eligible_anymore(PreQualifiedPromotionsProviderInterface $preQualifiedPromotionsProvider, PromotionEligibilityCheckerInterface $promotionEligibilityChecker, PromotionApplicatorInterface $promotionApplicator, PromotionSubjectInterface $subject, PromotionInterface $promotion) { $subject->getPromotions()->willReturn([$promotion]); $preQualifiedPromotionsProvider->getPromotions($subject)->willReturn([$promotion]); $promotionEligibilityChecker->isEligible($subject, $promotion)->willReturn(false); $promotionApplicator->apply($subject, $promotion)->shouldNotBeCalled(); $promotionApplicator->revert($subject, $promotion)->shouldBeCalled(); $this->process($subject); }
public function process(PromotionSubjectInterface $subject) { foreach ($subject->getPromotions() as $promotion) { $this->applicator->revert($subject, $promotion); } $eligiblePromotions = array(); foreach ($this->getActivePromotions() as $promotion) { if (!$this->checker->isEligible($subject, $promotion)) { continue; } if ($promotion->isExclusive()) { return $this->applicator->apply($subject, $promotion); } $eligiblePromotions[] = $promotion; } foreach ($eligiblePromotions as $promotion) { $this->applicator->apply($subject, $promotion); } }
/** * {@inheritdoc} */ public function process(PromotionSubjectInterface $subject) { foreach ($subject->getPromotions() as $promotion) { $this->promotionApplicator->revert($subject, $promotion); } $eligiblePromotions = []; foreach ($this->preQualifiedPromotionsProvider->getPromotions($subject) as $promotion) { if (!$this->promotionEligibilityChecker->isEligible($subject, $promotion)) { continue; } if ($promotion->isExclusive()) { $this->promotionApplicator->apply($subject, $promotion); return; } $eligiblePromotions[] = $promotion; } foreach ($eligiblePromotions as $promotion) { $this->promotionApplicator->apply($subject, $promotion); } }