123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Tax\Test\Unit\Model\Calculation;
- use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
- use Magento\Tax\Model\Calculation\RowBaseCalculator;
- use Magento\Tax\Model\Calculation\TotalBaseCalculator;
- use Magento\Tax\Api\Data\QuoteDetailsItemExtensionInterface;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class RowBaseAndTotalBaseCalculatorTestCase extends \PHPUnit\Framework\TestCase
- {
- const STORE_ID = 2300;
- const QUANTITY = 1;
- const UNIT_PRICE = 500;
- const RATE = 10;
- const STORE_RATE = 11;
- const UNIT_PRICE_INCL_TAX = 495.49549549545;
- const UNIT_PRICE_INCL_TAX_ROUNDED = 495.5;
- const CODE = 'CODE';
- const TYPE = 'TYPE';
- const ONCE = 'once';
- const MOCK_METHOD_NAME = 'mock_method_name';
- const MOCK_VALUE = 'mock_value';
- const WITH_ARGUMENT = 'with_argument';
- /** @var ObjectManager */
- protected $objectManager;
- /** @var \PHPUnit_Framework_MockObject_MockObject */
- protected $taxItemDetailsDataObjectFactory;
- /** @var \PHPUnit_Framework_MockObject_MockObject */
- protected $mockCalculationTool;
- /** @var \PHPUnit_Framework_MockObject_MockObject */
- protected $mockConfig;
- /** @var \Magento\Tax\Api\Data\QuoteDetailsItemInterface|\PHPUnit_Framework_MockObject_MockObject */
- protected $mockItem;
- /** @var \PHPUnit_Framework_MockObject_MockObject */
- protected $appliedTaxDataObjectFactory;
- /** @var \PHPUnit_Framework_MockObject_MockObject */
- protected $appliedTaxRateDataObjectFactory;
- /** @var \PHPUnit_Framework_MockObject_MockObject */
- protected $mockAppliedTax;
- protected $addressRateRequest;
- /** @var \Magento\Tax\Api\Data\AppliedTaxRateInterface */
- protected $appliedTaxRate;
- /**
- * @var \Magento\Tax\Api\Data\TaxDetailsItemInterface
- */
- protected $taxDetailsItem;
- /**
- * @var \Magento\Tax\Api\Data\QuoteDetailsItemExtensionInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $quoteDetailsItemExtension;
- /**
- * initialize all mocks
- *
- * @param bool $isTaxIncluded
- */
- public function initMocks($isTaxIncluded)
- {
- $this->initMockItem($isTaxIncluded);
- $this->initMockConfig();
- $this->initMockCalculationTool($isTaxIncluded);
- $this->initMockAppliedTaxDataObjectFactory();
- }
- protected function setUp()
- {
- $this->objectManager = new ObjectManager($this);
- $this->taxItemDetailsDataObjectFactory = $this->createPartialMock(
- \Magento\Tax\Api\Data\TaxDetailsItemInterfaceFactory::class,
- ['create']
- );
- $this->taxDetailsItem = $this->objectManager->getObject(\Magento\Tax\Model\TaxDetails\ItemDetails::class);
- $this->taxItemDetailsDataObjectFactory->expects($this->any())
- ->method('create')
- ->willReturn($this->taxDetailsItem);
- $this->mockCalculationTool = $this->getMockBuilder(\Magento\Tax\Model\Calculation::class)
- ->disableOriginalConstructor()
- ->setMethods(
- ['__wakeup', 'round', 'getRate', 'getStoreRate', 'getRateRequest', 'getAppliedRates']
- )
- ->getMock();
- $this->mockConfig = $this->getMockBuilder(\Magento\Tax\Model\Config::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->mockItem = $this->getMockBuilder(\Magento\Tax\Api\Data\QuoteDetailsItemInterface::class)
- ->disableOriginalConstructor()->setMethods(['getExtensionAttributes', 'getUnitPrice'])
- ->getMockForAbstractClass();
- $this->quoteDetailsItemExtension = $this->getMockBuilder(QuoteDetailsItemExtensionInterface::class)
- ->disableOriginalConstructor()->setMethods(['getPriceForTaxCalculation'])
- ->getMockForAbstractClass();
- $this->mockItem->expects($this->any())->method('getExtensionAttributes')
- ->willReturn($this->quoteDetailsItemExtension);
- $this->appliedTaxDataObjectFactory = $this->createPartialMock(
- \Magento\Tax\Api\Data\AppliedTaxInterfaceFactory::class,
- ['create']
- );
- $this->appliedTaxRateDataObjectFactory = $this->createPartialMock(
- \Magento\Tax\Api\Data\AppliedTaxRateInterfaceFactory::class,
- ['create']
- );
- $this->appliedTaxRate = $this->objectManager->getObject(\Magento\Tax\Model\TaxDetails\AppliedTaxRate::class);
- $this->appliedTaxRateDataObjectFactory->expects($this->any())
- ->method('create')
- ->willReturn($this->appliedTaxRate);
- $this->mockAppliedTax = $this->getMockBuilder(\Magento\Tax\Api\Data\AppliedTaxInterface::class)->getMock();
- $this->mockAppliedTax->expects($this->any())->method('getTaxRateKey')->will($this->returnValue('taxKey'));
- $this->addressRateRequest = new \Magento\Framework\DataObject();
- }
- /**
- * @param $calculator RowBaseCalculator|TotalBaseCalculator
- * @param boolean $round
- * @return \Magento\Tax\Api\Data\TaxDetailsItemInterface
- */
- public function calculate($calculator, $round = true)
- {
- return $calculator->calculate($this->mockItem, 1, $round);
- }
- /**
- * init mock Items
- *
- * @param bool $isTaxIncluded
- */
- protected function initMockItem($isTaxIncluded)
- {
- $this->mockReturnValues(
- $this->mockItem,
- [
- [
- self::ONCE => false,
- self::MOCK_METHOD_NAME => 'getDiscountAmount',
- self::MOCK_VALUE => 1,
- ],
- [
- self::ONCE => false,
- self::MOCK_METHOD_NAME => 'getCode',
- self::MOCK_VALUE => self::CODE
- ],
- [
- self::ONCE => false,
- self::MOCK_METHOD_NAME => 'getType',
- self::MOCK_VALUE => self::TYPE
- ],
- [
- self::ONCE => false,
- self::MOCK_METHOD_NAME => 'getUnitPrice',
- self::MOCK_VALUE => self::UNIT_PRICE
- ],
- [
- self::ONCE => false,
- self::MOCK_METHOD_NAME => 'getIsTaxIncluded',
- self::MOCK_VALUE => $isTaxIncluded
- ]
- ]
- );
- }
- /**
- * init mock config
- *
- */
- protected function initMockConfig()
- {
- $this->mockReturnValues(
- $this->mockConfig,
- [
- [
- self::ONCE => false,
- self::MOCK_METHOD_NAME => 'applyTaxAfterDiscount',
- self::MOCK_VALUE => true,
- ]
- ]
- );
- }
- /**
- * init mock calculation model
- *
- * @param boolean $isTaxIncluded
- */
- protected function initMockCalculationTool($isTaxIncluded)
- {
- $mockValues = [
- [
- self::ONCE => false,
- self::MOCK_METHOD_NAME => 'getRate',
- self::MOCK_VALUE => self::RATE
- ],
- [
- self::ONCE => false,
- self::MOCK_METHOD_NAME => 'getAppliedRates',
- self::MOCK_VALUE => [
- [
- 'id' => 0,
- 'percent' => 1.4,
- 'rates' => [
- [
- 'code' => 'sku_1',
- 'title' => 'title1',
- 'percent' => 1.1,
- ],
- ],
- ],
- ]
- ],
- ];
- if ($isTaxIncluded) {
- $mockValues[] = [
- self::ONCE => false,
- self::MOCK_METHOD_NAME => 'getStoreRate',
- self::MOCK_VALUE => self::STORE_RATE
- ];
- }
- $this->mockReturnValues(
- $this->mockCalculationTool,
- $mockValues
- );
- $this->mockCalculationTool->expects($this->atLeastOnce())
- ->method('round')
- ->willReturnCallback(
- function ($price) {
- return round($price, 2);
- }
- );
- }
- /**
- * init mock appliedTaxDataObjectFactory
- *
- */
- protected function initMockAppliedTaxDataObjectFactory()
- {
- $this->mockReturnValues(
- $this->appliedTaxDataObjectFactory,
- [
- [
- self::ONCE => false,
- self::MOCK_METHOD_NAME => 'create',
- self::MOCK_VALUE => $this->mockAppliedTax,
- ]
- ]
- );
- }
- /**
- * @param \PHPUnit_Framework_MockObject_MockObject $mockObject
- * @param array $mockMap
- */
- private function mockReturnValues($mockObject, $mockMap)
- {
- foreach ($mockMap as $valueMap) {
- if (isset($valueMap[self::WITH_ARGUMENT])) {
- $mockObject->expects(
- $valueMap[self::ONCE] == true ? $this->once() : $this->atLeastOnce()
- )->method($valueMap[self::MOCK_METHOD_NAME])->with($valueMap[self::WITH_ARGUMENT])
- ->will(
- $this->returnValue($valueMap[self::MOCK_VALUE])
- );
- } else {
- $mockObject->expects(
- $valueMap[self::ONCE] == true ? $this->once() : $this->atLeastOnce()
- )->method($valueMap[self::MOCK_METHOD_NAME])->withAnyParameters()
- ->will(
- $this->returnValue($valueMap[self::MOCK_VALUE])
- );
- }
- }
- }
- }
|