saleableInterfaceMock = $this->getMockBuilder(\Magento\Catalog\Model\Product::class) ->disableOriginalConstructor() ->setMethods(['getPriceInfo', 'getPriceType', 'getPrice']) ->getMock(); $this->bundleCalculatorMock = $this->createMock( \Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface::class ); $this->priceInfoMock = $this->createMock(\Magento\Framework\Pricing\PriceInfo\Base::class); $this->customOptionPriceMock = $this->getMockBuilder(\Magento\Catalog\Pricing\Price\CustomOptionPrice::class) ->disableOriginalConstructor() ->getMock(); $this->saleableInterfaceMock->expects($this->once()) ->method('getPriceInfo') ->will($this->returnValue($this->priceInfoMock)); $this->priceCurrencyMock = $this->createMock(\Magento\Framework\Pricing\PriceCurrencyInterface::class); $this->objectManagerHelper = new ObjectManagerHelper($this); $this->regularPrice = new \Magento\Bundle\Pricing\Price\BundleRegularPrice( $this->saleableInterfaceMock, $this->quantity, $this->bundleCalculatorMock, $this->priceCurrencyMock ); } public function testGetAmount() { $expectedResult = 5; $this->saleableInterfaceMock->expects($this->once()) ->method('getPrice') ->will($this->returnValue($expectedResult)); $this->bundleCalculatorMock->expects($this->once()) ->method('getMinRegularAmount') ->with($expectedResult, $this->saleableInterfaceMock) ->will($this->returnValue($expectedResult)); $this->priceCurrencyMock->expects($this->once()) ->method('convertAndRound') ->will($this->returnArgument(0)); $result = $this->regularPrice->getAmount(); $this->assertEquals($expectedResult, $result, 'Incorrect amount'); //Calling a second time, should use cached value $result = $this->regularPrice->getAmount(); $this->assertEquals($expectedResult, $result, 'Incorrect amount'); } public function testGetMaximalPrice() { $expectedResult = 5; $this->saleableInterfaceMock->expects($this->once()) ->method('getPrice') ->will($this->returnValue($expectedResult)); $this->bundleCalculatorMock->expects($this->once()) ->method('getMaxRegularAmount') ->with($expectedResult, $this->saleableInterfaceMock) ->will($this->returnValue($expectedResult)); $this->priceCurrencyMock->expects($this->once()) ->method('convertAndRound') ->will($this->returnArgument(0)); $result = $this->regularPrice->getMaximalPrice(); $this->assertEquals($expectedResult, $result, 'Incorrect amount'); //Calling a second time, should use cached value $result = $this->regularPrice->getMaximalPrice(); $this->assertEquals($expectedResult, $result, 'Incorrect amount the second time'); } public function testGetMaximalPriceForFixedPriceBundleWithOption() { $price = 5; $maxOptionPrice = 2; $expectedPrice = $price + $maxOptionPrice; $this->priceInfoMock->expects($this->atLeastOnce()) ->method('getPrice') ->with(CustomOptionPrice::PRICE_CODE) ->willReturn($this->customOptionPriceMock); $this->customOptionPriceMock->expects($this->once()) ->method('getCustomOptionRange') ->with(false) ->willReturn($maxOptionPrice); $this->saleableInterfaceMock->expects($this->once()) ->method('getPriceType') ->willReturn(Price::PRICE_TYPE_FIXED); $this->saleableInterfaceMock->expects($this->once()) ->method('getPrice') ->will($this->returnValue($price)); $this->bundleCalculatorMock->expects($this->once()) ->method('getMaxRegularAmount') ->with($expectedPrice, $this->saleableInterfaceMock) ->will($this->returnValue($expectedPrice)); $this->priceCurrencyMock->expects($this->once()) ->method('convertAndRound') ->will($this->returnArgument(0)); $result = $this->regularPrice->getMaximalPrice(); $this->assertEquals($expectedPrice, $result, 'Incorrect amount'); //Calling a second time, should use cached value $result = $this->regularPrice->getMaximalPrice(); $this->assertEquals($expectedPrice, $result, 'Incorrect amount the second time'); } public function testGetMinimalPrice() { $expectedResult = 5; $this->saleableInterfaceMock->expects($this->once()) ->method('getPrice') ->will($this->returnValue($expectedResult)); $this->priceCurrencyMock->expects($this->once()) ->method('convertAndRound') ->will($this->returnArgument(0)); $this->bundleCalculatorMock->expects($this->once()) ->method('getMinRegularAmount') ->with($expectedResult, $this->saleableInterfaceMock) ->will($this->returnValue($expectedResult)); $result = $this->regularPrice->getMinimalPrice(); $this->assertEquals($expectedResult, $result, 'Incorrect amount'); //Calling a second time, should use cached value $result = $this->regularPrice->getMinimalPrice(); $this->assertEquals($expectedResult, $result, 'Incorrect amount the second time'); } public function testGetMinimalPriceForFixedPricedBundleWithOptions() { $price = 5; $minOptionPrice = 1; $expectedValue = $price + $minOptionPrice; $this->saleableInterfaceMock->expects($this->once()) ->method('getPrice') ->will($this->returnValue($price)); $this->saleableInterfaceMock->expects($this->once()) ->method('getPriceType') ->willReturn(Price::PRICE_TYPE_FIXED); $this->priceInfoMock->expects($this->atLeastOnce()) ->method('getPrice') ->with(CustomOptionPrice::PRICE_CODE) ->willReturn($this->customOptionPriceMock); $this->customOptionPriceMock->expects($this->once()) ->method('getCustomOptionRange') ->with(true) ->willReturn($minOptionPrice); $this->priceCurrencyMock->expects($this->once()) ->method('convertAndRound') ->will($this->returnArgument(0)); $this->bundleCalculatorMock->expects($this->once()) ->method('getMinRegularAmount') ->with($expectedValue, $this->saleableInterfaceMock) ->will($this->returnValue($expectedValue)); $result = $this->regularPrice->getMinimalPrice(); $this->assertEquals($expectedValue, $result, 'Incorrect amount'); //Calling a second time, should use cached value $result = $this->regularPrice->getMinimalPrice(); $this->assertEquals($expectedValue, $result, 'Incorrect amount the second time'); } }