public function testDeltaRoundignFix()
 {
     $discountAmount = 10.003;
     $baseDiscountAmount = 12.465;
     $percent = 15;
     $roundedDiscount = round($discountAmount, 2);
     $roundedBaseDiscount = round($baseDiscountAmount, 2);
     $delta = $discountAmount - $roundedDiscount;
     $baseDelta = $baseDiscountAmount - $roundedBaseDiscount;
     $secondRoundedDiscount = round($discountAmount + $delta);
     $secondRoundedBaseDiscount = round($baseDiscountAmount + $baseDelta);
     $this->item->expects($this->any())->method('getQuote')->will($this->returnValue($this->quote));
     $store = $this->getMock('Magento\\Store\\Model\\Store', [], [], '', false);
     $this->priceCurrency->expects($this->any())->method('round')->will($this->returnValueMap([[$discountAmount, $roundedDiscount], [$baseDiscountAmount, $roundedBaseDiscount], [$discountAmount + $delta, $secondRoundedDiscount], [$baseDiscountAmount + $baseDelta, $secondRoundedBaseDiscount]]));
     $this->quote->expects($this->any())->method('getStore')->will($this->returnValue($store));
     $this->item->setDiscountPercent($percent);
     $discountData = $this->getMock('Magento\\SalesRule\\Model\\Rule\\Action\\Discount\\Data', [], [], '', false);
     $discountData->expects($this->at(0))->method('getAmount')->will($this->returnValue($discountAmount));
     $discountData->expects($this->at(1))->method('getBaseAmount')->will($this->returnValue($baseDiscountAmount));
     $discountData->expects($this->at(2))->method('setAmount')->with($roundedDiscount);
     $discountData->expects($this->at(3))->method('setBaseAmount')->with($roundedBaseDiscount);
     $discountData->expects($this->at(4))->method('getAmount')->will($this->returnValue($discountAmount));
     $discountData->expects($this->at(5))->method('getBaseAmount')->will($this->returnValue($baseDiscountAmount));
     $discountData->expects($this->at(6))->method('setAmount')->with($secondRoundedDiscount);
     $discountData->expects($this->at(7))->method('setBaseAmount')->with($secondRoundedBaseDiscount);
     $this->assertEquals($this->utility, $this->utility->deltaRoundingFix($discountData, $this->item));
     $this->assertEquals($this->utility, $this->utility->deltaRoundingFix($discountData, $this->item));
 }
 /**
  * @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
  * @param \Magento\SalesRule\Model\Rule $rule
  * @return \Magento\SalesRule\Model\Rule\Action\Discount\Data
  */
 protected function getDiscountData($item, $rule)
 {
     $qty = $this->validatorUtility->getItemQty($item, $rule);
     $discountCalculator = $this->calculatorFactory->create($rule->getSimpleAction());
     $qty = $discountCalculator->fixQuantity($qty, $rule);
     $discountData = $discountCalculator->calculate($rule, $item, $qty);
     $this->eventFix($discountData, $item, $rule, $qty);
     $this->validatorUtility->deltaRoundingFix($discountData, $item);
     /**
      * We can't use row total here because row total not include tax
      * Discount can be applied on price included tax
      */
     $this->validatorUtility->minFix($discountData, $item, $qty);
     return $discountData;
 }