public function testLoadCartPriceRules() { $cartPriceRule1 = $this->dummyData->getCartPriceRule(); $cartPriceRuleRepository = $this->mockRepository->getCartPriceRuleRepository(); $cartPriceRuleRepository->shouldReceive('findAll')->andReturn([$cartPriceRule1])->once(); $this->pricing->loadCartPriceRules($cartPriceRuleRepository); $cartPriceRules = $this->pricing->getCartPriceRules(); $this->assertEntitiesEqual($cartPriceRule1, $cartPriceRules[0]); }
private function calculateCartPriceRules() { foreach ($this->pricing->getCartPriceRules() as $cartPriceRule) { if ($cartPriceRule->isValid($this->pricing->getDate(), $this->cart->getCartItems())) { $numberTimesToApply = $cartPriceRule->numberTimesToApply($this->cart->getCartItems()); foreach ($cartPriceRule->getCartPriceRuleDiscounts() as $discount) { $price = $this->pricing->getPrice($discount->getProduct(), $discount->getQuantity()); $discountValue = $price->quantityPrice; $discountValue *= $numberTimesToApply; $this->cartTotal->discount += $discountValue; if ($cartPriceRule->getReducesTaxSubtotal() and $discount->getProduct()->isTaxable()) { $this->cartTotal->taxSubtotal -= $discountValue; } $this->cartTotal->addCartPriceRule($cartPriceRule); } } } // No subtotal below zero! $this->cartTotal->subtotal = max(0, $this->cartTotal->subtotal); }