![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-bundle/Test/Unit/Pricing/Price/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Bundle\Test\Unit\Pricing\Price; use Magento\Bundle\Pricing\Price\TierPrice; use Magento\Catalog\Model\Product; use Magento\Customer\Api\GroupManagementInterface; use Magento\Customer\Model\Group; use Magento\Customer\Model\GroupManagement; use Magento\Framework\Pricing\Adjustment\Calculator; use Magento\Framework\Pricing\Amount\AmountInterface; use Magento\Framework\Pricing\Price\PriceInterface; use Magento\Framework\Pricing\PriceCurrencyInterface; use Magento\Framework\Pricing\PriceInfo\Base; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class TierPriceTest extends TestCase { /** * @var MockObject */ protected $priceInfo; /** * @var Product|MockObject */ protected $product; /** * @var MockObject */ protected $calculator; /** * @var TierPrice */ protected $model; /** * @var PriceCurrencyInterface|MockObject */ protected $priceCurrencyMock; /** * @var MockObject */ protected $groupManagement; /** * Initialize base dependencies */ protected function setUp(): void { $this->priceInfo = $this->createMock(Base::class); $this->product = $this->getMockBuilder(Product::class) ->setMethods(['getPriceInfo', 'hasCustomerGroupId', 'getCustomerGroupId', 'getResource', '__wakeup']) ->disableOriginalConstructor() ->getMock(); $this->product->expects($this->any()) ->method('getPriceInfo') ->willReturn($this->priceInfo); $this->calculator = $this->createMock(Calculator::class); $this->groupManagement = $this ->getMockForAbstractClass(GroupManagementInterface::class); $this->priceCurrencyMock = $this->getMockForAbstractClass(PriceCurrencyInterface::class); $objectHelper = new ObjectManager($this); $this->model = $objectHelper->getObject( TierPrice::class, [ 'saleableItem' => $this->product, 'calculator' => $this->calculator, 'priceCurrency' => $this->priceCurrencyMock, 'groupManagement' => $this->groupManagement ] ); } /** * @covers \Magento\Bundle\Pricing\Price\TierPrice::isFirstPriceBetter * @dataProvider providerForGetterTierPriceList */ public function testGetterTierPriceList($tierPrices, $basePrice, $expectedResult) { $this->product->setData(TierPrice::PRICE_CODE, $tierPrices); $price = $this->getMockForAbstractClass(PriceInterface::class); $price->expects($this->any()) ->method('getValue') ->willReturn($basePrice); $this->priceInfo->expects($this->any()) ->method('getPrice') ->willReturn($price); $this->calculator->expects($this->atLeastOnce()) ->method('getAmount') ->willReturnArgument(0); $this->priceCurrencyMock->expects($this->never())->method('convertAndRound'); $group = $this->createMock(\Magento\Customer\Model\Data\Group::class); $group->expects($this->any()) ->method('getId') ->willReturn(GroupManagement::CUST_GROUP_ALL); $this->groupManagement->expects($this->any())->method('getAllCustomersGroup') ->willReturn($group); $this->assertEquals($expectedResult, $this->model->getTierPriceList()); $this->assertCount($this->model->getTierPriceCount(), $expectedResult); } /** * @return array */ public function providerForGetterTierPriceList() { return [ 'base case' => [ 'tierPrices' => [ // will be ignored due to customer group [ 'price' => '1.3', 'website_price' => '1.3', 'price_qty' => '1.', 'cust_group' => 999 ], [ 'price' => '50.', 'website_price' => '50.', 'price_qty' => '2.', 'cust_group' => Group::CUST_GROUP_ALL ], [ 'price' => '25.', 'website_price' => '25.', 'price_qty' => '5.', 'cust_group' => Group::CUST_GROUP_ALL ], [ 'price' => '15.', 'website_price' => '15.', 'price_qty' => '5.', 'cust_group' => Group::CUST_GROUP_ALL ], [ 'price' => '30.', 'website_price' => '30.', 'price_qty' => '5.', 'cust_group' => Group::CUST_GROUP_ALL ], [ 'price' => '8.', 'website_price' => '8.', 'price_qty' => '11.', 'cust_group' => Group::CUST_GROUP_ALL ], ], 'basePrice' => 20., 'expectedResult' => [ [ 'price' => '15.', 'website_price' => '15.', 'price_qty' => '5.', 'cust_group' => Group::CUST_GROUP_ALL ], [ 'price' => '8.', 'website_price' => '8.', 'price_qty' => '11.', 'cust_group' => Group::CUST_GROUP_ALL ], ], ] ]; } /** * @dataProvider providerForTestGetSavePercent */ public function testGetSavePercent($baseAmount, $tierPrice, $savePercent) { /** @var AmountInterface|MockObject $amount */ $amount = $this->getMockForAbstractClass(AmountInterface::class); $amount->expects($this->any()) ->method('getValue') ->willReturn($tierPrice); $priceAmount = $this->getMockForAbstractClass(AmountInterface::class); $priceAmount->expects($this->any()) ->method('getValue') ->willReturn($baseAmount); $price = $this->getMockForAbstractClass(PriceInterface::class); $price->expects($this->any()) ->method('getAmount') ->willReturn($priceAmount); $this->priceInfo->expects($this->any()) ->method('getPrice') ->willReturn($price); $this->assertEquals($savePercent, $this->model->getSavePercent($amount)); } /** * @return array */ public function providerForTestGetSavePercent() { return [ 'no fraction' => [9.0000, 8.1, 10], 'lower half' => [9.1234, 8.3, 9], ]; } }